[
  {
    "path": ".gitignore",
    "content": ".DS_Store\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n.pnpm-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Snowpack dependency directory (https://snowpack.dev/)\nweb_modules/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional stylelint cache\n.stylelintcache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variable files\n.env.development.local\n.env.test.local\n.env.production.local\n.env.local\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n.parcel-cache\n\n# Next.js build output\n.next\nout\n\n# Nuxt.js build / generate output\n.nuxt\ndist\n\n# Gatsby files\n.cache/\n# Comment in the public line in if your project uses Gatsby and not Next.js\n# https://nextjs.org/blog/next-9-1#public-directory-support\n# public\n\n# vuepress build output\n.vuepress/dist\n\n# vuepress v2.x temp and cache directory\n.temp\n.cache\n\n# Docusaurus cache and generated files\n.docusaurus\n\n# Serverless directories\n.serverless/\n\n# FuseBox cache\n.fusebox/\n\n# DynamoDB Local files\n.dynamodb/\n\n# TernJS port file\n.tern-port\n\n# Stores VSCode versions used for testing VSCode extensions\n.vscode-test\n\n# yarn v2\n.yarn/cache\n.yarn/unplugged\n.yarn/build-state.yml\n.yarn/install-state.gz\n.pnp.*\n\n\n# idea\n.idea\n.vscode\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2024 Carole\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\r\n  <img src=\"docs/assets/68747470733a2f2f6e6573746a732e636f6d2f6c6f676f2d736d616c6c2d6772616469656e742e37363631363430352e737667.svg\" alt=\"Carole-Admin Logo\" style=\"width: 25%;\" />\r\n  \r\n  <h1>Carole-Admin</h1>\r\n  \r\n  <h3>一款基于 NestJS + Vue 前后端分离的后台框架</h3>\r\n</div>\r\n\r\n---\r\n\r\n## 🌟 平台简介\r\n\r\n**Carole-Admin** 是一款基于 [NestJS](https://nestjs.com/) + [Prisma](https://www.prisma.io/) + [Vue](https://vuejs.org/) + [Vite](https://vitejs.dev/) 的前后端分离全栈快速开发平台，前端参考 [若依](https://github.com/yangzongzhuan/RuoYi-Vue3) 实现。\r\n\r\n- 前端： [Vue3](https://vuejs.org/)、[Element Plus](https://element-plus.org/)、[Vite](https://vitejs.dev/)\r\n- 后端： [NestJS](https://nestjs.com/)、[Prisma](https://www.prisma.io/)、[ioredis](https://github.com/redis/ioredis)、[JWT](https://github.com/auth0/node-jsonwebtoken)\r\n- 权限认证：基于 JWT，支持多终端认证\r\n- 动态权限菜单：多方式权限控制，灵活高效\r\n- 支持接口限流\r\n- 提供代码生成器，一键生成前后端代码，加速开发效率\r\n\r\n---\r\n\r\n## 📚 项目文档\r\n\r\n👉 本项目详细文档请访问：\r\n\r\n🌐 [在线文档](https://carole007.github.io/carole-admin/)  \r\n📂 [README.md](./docs/README.md)  \r\n"
  },
  {
    "path": "carole.sql",
    "content": "/*\n Navicat Premium Dump SQL\n\n Source Server         : mysql8\n Source Server Type    : MySQL\n Source Server Version : 80404 (8.4.4)\n Source Host           : localhost:3306\n Source Schema         : carole\n\n Target Server Type    : MySQL\n Target Server Version : 80404 (8.4.4)\n File Encoding         : 65001\n\n Date: 04/07/2025 17:07:50\n*/\n\nSET NAMES utf8mb4;\nSET FOREIGN_KEY_CHECKS = 0;\n\n-- ----------------------------\n-- Table structure for gen_table\n-- ----------------------------\nDROP TABLE IF EXISTS `gen_table`;\nCREATE TABLE `gen_table` (\n  `table_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',\n  `table_name` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '表名称',\n  `table_comment` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '表描述',\n  `sub_table_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '关联子表的表名',\n  `sub_table_fk_name` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '子表关联的外键名',\n  `class_name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '实体类名称',\n  `tpl_category` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT 'crud' COMMENT '使用的模板（crud单表操作 tree树表操作）',\n  `tpl_web_type` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '前端模板类型（element-ui模版 element-plus模版）',\n  `package_name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '生成包路径',\n  `module_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '生成模块名',\n  `business_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '生成业务名',\n  `function_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '生成功能名',\n  `function_author` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '生成功能作者',\n  `gen_type` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '0' COMMENT '生成代码方式（0zip压缩包 1自定义路径）',\n  `gen_path` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '/' COMMENT '生成路径（不填默认项目路径）',\n  `options` varchar(1000) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '其它生成选项',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注',\n  PRIMARY KEY (`table_id`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=117 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='代码生成业务表';\n\n-- ----------------------------\n-- Records of gen_table\n-- ----------------------------\nBEGIN;\nINSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `tpl_web_type`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (107, 'sys_logininfor', '系统访问记录', NULL, NULL, 'SysLogininfor', 'crud', 'element-plus', 'admin', 'system', 'logininfor', '系统访问记录', 'carole', '0', '/', NULL, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16', NULL);\nINSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `tpl_web_type`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (108, 'sys_menu', '菜单权限表', NULL, NULL, 'SysMenu', 'crud', 'element-plus', 'admin', 'system', 'menu', '菜单权限表', 'carole', '0', '/', NULL, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16', NULL);\nINSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `tpl_web_type`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (109, 'sys_notice', '通知公告表', NULL, NULL, 'SysNotice', 'crud', 'element-plus', 'admin', 'system', 'notice', '通知公告表', 'carole', '0', '/', NULL, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16', NULL);\nINSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `tpl_web_type`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (110, 'sys_post', '岗位信息表', NULL, NULL, 'SysPost', 'crud', 'element-plus', 'admin', 'system', 'post', '岗位信息表', 'carole', '0', '/', NULL, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16', NULL);\nINSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `tpl_web_type`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (111, 'sys_role', '角色信息表', NULL, NULL, 'SysRole', 'crud', 'element-plus', 'admin', 'system', 'role', '角色信息表', 'carole', '0', '/', NULL, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16', NULL);\nINSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `tpl_web_type`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (112, 'sys_user', '用户信息表', NULL, NULL, 'SysUser', 'crud', 'element-plus', 'admin', 'system', 'user', '用户信息表', 'carole', '0', '/', NULL, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16', NULL);\nINSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `tpl_web_type`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (113, 'sys_config', '参数配置表', NULL, NULL, 'SysConfig', 'crud', 'element-plus', 'admin', 'system', 'config', '参数配置表', 'carole', '0', '/', NULL, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26', NULL);\nINSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `tpl_web_type`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (114, 'sys_dept', '部门表', NULL, NULL, 'SysDept', 'crud', 'element-plus', 'admin', 'system', 'dept', '部门表', 'carole', '0', '/', NULL, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26', NULL);\nINSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `tpl_web_type`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (115, 'sys_dict_data', '字典数据表', NULL, NULL, 'SysDictData', 'crud', 'element-plus', 'admin', 'system', 'data', '字典数据表', 'carole', '0', '/', NULL, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26', NULL);\nINSERT INTO `gen_table` (`table_id`, `table_name`, `table_comment`, `sub_table_name`, `sub_table_fk_name`, `class_name`, `tpl_category`, `tpl_web_type`, `package_name`, `module_name`, `business_name`, `function_name`, `function_author`, `gen_type`, `gen_path`, `options`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (116, 'sys_dict_type', '字典类型表', NULL, NULL, 'SysDictType', 'crud', 'element-plus', 'admin', 'system', 'type', '字典类型表', 'carole', '0', '/', NULL, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26', NULL);\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for gen_table_column\n-- ----------------------------\nDROP TABLE IF EXISTS `gen_table_column`;\nCREATE TABLE `gen_table_column` (\n  `column_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',\n  `table_id` int unsigned DEFAULT NULL COMMENT '归属表编号',\n  `column_name` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '列名称',\n  `column_comment` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '列描述',\n  `column_type` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '列类型',\n  `java_type` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'JAVA类型',\n  `java_field` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'JAVA字段名',\n  `is_pk` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '是否主键（1是）',\n  `is_increment` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '是否自增（1是）',\n  `is_required` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '是否必填（1是）',\n  `is_insert` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '是否为插入字段（1是）',\n  `is_edit` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '是否编辑字段（1是）',\n  `is_list` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '是否列表字段（1是）',\n  `is_query` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '是否查询字段（1是）',\n  `query_type` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT 'EQ' COMMENT '查询方式（等于、不等于、大于、小于、范围）',\n  `html_type` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '显示类型（文本框、文本域、下拉框、复选框、单选框、日期控件）',\n  `dict_type` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '字典类型',\n  `sort` int DEFAULT NULL COMMENT '排序',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  PRIMARY KEY (`column_id`) USING BTREE,\n  KEY `gen_table_column_table_id_idx` (`table_id`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=1300 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='代码生成业务表字段';\n\n-- ----------------------------\n-- Records of gen_table_column\n-- ----------------------------\nBEGIN;\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1175, 107, 'info_id', '访问ID', 'int(10) unsigned', 'Number', 'infoId', '1', '1', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1176, 107, 'user_name', '用户账号', 'varchar(50)', 'String', 'userName', '0', '0', '0', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1177, 107, 'ipaddr', '登录IP地址', 'varchar(128)', 'String', 'ipaddr', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 3, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1178, 107, 'login_location', '登录地点', 'varchar(255)', 'String', 'loginLocation', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 4, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1179, 107, 'browser', '浏览器类型', 'varchar(50)', 'String', 'browser', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 5, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1180, 107, 'os', '操作系统', 'varchar(50)', 'String', 'os', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 6, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1181, 107, 'status', '登录状态（0失败,1成功）', 'char(1)', 'String', 'status', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'radio', '', 7, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1182, 107, 'msg', '提示消息', 'varchar(255)', 'String', 'msg', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 8, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1183, 107, 'login_time', '访问时间', 'varchar(25)', 'String', 'loginTime', '0', '0', '0', '1', '1', '1', '1', 'BETWEEN', 'datetime', '', 9, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1184, 108, 'menu_id', '菜单ID', 'int(10) unsigned', 'Number', 'menuId', '1', '1', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1185, 108, 'menu_name', '菜单名称', 'varchar(50)', 'String', 'menuName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1186, 108, 'parent_id', '父菜单ID', 'int(10) unsigned', 'Number', 'parentId', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 3, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1187, 108, 'order_num', '显示顺序', 'int(11)', 'Number', 'orderNum', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 4, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1188, 108, 'path', '路由地址', 'varchar(200)', 'String', 'path', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 5, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1189, 108, 'component', '组件路径', 'varchar(255)', 'String', 'component', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 6, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1190, 108, 'query', '路由参数', 'varchar(255)', 'String', 'query', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 7, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1191, 108, 'is_frame', '是否为外链（0否 1是）', 'int(11)', 'Number', 'isFrame', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 8, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1192, 108, 'is_cache', '是否缓存（0不缓存 1缓存）', 'int(11)', 'Number', 'isCache', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 9, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1193, 108, 'menu_type', '菜单类型（M目录 C菜单 F按钮）', 'char(1)', 'String', 'menuType', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'select', '', 10, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1194, 108, 'visible', '菜单状态（0隐藏 1显示）', 'char(1)', 'String', 'visible', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 11, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1195, 108, 'status', '菜单状态（0停用 1正常）', 'char(1)', 'String', 'status', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'radio', '', 12, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1196, 108, 'perms', '权限标识', 'varchar(100)', 'String', 'perms', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 13, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1197, 108, 'icon', '菜单图标', 'varchar(100)', 'String', 'icon', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 14, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1198, 108, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 15, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1199, 108, 'create_time', '创建时间', 'varchar(25)', 'String', 'createTime', '0', '0', '0', '1', NULL, NULL, NULL, 'BETWEEN', 'datetime', '', 16, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1200, 108, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', '0', '1', '1', NULL, NULL, 'EQ', 'input', '', 17, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1201, 108, 'update_time', '更新时间', 'varchar(25)', 'String', 'updateTime', '0', '0', '0', '1', '1', NULL, NULL, 'BETWEEN', 'datetime', '', 18, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1202, 108, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', '0', '1', '1', '1', NULL, 'EQ', 'textarea', '', 19, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1203, 109, 'notice_id', '公告ID', 'int(11)', 'Number', 'noticeId', '1', '1', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1204, 109, 'notice_title', '公告标题', 'varchar(50)', 'String', 'noticeTitle', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 2, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1205, 109, 'notice_type', '公告类型（1通知 2公告）', 'char(1)', 'String', 'noticeType', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'select', '', 3, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1206, 109, 'notice_content', '公告内容', 'mediumtext', 'String', 'noticeContent', '0', '0', '0', '1', '1', '1', NULL, 'EQ', 'editor', '', 4, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1207, 109, 'status', '公告状态（0关闭 1正常）', 'char(1)', 'String', 'status', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'radio', '', 5, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1208, 109, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 6, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1209, 109, 'create_time', '创建时间', 'varchar(25)', 'String', 'createTime', '0', '0', '0', '1', NULL, NULL, NULL, 'BETWEEN', 'datetime', '', 7, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1210, 109, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', '0', '1', '1', NULL, NULL, 'EQ', 'input', '', 8, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1211, 109, 'update_time', '更新时间', 'varchar(25)', 'String', 'updateTime', '0', '0', '0', '1', '1', NULL, NULL, 'BETWEEN', 'datetime', '', 9, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1212, 109, 'remark', '备注', 'varchar(255)', 'String', 'remark', '0', '0', '0', '1', '1', '1', NULL, 'EQ', 'input', '', 10, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1213, 110, 'post_id', '岗位ID', 'int(10) unsigned', 'Number', 'postId', '1', '1', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1214, 110, 'post_code', '岗位编码', 'varchar(64)', 'String', 'postCode', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 2, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1215, 110, 'post_name', '岗位名称', 'varchar(50)', 'String', 'postName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 3, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1216, 110, 'post_sort', '显示顺序', 'int(11)', 'Number', 'postSort', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 4, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1217, 110, 'status', '状态（0停用 1正常）', 'char(1)', 'String', 'status', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'radio', '', 5, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1218, 110, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 6, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1219, 110, 'create_time', '创建时间', 'varchar(25)', 'String', 'createTime', '0', '0', '0', '1', NULL, NULL, NULL, 'BETWEEN', 'datetime', '', 7, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1220, 110, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', '0', '1', '1', NULL, NULL, 'EQ', 'input', '', 8, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1221, 110, 'update_time', '更新时间', 'varchar(25)', 'String', 'updateTime', '0', '0', '0', '1', '1', NULL, NULL, 'BETWEEN', 'datetime', '', 9, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1222, 110, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', '0', '1', '1', '1', NULL, 'EQ', 'textarea', '', 10, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1223, 111, 'role_id', '角色ID', 'int(10) unsigned', 'Number', 'roleId', '1', '1', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1224, 111, 'role_name', '角色名称', 'varchar(30)', 'String', 'roleName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1225, 111, 'role_key', '角色权限字符串', 'varchar(100)', 'String', 'roleKey', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 3, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1226, 111, 'role_sort', '显示顺序', 'int(11)', 'Number', 'roleSort', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 4, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1227, 111, 'data_scope', '数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限 5：仅个人权限）', 'char(1)', 'String', 'dataScope', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 5, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1228, 111, 'menu_check_strictly', '菜单树选择项是否关联显示', 'tinyint(11)', 'Number', 'menuCheckStrictly', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 6, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1229, 111, 'dept_check_strictly', '部门树选择项是否关联显示', 'tinyint(11)', 'Number', 'deptCheckStrictly', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 7, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1230, 111, 'status', '角色状态（0停用 1正常）', 'char(1)', 'String', 'status', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'radio', '', 8, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1231, 111, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 9, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1232, 111, 'create_time', '创建时间', 'varchar(25)', 'String', 'createTime', '0', '0', '0', '1', NULL, NULL, NULL, 'BETWEEN', 'datetime', '', 10, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1233, 111, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', '0', '1', '1', NULL, NULL, 'EQ', 'input', '', 11, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1234, 111, 'update_time', '更新时间', 'varchar(25)', 'String', 'updateTime', '0', '0', '0', '1', '1', NULL, NULL, 'BETWEEN', 'datetime', '', 12, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1235, 111, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', '0', '1', '1', '1', NULL, 'EQ', 'textarea', '', 13, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1236, 112, 'user_id', '用户ID', 'int(10) unsigned', 'Number', 'userId', '1', '1', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1237, 112, 'dept_id', '部门ID', 'int(10) unsigned', 'Number', 'deptId', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 2, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1238, 112, 'user_name', '用户账号', 'varchar(30)', 'String', 'userName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 3, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1239, 112, 'nick_name', '用户昵称', 'varchar(30)', 'String', 'nickName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 4, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1240, 112, 'user_type', '用户类型（00系统用户）', 'varchar(2)', 'String', 'userType', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'select', '', 5, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1241, 112, 'email', '用户邮箱', 'varchar(50)', 'String', 'email', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 6, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1242, 112, 'phonenumber', '手机号码', 'varchar(11)', 'String', 'phonenumber', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 7, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1243, 112, 'sex', '用户性别（0男 1女 2未知）', 'char(1)', 'String', 'sex', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'select', '', 8, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1244, 112, 'avatar', '头像地址', 'varchar(100)', 'String', 'avatar', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 9, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1245, 112, 'password', '密码', 'varchar(100)', 'String', 'password', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 10, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1246, 112, 'status', '帐号状态（0停用,1正常 ）', 'char(1)', 'String', 'status', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'radio', '', 11, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1247, 112, 'login_ip', '最后登录IP', 'varchar(128)', 'String', 'loginIp', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 12, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1248, 112, 'login_date', '最后登录时间', 'varchar(25)', 'String', 'loginDate', '0', '0', '0', '1', '1', '1', '1', 'BETWEEN', 'datetime', '', 13, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1249, 112, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 14, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1250, 112, 'create_time', '创建时间', 'varchar(25)', 'String', 'createTime', '0', '0', '0', '1', NULL, NULL, NULL, 'BETWEEN', 'datetime', '', 15, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1251, 112, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', '0', '1', '1', NULL, NULL, 'EQ', 'input', '', 16, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1252, 112, 'update_time', '更新时间', 'varchar(25)', 'String', 'updateTime', '0', '0', '0', '1', '1', NULL, NULL, 'BETWEEN', 'datetime', '', 17, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1253, 112, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', '0', '1', '1', '1', NULL, 'EQ', 'textarea', '', 18, 'admin', '2024-06-16 14:05:16', 'admin', '2024-06-16 14:05:16');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1254, 113, 'config_id', '参数主键', 'int(11)', 'Number', 'configId', '1', '1', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1255, 113, 'config_name', '参数名称', 'varchar(100)', 'String', 'configName', '0', '0', '0', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1256, 113, 'config_key', '参数键名', 'varchar(100)', 'String', 'configKey', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 3, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1257, 113, 'config_value', '参数键值', 'varchar(500)', 'String', 'configValue', '0', '0', '0', '1', '1', '1', NULL, 'EQ', 'textarea', '', 4, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1258, 113, 'config_type', '系统内置（Y是 N否）', 'char(1)', 'String', 'configType', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'select', '', 5, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1259, 113, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 6, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1260, 113, 'create_time', '创建时间', 'varchar(25)', 'String', 'createTime', '0', '0', '0', '1', NULL, NULL, NULL, 'BETWEEN', 'datetime', '', 7, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1261, 113, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', '0', '1', '1', NULL, NULL, 'EQ', 'input', '', 8, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1262, 113, 'update_time', '更新时间', 'varchar(25)', 'String', 'updateTime', '0', '0', '0', '1', '1', NULL, NULL, 'BETWEEN', 'datetime', '', 9, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1263, 113, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', '0', '1', '1', '1', NULL, 'EQ', 'textarea', '', 10, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1264, 114, 'dept_id', '部门id', 'int(10) unsigned', 'Number', 'deptId', '1', '1', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1265, 114, 'parent_id', '父部门id', 'int(10) unsigned', 'Number', 'parentId', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 2, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1266, 114, 'ancestors', '祖级列表', 'varchar(50)', 'String', 'ancestors', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 3, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1267, 114, 'dept_name', '部门名称', 'varchar(30)', 'String', 'deptName', '0', '0', '0', '1', '1', '1', '1', 'LIKE', 'input', '', 4, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1268, 114, 'order_num', '显示顺序', 'int(11)', 'Number', 'orderNum', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 5, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1269, 114, 'leader', '负责人', 'varchar(20)', 'String', 'leader', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 6, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1270, 114, 'phone', '联系电话', 'varchar(11)', 'String', 'phone', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 7, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1271, 114, 'email', '邮箱', 'varchar(50)', 'String', 'email', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 8, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1272, 114, 'status', '部门状态（0停用,1正常）', 'char(1)', 'String', 'status', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'radio', '', 9, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1273, 114, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 10, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1274, 114, 'create_time', '创建时间', 'varchar(25)', 'String', 'createTime', '0', '0', '0', '1', NULL, NULL, NULL, 'BETWEEN', 'datetime', '', 11, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1275, 114, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', '0', '1', '1', NULL, NULL, 'EQ', 'input', '', 12, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1276, 114, 'update_time', '更新时间', 'varchar(25)', 'String', 'updateTime', '0', '0', '0', '1', '1', NULL, NULL, 'BETWEEN', 'datetime', '', 13, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1277, 115, 'dict_code', '字典编码', 'int(10) unsigned', 'Number', 'dictCode', '1', '1', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1278, 115, 'dict_sort', '字典排序', 'int(11)', 'Number', 'dictSort', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 2, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1279, 115, 'dict_label', '字典标签', 'varchar(100)', 'String', 'dictLabel', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 3, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1280, 115, 'dict_value', '字典键值', 'varchar(100)', 'String', 'dictValue', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 4, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1281, 115, 'dict_type', '字典类型', 'varchar(100)', 'String', 'dictType', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'select', '', 5, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1282, 115, 'css_class', '样式属性（其他样式扩展）', 'varchar(100)', 'String', 'cssClass', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 6, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1283, 115, 'list_class', '表格回显样式', 'varchar(100)', 'String', 'listClass', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 7, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1284, 115, 'is_default', '是否默认（Y是 N否）', 'char(1)', 'String', 'isDefault', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'input', '', 8, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1285, 115, 'status', '状态（0停用 1正常）', 'char(1)', 'String', 'status', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'radio', '', 9, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1286, 115, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 10, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1287, 115, 'create_time', '创建时间', 'varchar(25)', 'String', 'createTime', '0', '0', '0', '1', NULL, NULL, NULL, 'BETWEEN', 'datetime', '', 11, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1288, 115, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', '0', '1', '1', NULL, NULL, 'EQ', 'input', '', 12, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1289, 115, 'update_time', '更新时间', 'varchar(25)', 'String', 'updateTime', '0', '0', '0', '1', '1', NULL, NULL, 'BETWEEN', 'datetime', '', 13, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1290, 115, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', '0', '1', '1', '1', NULL, 'EQ', 'textarea', '', 14, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1291, 116, 'dict_id', '字典主键', 'int(10) unsigned', 'Number', 'dictId', '1', '1', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1292, 116, 'dict_name', '字典名称', 'varchar(100)', 'String', 'dictName', '0', '0', '0', '1', '1', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1293, 116, 'dict_type', '字典类型', 'varchar(100)', 'String', 'dictType', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'select', '', 3, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1294, 116, 'status', '状态（0停用,1正常）', 'char(1)', 'String', 'status', '0', '0', '0', '1', '1', '1', '1', 'EQ', 'radio', '', 4, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1295, 116, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', '0', '1', NULL, NULL, NULL, 'EQ', 'input', '', 5, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1296, 116, 'create_time', '创建时间', 'varchar(25)', 'String', 'createTime', '0', '0', '0', '1', NULL, NULL, NULL, 'BETWEEN', 'datetime', '', 6, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1297, 116, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', '0', '1', '1', NULL, NULL, 'EQ', 'input', '', 7, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1298, 116, 'update_time', '更新时间', 'varchar(25)', 'String', 'updateTime', '0', '0', '0', '1', '1', NULL, NULL, 'BETWEEN', 'datetime', '', 8, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nINSERT INTO `gen_table_column` (`column_id`, `table_id`, `column_name`, `column_comment`, `column_type`, `java_type`, `java_field`, `is_pk`, `is_increment`, `is_required`, `is_insert`, `is_edit`, `is_list`, `is_query`, `query_type`, `html_type`, `dict_type`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (1299, 116, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', '0', '1', '1', '1', NULL, 'EQ', 'textarea', '', 9, 'admin', '2024-06-16 14:05:26', 'admin', '2024-06-16 14:05:26');\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_config\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_config`;\nCREATE TABLE `sys_config` (\n  `config_id` int NOT NULL AUTO_INCREMENT COMMENT '参数主键',\n  `config_name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '参数名称',\n  `config_key` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '参数键名',\n  `config_value` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '参数键值',\n  `config_type` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT 'N' COMMENT '系统内置（Y是 N否）',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注',\n  PRIMARY KEY (`config_id`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='参数配置表';\n\n-- ----------------------------\n-- Records of sys_config\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2023-12-18 14:59:08', '', NULL, '初始化密码 123456');\nINSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, '账号自助-验证码开关', 'sys.account.captchaEnabled', 'true', 'Y', 'admin', '2023-12-18 14:59:08', 'admin', '2024-06-06 20:03:46', '是否开启验证码功能（true开启，false关闭）');\nINSERT INTO `sys_config` (`config_id`, `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (6, '用户登录-黑名单列表', 'sys.login.blackIPList', '1.1.1.1', 'Y', 'admin', '2023-12-18 14:59:08', 'admin', '2024-06-05 20:24:10', '设置登录IP黑名单限制，多个匹配项以;分隔，支持匹配（*通配、网段）');\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_dept\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_dept`;\nCREATE TABLE `sys_dept` (\n  `dept_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '部门id',\n  `parent_id` int unsigned DEFAULT '0' COMMENT '父部门id',\n  `ancestors` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '祖级列表',\n  `dept_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '部门名称',\n  `order_num` int DEFAULT '0' COMMENT '显示顺序',\n  `leader` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '负责人',\n  `phone` varchar(11) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '联系电话',\n  `email` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '邮箱',\n  `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '1' COMMENT '部门状态（0停用,1正常）',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  PRIMARY KEY (`dept_id`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=205 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='部门表';\n\n-- ----------------------------\n-- Records of sys_dept\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_dept` (`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (100, 0, '0', '全国总部', 0, 'carole', '15888888888', 'admin@carole.top', '1', 'admin', '2023-12-18 14:59:00', 'admin', '2023-12-19 11:51:14');\nINSERT INTO `sys_dept` (`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (101, 100, '0,100', '深圳总公司', 1, 'carole', '15888888888', 'admin@carole.top', '1', 'admin', '2023-12-18 14:59:00', 'admin', '2023-12-19 11:51:25');\nINSERT INTO `sys_dept` (`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (103, 101, '0,100,101', '研发部门', 1, 'carole', '15888888888', 'admin@carole.top', '1', 'admin', '2023-12-18 14:59:00', '', NULL);\nINSERT INTO `sys_dept` (`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (104, 101, '0,100,101', '市场部门', 2, 'carole', '15888888888', 'admin@carole.top', '1', 'admin', '2023-12-18 14:59:00', '', NULL);\nINSERT INTO `sys_dept` (`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (105, 101, '0,100,101', '测试部门', 3, 'carole', '15888888888', 'admin@carole.top', '1', 'admin', '2023-12-18 14:59:00', '', NULL);\nINSERT INTO `sys_dept` (`dept_id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES (106, 101, '0,100,101', '财务部门', 2, 'carole', '15888888888', 'admin@carole.top', '1', 'admin', '2023-12-18 14:59:00', 'admin', '2024-06-10 12:39:55');\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_dict_data\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_dict_data`;\nCREATE TABLE `sys_dict_data` (\n  `dict_code` int unsigned NOT NULL AUTO_INCREMENT COMMENT '字典编码',\n  `dict_sort` int DEFAULT '0' COMMENT '字典排序',\n  `dict_label` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '字典标签',\n  `dict_value` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '字典键值',\n  `dict_type` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '字典类型',\n  `css_class` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '样式属性（其他样式扩展）',\n  `list_class` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '表格回显样式',\n  `is_default` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT 'N' COMMENT '是否默认（Y是 N否）',\n  `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '1' COMMENT '状态（0停用 1正常）',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注',\n  PRIMARY KEY (`dict_code`) USING BTREE,\n  KEY `sys_dict_data_dict_type_idx` (`dict_type`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=124 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='字典数据表';\n\n-- ----------------------------\n-- Records of sys_dict_data\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '性别男');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '性别女');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '性别未知');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, 1, '显示', '1', 'sys_show_hide', '', 'primary', 'Y', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '显示菜单');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (5, 2, '隐藏', '0', 'sys_show_hide', '', 'danger', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '隐藏菜单');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (6, 1, '正常', '1', 'sys_normal_disable', '', 'primary', 'Y', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '正常状态');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (7, 2, '停用', '0', 'sys_normal_disable', '', 'danger', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '停用状态');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (8, 1, '正常', '1', 'sys_job_status', '', 'primary', 'Y', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '正常状态');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (9, 2, '暂停', '0', 'sys_job_status', '', 'danger', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '停用状态');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '默认分组');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '系统分组');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '系统默认是');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '系统默认否');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '通知');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '公告');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (16, 1, '正常', '1', 'sys_notice_status', '', 'primary', 'Y', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '正常状态');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (17, 2, '关闭', '0', 'sys_notice_status', '', 'danger', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '关闭状态');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (18, 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '其他操作');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (19, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '新增操作');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (20, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '修改操作');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (21, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '删除操作');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (22, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '授权操作');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (23, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '导出操作');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (24, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '导入操作');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (25, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '强退操作');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (26, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '生成操作');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '清空操作');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (28, 1, '成功', '1', 'sys_common_status', '', 'primary', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '正常状态');\nINSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (29, 2, '失败', '0', 'sys_common_status', '', 'danger', 'N', '1', 'admin', '2023-12-18 14:59:07', '', NULL, '停用状态');\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_dict_type\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_dict_type`;\nCREATE TABLE `sys_dict_type` (\n  `dict_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '字典主键',\n  `dict_name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '字典名称',\n  `dict_type` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '字典类型',\n  `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '1' COMMENT '状态（0停用,1正常）',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注',\n  PRIMARY KEY (`dict_id`) USING BTREE,\n  UNIQUE KEY `dict_type` (`dict_type`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=118 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='字典类型表';\n\n-- ----------------------------\n-- Records of sys_dict_type\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, '用户性别', 'sys_user_sex', '1', 'admin', '2023-12-18 14:59:07', 'admin', '2024-01-16 00:00:00', '用户性别列表');\nINSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, '菜单状态', 'sys_show_hide', '1', 'admin', '2023-12-18 14:59:07', 'admin', '2024-01-16 00:00:00', '菜单状态列表');\nINSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, '系统开关', 'sys_normal_disable', '1', 'admin', '2023-12-18 14:59:07', 'admin', '2024-01-16 00:00:00', '系统开关列表');\nINSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, '任务状态', 'sys_job_status', '1', 'admin', '2023-12-18 14:59:07', 'admin', '2024-01-16 00:00:00', '任务状态列表');\nINSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (5, '任务分组', 'sys_job_group', '1', 'admin', '2023-12-18 14:59:07', 'admin', '2024-01-16 00:00:00', '任务分组列表');\nINSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (6, '系统是否', 'sys_yes_no', '1', 'admin', '2023-12-18 14:59:07', 'admin', '2024-01-16 00:00:00', '系统是否列表');\nINSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (7, '通知类型', 'sys_notice_type', '1', 'admin', '2023-12-18 14:59:07', 'admin', '2024-01-16 00:00:00', '通知类型列表');\nINSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (8, '通知状态', 'sys_notice_status', '1', 'admin', '2023-12-18 14:59:07', 'admin', '2024-01-16 00:00:00', '通知状态列表');\nINSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (9, '操作类型', 'sys_oper_type', '1', 'admin', '2023-12-18 14:59:07', 'admin', '2024-01-16 00:00:00', '操作类型列表');\nINSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (10, '系统状态', 'sys_common_status', '1', 'admin', '2023-12-18 14:59:07', 'admin', '2024-01-16 00:00:00', '登录状态列表');\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_logininfor\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_logininfor`;\nCREATE TABLE `sys_logininfor` (\n  `info_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '访问ID',\n  `user_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '用户账号',\n  `ipaddr` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '登录IP地址',\n  `login_location` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '登录地点',\n  `browser` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '浏览器类型',\n  `os` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '操作系统',\n  `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '1' COMMENT '登录状态（0失败,1成功）',\n  `msg` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '提示消息',\n  `login_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '访问时间',\n  PRIMARY KEY (`info_id`) USING BTREE,\n  KEY `idx_sys_logininfor_s` (`status`) USING BTREE,\n  KEY `idx_sys_logininfor_lt` (`login_time`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=355 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='系统访问记录';\n\n-- ----------------------------\n-- Records of sys_logininfor\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (260, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-05 10:13:04');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (261, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-05 10:26:49');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (262, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '用户不存在/密码错误', '2024-06-05 11:14:49');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (263, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-05 11:14:55');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (264, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-05 11:15:02');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (265, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-05 11:15:08');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (266, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-05 20:19:51');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (267, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-05 20:23:02');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (268, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-05 20:23:09');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (269, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-05 20:23:18');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (270, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-05 20:23:27');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (271, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-05 20:23:34');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (272, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-05 20:23:45');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (273, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', 'ip:127.0.0.1被封禁', '2024-06-05 20:24:02');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (274, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-05 21:23:49');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (275, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '用户不存在/密码错误', '2024-06-05 21:27:55');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (276, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-05 21:28:07');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (277, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-05 21:28:13');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (278, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '用户不存在/密码错误', '2024-06-05 21:39:50');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (279, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-05 21:40:01');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (280, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-05 21:42:49');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (281, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '用户不存在/密码错误', '2024-06-06 08:38:07');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (282, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '用户不存在/密码错误', '2024-06-06 08:38:13');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (283, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-06 08:38:27');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (284, 'admin', '127.0.0.1', '内网IP', 'Chrome 120', 'Windows 10', '0', '验证码错误！', '2024-06-06 15:09:09');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (285, 'admin', '127.0.0.1', '内网IP', 'Chrome 120', 'Windows 10', '0', '验证码错误！', '2024-06-06 15:09:14');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (286, 'admin', '127.0.0.1', '内网IP', 'Chrome 120', 'Windows 10', '0', '验证码错误！', '2024-06-06 15:09:16');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (287, 'admin', '127.0.0.1', '内网IP', 'Chrome 120', 'Windows 10', '0', '验证码错误！', '2024-06-06 15:09:18');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (288, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-07 15:35:29');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (289, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-07 15:39:11');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (290, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '用户不存在/密码错误', '2024-06-07 15:39:16');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (291, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-07 15:39:28');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (292, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '用户不存在/密码错误', '2024-06-07 15:42:45');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (293, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-07 15:43:16');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (294, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-07 15:43:23');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (295, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-07 15:46:04');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (296, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-07 15:47:56');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (297, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-07 15:53:44');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (298, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-07 16:22:49');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (299, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-07 16:22:58');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (300, 'test2', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-07 16:47:27');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (301, 'test2', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-07 16:47:34');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (302, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-07 20:19:38');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (303, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-07 20:19:48');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (304, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-08 13:53:25');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (305, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-08 13:53:39');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (306, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-08 13:53:45');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (307, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 10:59:44');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (308, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 11:00:07');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (309, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 11:01:54');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (310, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 11:02:42');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (311, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 11:03:37');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (312, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-10 13:35:32');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (313, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 13:35:41');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (314, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 14:51:52');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (315, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-10 15:03:14');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (316, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '密码不正确', '2024-06-10 15:03:22');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (317, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 15:03:33');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (318, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-10 15:20:14');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (319, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 15:20:21');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (320, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-10 15:21:24');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (321, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 15:21:29');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (322, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 15:53:15');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (323, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-10 15:56:40');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (324, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 15:56:49');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (325, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 18:12:33');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (326, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '密码不正确', '2024-06-10 18:14:24');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (327, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-10 18:17:58');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (328, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-10 18:18:02');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (329, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '密码不正确', '2024-06-10 18:18:10');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (330, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-10 18:37:48');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (331, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 18:37:53');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (332, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-10 18:38:22');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (333, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 08:37:46');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (334, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 08:38:36');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (335, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 08:39:30');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (336, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 08:48:50');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (337, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-11 09:05:23');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (338, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 09:05:29');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (339, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 09:07:52');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (340, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 09:29:37');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (341, 'test', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 09:53:13');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (342, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 10:24:10');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (343, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 15:11:36');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (344, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 15:37:20');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (345, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 16:57:29');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (346, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '0', '验证码错误！', '2024-06-11 18:40:48');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (347, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-11 18:40:55');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (348, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-12 12:15:46');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (349, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-12 12:19:56');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (350, 'admin', '127.0.0.1', '内网IP', 'Chrome 125', 'Windows 10', '1', '登录成功', '2024-06-12 12:21:38');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (351, 'admin', '127.0.0.1', '内网IP', 'Chrome 126', 'Windows 10', '1', '登录成功', '2024-06-14 21:27:00');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (352, 'admin', '127.0.0.1', '内网IP', 'Chrome 126', 'Windows 10', '1', '登录成功', '2024-06-16 13:54:15');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (353, 'admin', '127.0.0.1', '内网IP', 'Chrome 137', 'macOS Catalina', '0', '密码不正确', '2025-07-04 15:14:33');\nINSERT INTO `sys_logininfor` (`info_id`, `user_name`, `ipaddr`, `login_location`, `browser`, `os`, `status`, `msg`, `login_time`) VALUES (354, 'admin', '127.0.0.1', '内网IP', 'Chrome 137', 'macOS Catalina', '1', '登录成功', '2025-07-04 15:14:51');\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_menu\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_menu`;\nCREATE TABLE `sys_menu` (\n  `menu_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '菜单ID',\n  `menu_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '菜单名称',\n  `parent_id` int unsigned DEFAULT '0' COMMENT '父菜单ID',\n  `order_num` int DEFAULT '0' COMMENT '显示顺序',\n  `path` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '路由地址',\n  `component` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '组件路径',\n  `query` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '路由参数',\n  `is_frame` int DEFAULT '0' COMMENT '是否为外链（0否 1是）',\n  `is_cache` int DEFAULT '1' COMMENT '是否缓存（0不缓存 1缓存）',\n  `menu_type` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '菜单类型（M目录 C菜单 F按钮）',\n  `visible` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '1' COMMENT '菜单状态（0隐藏 1显示）',\n  `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '1' COMMENT '菜单状态（0停用 1正常）',\n  `perms` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '权限标识',\n  `icon` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '#' COMMENT '菜单图标',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '备注',\n  PRIMARY KEY (`menu_id`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=2052 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='菜单权限表';\n\n-- ----------------------------\n-- Records of sys_menu\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, '系统管理', 0, 1, 'system', NULL, '', 0, 1, 'M', '1', '1', '', 'system', 'admin', '2023-12-18 14:59:03', '', NULL, '系统管理目录');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, '系统监控', 0, 2, 'monitor', NULL, '', 0, 1, 'M', '1', '1', '', 'monitor', 'admin', '2023-12-18 14:59:03', '', NULL, '系统监控目录');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, '系统工具', 0, 3, 'tool', NULL, '', 0, 1, 'M', '1', '1', '', 'tool', 'admin', '2023-12-18 14:59:03', '', NULL, '系统工具目录');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (100, '用户管理', 1, 1, 'user', 'system/user/index', '', 0, 1, 'C', '1', '1', 'system:user:list', 'user', 'admin', '2023-12-18 14:59:03', '', NULL, '用户管理菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (101, '角色管理', 1, 2, 'role', 'system/role/index', '', 0, 1, 'C', '1', '1', 'system:role:list', 'peoples', 'admin', '2023-12-18 14:59:03', '', NULL, '角色管理菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (102, '菜单管理', 1, 3, 'menu', 'system/menu/index', '', 0, 1, 'C', '1', '1', 'system:menu:list', 'tree-table', 'admin', '2023-12-18 14:59:03', '', NULL, '菜单管理菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (103, '部门管理', 1, 4, 'dept', 'system/dept/index', '', 0, 1, 'C', '1', '1', 'system:dept:list', 'tree', 'admin', '2023-12-18 14:59:03', '', NULL, '部门管理菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', '', 0, 1, 'C', '1', '1', 'system:post:list', 'post', 'admin', '2023-12-18 14:59:03', '', NULL, '岗位管理菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', '', 0, 1, 'C', '1', '1', 'system:dict:list', 'dict', 'admin', '2023-12-18 14:59:03', '', NULL, '字典管理菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (106, '参数设置', 1, 7, 'config', 'system/config/index', '', 0, 1, 'C', '1', '1', 'system:config:list', 'edit', 'admin', '2023-12-18 14:59:03', '', NULL, '参数设置菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (107, '通知公告', 1, 8, 'notice', 'system/notice/index', '', 0, 1, 'C', '1', '1', 'system:notice:list', 'message', 'admin', '2023-12-18 14:59:03', '', NULL, '通知公告菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (108, '日志管理', 1, 9, 'log', '', '', 0, 1, 'M', '1', '1', '', 'log', 'admin', '2023-12-18 14:59:03', '', NULL, '日志管理菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (109, '在线用户', 2, 1, 'online', 'monitor/online/index', '', 0, 1, 'C', '1', '1', 'monitor:online:list', 'online', 'admin', '2024-05-22 17:50:50', '', NULL, '在线用户菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (112, '服务监控', 2, 4, 'server', 'monitor/server/index', '', 0, 1, 'C', '1', '1', 'monitor:server:list', 'server', 'admin', '2023-12-18 14:59:03', '', NULL, '服务监控菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (116, '代码生成', 3, 2, 'gen', 'tool/gen/index', '', 0, 1, 'C', '1', '1', 'tool:gen:list', 'code', 'admin', '2023-12-18 14:59:03', '', NULL, '代码生成菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (501, '登录日志', 108, 2, 'logininfor', 'monitor/logininfor/index', '', 0, 1, 'C', '1', '1', 'monitor:logininfor:list', 'logininfor', 'admin', '2023-12-18 14:59:03', '', NULL, '登录日志菜单');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1000, '用户查询', 100, 1, '', '', '', 0, 1, 'F', '1', '1', 'system:user:query', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1001, '用户新增', 100, 2, '', '', '', 0, 1, 'F', '1', '1', 'system:user:add', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1002, '用户修改', 100, 3, '', '', '', 0, 1, 'F', '1', '1', 'system:user:edit', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1003, '用户删除', 100, 4, '', '', '', 0, 1, 'F', '1', '1', 'system:user:remove', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1004, '用户导出', 100, 5, '', '', '', 0, 1, 'F', '1', '1', 'system:user:export', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1007, '角色查询', 101, 1, '', '', '', 0, 1, 'F', '1', '1', 'system:role:query', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1008, '角色新增', 101, 2, '', '', '', 0, 1, 'F', '1', '1', 'system:role:add', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1009, '角色修改', 101, 3, '', '', '', 0, 1, 'F', '1', '1', 'system:role:edit', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1010, '角色删除', 101, 4, '', '', '', 0, 1, 'F', '1', '1', 'system:role:remove', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1011, '角色导出', 101, 5, '', '', '', 0, 1, 'F', '1', '1', 'system:role:export', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1012, '菜单查询', 102, 1, '', '', '', 0, 1, 'F', '1', '1', 'system:menu:query', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1013, '菜单新增', 102, 2, '', '', '', 0, 1, 'F', '1', '1', 'system:menu:add', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1014, '菜单修改', 102, 3, '', '', '', 0, 1, 'F', '1', '1', 'system:menu:edit', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1015, '菜单删除', 102, 4, '', '', '', 0, 1, 'F', '1', '1', 'system:menu:remove', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1016, '部门查询', 103, 1, '', '', '', 0, 1, 'F', '1', '1', 'system:dept:query', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1017, '部门新增', 103, 2, '', '', '', 0, 1, 'F', '1', '1', 'system:dept:add', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1018, '部门修改', 103, 3, '', '', '', 0, 1, 'F', '1', '1', 'system:dept:edit', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1019, '部门删除', 103, 4, '', '', '', 0, 1, 'F', '1', '1', 'system:dept:remove', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1020, '岗位查询', 104, 1, '', '', '', 0, 1, 'F', '1', '1', 'system:post:query', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1021, '岗位新增', 104, 2, '', '', '', 0, 1, 'F', '1', '1', 'system:post:add', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1022, '岗位修改', 104, 3, '', '', '', 0, 1, 'F', '1', '1', 'system:post:edit', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1023, '岗位删除', 104, 4, '', '', '', 0, 1, 'F', '1', '1', 'system:post:remove', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1024, '岗位导出', 104, 5, '', '', '', 0, 1, 'F', '1', '1', 'system:post:export', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1025, '字典查询', 105, 1, '#', '', '', 0, 1, 'F', '1', '1', 'system:dict:query', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1026, '字典新增', 105, 2, '#', '', '', 0, 1, 'F', '1', '1', 'system:dict:add', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1027, '字典修改', 105, 3, '#', '', '', 0, 1, 'F', '1', '1', 'system:dict:edit', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1028, '字典删除', 105, 4, '#', '', '', 0, 1, 'F', '1', '1', 'system:dict:remove', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1029, '字典导出', 105, 5, '#', '', '', 0, 1, 'F', '1', '1', 'system:dict:export', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1030, '参数查询', 106, 1, '#', '', '', 0, 1, 'F', '1', '1', 'system:config:query', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1031, '参数新增', 106, 2, '#', '', '', 0, 1, 'F', '1', '1', 'system:config:add', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1032, '参数修改', 106, 3, '#', '', '', 0, 1, 'F', '1', '1', 'system:config:edit', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1033, '参数删除', 106, 4, '#', '', '', 0, 1, 'F', '1', '1', 'system:config:remove', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1034, '参数导出', 106, 5, '#', '', '', 0, 1, 'F', '1', '1', 'system:config:export', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1035, '公告查询', 107, 1, '#', '', '', 0, 1, 'F', '1', '1', 'system:notice:query', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1036, '公告新增', 107, 2, '#', '', '', 0, 1, 'F', '1', '1', 'system:notice:add', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1037, '公告修改', 107, 3, '#', '', '', 0, 1, 'F', '1', '1', 'system:notice:edit', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1038, '公告删除', 107, 4, '#', '', '', 0, 1, 'F', '1', '1', 'system:notice:remove', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1042, '登录查询', 501, 1, '#', '', '', 0, 1, 'F', '1', '1', 'monitor:logininfor:query', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1043, '登录删除', 501, 2, '#', '', '', 0, 1, 'F', '1', '1', 'monitor:logininfor:remove', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1044, '日志导出', 501, 3, '#', '', '', 0, 1, 'F', '1', '1', 'monitor:logininfor:export', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1046, '在线查询', 109, 1, '#', '', '', 0, 1, 'F', '1', '1', 'monitor:online:query', '#', 'admin', '2024-05-22 17:50:50', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1047, '批量强退', 109, 2, '#', '', '', 0, 1, 'F', '1', '1', 'monitor:online:batchLogout', '#', 'admin', '2024-05-22 17:50:50', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1055, '生成查询', 116, 1, '#', '', '', 0, 1, 'F', '1', '1', 'tool:gen:query', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1056, '生成修改', 116, 2, '#', '', '', 0, 1, 'F', '1', '1', 'tool:gen:edit', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1057, '生成删除', 116, 3, '#', '', '', 0, 1, 'F', '1', '1', 'tool:gen:remove', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1058, '导入代码', 116, 4, '#', '', '', 0, 1, 'F', '1', '1', 'tool:gen:import', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1059, '预览代码', 116, 5, '#', '', '', 0, 1, 'F', '1', '1', 'tool:gen:preview', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1060, '生成代码', 116, 6, '#', '', '', 0, 1, 'F', '1', '1', 'tool:gen:code', '#', 'admin', '2023-12-18 14:59:03', '', NULL, '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2032, '接口文档', 3, 3, 'swagger', 'tool/swagger/index', NULL, 0, 1, 'C', '1', '1', NULL, 'documentation', 'admin', '2024-06-05 19:03:55', 'admin', '2024-06-05 19:14:40', '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2035, '缓存监控', 2, 2, 'cache', 'monitor/cache/index', NULL, 0, 1, 'C', '1', '1', 'monitor:cache:list', 'redis', 'admin', '2024-06-05 20:55:04', 'admin', '2024-06-05 21:03:09', '');\nINSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2051, '配置信息修改', 0, 0, 'serverconfig', 'system/config/edit', NULL, 0, 1, 'C', '1', '1', 'system:serverconfig:menu', 'documentation', 'admin', '2025-07-04 16:10:04', 'admin', '2025-07-04 16:22:37', '');\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_notice\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_notice`;\nCREATE TABLE `sys_notice` (\n  `notice_id` int NOT NULL AUTO_INCREMENT COMMENT '公告ID',\n  `notice_title` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '公告标题',\n  `notice_type` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '公告类型（1通知 2公告）',\n  `notice_content` mediumtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '公告内容',\n  `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '1' COMMENT '公告状态（0关闭 1正常）',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  `remark` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注',\n  PRIMARY KEY (`notice_id`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='通知公告表';\n\n-- ----------------------------\n-- Records of sys_notice\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_notice` (`notice_id`, `notice_title`, `notice_type`, `notice_content`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (10, '测试', '1', '<p>hello</p>', '1', 'admin', '2024-06-05 20:30:23', 'admin', '2024-06-05 20:30:23', NULL);\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_post\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_post`;\nCREATE TABLE `sys_post` (\n  `post_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '岗位ID',\n  `post_code` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '岗位编码',\n  `post_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '岗位名称',\n  `post_sort` int NOT NULL COMMENT '显示顺序',\n  `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '1' COMMENT '状态（0停用 1正常）',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注',\n  PRIMARY KEY (`post_id`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='岗位信息表';\n\n-- ----------------------------\n-- Records of sys_post\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_post` (`post_id`, `post_code`, `post_name`, `post_sort`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, 'ceo', '董事长', 1, '1', 'admin', '2023-12-18 14:59:02', '', NULL, '');\nINSERT INTO `sys_post` (`post_id`, `post_code`, `post_name`, `post_sort`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, 'se', '项目经理', 2, '1', 'admin', '2023-12-18 14:59:02', '', NULL, '');\nINSERT INTO `sys_post` (`post_id`, `post_code`, `post_name`, `post_sort`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (3, 'hr', '人力资源', 3, '1', 'admin', '2023-12-18 14:59:02', '', NULL, '');\nINSERT INTO `sys_post` (`post_id`, `post_code`, `post_name`, `post_sort`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (4, 'user', '普通员工', 4, '1', 'admin', '2023-12-18 14:59:02', '', NULL, '');\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_role\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_role`;\nCREATE TABLE `sys_role` (\n  `role_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '角色ID',\n  `role_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '角色名称',\n  `role_key` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '角色权限字符串',\n  `role_sort` int NOT NULL COMMENT '显示顺序',\n  `data_scope` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '5' COMMENT '数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限 5：仅个人权限）',\n  `menu_check_strictly` tinyint DEFAULT '1' COMMENT '菜单树选择项是否关联显示',\n  `dept_check_strictly` tinyint DEFAULT '1' COMMENT '部门树选择项是否关联显示',\n  `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT '1' COMMENT '角色状态（0停用 1正常）',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注',\n  PRIMARY KEY (`role_id`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='角色信息表';\n\n-- ----------------------------\n-- Records of sys_role\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_role` (`role_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, '超级管理员', 'admin', 1, '1', 1, 1, '1', 'admin', '2023-12-18 14:59:03', '', NULL, '超级管理员');\nINSERT INTO `sys_role` (`role_id`, `role_name`, `role_key`, `role_sort`, `data_scope`, `menu_check_strictly`, `dept_check_strictly`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, '普通角色', 'common', 2, '2', 1, 1, '1', 'admin', '2023-12-18 14:59:03', 'admin', '2024-06-07 20:34:41', '普通角色');\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_role_dept\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_role_dept`;\nCREATE TABLE `sys_role_dept` (\n  `role_id` int unsigned NOT NULL COMMENT '角色ID',\n  `dept_id` int unsigned NOT NULL COMMENT '部门ID',\n  PRIMARY KEY (`role_id`,`dept_id`) USING BTREE,\n  KEY `sys_role_dept_dept_id_idx` (`dept_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='角色和部门关联表';\n\n-- ----------------------------\n-- Records of sys_role_dept\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_role_dept` (`role_id`, `dept_id`) VALUES (2, 100);\nINSERT INTO `sys_role_dept` (`role_id`, `dept_id`) VALUES (2, 101);\nINSERT INTO `sys_role_dept` (`role_id`, `dept_id`) VALUES (2, 103);\nINSERT INTO `sys_role_dept` (`role_id`, `dept_id`) VALUES (2, 104);\nINSERT INTO `sys_role_dept` (`role_id`, `dept_id`) VALUES (2, 105);\nINSERT INTO `sys_role_dept` (`role_id`, `dept_id`) VALUES (2, 106);\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_role_menu\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_role_menu`;\nCREATE TABLE `sys_role_menu` (\n  `role_id` int unsigned NOT NULL COMMENT '角色ID',\n  `menu_id` int unsigned NOT NULL COMMENT '菜单ID',\n  PRIMARY KEY (`role_id`,`menu_id`) USING BTREE,\n  KEY `sys_role_menu_menu_id_idx` (`menu_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='角色和菜单关联表';\n\n-- ----------------------------\n-- Records of sys_role_menu\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 2);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 3);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 100);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 101);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 102);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 103);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 104);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 105);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 106);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 107);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 108);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 112);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 116);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 501);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1000);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1007);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1012);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1016);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1020);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1025);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1030);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1035);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1042);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1055);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 2032);\nINSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 2035);\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_user\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_user`;\nCREATE TABLE `sys_user` (\n  `user_id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',\n  `dept_id` int unsigned DEFAULT NULL COMMENT '部门ID',\n  `user_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '用户账号',\n  `nick_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '用户昵称',\n  `user_type` varchar(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '00' COMMENT '用户类型（00系统用户）',\n  `email` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '用户邮箱',\n  `phonenumber` varchar(11) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '手机号码',\n  `sex` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '0' COMMENT '用户性别（0男 1女 2未知）',\n  `avatar` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '头像地址',\n  `password` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '密码',\n  `status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '1' COMMENT '帐号状态（0停用,1正常 ）',\n  `login_ip` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '最后登录IP',\n  `login_date` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '最后登录时间',\n  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '创建者',\n  `create_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建时间',\n  `update_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '更新者',\n  `update_time` varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '更新时间',\n  `remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注',\n  PRIMARY KEY (`user_id`) USING BTREE,\n  KEY `sys_user_dept_id_idx` (`dept_id`) USING BTREE\n) ENGINE=InnoDB AUTO_INCREMENT=125 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='用户信息表';\n\n-- ----------------------------\n-- Records of sys_user\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, 103, 'admin', 'admin', '00', 'admin@carole.top', '18888888888', '0', '', 'e5fa720ab8006315ad95dd38736675b3e67604e099f19d644c503b604e9222bd', '1', '127.0.0.1', '2023-12-21 15:19:31', 'admin', '2023-12-18 14:59:02', '', '2024-01-20 21:49:45', '管理员');\nINSERT INTO `sys_user` (`user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (2, 103, 'test', 'test', '00', 'test@carole.top', '18888888888', '0', '', 'e7e266243c001eb54353a87b890206dc3fe8af383a7e90a5577d609a97e87a9f', '1', '127.0.0.1', '2023-12-21 15:19:31', 'admin', '2024-06-07 16:47:07', 'admin', '2024-06-07 17:09:14', 'test');\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_user_post\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_user_post`;\nCREATE TABLE `sys_user_post` (\n  `user_id` int unsigned NOT NULL COMMENT '用户ID',\n  `post_id` int unsigned NOT NULL COMMENT '岗位ID',\n  PRIMARY KEY (`user_id`,`post_id`) USING BTREE,\n  KEY `sys_user_post_post_id_idx` (`post_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='用户与岗位关联表';\n\n-- ----------------------------\n-- Records of sys_user_post\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_user_post` (`user_id`, `post_id`) VALUES (1, 1);\nCOMMIT;\n\n-- ----------------------------\n-- Table structure for sys_user_role\n-- ----------------------------\nDROP TABLE IF EXISTS `sys_user_role`;\nCREATE TABLE `sys_user_role` (\n  `user_id` int unsigned NOT NULL COMMENT '用户ID',\n  `role_id` int unsigned NOT NULL COMMENT '角色ID',\n  PRIMARY KEY (`user_id`,`role_id`) USING BTREE,\n  KEY `sys_user_role_role_id_idx` (`role_id`) USING BTREE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='用户和角色关联表';\n\n-- ----------------------------\n-- Records of sys_user_role\n-- ----------------------------\nBEGIN;\nINSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (1, 1);\nINSERT INTO `sys_user_role` (`user_id`, `role_id`) VALUES (2, 2);\nCOMMIT;\n\nSET FOREIGN_KEY_CHECKS = 1;\n"
  },
  {
    "path": "docs/.nojekyll",
    "content": ""
  },
  {
    "path": "docs/README.md",
    "content": "<div  align=\"center\">\r\n <img src=\"assets/68747470733a2f2f6e6573746a732e636f6d2f6c6f676f2d736d616c6c2d6772616469656e742e37363631363430352e737667.svg\" alt=\"logo\" style=\"width: 25%;\" />\r\n <h1 >Carole-Admin</h1>\r\n    <h3 >一款基于 Nestjs+Vue前后端分离的后台框架</h3>\r\n</div>\r\n\r\n# 介绍\r\n\r\n## 平台简介\r\n\r\n`carole-admin` 是一款[Nestjs](https://nestjs.com/)+[Prisma](https://www.prisma.io/)+[Vue](https://vuejs.org/)+[Vite](https://vitejs.dev/)前后端分离的全栈快速开发平台, 前端基于[若依](https://github.com/yangzongzhuan/RuoYi-Vue3)。\r\n\r\n- 前端采用[Vue3](https://vuejs.org/)、[Element-Plus](https://element-plus.org/)、[Vite](https://vitejs.dev/)。\r\n- 后端采用[Nest](https://nestjs.com/)、[Prisma](https://www.prisma.io/)、[ioredis](https://github.com/redis/ioredis) & [Jwt](https://github.com/auth0/node-jsonwebtoken)。\r\n- 权限认证使用[Jwt](https://github.com/auth0/node-jsonwebtoken)，支持多终端认证系统。\r\n- 支持加载动态权限菜单，多方式轻松权限控制。\r\n- 支持接口限流\r\n- 高效率开发，使用代码生成器可以一键生成前后端代码。\r\n\r\n## 项目\r\n\r\n> 演示地址：[https://carole-admin-demo.carole.top](https://carole-admin-demo.carole.top)\r\n>\r\n> 默认有两个用户： admin的密码为carole test的密码为123456\r\n>\r\n> github: <https://github.com/Carole007/carole-admin>\r\n>\r\n\r\n## 内置功能\r\n\r\n1. 用户管理：用户是系统操作者，该功能主要完成系统用户配置。\r\n\r\n2. 部门管理：配置系统组织机构。\r\n\r\n3. 岗位管理：配置系统用户所属担任职务。\r\n\r\n4. 菜单管理：配置系统菜单，操作权限，按钮权限标识等。\r\n\r\n5. 角色管理：角色菜单权限分配、设置角色按机构进行数据范围权限划分。\r\n\r\n6. 字典管理：对系统中经常使用的一些较为固定的数据进行维护。\r\n\r\n7. 参数管理：对系统动态配置常用参数。\r\n\r\n8. 通知公告：系统通知公告信息发布维护。\r\n\r\n9. 登录日志：系统登录日志记录查询包含登录异常。\r\n\r\n10. 代码生成：前后端代码的生成（js、vue、sql）支持CRUD下载 。\r\n\r\n11. 系统接口：根据业务代码自动生成相关的api接口文档。\r\n\r\n12. 在线用户：当前系统中活跃用户状态监控。\r\n\r\n13. 服务监控：监视当前系统CPU、内存、磁盘、堆栈等相关信息。\r\n\r\n14. 缓存监控：对系统的缓存信息查询，命令统计等。\r\n\r\n## 演示图\r\n\r\n| ![image-20240611165616048](assets/image-20240611165616048.png) | ![image-20240610160231844](assets/image-20240610160231844.png) |\r\n| ------------------------------------------------------------ | ------------------------------------------------------------ |\r\n| ![image-20240610155809785](assets/image-20240610155809785.png) | ![image-20240610155824377](assets/image-20240610155824377.png) |\r\n| ![image-20240610155853085](assets/image-20240610155853085.png) | ![image-20240610155914577](assets/image-20240610155914577.png) |\r\n| ![image-20240610155928620](assets/image-20240610155928620.png) | ![image-20240610155939603](assets/image-20240610155939603.png) |\r\n| ![image-20240610155953022](assets/image-20240610155953022.png) | ![image-20240610160014116](assets/image-20240610160014116.png) |\r\n| ![image-20240610160033126](assets/image-20240610160033126.png) | ![image-20240610160106498](assets/image-20240610160106498.png) |\r\n| ![image-20240610160120728](assets/image-20240610160120728.png) | ![image-20240610160137315](assets/image-20240610160137315.png) |\r\n| ![image-20240610160152700](assets/image-20240610160152700.png) | ![image-20240610160221567](assets/image-20240610160221567.png) |\r\n|                                                              |                                                              |\r\n\r\n# 文档\r\n\r\n## 主要文件结构\r\n\r\n```\r\n server   #系统后端\r\n front    #系统前端\r\n server/src目录\r\n           ├─admin                 #系统管理模块\r\n           │  ├─gen                #代码生成\r\n           │  └─system             #系统代码\r\n           │  └─admin.module.ts    #系统模块配置\r\n           \r\n           ├─common                #工具类 \r\n           │  ├─decorator          #自定义注解    \r\n           │  ├─filter             #异常处理 \r\n           │  ├─guard\r\n           │  │  ├─permission      #权限校验 \r\n           │  ├─middleware         #中间件\r\n           │  │  └─auth        #身份校验 \r\n           │  ├─pipe         #自定义管道\r\n           │  ├─prisma-client     #prisma客户端\r\n           │  ├─result         #返回对象\r\n           │  ├─service\r\n           │  │  ├─auth            #身份相关处理逻辑\r\n           │  │  ├─gen         #代码生成逻辑\r\n           │  │  │  └─gen-template #代码模板\r\n           │  └─utils         #通用工具\r\n           \r\n           ├─prisma\r\n           │  └─schema        #数据库模型定义\r\n           │  └─schema.prisma      #prisma主文件\r\n           \r\n           ├─schedule         #定时任务\r\n           \r\n           ├─.env            #环境变量配置， 密码\r\n           ├─main.ts               #主文件\r\n           ├─config.ts             #系统配置文件\r\n           ├─config-production.json   #系统生产配置文件\r\n           ├─config-development.json   #系统开发配置文件\r\n           ├─app.module.ts         #系统主模块\r\n```\r\n\r\n## 开发指南\r\n\r\n详细的开发指南请参考以下文档：\r\n\r\n- [安装指南](install.md) - 安装使用详解\r\n- [配置说明](config.md) - 系统配置文件详解\r\n- [开发指南](guide.md) - 包含权限控制、Prisma使用、代码生成等详细说明\r\n- [常见问题](faq.md) - 常见问题解答\r\n\r\n## 部署指南\r\n\r\n关于如何部署系统，请参考[部署指南](guide.md?id=部署)。\r\n"
  },
  {
    "path": "docs/_coverpage.md",
    "content": "# Carole-Admin\n\n> 一款基于 Nestjs+Vue 前后端分离的后台框架\n\n- 🚀 高效开发，一键生成前后端代码\n- 🔒 完善的权限管理和认证系统\n- 🛠️ 丰富的内置功能和组件\n- 📱 响应式设计，支持多终端访问\n\n[GitHub](https://github.com/Carole007/carole-admin)\n[演示站点](https://carole-admin-demo.carole.top)\n[开始使用](#介绍)\n"
  },
  {
    "path": "docs/_navbar.md",
    "content": "* [首页](/)\n* 文档\n  * [安装指南](/install.md)\n  * [配置说明](/config.md)\n  * [开发指南](/guide.md)\n  * [代码生成](code_gen.md)\n  * [部署指南](guide.md?id=部署)\n  * [常见问题](/faq.md)\n* 链接\n  * [GitHub](https://github.com/Carole007/carole-admin)\n  * [演示站点](https://carole-admin-demo.carole.top)\n* 相关技术\n  * [NestJS](https://nestjs.com/)\n  * [Prisma](https://www.prisma.io/)\n  * [Vue3](https://vuejs.org/)\n  * [Element Plus](https://element-plus.org/)\n"
  },
  {
    "path": "docs/_sidebar.md",
    "content": "* [首页](README.md)\n* [安装指南](install.md)\n* [配置说明](config.md)\n* [开发指南](guide.md)\n* [代码生成](code_gen.md)\n* [部署指南](guide.md?id=部署)\n* [常见问题](faq.md)\n"
  },
  {
    "path": "docs/code_gen.md",
    "content": "# 代码生成的使用\n\n​\n> 本篇文章介绍carole-admin系统的代码生成器使用\n>\n> 这里演示一个用户管理crud\n​\n\n## 前置准备\n\n```sql\n-- 建表\nCREATE TABLE `test_user` (\n  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',\n  `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号',\n  `password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',\n  `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '昵称',\n  `avatar` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '头像',\n  `status` char(1) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '1' COMMENT '状态(0禁用，1正常)',\n  `create_time` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '注册时间',\n  `update_time` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改时间',\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='测试用户表';\n-- 插入数据\nINSERT INTO `test_user` (`id`, `username`, `password`, `nickname`, `avatar`, `status`, `create_time`, `update_time`) VALUES (1, 'Steve', 'U4GC3q7QRo', 'Liao Wai Lam', NULL, '1', '2022-12-15 08:24:00', '2001-02-06');\nINSERT INTO `test_user` (`id`, `username`, `password`, `nickname`, `avatar`, `status`, `create_time`, `update_time`) VALUES (2, 'Sarah', '1oQl45QK1b', 'Kwong Tin Lok', NULL, '0', '2020-08-02 06:48:56', '2024-02-02');\nINSERT INTO `test_user` (`id`, `username`, `password`, `nickname`, `avatar`, `status`, `create_time`, `update_time`) VALUES (3, 'Jose', 'JvVL0dC243', 'Tong Ka Ming', NULL, '1', '2007-10-03 09:13:04', '2009-08-16');\nINSERT INTO `test_user` (`id`, `username`, `password`, `nickname`, `avatar`, `status`, `create_time`, `update_time`) VALUES (4, 'Matthew', 'qAEgP7NxFY', 'Kwok Ka Keung', NULL, '0', '2012-04-07 15:29:30', '2021-02-25');\nINSERT INTO `test_user` (`id`, `username`, `password`, `nickname`, `avatar`, `status`, `create_time`, `update_time`) VALUES (5, 'Ronald', '2qME1z0UhZ', 'Choi Tsz Ching', NULL, '1', '2006-04-08 01:21:21', '2010-01-29');\nINSERT INTO `test_user` (`id`, `username`, `password`, `nickname`, `avatar`, `status`, `create_time`, `update_time`) VALUES (6, 'Ellen', 'FRuTzGFgWj', 'Yip Sze Yu', NULL, '1', '2012-04-21 17:20:16', '2003-12-24');\nINSERT INTO `test_user` (`id`, `username`, `password`, `nickname`, `avatar`, `status`, `create_time`, `update_time`) VALUES (7, 'Shirley', 'pouCHlM5jm', 'Yue Kar Yan', NULL, '1', '2011-03-13 21:45:26', '2003-12-02');\n```\n\n## 导入表\n\n​\n\n- 登录系统，进入系统工具-代码生成，点击导入，勾选需要生成的表，点击确定。\n​\n![alt text](image.png)\n​\n![alt text](assets/image-1.png)\n​\n\n## 字典添加\n\n​\n这里我们用户有两种状态（禁用，正常），咋们可以使用字典进行管理，后期进行添加修改比较方便，比如再添加一个状态为封禁。\n​\n\n1. 添加字典类型\n​\n    ![alt text](assets/image-2.png)\n    ![alt text](assets/image-3.png)\n\n2. 点击字典类型，为此类型添加数据\n​\n    ![alt text](assets/image-4.png)\n    ![alt text](assets/image-5.png)\n    ![alt text](assets/image-6.png)\n    ![alt text](assets/image-7.png)\n​\n\n## 修改代码生成配置\n\n​点击左侧菜单-> 系统工具 -> 代码生成 修改刚才添加的表\n\n![alt text](assets/image-8.png)\n\n### 修改字段信息\n\n这里按照自己的业务需求设置即可,用户状态选择单选或者下拉，字典类型选择刚才新建的那个。\n\n​![alt text](assets/image-9.png)\n\n### 修改生成信息\n\n![alt text](assets/image-10.png)\n\n#### 💡 **注意事项**\n\n系统admin模块中已存在默认的`/system/user`，因此建议在生成业务代码时：\n\n- 将业务名修改为 `user1` 或其他不冲突的名称。\n- 或者修改子系统名，以避免接口 URL 冲突。\n\n生成的菜单信息中 `name` 默认使用业务名，请务必确保名称不与现有菜单重复。  \n如果业务名与已有模块（如 `user`）重复，可以选择：\n\n✅ 修改业务名后生成代码  \n✅ 或直接生成代码并执行菜单创建 SQL，再通过菜单管理手动修改菜单路由地址  \n\n此外，如果将代码生成到独立的模块目录中（不用默认的admin模块），也可避免路径冲突。  \n这里主要演示此类场景的处理方式。\n\n​这里我们修改子系统名和业务名  点击提交\n\n![alt text](assets/image-11.png)\n\n## 添加菜单和权限\n\n> 如果你已经有此表对应的菜单，不需要再执行\n​\n\n- 点击这个小眼睛图标查看代码\n\n![alt text](assets/image-12.png)\n\n- 复制sql代码\n![alt text](assets/image-13.png)\n\n- 执行sql\n ![alt text](assets/image-14.png)\n 粘贴刚才复制的sql代码，执行\n ![alt text](assets/image-15.png)\n 执行完毕刷新网页可看到菜单已添加\n​ ![alt text](assets/image-16.png)\n 修改菜单图标\n ![alt text](assets/image-17.png)\n ![alt text](assets/image-18.png)\n\n接下来完成代码导入\n\n## 生成prisma模型\n\n> 因为这个表是新建的，没有prisma模型，所以需要生成\n> 如果你已经有这表的模型了，可以不用生成\n​\n\n1. cd到server目录 执行server目录下的 `驼峰生成prisma的model.bat`或者驼峰生成prisma的model.sh ` ./驼峰生成prisma的model.sh `\n​\n![alt text](assets/image-19.png)\n​\n1. 生成完毕后，会在prisma里生成一个文件，introspected.prisma，我们可以自己改名移动到schema里面，或者把model复制粘贴到schema里面的某个文件中（记得删除文件），这里我就改为test移动到schema里面。\n​\n![alt text](assets/image-20.png)\n\n![alt text](assets/image-21.png)\n\n## 下载&导入代码\n\n​\n\n1. 下载代码\n\n​这里我们点击右边的下载图标即可\n\n![alt text](assets/image-22.png)\n​\n2. 解压得到，node就是后端的代码，vue前端代码\n​\n![alt text](assets/image-23.png)\n​\n\n> 建议大家使用git管理代码，防止代码丢失，导入代码时会覆盖代码\n\n### 导入后端代码\n\n​\n> 如果您使用了eslint，请格式化代码\n>\n> 如果你生成时没有用默认的admin模块，请确保已存在你填写的模块，没有的话：执行`nest g mo 模块名`生成模块\n​\n\n进入node目录， 复制整个模块到 覆盖项目server/src\n​\n> 一定要选择合并覆盖 而不是替换该目录。\n![alt text](assets/image-24.png)\n\n​\n在代码生成的模块中，我们刚才选择的是默认的admin模块，注册service和controller\n​\n![alt text](assets/image-26.png)\n​\n\n如果serice或controller类名冲突，我们可以手动改下类名，或者修改代码生成的基本信息实体类配置\n\n### 导入前端代码\n\n​\n进入下载的压缩文件vue目录， 复制代码到 front/src  合并覆盖\n​\n![alt text](assets/image-27.png)\n\n## 刷新页面查看效果\n\n>若出现500错误，重启一下后端服务\n\n### 默认查询\n\n![alt text](assets/image-28.png)\n​\n\n### 测试修改\n\n![alt text](assets/image-29.png)\n​\n![alt text](assets/image-30.png)\n\n本期教程结束。\n"
  },
  {
    "path": "docs/config.md",
    "content": "## ⚙️ 配置说明\n\n> ⚠️ **重要说明**  \n   如果 JSON 配置文件中存在 `Config` 里的 配置项，它将覆盖默认的 `Config` 对象对应的键值，请修改对应JSON文件确保配置生效！  \n\n- 修改时请遵循开发环境优先，编辑对应的开发或生产 JSON 文件。  \n- 如果 JSON 文件中未包含某个 key，则该 key 的值将使用 `config.ts` 中的默认配置。\n\n**Carole-Admin** 的配置主要分为两部分：\n\n1. **主配置文件**  \n   文件路径：`server/src/config.ts`\n\n   - 包含系统的主要配置项。\n   - 对应的 `config-development.json` 和 `config-production.json` 文件分别用于开发环境和生产环境配置。\n   - 可在 `config.ts` 中修改：\n\n     ```ts\n     const runMode: 'development' | 'production' = 'development'\n     ```\n\n     用于加载对应的配置文件，并覆盖 `Config` 对象的内容。\n\n2. **环境变量文件**  \n   文件路径：`server/src/.env`\n   - 包含数据库连接信息、以及自定义一些私密参数。\n\n## 主配置文件详解\n\n`config.ts` 文件包含了系统的大部分配置项，下面是各配置项的详细说明：\n\n```typescript\nimport * as dotenv from 'dotenv'\nimport { join } from 'path'\nimport { watch } from 'fs'\nimport { readJsonFile } from './common/utils'\ndotenv.config({ path: join(__dirname, `.env`) })\n//运行模式，根据不同的模式加载不同的配置文件 development=>开发环境  production=>生产环境\nexport let runMode: 'development' | 'production' = 'development'\nconst config_file_path = join(__dirname, `config-${runMode}.json`)\n\n/* 根据运行模式加载文件后，会覆盖默认配置\n可直接修改对应的json文件  config-${runMode}.json  或者删除json文件中对应的key，默认就使用下面的配置。\n后台提供了默认的配置文件修改，Config也会自动加载修改后的配置。 */\nexport const Config = {\n  //服务器的HTTP端口，默认为3000\n  port: 3000,\n  //# 应用的访问路径前缀\n  contextPath: '/v1',\n  swagger: {\n    //是否启用swagger\n    enable: true,\n    //接口文档路径\n    prefix: '/api'\n  },\n  captcha: {\n    //验证码类型 math或text\n    mode: 'math',\n    //验证码过期时间\n    expiresIn: 60 * 2\n  },\n  //配置文件列表,管理后台可快捷编辑同步Config数据  注意：开发环境运行在dist目录，修改的也是dist里面的配置文件\n  //根据业务可能会有多个配置文件\n  ConfigFileMap: {\n    production_config: {\n      desc: '生产环境配置',\n      filePath: join(__dirname, './config-production.json')\n    },\n    dev_config: {\n      desc: '开发环境配置',\n      filePath: join(__dirname, './config-production.json')\n    }\n  },\n  //接口限流 2分钟内同一个接口允许60次请求\n  rateLimit: {\n    //数据存储在redis or memory\n    storage: 'redis',\n    ttl: 2 * 60 * 1000,\n    limit: 60\n  },\n  crypto: {\n    //密码加密秘钥\n    psdSecret: 'carole123456'\n  },\n  token: {\n    // token加密秘钥\n    secret: 'carole123456',\n    //过期时间秒\n    expiresIn: 60 * 60 * 24\n  },\n  prisma: {\n    //是否显示执行的sql指令\n    logEnable: false,\n    //显示那些日志\n    log: ['query', 'info', 'warn', 'error'] as any\n  },\n  //redis连接配置\n  redis: {\n    //主机地址\n    host: '127.0.0.1',\n    //端口\n    port: 6379,\n    //数据库\n    db: 5,\n    //密码\n    password: ''\n  },\n  upload: {\n    //上传文件存储基目录 请设置一个绝对路径\n    path: join(__dirname, 'uploads'),\n    config: {\n      img: {\n        fileSize: 2 * 1024 * 1024,\n        files: 1,\n        fieldSize: 0.5 * 1024 * 1024,\n        fields: 100,\n        fieldNameSize: 100,\n        parts: 100,\n        headerPairs: 100\n      },\n      file: {\n        fileSize: 100 * 1024 * 1024,\n        files: 10,\n        fieldSize: 0.5 * 1024 * 1024,\n        fields: 100,\n        fieldNameSize: 100,\n        parts: 100,\n        headerPairs: 100\n      }\n    }\n  },\n  //生成配置\n  gen: {\n    //作者\n    author: 'carole',\n    //默认生成模块\n    packageName: 'admin',\n    //子模块目录\n    moduleName: 'system',\n    //是否去除表前缀，默认是false\n    autoRemovePre: false,\n    //表前缀（生成类名不会包含表前缀，多个用逗号分隔）\n    tablePrefix: ['sys_']\n  },\n  //邮件发送配置\n  mail: {\n    //是否启用邮箱\n    enable: false,\n    //超时设置， 30秒未发送邮件，则返回失败\n    timeout: 30 * 1000,\n    config: {\n      //邮箱服务器 qq：smtp.qq.com 网易： smtp.163.com\n      host: '',\n      //端口\n      port: 465,\n      auth: {\n        //用户名\n        user: '',\n        //密码\n        pass: ''\n      },\n      // 端口465设置true, 其他false\n      secure: true,\n      tls: {\n        //建立 TLS 连接时是否应该拒绝未经授权的服务器证书\n        rejectUnauthorized: false\n      }\n    }\n  }\n}\ninitConfig()\nexport function initConfig() {\n  let data = readJsonFile(config_file_path)\n  if (data) {\n    for (let k in data) {\n      Config[k] = data[k]\n    }\n  }\n}\n// 监听config文件变化\nwatch(config_file_path, (eventType, filename) => {\n  if (eventType === 'change') {\n    try {\n      initConfig()\n      console.log('config已更新')\n    } catch (err) {\n      console.log('更新config失败:', err)\n    }\n  }\n})\n//是否开发环境\nexport function isDevelopment() {\n  return runMode === 'development'\n}\n//是否生产环境\nexport function isProduction() {\n  return runMode === 'production'\n}\n```\n\n## 后台修改配置\n\n> 注意：开发模式修改的是dist下的文件\n>\n> 修改后会同步更新Conifg\n>\n\n![alt text](assets/config-edit.png)\n"
  },
  {
    "path": "docs/faq.md",
    "content": "# 常见问题解答 (FAQ)\n\n本文档收集了使用 Carole-Admin 系统时可能遇到的常见问题及其解决方案。\n\n## 安装与配置问题\n\n### Q: 执行 `npx prisma generate` 时失败怎么办？\n\n**A:** 这通常是由于网络问题导致的。可以尝试以下解决方案：\n\n1. 多次执行该命令\n2. 使用代理或更换网络环境\n\n### Q: 如何修改默认的数据库连接？\n\n**A:** 编辑 `server/src/.env` 文件中的 `DATABASE_URL` 变量：\n\n```\nDATABASE_URL=\"mysql://用户名:密码@主机:端口/数据库名?charset=utf8mb4\"\n```\n\n### Q: 如何修改系统的默认端口？\n\n**A:** 编辑 `server/src/config.ts` 文件中的 `port` 配置项：\n\n```typescript\nport: 3000, // 修改为你需要的端口\n```\n\n### Q: 修改了密码加密秘钥后，无法登录系统怎么办？\n\n**A:** 修改密码加密秘钥后，需要重新生成用户密码并更新数据库：\n\n1. 执行 `server/test/password.js` 脚本生成新密码\n2. 使用生成的密码更新数据库中的用户密码\n\n```bash\nnode server/test/password.js\n```\n\n## Prisma 相关问题\n\n### Q: 如何处理 Prisma 中的日期时区问题？\n\n**A:** Prisma 中日期类型字段插入时可能存在时差问题。建议将数据库中的日期类型改为字符串类型，并在插入/更新时手动设置时间：\n\n```typescript\n// 插入数据时\nconst nowDate = () => dayjs().format('YYYY-MM-DD');\nawait prisma.user.create({\n  data: {\n    // ...其他字段\n    createTime: nowDate(),\n    updateTime: nowDate(),\n  },\n});\n```\n\n### Q: 如何处理 BigInt 类型在 JSON 中的序列化问题？\n\n**A:** 当数据库使用 `bigint` 类型时，在 JSON 序列化时可能会出现问题。可以通过扩展 `BigInt` 的 `toJSON` 方法解决：\n\n```typescript\n// 在应用启动时添加\nBigInt.prototype.toJSON = function() {\n  return this.toString();\n};\n```\n\n或者在查询时将 BigInt 转换为字符串：\n\n```typescript\nconst result = await prisma.table.findMany();\nreturn result.map(item => ({\n  ...item,\n  bigIntField: item.bigIntField.toString(),\n}));\n```\n\n### Q: 如何在 Prisma 中使用事务？\n\n**A:** Prisma 提供了 `$transaction` 方法来支持事务操作：\n\n```typescript\nconst [result1, result2] = await prisma.$transaction([\n  prisma.user.create({ data: { name: 'Alice' } }),\n  prisma.post.create({ data: { title: 'Hello World' } }),\n]);\n```\n\n对于更复杂的事务逻辑，可以使用交互式事务：\n\n```typescript\nconst result = await prisma.$transaction(async (tx) => {\n  // 使用 tx 代替 prisma 执行查询\n  const user = await tx.user.create({ data: { name: 'Alice' } });\n  \n  // 基于第一个查询的结果执行第二个查询\n  const post = await tx.post.create({\n    data: {\n      title: 'Hello World',\n      authorId: user.id,\n    },\n  });\n  \n  return { user, post };\n});\n```\n\n## 代码生成问题\n\n### Q: 代码生成时找不到表怎么办？\n\n**A:** 确保以下几点：\n\n1. 表已经在数据库中创建\n2. 数据库连接配置正确\n3. 在 Prisma schema 中已经定义了对应的模型\n4. 模型名称使用 PascalCase 命名，并正确设置了 `@@map` 映射到表名\n\n### Q: 生成的代码中字段名与数据库不一致怎么办？\n\n**A:** 这通常是因为 Prisma 模型中的字段映射配置不正确。确保在模型中使用 `@map` 注解正确映射字段名：\n\n```typescript\nmodel User {\n  id        Int     @id @default(autoincrement())\n  firstName String  @map(\"first_name\")\n  lastName  String  @map(\"last_name\")\n  \n  @@map(\"sys_user\")\n}\n```\n\n### Q: 如何自定义生成的代码模板？\n\n**A:** 代码生成模板位于 `server/src/common/service/gen/gen-template` 目录下。你可以根据需要修改这些模板文件，但请注意保留模板中的变量占位符。\n\n## 部署与性能问题\n\n### Q: 如何优化系统性能？\n\n**A:** 可以考虑以下优化措施：\n\n1. **数据库优化**：\n   - 为常用查询添加索引\n   - 优化复杂查询\n   - 使用数据库连接池\n\n2. **缓存策略**：\n   - 使用 Redis 缓存频繁访问的数据\n   - 实现适当的缓存失效策略\n\n3. **代码优化**：\n   - 避免 N+1 查询问题\n   - 使用批量操作代替循环单个操作\n   - 优化大型响应的数据结构\n\n4. **服务器配置**：\n   - 增加服务器资源（CPU、内存）\n   - 使用负载均衡分发请求\n   - 配置适当的 Node.js 内存限制\n\n## 其他问题\n\n### Q: 如何扩展现有功能？\n\n**A:** 扩展现有功能的最佳实践：\n\n1. **遵循模块化原则**：\n   - 创建新的模块来封装相关功能\n   - 使用依赖注入来集成现有服务\n\n2. **扩展而非修改**：\n   - 尽量不直接修改核心代码\n   - 使用继承或组合模式扩展现有类\n\n3. **保持一致的代码风格**：\n   - 遵循项目的命名约定和结构\n   - 编写单元测试验证新功能\n\n### Q: 如何贡献代码？\n\n**A:** 欢迎通过以下方式贡献代码：\n\n1. Fork 项目仓库\n2. 创建功能分支\n3. 提交更改\n4. 确保代码通过测试\n5. 提交 Pull Request\n\n请确保您的代码符合项目的编码规范，并包含适当的文档和测试。\n\n### Q: 在哪里可以获取更多帮助？\n\n**A:** 如果您有其他问题，可以通过以下渠道获取帮助：\n\n1. 查阅项目文档\n2. 在 GitHub 仓库中提交 Issue\n3. 加入社区讨论组\n4. 联系项目维护者\n\n---\n\n如果您的问题未在此 FAQ 中列出，请在 GitHub 仓库中提交 Issue，我们会尽快回复并更新此 FAQ。\n"
  },
  {
    "path": "docs/guide.md",
    "content": "# 开发指南\n\n本文档提供了 Carole-Admin 系统的开发指南，帮助开发者更好地使用和扩展系统。\n\n## 权限控制\n\nCarole-Admin 提供了两种权限注解用于控制接口访问：`@RequireRole` 和 `@RequirePermission`。\n\n### @RequireRole\n\n`@RequireRole` 注解用于配置接口要求用户拥有指定角色才可访问。\n\n| 参数  | 类型   | 描述 |\n| ----- | ------ | ---- |\n| value | String | 角色 |\n\n示例：以下代码表示必须拥有 `admin` 角色才可访问\n\n```typescript\n@RequireRole(\"admin\")\nasync test() {\n    return Result.ok()\n}\n```\n\n### @RequirePermission\n\n`@RequirePermission` 注解用于配置接口要求用户拥有指定权限才可访问。\n\n| 参数  | 类型   | 描述 |\n| ----- | ------ | ---- |\n| value | String | 权限 |\n\n示例：以下代码表示必须拥有 `system:user:remove` 权限才可访问\n\n```typescript\n@RequirePermission(\"system:user:remove\")\nasync test() {\n    return Result.ok()\n}\n```\n\n## Prisma 相关\n\n[Prisma 官方文档](https://www.prisma.io/docs/getting-started)\n\n### Prisma 脚本功能\n\n项目提供了两个 Prisma 相关的 bat 脚本：\n\n#### 更新 prisma 的 model.bat\n\n- 此脚本用于当你已经编写好 Prisma 的 model 文件，但数据库结构发生了更改时。它可以同步数据库的最新结构到 Prisma 的 schema 文件中。\n- 相当于执行 `npx prisma db pull && npx prisma generate`\n\n#### 驼峰生成 prisma 的 model.bat\n\n- 此脚本用于从数据库中生成 Prisma 的 model 定义，适用于数据库表没有在 Prisma 中的 model 定义过。（代码生成模板会使用驼峰命名法，并自动添加字段和表的 map 映射关系。）\n- 生成之后会在 src/prisma 目录中有个 `introspected.prisma` 文件，可以更改名字并移动到 `src/prisma/schema` 里面。\n\n### Prisma 使用注意事项\n\n- 项目打包时，可以在 schema.prisma 里的 binaryTargets 添加目标平台\n- 确保 model 都写好表和字段的映射关系，使用 @@map 映射表，@Map 映射字段\n- model 名称使用 PascalCase 命名，如 test -> Test, sys_config -> SysConfig\n\n示例：\n\n```javascript\nmodel SysConfig {\n  configId    Int     @id @default(autoincrement()) @map(\"config_id\")\n  configName  String? @default(\"\") @map(\"config_name\") @db.VarChar(100)\n  configKey   String? @default(\"\") @map(\"config_key\") @db.VarChar(100)\n  configValue String? @default(\"\") @map(\"config_value\") @db.VarChar(500)\n  configType  String? @default(\"N\") @map(\"config_type\") @db.Char(1)\n  createBy    String? @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime  String? @map(\"create_time\") @db.VarChar(25)\n  updateBy    String? @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime  String? @map(\"update_time\") @db.VarChar(25)\n  remark      String? @map(\"remark\") @db.VarChar(500)\n  @@map(\"sys_config\")\n}\n```\n\n- Prisma 中日期类型字段插入时存在时差问题\n\n  > 解决办法：把 SQL 中的日期类型改成字符串，插入更新时手动设置时间\n\n- 处理 BigInt 类型数据时，可以使用以下方法解决 JSON 转换问题：\n\n```javascript\nBigInt.prototype.toJSON = function () {\n  return this.toString()\n}\n```\n\n## 代码生成使用\n\n代码生成器是 Carole-Admin 的核心功能之一，可以大幅提高开发效率。\n\n详细教程：[代码生成器使用教程](code_gen.md)\n\n### 使用步骤\n\n1. 在 prisma\\schema 写好对应表的 Model，字段名驼峰映射\n2. 登录系统（系统工具 -> 代码生成 -> 导入对应表）\n3. 在代码生成列表中找到需要的表（可预览、编辑、同步、删除生成配置）\n4. 点击生成代码获取 `carole.zip`，执行 `sql` 文件生成菜单权限，按照包内目录结构复制到自己的项目中\n5. 修改对应模块的 module.ts 文件，在 providers 中注册生成的 Service，controllers 注册生成的 Controller 类\n\n### 代码生成功能\n\n代码生成支持以下功能：\n\n- **预览**：对生成的代码提前预览，防止出现一些不符合预期的情况。\n- **同步**：对原表的字段进行同步，包括新增、删除、修改的字段处理。\n- **修改**：对生成的代码基本信息、字段信息、生成信息做一系列的调整。\n\n### 生成代码结构\n\n生成的代码包括：\n\n- 前端：Vue 组件、API 调用、路由配置\n- 后端：Controller、Service、DTO 类\n- SQL：菜单权限配置\n\n## 定时任务\n\nCarole-Admin 使用 [@nestjs/schedule](https://docs.nestjs.com/techniques/task-scheduling#task-scheduling) 实现定时任务功能。\n\n### 使用方法\n\n在 `server\\src\\schedule\\index.ts` 中添加需要执行的方法并加上 @Cron 注解并携带 cron 表达式即可。\n\n示例：\n\n```typescript\n// cron任务，每隔两秒执行一次\n@Cron('*/2 * * * * *')\ntestCron() {\n  console.log(\"cron excute...\")\n}\n```\n\n### Cron 表达式说明\n\nCron 表达式由 6 个部分组成，从左到右依次为：\n\n```\n*    *    *    *    *    *\n┬    ┬    ┬    ┬    ┬    ┬\n│    │    │    │    │    │\n│    │    │    │    │    └ 星期几 (0 - 7) (0 或 7 是星期日)\n│    │    │    │    └───── 月份 (1 - 12)\n│    │    │    └────────── 日期 (1 - 31)\n│    │    └─────────────── 小时 (0 - 23)\n│    └──────────────────── 分钟 (0 - 59)\n└───────────────────────── 秒 (0 - 59, 可选)\n```\n\n常用表达式：\n\n- `* * * * * *` - 每秒执行\n- `0 * * * * *` - 每分钟开始时执行\n- `0 0 * * * *` - 每小时开始时执行\n- `0 0 0 * * *` - 每天午夜执行\n- `0 0 12 * * *` - 每天中午 12 点执行\n\n## 接口限流\n\nCarole-Admin 使用 [@nestjs/throttler](https://docs.nestjs.com/security/rate-limiting#multiple-throttler-definitions) 实现接口限流功能。\n\n### 全局限流配置\n\n默认所有接口 2 分钟内都只允许 60 次请求，可以在 config.ts 里面配置 rateLimit：\n\n```typescript\nrateLimit: {\n  // 数据存储在 redis 或 memory\n  storage: \"redis\",\n  // 时间窗口（毫秒）\n  ttl: 2 * 60 * 1000,\n  // 在时间窗口内允许的最大请求次数\n  limit: 60,\n},\n```\n\n### 单个接口限流\n\n使用 `@Throttle` 注解可以为单个接口配置限流规则：\n\n```typescript\n// 1个小时之内只能请求8次\n@Throttle({\n  default: {\n    limit: 8,\n    ttl: 1000 * 60 * 60\n  }\n})\nasync test1() {\n  return Result.ok()\n}\n\n// 5s内只能请求一次\n@Throttle({\n  default: {\n    limit: 1,\n    ttl: 1000 * 5\n  }\n})\nasync test2() {\n  return Result.ok()\n}\n```\n\n### 用户级别限流\n\n使用 `@ThrottleUser()` 注解可以对用户进行限流：\n\n```typescript\n// 用户1天只能请求一次\n@ThrottleUser()\n@Throttle({\n  default: {\n    limit: 1,\n    ttl: 1000 * 60 * 60 * 24\n  }\n})\nasync test3() {\n  return Result.ok()\n}\n```\n\n## 请求跳过登录验证\n\n在某些情况下，您可能需要允许某些接口无需登录即可访问（如公开 API、健康检查等）。\n\n修改 `server\\src\\app.module.ts` 文件：\n\n```typescript\n.exclude('/test(.*)', '/a') // 排除 /test 开头和 /a 的路由\n.forRoutes('*') // 应用到所有路由\n.forRoutes('/admin(*)') // 应用到所有 /admin 开头的路由\n```\n\n支持通配符：\n\n- `/test(.*)` - 排除所有以 `/test` 开头的路由\n- `*` - 应用到所有路由\n- `/admin(*)` - 应用到所有以 `/admin` 开头的路由\n\n## 使用 Redis\n\nCarole-Admin 封装了 Redis 工具类，提供了常用的 Redis 操作方法。\n\n### Redis 工具类\n\n文件位置：`server\\src\\common\\utils\\redisUtils.ts`\n\n该工具类封装了一个 Redis 连接池，提供了常用的 Redis 操作方法。\n\n### 使用方法\n\n```typescript\nimport { redisUtils } from '@/common/utils/redisUtils' // 导入\n\n// 使用直接调用方法即可\nconst r = await redisUtils.get('demo')\nawait redisUtils.set('demo', 'hello world!', 10) // 过期时间秒为单位 10s过期\n```\n\n### 主要方法\n\n- `get(key)` - 获取键值\n- `set(key, value, expireTime)` - 设置键值，可选过期时间\n- `del(key)` - 删除键\n- `exists(key)` - 检查键是否存在\n- `expire(key, seconds)` - 设置过期时间\n- `ttl(key)` - 获取剩余过期时间\n- `keys(pattern)` - 获取匹配模式的所有键\n- 更多方法请查看源码\n\n## 请求参数验证\n\nCarole-Admin 使用 [class-validator](https://github.com/typestack/class-validator) 进行请求参数验证。\n\n### 使用场景\n\n使用类定义参数的模型规则，请求时会对参数做校验，不通过直接返回错误，以及自动删除不在类中的字段，更加安全方便。\n\n例如，对于用户修改接口，如果只允许修改 nickname、age 和 email，但用户恶意传入了 password，使用参数验证可以自动过滤掉不允许的字段。\n\n### 使用方法\n\n1. 定义 DTO 类：\n\n```typescript\nexport class CreateDictDataDto extends BaseDomain {\n  @ApiProperty({ description: '字典类型' })\n  @IsNotEmpty({ message: '字典类型不能为空' })\n  @IsString()\n  dictType: string\n\n  @ApiProperty({ description: '数据标签' })\n  @IsNotEmpty({ message: '数据标签不能为空' })\n  @IsString()\n  dictLabel: string\n\n  @ApiProperty({ description: '数据键值' })\n  @IsNotEmpty({ message: '数据键值不能为空' })\n  @IsString()\n  dictValue?: string\n\n  @ApiProperty({ description: '样式属性' })\n  @IsOptional()\n  cssClass?: string\n\n  @ApiProperty({ description: '回显样式' })\n  @IsOptional()\n  listClass?: string\n\n  @ApiProperty({ description: '显示排序' })\n  @IsNotEmpty({ message: '排序值不能为空' })\n  @Transform(v => +v.value)\n  @IsNumber()\n  dictSort: number\n\n  @ApiProperty({ description: '字典状态（0停用，1正常）' })\n  @IsOptional()\n  status?: string = '1'\n}\n```\n\n2. 在 Controller 中使用：\n\n```typescript\n@Post()\nasync create(@Body() createDto: CreateDictDataDto) {\n  // createDto 已经经过验证，可以安全使用\n  return this.service.create(createDto);\n}\n```\n\n### 注意事项\n\n在 `server\\src\\app.module.ts` 中设置了 `whiteList: true`，会自动删除不在 DTO 类中的字段：\n\n```typescript\napp.useGlobalPipes(\n  new ValidationPipe({\n    whitelist: true, // 自动删除不在 DTO 类中的字段\n    transform: true, // 自动转换类型\n    forbidNonWhitelisted: false // 不允许未在白名单中的属性\n  })\n)\n```\n\n因此，如果你使用了类来修饰参数类型，某个参数不想要验证，请务必加上 `@IsOptional()` 注解，标识可选的，否则这个字段会被直接删除掉。\n\n## 发送邮件\n\nCarole-Admin 提供了邮件发送功能，可用于系统通知、密码重置等场景。\n\n### 配置邮件服务\n\n1. 根据运行环境，修改 `config-[development|production].json` 文件中的邮箱配置：\n\n```typescript\n\"mail\": {\n    \"enable\": true, // 设置为 true 启用邮件服务\n    \"timeout\": 30000, //发送超时\n    \"config\": {\n      \"host\": \"smtp.example.com\",\n      \"port\": 465,\n      \"auth\": { \"user\": \"用户名\", \"pass\": \"密码\" },\n      \"secure\": true,\n      \"tls\": { \"rejectUnauthorized\": false }\n    }\n}\n```\n\n### 使用邮件服务\n\n系统提供了邮件工具类 `server\\src\\common\\utils\\email.ts`，可以直接参考该文件使用：\n\n## 部署\n\n本节介绍如何将 Carole-Admin 系统部署到生产环境。\n\n### 后端部署\n\n> 建议在config-production.json中 关闭 swagger 文档 `\"swagger\": { \"enable\": false }`\n>\n> 后台管理中修改用户密码，删除默认测试账号\n\n1. 准备 Prisma 引擎：\n\n[查看平台的引擎](https://www.prisma.io/docs/orm/reference/prisma-schema-reference#binarytargets-options)\n\n```bash\ncd server\n\n# 方法一：在本地生成目标平台的引擎\n# 在 schema.prisma 文件中添加目标平台  \n# generator client {\n#   provider      = \"prisma-client-js\"\n#   binaryTargets = [\"native\", \"linux-musl\", \"debian-openssl-1.1.x\"]\n# }\nnpx prisma generate\n\n# 方法二：在服务器上生成引擎\n# 将源代码上传到服务器，然后执行\nnpx prisma generate\n```\n\n2. 构建后端应用：\n\n```bash\n# 在本地或服务器上构建\nnpm run build\n```\n\n3. 准备部署文件：\n\n```bash\n# 将 package.json 复制到 dist 目录\ncp package.json dist/\n\n```\n\n4. 部署到服务器：\n\n```bash\n# 上传 dist 目录到服务器\ncd dist\n\n# 在服务器上安装依赖\nnpm install\n\n# 修改为生产环境配置\n.env\n\n# 修改config.ts运行模式为production，并修改config-production.json相关配置\nexport let runMode: \"development\" | \"production\" = \"production\";\n\n# 使用 PM2 启动应用\n- 安装PM2  npm install -g pm2\npm2 start main.js --name carole-admin\n```\n\n### 前端部署\n\n1. 构建前端应用：\n\n```bash\ncd front\n\n# 修改生产环境 API 地址（如需）\n# 编辑 .env.production 文件\n\n# 构建生产版本\nnpm run build:prod\n```\n\n2. 部署到 Web 服务器：\n\n```bash\n# 上传 dist 目录到服务器\n```\n\n3. 配置 Nginx：\n\n```nginx\n#server块添加以下内容\n location / {\n        try_files $uri $uri/ /index.html;\n    }\n```\n"
  },
  {
    "path": "docs/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n  <meta charset=\"UTF-8\">\n  <title>Carole-Admin - 基于 Nestjs+Vue 的后台框架</title>\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\" />\n  <meta name=\"description\" content=\"Carole-Admin 是一款基于 Nestjs+Vue 前后端分离的后台框架，提供完整的权限管理、代码生成等功能\">\n  <meta name=\"keywords\" content=\"Carole-Admin,Nestjs,Nest-Admin,Vue,后台框架,前后端分离\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0\">\n  <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css\">\n  <link rel=\"stylesheet\" href=\"//cdn.jsdelivr.net/npm/prismjs/themes/prism.css\">\n  <link rel=\"icon\" href=\"assets/favicon.ico\">\n  <div id=\"app\"></div>\n  <style>\n    :root {\n      --theme-color: #4153af;\n    }\n    .markdown-section code {\n      color: var(--theme-color);\n    }\n    .app-name-link img {\n      max-width: 80px;\n    }\n    .sidebar-nav > ul > li > a {\n      font-weight: bold;\n    }\n    .content {\n      padding-top: 10px;\n    }\n    .markdown-section {\n      max-width: 900px;\n    }\n  </style>\n</head>\n\n<body>\n  <div id=\"app\">加载中...</div>\n  <script>\n    window.$docsify = {\n      name: 'Carole-Admin',\n      themeColor: '#4153af',\n      repo: 'https://github.com/Carole007/carole-admin',\n      nameLink: 'https://github.com/Carole007/carole-admin',\n      executeScript: true,\n      loadSidebar: true,\n      loadNavbar: true,\n      coverpage: true,\n      auto2top: true,\n      subMaxLevel: 3,\n      pagination: {\n        previousText: '上一页',\n        nextText: '下一页',\n        crossChapter: true,\n        crossChapterText: true\n      },\n      search: {\n        placeholder: '搜索',\n        noData: '找不到结果！',\n        depth: 3,     \n        paths: 'auto', \n        hideOtherSidebarContent: true\n      },\n      count: {\n        countable: true,\n        position: 'top',\n        margin: '10px',\n        float: 'right',\n        fontsize: '0.9em',\n        color: 'rgb(90,90,90)',\n        language: 'chinese',\n        localization: {\n          words: \"\",\n          minute: \"\"\n        },\n        isExpected: true\n      },\n      plugins: [\n        function(hook, vm) {\n          hook.beforeEach(function(html) {\n            var url = 'https://github.com/Carole007/carole-admin/blob/main/docs/' + vm.route.file;\n            var editHtml = '[📝 编辑文档](' + url + ')\\n';\n            return html + '\\n\\n----\\n\\n' + editHtml;\n          });\n        }\n      ]\n    }\n  </script>\n\n  <script src=\"//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/docsify-pagination/dist/docsify-pagination.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/docsify-copy-code/dist/docsify-copy-code.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/docsify/lib/plugins/zoom-image.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/prismjs/components/prism-bash.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/prismjs/components/prism-typescript.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/prismjs/components/prism-javascript.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/prismjs/components/prism-json.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/prismjs/components/prism-sql.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/prismjs/components/prism-nginx.min.js\"></script>\n  <script src=\"//cdn.jsdelivr.net/npm/docsify-tabs/dist/docsify-tabs.min.js\"></script>\n\n</body>\n\n</html>"
  },
  {
    "path": "docs/install.md",
    "content": "# 安装指南\n\n本文档提供了 Carole-Admin 的基本安装步骤，帮助您快速搭建开发环境。更详细的配置和使用说明请参考[开发指南](guide.md)。\n\n## 环境准备\n\n在开始安装之前，请确保您的系统满足以下要求：\n\n- **Node.js**: v20.12.0 或更高版本\n- **MySQL**: 8.0.12 或更高版本\n- **Redis**: 最新稳定版\n\n您可以使用以下命令检查您的 Node.js 版本：\n\n```bash\nnode -v\n```\n\n## 下载项目\n\n```bash\n# 克隆项目\ngit clone https://github.com/Carole007/carole-admin.git\n\n# 进入项目目录\ncd carole-admin\n```\n\n## 数据库配置\n\n1. 创建一个名为 `carole` 的数据库 （可自定义数据库名称）\n\n> 记得修改 `server/src/.env` 文件中的 `DATABASE_URL` 变量配置\n\n2. 导入项目根目录下的 SQL 文件\n\n## 快速启动\n\n### 后端配置\n\n```typescript\n# 进入后端目录\ncd server\n\n# 安装依赖\nnpm install\n\n# 生成 Prisma 客户端\nnpx prisma generate\n\n# 配置环境变量\n# 编辑 server/src/.env 文件，配置数据库连接信息\nDATABASE_URL=\"mysql://root:root@localhost:3306/carole\" #url格式  mysql://用户名:密码@ip:端口/数据库?参数charset=utf8mb4\n\n# 修改相关配置\nserver/src/config-development.json\n//redis连接信息\n\"redis\": { \"host\": \"127.0.0.1\", \"port\": 6379, \"db\": 5, \"password\": \"\" },\n//文件上传路径\n\"upload\": {\n    \"path\": \"/Users/carole/carole-admin/upload\",\n  }\n```\n\n### 前端配置\n\n```bash\n# 进入前端目录\ncd ../front\n\n# 安装依赖\nnpm install\n```\n\n### 启动服务\n\n```bash\n# 启动后端服务\ncd server\nnpm run start:dev\n\n# 启动前端服务\ncd ../front\nnpm run dev\n```\n\n## 访问系统\n\n启动成功后，您可以通过以下地址访问系统：\n\n- 前端页面：<http://localhost:3000>\n- 后端 API：<http://localhost:3001>\n\n## 默认账户\n\n系统默认提供了两个账户：\n\n- 管理员账户：用户名 `admin`，密码 `carole`\n- 测试账户：用户名 `test`，密码 `123456`\n\n## 更多配置\n\n关于更详细的配置说明，请参考：\n\n- [配置说明](config.md) - 系统配置文件详解\n- [开发指南](guide.md) - 包含权限控制、Prisma 使用、代码生成等详细说明\n- [常见问题](faq.md) - 常见问题解答\n"
  },
  {
    "path": "front/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2018 RuoYi\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "front/README.md",
    "content": "## 开始\r\n\r\n```bash\r\n# 克隆项目\r\ngit clone https://github.com/Carole007/carole-admin.git\r\n\r\n# 进入项目目录\r\ncd carole-admin/front\r\n\r\n# 安装依赖\r\nnpm i\r\n\r\n# 启动服务\r\nnpm run dev\r\n\r\n# 构建测试环境 npm run build:stage\r\n# 构建生产环境 npm run build:prod\r\n# 前端访问地址 http://localhost:3001\r\n```\r\n"
  },
  {
    "path": "front/bin/build.bat",
    "content": "@echo off\r\necho.\r\necho [��Ϣ] ���Web���̣�����dist�ļ���\r\necho.\r\n\r\n%~d0\r\ncd %~dp0\r\n\r\ncd ..\r\nnpm run build:prod\r\n\r\npause"
  },
  {
    "path": "front/bin/package.bat",
    "content": "@echo off\r\necho.\r\necho [��Ϣ] ��װWeb���̣�����node_modules�ļ���\r\necho.\r\n\r\n%~d0\r\ncd %~dp0\r\n\r\ncd ..\r\nnpm i --registry=https://registry.npmmirror.com\r\n\r\npause"
  },
  {
    "path": "front/bin/run-web.bat",
    "content": "@echo off\r\necho.\r\necho [��Ϣ] ʹ�� Vite �������� Web ���̡�\r\necho.\r\n\r\n%~d0\r\ncd %~dp0\r\n\r\ncd ..\r\nnpm run dev\r\n\r\npause"
  },
  {
    "path": "front/html/ie.html",
    "content": "\r\n<!DOCTYPE html>\r\n<html lang=\"zh-CN\">\r\n<head>\r\n    <meta charset=\"UTF-8\" />\r\n    <title>请升级您的浏览器</title>\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\" >\r\n    <meta name=\"renderer\" content=\"webkit\">\r\n    <base target=\"_blank\" />\r\n    <style type=\"text/css\">\r\n        html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:100%;font:inherit;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0}\r\n        a{text-decoration:none;color:#0072c6;}a:hover{text-decoration:none;color:#004d8c;}\r\n        body{width:960px;margin:0 auto;padding:10px;font-size:14px;line-height:24px;color:#454545;font-family:'Microsoft YaHei UI','Microsoft YaHei',DengXian,SimSun,'Segoe UI',Tahoma,Helvetica,sans-serif;overflow-y:scroll}\r\n        h1{font-size:40px;line-height:80px;font-weight:100;margin-bottom:10px;}\r\n        h2{font-size:20px;line-height:25px;font-weight:100;margin:10px 0;}\r\n        em{color:red}\r\n        p{margin-bottom:10px;}\r\n        hr{margin:20px 0;border:0;border-top:1px solid #dadada}\r\n        span{display:block;font-size:12px;line-height:12px;}\r\n        .clean{clear:both;}\r\n        .browser{padding:10px 10px;}\r\n        .browser li{width:auto;padding:0 80px;margin-top:30px;height:34px;line-height:22px;float:left;list-style:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAADMCAYAAAAWCXEwAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAC7ESURBVHja5Lx5dFRV1rBfgHwYRQQVtB26ZWhtabtfeUGxGxFbUGZF8RMHGkVbRkekVYiKisicVhE0gEwBokgDAhEMMSSQkAECwcxkrlRSqVTqJqnxzs/vj5t7qUyAvr9e37fWV2vtleSm6p6n9t5nn733OVU2RaUaEP5PiqJSbeMXPBTA5/Xhzk9Vnd9vo3HFx21E2LYJX9IRgh6npvyCe9uaqS4K4C3IpXHFx9S99CTuJ8Z0KLVjRlA7ZgTuJ8ZgXxmJL+kIlwAkXBQk6HFq9pWRVA8fSvXwodYgdS892a6EA1UNvouqwXdR99KTeAtyfz2IL+kI1cOHYh9wqwVwKWJqpXbMCOv19gG3Imzb1JF2OgZxfr/NukH4jcNVfyEAE8IU+4BbKet1PfaVke3BtA/i/H6b8aIBt7a4mWmaC0nr55vmqRp8F5V33Mm5LhHtwbQF8SUdsSDCb1I1+K42g1xIWgOYYh9wK+e6RCBs29QxSIWus37aJM51iWjx4so77mwD1d5AHQ1eecedlN9yuyVlva6nrNf14Q7cEmRn4W7u3T2E9ME3UX7L7W1uZg5Weced1s3sA2613ql5LXzQjuRclwjcT4wxTXQeRHC7GLdnHPeensiCVwa3e0PznZk3EbZtwluQa0kofz8NcVNxr++Ce30XnNuv61Bcu7viXt8Fvyu7JYipjfGHxzD+8Bh2j+7fAiZcC+Y0zPDIbCyD6DyV6DyVeDcIQR2C39J4oieNJ3oSOnkVcnZ35Ozu6MVdDHF0N6S4C43OqJYg/0ydzb27hzDx0FjuPT2R+asfa6OVsl7X40s6QoWus/CQk6fWZPHChhxe3lbMCxtyrN9TyxSQSwidvMoC0XK6tRGybPjSRmOuNUKVo4Zxe8YxIu4+Jh4ay/jDY7j39MQWWjnXJYLGFR9Toes8tSaLiavTrIHDxfxfapkCwW8hy9YuhCmhk1fR1FRnaCS1NM4yy8RDYy2tjIkZRXq/HtYsCnqc2sJDTkYsTrU00J6YkEJQR7M/eEGY0MmrcOenqjZA2JmyzTJLuJiOe65LBHUvPUmGR2bE4lQmrk7jqTVZHcrE1WkMWpRIdJ4KnpUXBCHLRl3e16EWIOEaMU00/vAY9na/gsYVH/NdgYe+8w9bMBeSQYsSWXjICcFvL2ga+dhlFwcJ10rjio/ZklprgbSWiavTWvzdd/5hXt5W/OtATC201sq9u4eQ+PVijmSW0nf+YQYtSmTQosR2gUYsTmXQokT6zj9saeRCpmkJ0hxD2gOZeGgsI+Lu45+ps7FXlFmDmDDtSd/5h+k7/zCpZQpa9cwOQciyIR+77LyzFhXlMyZmFOP2jLP8orVWRsTdR2ppHFtSa+k6ZZM1WHvSdcomwyxySceayO4OWTY88TdirygzUkWf18eL2//RQiutYcwYE/Q4tagDOUQ8uo6uUzbRZ3qMJV2nbCLi0XU8tSbrolNXzu6OfOyylgEN4NOkaO5acw/j9ozr0ET37h5imehIZimPL91rAfSZHsOQBfuISS7E7vaTETeX0MmrOoQInbwK+dhlNKWsahni0zPSuGvNPW1M1BrI1NrOwt0WkCn2ijJSS+MYt2ccuQk3oxd36RCi8URPY+HLT1VbgGiSzPsx71laCddMe2Yygf6ZOtuScXvG0XfJn/n8YL+LQnjibyQ34WZ8Xl/bfKSoKL+FVi4EYwKZcu/uIQzaPoExMaPQcrq1ADFX33AI1+6u1OV9HVI6ShU/TYqm75I/dwjTHtDEQ2MZt2ccg7ZPaGGScIDWEBlxc42UoSMQ00StYdoDCgcbtH0Cbx+8p40ZTIBwiFM7RmB3+y+exZvT2YRpDdR6ZoVrw1xRWwN44m/Euf06A6Ki7NLrmnDNmH7TEdSg7RP4/GA/yLK1GdwEKNzSk1M7RlDlqPl1JefOlG2MXTGmXaAxMaMsB/XE34h4tH+7ANlrB7T2iV8OAlDlqOH9mPcsIBPKlF3R16Ad7GwlxoVberYAKCrKv1ghfmkg5sPldLIzZVsLqLErxpC9doAlp3aMICNurlGyVpRdSAu/HqS1Q58rd1JUlI87P1UtKsrHXlGG3e1HCOoov+x2wiX3RxT+o49L1IgutXxVUCfDIxNfLraQDI+M3e3/NdCXbhohqBNfLrIsVzZqmoT6dmXG0SBLTrmJLxd/CVRLECXcDGFaSC1TmHE0yKg4B0P2uxiy38WoOAePHaptAfHYoVqG7HcxcGc5o+IcfFfgsbQUPoYoSa213BbE78oGucTSwpJTbobFFjNgbQHdvi6g8/Z6Om+vZ8h+VxsQE7T/97UMWFvA+Og0UvIryfDIZBQ4CeXvt8a5IAhAY/RImlJWUaHrPHaolhuXFXHN+8e58qNcbomq5P6t3xG973WePLzPgnnsUG0LiP7f1zJwZzk3LisyctfSOFxOJ4lfLzYToQubxu/KpmpWBFWzInguOokrP8ql7/zDRMxLpFfUabasHwlZNnITbmbgznI6b6+3Bu7/fa2lrW5fF9Ar6jQD1hYwLLaYx5fupdi+EiGok748koa4qa010xKkKWUV2UM7kd6vB7tH9yfpnUFkLzQiZOGWnmgHO9N4oie9ok5bA4YPbkqvqNNc8/5xIuYl8tSaLOLLRXambENXF+PxNJD0ziAanVHhYaEliH1lJD/1iqD0qSsIzu2M/N550TZ3QjvYmS3rR1qDtwdhgpgwnabGMj46zRjQsxJdXYw7P1X1pY0GuaRjkMKxPah5qxuV8y6nct7l1LzVDfdyo6miHexM+ou9mblwKfdv/Y77t37HNe8fbwMQDhIxL5FOU2PZklqLJjUYdU7wWxBuN+ricBAF0KQG6pcNovZpw0fCQao/MEBcu7tSOLYHjnu7EZzbmeDczqyfNokrP8ptMXi4XDnzAJ0n72TIgn1oUoMB4VlpgIjj24I0payi9KkrqHj+Ssth2wM5c38f8p68D2nbHKRtc3h86d42A/eZHsOVMw9Y0nXKJmxDvyS1NA70z8Gz0qh5hNvbzpr6ZYMofzyiBUwLkOVdjfR/eVcao0dSl/d1aHx0GhHzEi0TXDnzAJ2mxtJpaixdp2yypM/0GLrcs5D3Y94ztNDsK7qjuxmzDBBz2rYGqZoVQc1b3dr4yfppk+g8eWeLd91aAxGPrqPbyKV0G7mUiEfXMWdz+nmQ0Jsgn1AbT/SkMXrkeZC6vK9DpU9d0S5I5bzLqf6gq6UV7WBn5q9+zDJBuEQ8us4SE6LLPQvpcs9CjmSW4ndlo1XPNBxWLiE34WbSX+wNapEBEsrfT/njERSO7WGBmDA1b3Wj9KkrSO/Xg1WjBjJl/CT+8sQ8a0BT/eGDhwN0uWchXe94ia07YkE+oSLc3gxyQt2yfiSrRg0E+YRqgRSO7UHh2B4UT7ragqmcdznFk67mp14ROO7txpTxk7AN/bLFgN1GLsU29EvrejiACdG59xQjKgu3GzVP9UwIvcmCVwYb102NmBHVBDFNVDUrgjP39yF98E0E5xox5Dcj5lsDhwOYQObg4dK59xR2RV8D4njEo/0NIEd3dkVfgy9t9HkfMTWSO6pXG63kjupF8aSrqXj+SoJzO1M573KmjJ/Eb0bM5y9PzGPBK4Mp3GKUEFvWj+Q3I+a3AOjcewp/eWKesUQ0T1mz2att7oSU9+F5EE2SqXvpSbKHdrIGNmHCoapmRVgh33LezZ3QNncyloGDnVnwyuA2IFvWj0Q+dplREzu6Wy0r9/KubVvg9pWRpPfrwZn7+1haMSHCxdSM/J4RWWufjiC9Xw/m9PgtN9w0uo1JbrhpNI0njAXTrAIbT/TEvb4LjdEj2641vqQjpPfrQfrgm1qYKHxKlz51BbmjerFj4G2WtAYwtWDKglcGG2ZoXrldu43AWDUrAmnbnLaRVZMayHvyPn7qZThoa38pfeoKap+OIDi3M6tGDeSGm0a3GTT82g03jeaGm0bj3H4d8rHLrN0I93LDpDsG3kb68si2a425hfZTrwjSB9/UBiZcM+YM6ghoyvhJpL/Ym+yFhknc67tYQVF+z3gjc3r8Fuf32zpOFTMeHXpRGDNfMYF2j+7PqlEDWTVqIOkv9rZ8SNvcCff6LlTOu9yK1Okv9mZOj9+S8ehQNKmBDhs17vxU9adeES1gwoHKH49oFyhcwhfKynmXWzOu4vkryR7aieyhnQjl7+84QzNNJGzbxN7uV1gw7WmntYZaLw2mmNdrn44ge2gnztzfx9od7zBnDa9t0pdHtgsTDhRustaaCndwEyLj0aG481PVS9r3FSUJj6eBrConMZHvnodpntrh2gkHCgcLl/TBN7G3+xXGLMlIo0LXjU7ixeoaUZIQ3C7OlTtJya8kJvJddgy8DctvWgGFaylcHPd2Y2/3K5jT47esGjWQrTtiyapy4nI6jUrvUmpfUytFRfmkZ6SxdUcs66dNYsfA2ywNtQBrJeb/dgy8jZjId/kx4YgF4fP6Ln1L3uyhhWvnSGYpOw6lEBP5LuunTWLDAw+x4YGHrAi74YGHWD9tEuunTSIm8l227ohtAyBK0i8/pNDagTVJxuf1YXf7OVfuJKvKMF16RhrpGWkcySwlJb+SrCqn1awRgjqaJP9nO0b/Zxo1v+ahS0ZqKJ9QCX5rJMyhN42aRj6h/udB5BKjiAp+i64uNrJ2M0Vs3rUiy4aU92G42X49iCYZDZjUMoX4ctFIcILfGgVU6E0LwEyCxKP98aWNxpc2GvFof+RjlyHlfdjxWnOxh93tJya5kIWHnDx2qJbnopP4NCmaYvtKC0LL6WYkQps70RA3laaUVbjzU1V7RRn2ijK8BbkWUJsM7VIAog7k8MyuPKtD1AJA/9zQQpYN9/oubFk/kpkLl7J4a0KbtrdZa/vSRrfMWS8GcSSzlGd25TH5VIjptTpR9T5SS+OMsrHZD3RHd7SDnTm1YwSzY2KsTtL46DSei07iSGZpm/tKeR8a5gnf0+vI8zfE5zAstpjptTrvifBJeeZ5LTQDkGXDtbsr0fte59mjDmaWaUyv1ZlZpvH3XJlRcQ6Grj5OTHJhy/t7VhrpwMVAog7kMCrOwcs+nZWaccak2L7S0oLpC6d2jGDJiUyWN8E6FVZqsLwJ5ruwYO5O9jFoUSIb4nPOT+/gtxf3kZjkQobFFreAaHRGGZoQbm+hhWd25fHsUQevHilgbo7bAmoNM2S/i6Grj3Mks9Tolcgn1Hb39MzHuXInw9edZrJd4z3xPISuLrYgCrf0ZOuOWKLzVFLLFDIKmlfr5EJmHMxhfoWvDczkUyELxl5RduFUUZNkIvdm8+BpkZd9eocQPyYc6XDnocpRQ+TebObmuFmptdTK5FMhBqwt4K1vMi4cWTMKnIyKczDZrvFJeWaHEBdrbVc5aphxMIflTR1rJaPA2TFI1IEc7k72tZwdYRCLtyZc6h4MMcmF7WrlwRSRAWsLiNyb3T6Iz+vjmV15jIpztIHwxN/I7JgY4svFS47CHk9DG62Y5hm4s5zx0Wntb0CnlikMiy3m06ToFpFSO9iZnSnbeGZXHkcyS8kocF6SHMksZc7m9AuaJyW/si3IltRaZsfEGNM09KZVs2bEzWV5EyzLlXn1SEG7MuNgTruy5JS73dlzd7IvPMi1BIlJLmRnyjbLJFawar7ZHi5NdrSS9jRyd7KPXlGnzQDXyjSlcYY2mk1SuKUnS05kslI7f9M9/HKgdaoh74nn/cR02NV7M9t2A9A/t/qf2uZOvB/zHvNdxk3Mm0bV+36VzK8wxHTWVutPmEbkE6q1hjQ3/yefCvGeeB7k1SPGlLsUeeubDOtnezJnczpvfZPBuXJnGEjzAqSri9FyulG4pSf3b/3OCvErNQNmxsEczpU70ST5kuWXJc9yiZXemQ3du5N9TK/VedmnW1qZm+M+v3r+gpTS42nA42nA5XRa4vE0hFd8zSDBb63cInvtAAYtSuTuZB+T7ZoFYy7tz+zK6+igQZtHRoGTyL3ZLab4M7vyGB+dxpAF+1i8NaEliLmWyNndsa+MZPi60/T/vpaJhTKT7ZqllZWaoZW3vsnA42m4IMS5cifPRScxN8fNeyK87NOZXqszsdDITa55/3i4dgVb0OPUTG2IR/vjzk9Vt6Qau5R3J/uYWCi3MJEJM2dzOkcyS80Q3WKrPia50IIIX2cmnwrxYIpIr6jTPBed1Mo0apFgpv0NcVMR3C5ESWLO5nS6fV3Ag6fFdmHmV/iYcTCHyL3ZRB3IsSRybzbP7MpjfoWvXYj+39cyZME+c7aEgTQ36smy0RA31dostrv9DF193IIJ9xcTxgSam+O2xAQwg9fMMo2JhTIPnjYgBi1KbC+RPq8REyR8iT9X7rRgWptpvssYLBwqHGB6rc7fc2ULYsh+F4MWJbLjUErH09c8ytcaxNTMCxtyGLC2oIUDT6/VO5TJdkMLJsTAneUMWpTYNotvE0eaj3rKxy6zun2t69mdKdt4fOley4lN35ls11pIOIC51D8XnWQu9xcGUQCteibyscuM5n31TKNqD5fm1H9DfA7PRScxdPVxhsUWMyy22Dq4MGS/i2GxxQxfd9oC2HEopb1WVcdtCU2Sqcv7OmTWpGbRLOV9SCh/P0GPUwvPvDIKnMQkFxK5N5s5m9N5LjqJ56KTeOubDFbvzSQlv7LN1P5FxzZ8Xp918v8SWk5WsWStLbr0a5oLHRdY/+GjPP8vtq7+0yCiJOHz+hDcLlxOJ2bzxeV0Irhdlk/9x0B8Xh9VjhoEt6s5rZTaFU1qQHC7qHLU/PpZ05EGqhw1uJxO0CVESSIlv5KoAznM2ZxufTJgzuZ0og7kkJJfaR1mcjmdVDlqflkc6ahSs1eUWdMzJrmQQYsSrYMJNy4raiHmYQWzD2IC2SvKLpa/dAzi8/qsc6cZBU6GLNjHlTMPcEtUJVMSdd45qRGdp7KxDOvDPu+c1JhxNMgtUZVcOfMAQxbss0K7vaLsQqbq+GCtCbEhPodOU2O58qNcZhwNsrMK4t0Xlp1VMONokCs/yqXT1FgrE7sATPvbJK0hblxWxDsnNWugvc7zcqFry3JlbomqbANzSdskpk9kFDjpOmWTpQnzne6sMgbbWWWYY8kpN0tOuYnOU1v8z9TcOyc1blxWRNcpmwwz6dLFjxr7vD5rY+eO13YSMS+Rh/co1iAby4wBluXKLDnl5rsCD1lVxk7FdwUelpxysyxXbvHcjWUwYb9CxLxE7nhtp7X10spELUHMMiHqQA6dJ+9k8KYaJh1u6ZRLTrnZklrb+hS3lURtSa1lySm39fyNZTAlUWfwpho6T95p1rqtS5LzICapJsmWNkbEBpiSqLMs1/gY3DsntfAuT4tDlkrYtci92bxzUmNjmaG9KYk6I2IDbbTStsBqjhma1EBKfiVdp2xiwNoCHt6jMOmwxjsnNev46KWUkaIksfCQk2W5Mu+c1Jh0WGPCfoUBawvoOmWT1d4Miy3nQczIuXpvJp2mxjJ4Uw0T9hsg09KM6fhcdBIxyYWXJM9FJzHjaJBpaTDpsAEzeFMNnabGGhVec+RtA1LlqAFd4vGley0Q8wZTEnWmpWGdWX3sUC3PHnW0K+b/n0qoZ1oaTEszfCQc5PGle0GXwv0k7PxI87S9EMjMMo35rvMdILPDbErrzlA4iOmw4SBh0/iXgUxLg8mnQvw9V2Zmmdau/D1XtpoxpiYe3qPw8B6FW6IqreOCvwpkWhqMinMwaFEi46PTfrFMXG38HLr6OHe8ttPykXZNYzrr4q0JdJoay4C1BS2cdfCmGuZsTrd6Hv/T5ozZJ7no9L1xWZE1fU0bD193unXx3GESFZNcyIb4nDazaUN8Dh6PkTy1O307CmgT9itM2K9YWnkuOumi26wTV6dZR43NXOXKj3LpPHknEY+us0DaDWiWnwCr92bSdcomBm+q4eE9ShsThTXh2jRn5mxOZ/CmmjYzZkRsgE5TY40Q33bhu/iiF66VcJjh604TuTfbUnnk3myGrzttQZgzZtJhzQrvfabHWGNccNELnz2tfSUcJjxADVhbwIC1BdYsMyOp+fyH9yhWGnAks/TS0gDTV4qK8q2NxU5TY7klqrIFTDhQ6+gZ/hwzdoSbpKgo/9LPj5hnR8yUwEwVw810MRkRG7BSRXPpLyrKv/RUsT2YI5mlLZLnEbEBK1q2lhGxASt5vuO1nZY5ioryL5TJX7icENwuioryjV1rr4+oAzkMWbDvouXEkAX7iDqQg8/rQ5MaLgZxaQWWJslWSWkWWBkFzl9UYP2PvgjFPNrj8/osM/2YcIQfE46QnpFmfL7K7SLocWpBj1Mz6+D0jLQWzzPb3b/6aI8SVnCbvXTTVOZxno6kqCjfKlPNUH4pIP9XPGz/N319UFnrf2iKLGi6LmggqCBoIOi6JuiqIqCrgqIrgqyrgoYu6JpiiK4LKgigCpquCCEdQdVVAU0VdP2iMGW29tplmtbcQNQ1QEXXNDQdQGsWHZBbvdQsKkTQfaiaBJrc/PyLPpQ2zqqbL9U10GV0TUbTZUCyQAoaJPaVinx5RmbVKZnVWRpf56r8WKlQFww2Q4bf8VdMXwsEtfkdGb97xSAb8yRG7df4zYYQ3deEsK2WsK1UsK1U6LIqxJWfKQzcEODVw0GS7KbG1F8Pout6C7WuL5Dpv1PBtlLEFgWXfyHTY61Ery91rvkiwLWfB7h6jcxV/5LoskLF9gl0+tjLI7FesuuxzKnrHeqneQdL143Bjacj6wqg4ZFUph8JYvusCdsXIldvhGvXi/T+SuS6dQrXrZO4fp3Ib76UuH5NiD6fi1z/mcgNnwa5epWMbbHG1StEvsoSjbeoq2i60h6MYNN1XTAhNF1vdlBoVFSG7/Nh+1Ti2o1Brl8v03uDyDVfN3DDVz5u+FKh15cKvdbp9FoHvT5X6PW5wjVr4LrPda6NkugTJdL1EwXbIpkVx5sdGaXZ8S9gGgNIJ6ipPHgghO3TED23h+ixTafXZpmb1ofos0ml+9dw1VcaV3wapMvKIF1WSVz+qULPzxV6faZw9Wc613yq0Xt1iN9Ehei+WMG2QObz03JHDtxsGk07P2XRmZ/hx7ZG5rqtMjdubqTHFonrNov8doPMZRvA9pmPqz8X+MNWhb/tkrg/VuGWaJXLPmmk85Imen6m0+sz6BMlcsNqP9etVujysU63jwIcrwy1N6UFm6Zrgma4KKBxrE7lyq999PnaT58dcMNWjV5bFa7d6sP2lcj/+szP6/FNHK2SqQtpSKqIKItUN2psyJH52yYXtkV+uq9UuP5fMj1XqVy9WuWGFSE6LQgxbHMQv6kVXW92B12wKZouSEjGNNMVJvwgYdugcGOsym+2q/TZqnD9dh3bVz5u3h4guVJtnpJa808zkJlBMMS7SQG6vB/gimUKvVdK9Fmu0nu5zLXLZGzvaWzLDhggmoysqwYIKoKqG+rKqVO5douP62JUfvutxg2xCn1iZTpv0rgpRuF0XQAIgRJElSUURUWWZWRZRpFlgrIKeIEg7yaC7X2FXkslei+XDVkmY1sQ4pFNDaA3hwcdNF0XbGjNZwNQWXZaxrZV5XexMjftFLnpW4ne34rYNvjZUywBQUJqEEkMoEk6oqIgySqipCCKEt6Qis8fRNEaAB+TtijYInV6Lwtx7VKRPstkIj5S6PGBRGFtwFCgApquCDYFTQANXZeZkiARsVPnlu9kfhcr0/cbiYivA4w94DM0oet4VQVJUQiJGiFRIiTKBEMSAX+QhoBIvU/C1SQCfpIKGrl8kZerFitcu0Tkuk9ErlsiYXtDYuMpYyobE0gVbIouC6DiDsgMiwtx406Z/rs0+u6WGPCNSI8tIZbnSoCCEvITkBRkWSMUkAgEJbz+EE2+IA3eAPUNjTR6fNTWSni9PuoFN/d8KtBpkcg1n3jp82GQ3h/6sc33seAHb/P6pYOmCTY0VQCNEkHhrgMhfrdL5k/fafT/XqT/boU+sRI/2r0AhESFYFDCF1TwBSWa/CE8TQHcjQFcDX6cdQGq63w43PWU1AoEmup4emMjtvl+enzop/d7Aa57N4Btvo/Z37jCHBzBpuqaAHDOHWDo/iD99in8+XuZO/er/H6fxsB/h0irDgGqoYGAhOAL0eALUd/oo87TRK2nCUddI3anQKXTTUl1DUVVNXga6nh2mwvb6066L3Bz3btOekU2YXtd5MVNDmuVVtEFm6brAmiUu4OMPODnjv0idx+UGHpQ4q6DEnf928+h0iCg0egN0OgXqW8MUCd4cXm81LgbqHIJlDs9lFd5KK90U1hWQ3GlgLOqlrs/rsQ2q45rFjq57q0yukc6sL3iYc62akBDR0fRNcGmq5oAQYSAyuQEibsPhnjgkMYD8T4ePOTnv/ZrfJrtBTWE4A3ibvRTJ3hx1jdRXddApbOeMoebEruL3Ao3p8vqOVVSR1JuDZkFtbywvgDb0zl0eqmanm+Wct2bFdhmlvP2Po/hH6qIrmiCTdNUAVVElTVeyfTz10My435UGHNE5JGfJIYf1ZiV4kFo8uILBKirD+LwBHC43Dhq6ymurqfAUU9ORS05RSU0NHmQVRW/JCMqOho6354U6DEri04z8+nxWim2fxSx8ZgLEAlJCqoiCzZZUwVZVECDjUVNDD8s8sRRlSmJOs8mwbPHZJ466iO2yI8aDNJU56a8tpGqaicOZx2FVfWcLa8lq7CMBn8IHfAGZQKSik/SQAoBOjEZtdiezqTTS/l0fzmPrFIBNB9CUCcoSYJN0TTBKymgS5TXBXn8pwCTj8lMT1WZmarx+nGR2Rk680+GOFleh9/bgMtZR3V1HYWVLvJKajiTV0pVjRsV8IVEgrLaLApeERSCAAx5/xS2+48zZvlZAmKIQFMTHq+PppAi2DRdFQIyyKIfRImoMz6ePO7lpUyJl08r/PN0iMjTEh9kS6zNEUgp92GvaaDAXstZh4DLG0JoChAMyviDMn5Jxi/K+EISIVnFr0h4JWPZ33a8mNteSCI6vhpZbMDhaqChyYfHHxRsmhYURBECoRDoMvkukVfTFN7IlHk7W+aDXIlVOSHW5ob4qhi2F4v8WNLIiSov5wLgkVVERSUYMqa2LyTjF1UCkkpQ1vGLImJAxCsai2SdKFJQ6aG0ooqK+gBuVxOCTxBsuq4IkqQSFCVCkgyqzg8lXt5J9/H+WViVJ7G+KMSOEoVdJSp77DJxdRrH3Rq5goLDJyMERRqCIt6QbPiHqBAQFSRJJSCrhGSZJklDUs/nIefsNRRXe3DWefE0NjUf21BURFEiGDRWVH9I5Nu8Rt7Pk/lXocbWIpFvKzT2VSr8YJdIcEqk1Svke2TsPhV3SMYTEmkISngDCr6QTFBSCUkqQUnFL2kEJUNLflFF1aGuyUepow6HuxG34DdyVkVRkCQFUVLxBWR0ScEfFPmuuIG1hTIxpSr/rpA46FBIqJHJdGmcqVPJa1Co9MrUBiTcQQlPQKYhoNAUUvCJCn5JJSApBCTZEr8oEVJU/IpKiaOOmnov9Q1+QyOqqiErGqKiIYk6/mAATQ4QalRItPvZU+EnvkrmxxqJRJdIVp1KTr1GQaNChVei2idTE9BwBRTqAzKeoEyjKNMkKvglhaCkNAMZogAeX4DS6npcDQE8jYHmM0aajqLqyLJOSNbwSTJev0woEKCxyU9OdZCEkgAJ1UGSBYWsBo3cRihq0qj0KVT5ZBwBjdqQRn1IRhBVGiWVRlklqOiIikZQ1hAV4ytjJE2n0ummqt6LU/AjNAYEm64jaBqoqo6iaEiKhiirBESVhkAQr9eH0ChSUu3nVGkdGY4mUmt8ZLoC5DWoFDUplHpVKnw6VT6ZWn+IuqCEJ6TQEFINzUgSflXFJ8nUe304XALVdQ3UNwaob/TT5A0ZILoO4TCyrBKSZHxBGcEfxNPgpdETwO32U+ZoIKesnrPlHrLtbn6urCfPXk+B3U2R3cO5qgbOVTVQUilwrkKgtEqguLKe4sp6yhwNlNg9VLkEhKYgjd4QTX6RYFA+X2Dpuo6maaiqiqqqKIqGKKn4QwrekERjIIC70YenMUBjk0S9EKK23our3ovb48Xj8SI0BfD4ROq9IdyNQeoa/Lg8AZxuPzV1PuobRASfguAN0egP4Q1KBEMykqwKNkAxMnpDNM1oSxhQGrKiI6oqTapIkyTiDYUIiDLBkEwoICOGjHghKxqKqqCoEooqEVJFgkqIkBIiKIsEpBB+MYA/FMAXkgiICiHRmK2KoilWo6bZRIKu61bjRdd1QdEQVBVBkzRBlVRBFhVBVTRBUXRBknVB1hAUECQQNF0XUHVB13RB0XRBVDRBUjRBUTVBUlRBlBRBlGQhJGuCJOuCouiCpuqCqqpl/7Eemqor5HnS2Ja/hPezpvCP1PuYlfo3vvo5EnfA0baH9qs+CKZpBIIh7DUuyuw1lNprqHDU4mnwoqoamq5xyn2YVTkv8cKJO3n+TH+eTB7Ao/H9eSr+TnbmrfyfgdiddZzKKaK0yklhuYN6oWVfvabay+6Tu3gzaSJPpPZm9E9XMmnvH1n60wKSanZypuEg35WuZlrCMLb9vPSXgzicdWTkFLX7vya5Dq/spk62s8v1AW+cu53ns29kSd6z/Fi9mZ/L8tpqVFfZeHYxBe7MSwdJy85v8Xd1oJwDFRtZlTeTD88+wcKsMSzMGsv8rL8wNbMnc7LuJN6xg6AcsF6TW1xBkzfQct9P8pDrSkfT1QuDKKrKz8UV1t+V3kKi89/m1YyhvHlyMPOz/ouFZ4fwYe59fJAzjLfO3s66wuep8p7jbF0iUTkzOe76/rzZ6jxUVteGtch06gL2C4PIikJFtcv6e3/ZeuamDOHNU//NivwxfFY8jnXlE/iyYiKflz/Eh4WD2Gv/CL/YQIJjI2+dvJvXTt7FtJS+LPt5OvVBY383KEoUlFaGzSz5wqb5ubC0WSsyG3PfZUbKnXzw8wOsKX6EdWUT+NI+nq8cY1nrGMnikjuJd0Xhld1sr3iTt37+IyuLHmZN0WMszxnPzLSBvJnxMMWNPxv7vUITLrdw8VlzMswnNud+xD+O3cGy3LF8ce5R1pZN4IuKsXzlGM0X1SP4uPJ2jgpraJAcfFb+CJHnbuOz8pF8UT6OL0om8nnRJFblPcrLaXfxxolROHzGd2idq7xIHBEavTQFQwAcLNvMP5Lu5JOcsawpmsRnJROIKnuYtVWjWVP9Vz6q7McRz0pUTSa2Zh6LSgeytOJPfGa/j3UVY1lTMoFPz01kdcEjLM95hNmp/8UHmU+j6MYnlrJyz3UMknHW0IbDW8rLyfexIGs4nxU8zqqi8Xx07gGiKkfyheN+ltnvJEFYGdYOFWlUqjniWcGK8iFElQ1jTek4Pi2awOqCR1iZ9wgfnx3Hs4l9+aHc+BqH2voGRFFqC+JpaEKSjOR2Y84iZqX8majcx1ieN57Xc+/hvXPD+aziAZaX30VGY0yH0/1s00E+KR7KquL7+ezceFbnT2BFzkSW5Uzg7VP38UbKQ3hCdc1aKWoLktHsG06/nbnJ9/H+6VGsyJnIC9l38kreMNaUPsKSkkHsdy26aABMcK3lw4L/5l9FY1mdP56lOeP55Ox4Psh+mOeT7+BAyUZj17O8qiWIKMkUlNoBOFQaw4zkQSw+M5bZp+7in7mPsKnkFVade4DPSsfTJNVeFCSk+lhbPIVl+Q+wMnccS8+OY/GZsXxwZjTTj9/OkqwXACi3O/H5A+dBKhy1lFQac33t2bf5R/KdvJnxFxadnkSyYzuf5j3BssIR/Kt4DBvLp/NF2dOsqXiSNRVPsKbyCeNnxZN8XjaFz4ufJrr4Bf5V8Agr8h5iWc5YPs4ey4enR/P+6YeYnfZn3kh9CAUfqgz2Gtd5kLOFpZTYjUMHH516jmlJA3jjxHCO2XexteBtFpwZyqqC0awo+huLCv7Eu4W38V7x73mvtD/vl/Xl/bJ+vFfye94tuo2F+X/g3dw/szT/b6zIHcMnZ0fz0ZmHWXT6ISKzRvJq5mBeSh5MSeNZyzyyrBggWTlFlNsNssiMKYz9oQe7i/9FmmM/r6bezZKfx7Is5yGW5f+NFYUjWHXuflaXDmN12V+JKhtGVNkwVpX9lZXFw1lRNILl+Q/ySc6DfHRmFIuyRhF5ciRvZ/6NNzPvZ3baIJ5N+AM/1xsfXcg9V47XH2wLMidpFE/9eAcVQg7Lsp7j9fShfHTmIT4+M4rIrKG8ljGAeSf78eaZfszP7sc/z/bln9n9mH+mH29m9eO1jP7MPfF7ZibfxvSE3zP1UD+eiruVxw/cxIT9fRj+764Mje3M6bqjAOQVl+MPhgyQvHPllFQapnkhfgRf5y7haNV3PJvwe945+QDvnnyAf2bcQ0zR22S7fySzbj+Z7n2cdO/jZP1eTtbvI9O9j8y6fWS49pHm3Edq9T6OV+0luXIPRyt2k1C+i/jybzhYupUfSrfjV40wX1zhQNN0A8RR66bEbjjr5p+Xc9IRz9snJvJ88h94O/N+3s64j1dS7mJLXuT/v0e/vT6qa93nnVXXdXLOlRtJi6qSWLmL8Yd682rGvcxLG8qbJ4byRuoQXj56L+UNuRcdoDHk5kDJNvaXbuZA2Rb2l21hX9nX7C3byNaCKJKr4pqnbw3+QLBlQDttxn4dPsh4hseP3sjcjP/m5dRBvJYymNdTBjMtvh8rT865KMja0wsZvqsr4/f3ZNyBnjx88CpGxV3BiAM2bt5iY8PPKwz/KKlsG1lDooTgCRJAYPKR/jyb2pcZaQOZdfyPzDn+J145/l/MSfojU364lW05yzuE2F30FU/80JcZSQN5+fifmH38Tmam3MGM1Dt4LOE6pv90DyHFCGLZ+SXtL3pn88rJCR5hbPy1TEq6jqnJv2XGsduZdfwPzD52By8n/5FZSX9g8sGbeDflGU7VHMUTqKMhVM/Z2hMsSZ/JY3G38I/E25l77I/MOv4HZhy/nRkptzE1+Rbu+beNhMrvjLEKSi+cj0T+8AaPZfTi2eQ/8Gj89fz96C3MSB7AjOTfMzPpNmYn3c7MowN4/IdrmXKoPy8l3MtLP/2Fpw7fxiMHr+HFxH7MTrqNmUm/56XkAbyY3I/pyb/jr/tsRJ542hqnOGydaRdkxv6J/DXBxvflX/Fd0Rru2W3jmYTrmZnUnxlJ/ZhxtB+zjg5g1tH+vJBwM1Pjr+fZ+Ot5PuFmZiX2Y9ZR43kvJfXlpeR+PJ90M3/da2Nm4gME5MZ2c5F2QV5OeYA/7rZxrOYgANE/f8S933ViTFxXZiX1ZfbRvsxK7MusxFuZnXgrs8JkZuKtzEi8lZlHf8espL48Gd+Lu3fbeDVpLA1BY+kvc7T7ZTktQUQlyLQjg/nzv20cyo+zrsdX7OKR/bcybLeNp368hpd+uok5ib9lbuKtzfI75ib+jtmJv2PGT7fwfMJveOj7zty/O4JPs+YjKsYUdTc04Wloav/YRusLz/04lAeTIsgsPENewfnc0is1EH32Qx47MICH913F+O//F+O/t/H4wW7877gIHtnfhXHfd2Hs91cyZl9v3k19lgLPaev15TV1NDR6Oz4/0vrC26ceYVhcL45X/GB4d2Eljf7Q+cJI9pHqiGPVqVeZd+wRZicOZ0bCvbyS9DAfpD3PnnNfUuO3ny9NVI2T+eVI8oVPGrUB2ZsfzX1HehJTtMK6FgyJZOYW0+gXf1EIz8wro9LhvKTn2lrugkMoFOS5n/7C0APXYK8tb3GepMrh5HB8Cmknz5JbXEpBSQVlFbVU2N0UlVWRW1RK1s95/JCQzMkzPyPLMpqm4ff7CQQChEIhJElCURQ0TcPsVOm6fn6tCT+oUOkq4bGE27n/qzv4KeMIwVCQQCBAbV0ttXW1VFRWkJ19lrS0DJKSj5F4NInk5OOcPHmK/Px8amtrcbvd1NTU4HQ6cbvdNDU1WTCyLKOqaguYDmvfgNzE4bIYdpWv4UT5EezuMkQl9B877PT/DQC7cLwx8LR3hQAAAABJRU5ErkJggg==) no-repeat;padding-left:40px}\r\n        .browser .browser-firefox{background-position:0 -34px}\r\n        .browser .browser-ie{background-position:0 -68px;margin-left:0px}\r\n        .browser .browser-360{background-position:0 -170px;margin-left: -27px}\r\n    </style>\r\n</head>\r\n<body style=\"margin-top:50px\">\r\n<h1>请升级您的浏览器，以便我们更好的为您提供服务！</h1>\r\n<p>您正在使用 Internet Explorer 的早期版本（IE11以下版本或使用该内核的浏览器）。这意味着在升级浏览器前，您将无法访问此网站。</p>\r\n<hr>\r\n<h2>请注意：微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束</h2>\r\n<p>自 2016 年 1 月 12 日起，Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新，您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击，它们可以窃取或损害您的业务数据和信息。请参阅 <a href=\"https://www.microsoft.com/zh-cn/WindowsForBusiness/End-of-IE-support\">微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明</a> 。</p>\r\n<hr>\r\n<h2>您可以选择更先进的浏览器</h2>\r\n<p>推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。</p>\r\n<ul class=\"browser\">\r\n    <li class=\"browser-chrome\"><a href=\"https://www.google.cn/chrome/browser/desktop/index.html?hl=zh-CN&standalone=1\"> 谷歌浏览器<span>Google Chrome</span></a></li>\r\n    <li class=\"browser-firefox\"><a href=\"https://www.mozilla.org/zh-CN/firefox/new/\"> 火狐浏览器<span>Mozilla Firefox</span></a></li>\r\n    <li class=\"browser-ie\"><a href=\"https://windows.microsoft.com/zh-cn/internet-explorer/download-ie\"> IE 11 浏览器<span>Internet Explorer</span></a></li>\r\n    <li class=\"browser-360\"><a href=\"http://se.360.cn/\"> 360安全浏览器<span>360 Chrome</span></a></li>\r\n    <div class=\"clean\"></div>\r\n</ul>\r\n<hr>\r\n</body>\r\n</html>"
  },
  {
    "path": "front/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n  <meta charset=\"utf-8\">\r\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\r\n  <meta name=\"renderer\" content=\"webkit\">\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\">\r\n  <link rel=\"icon\" href=\"/favicon.ico\">\r\n  <title>carole管理系统</title>\r\n  <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->\r\n  <style>\r\n    html,\r\n    body,\r\n    #app {\r\n      height: 100%;\r\n      margin: 0px;\r\n      padding: 0px;\r\n    }\r\n\r\n    .chromeframe {\r\n      margin: 0.2em 0;\r\n      background: #ccc;\r\n      color: #000;\r\n      padding: 0.2em 0;\r\n    }\r\n\r\n    #loader-wrapper {\r\n      position: fixed;\r\n      top: 0;\r\n      left: 0;\r\n      width: 100%;\r\n      height: 100%;\r\n      z-index: 999999;\r\n      background-image: url(\"/assets/bg.jpg\");\r\n      background-size: cover;\r\n    }\r\n\r\n    .cover {\r\n      position: absolute;\r\n      top: 0;\r\n      right: 0;\r\n      bottom: 0;\r\n      left: 0;\r\n      z-index: 0;\r\n      display: block;\r\n      background-color: rgba(60, 91, 147, 0.6);\r\n      background-image: -webkit-linear-gradient(-410deg, rgba(61, 66, 96, 0.6) 20%, rgba(21, 23, 34, 0.8));\r\n      background-image: linear-gradient(140deg, rgba(61, 66, 96, 0.6) 20%, rgba(21, 23, 34, 0.8));\r\n    }\r\n\r\n    #loader {\r\n      display: block;\r\n      position: relative;\r\n      left: 50%;\r\n      top: 50%;\r\n      width: 150px;\r\n      height: 150px;\r\n      margin: -75px 0 0 -75px;\r\n      border-radius: 50%;\r\n      border: 3px solid transparent;\r\n      border-top-color: #FFF;\r\n      -webkit-animation: spin 2s linear infinite;\r\n      -ms-animation: spin 2s linear infinite;\r\n      -moz-animation: spin 2s linear infinite;\r\n      -o-animation: spin 2s linear infinite;\r\n      animation: spin 2s linear infinite;\r\n      z-index: 1001;\r\n    }\r\n\r\n    #loader:before {\r\n      content: \"\";\r\n      position: absolute;\r\n      top: 5px;\r\n      left: 5px;\r\n      right: 5px;\r\n      bottom: 5px;\r\n      border-radius: 50%;\r\n      border: 3px solid transparent;\r\n      border-top-color: #FFF;\r\n      -webkit-animation: spin 3s linear infinite;\r\n      -moz-animation: spin 3s linear infinite;\r\n      -o-animation: spin 3s linear infinite;\r\n      -ms-animation: spin 3s linear infinite;\r\n      animation: spin 3s linear infinite;\r\n    }\r\n\r\n    #loader:after {\r\n      content: \"\";\r\n      position: absolute;\r\n      top: 15px;\r\n      left: 15px;\r\n      right: 15px;\r\n      bottom: 15px;\r\n      border-radius: 50%;\r\n      border: 3px solid transparent;\r\n      border-top-color: #FFF;\r\n      -moz-animation: spin 1.5s linear infinite;\r\n      -o-animation: spin 1.5s linear infinite;\r\n      -ms-animation: spin 1.5s linear infinite;\r\n      -webkit-animation: spin 1.5s linear infinite;\r\n      animation: spin 1.5s linear infinite;\r\n    }\r\n\r\n\r\n    @-webkit-keyframes spin {\r\n      0% {\r\n        -webkit-transform: rotate(0deg);\r\n        -ms-transform: rotate(0deg);\r\n        transform: rotate(0deg);\r\n      }\r\n\r\n      100% {\r\n        -webkit-transform: rotate(360deg);\r\n        -ms-transform: rotate(360deg);\r\n        transform: rotate(360deg);\r\n      }\r\n    }\r\n\r\n    @keyframes spin {\r\n      0% {\r\n        -webkit-transform: rotate(0deg);\r\n        -ms-transform: rotate(0deg);\r\n        transform: rotate(0deg);\r\n      }\r\n\r\n      100% {\r\n        -webkit-transform: rotate(360deg);\r\n        -ms-transform: rotate(360deg);\r\n        transform: rotate(360deg);\r\n      }\r\n    }\r\n\r\n    #loader-wrapper .loader-section {\r\n      position: fixed;\r\n      top: 0;\r\n      width: 51%;\r\n      height: 100%;\r\n      z-index: 1000;\r\n      -webkit-transform: translateX(0);\r\n      -ms-transform: translateX(0);\r\n      transform: translateX(0);\r\n\r\n    }\r\n\r\n    #loader-wrapper .loader-section.section-left {\r\n      left: 0;\r\n    }\r\n\r\n    #loader-wrapper .loader-section.section-right {\r\n      right: 0;\r\n    }\r\n\r\n\r\n    .loaded #loader-wrapper .loader-section.section-left {\r\n      -webkit-transform: translateX(-100%);\r\n      -ms-transform: translateX(-100%);\r\n      transform: translateX(-100%);\r\n      -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);\r\n      transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);\r\n    }\r\n\r\n    .loaded #loader-wrapper .loader-section.section-right {\r\n      -webkit-transform: translateX(100%);\r\n      -ms-transform: translateX(100%);\r\n      transform: translateX(100%);\r\n      -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);\r\n      transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);\r\n    }\r\n\r\n    .loaded #loader {\r\n      opacity: 0;\r\n      -webkit-transition: all 0.3s ease-out;\r\n      transition: all 0.3s ease-out;\r\n    }\r\n\r\n    .loaded #loader-wrapper {\r\n      visibility: hidden;\r\n      -webkit-transform: translateY(-100%);\r\n      -ms-transform: translateY(-100%);\r\n      transform: translateY(-100%);\r\n      -webkit-transition: all 0.3s 1s ease-out;\r\n      transition: all 0.3s 1s ease-out;\r\n    }\r\n\r\n    .no-js #loader-wrapper {\r\n      display: none;\r\n    }\r\n\r\n    .no-js h1 {\r\n      color: #222222;\r\n    }\r\n\r\n    #loader-wrapper .load_title {\r\n      font-family: 'Open Sans';\r\n      color: #FFF;\r\n      font-size: 19px;\r\n      width: 100%;\r\n      text-align: center;\r\n      z-index: 9999999999999;\r\n      position: absolute;\r\n      top: 60%;\r\n      opacity: 1;\r\n      line-height: 30px;\r\n    }\r\n\r\n    #loader-wrapper .load_title span {\r\n      font-weight: normal;\r\n      font-style: italic;\r\n      font-size: 13px;\r\n      color: #FFF;\r\n      opacity: 0.5;\r\n    }\r\n  </style>\r\n</head>\r\n\r\n<body>\r\n  <div id=\"app\">\r\n    <div id=\"loader-wrapper\">\r\n      <div class=\"cover\"></div>\r\n      <div id=\"loader\"></div>\r\n      <div class=\"loader-section section-left\"></div>\r\n      <div class=\"loader-section section-right\"></div>\r\n      <div class=\"load_title\">正在加载系统资源，请耐心等待</div>\r\n    </div>\r\n  </div>\r\n  <script type=\"module\" src=\"/src/main.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "front/package.json",
    "content": "{\r\n  \"name\": \"carole-admin\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"carole管理系统\",\r\n  \"license\": \"MIT\",\r\n  \"type\": \"module\",\r\n  \"scripts\": {\r\n    \"dev\": \"vite\",\r\n    \"build:prod\": \"vite build\",\r\n    \"build:stage\": \"vite build --mode staging\",\r\n    \"preview\": \"vite preview\"\r\n  },\r\n  \"dependencies\": {\r\n    \"@element-plus/icons-vue\": \"2.3.1\",\r\n    \"@guolao/vue-monaco-editor\": \"^1.5.5\",\r\n    \"@vueup/vue-quill\": \"1.2.0\",\r\n    \"@vueuse/core\": \"10.6.1\",\r\n    \"axios\": \"0.27.2\",\r\n    \"echarts\": \"5.4.3\",\r\n    \"element-plus\": \"2.4.3\",\r\n    \"file-saver\": \"2.0.5\",\r\n    \"fuse.js\": \"6.6.2\",\r\n    \"highlight.js\": \"^11.9.0\",\r\n    \"js-cookie\": \"3.0.5\",\r\n    \"jsencrypt\": \"3.3.2\",\r\n    \"nprogress\": \"0.2.0\",\r\n    \"pinia\": \"2.1.7\",\r\n    \"vue\": \"3.3.9\",\r\n    \"vue-cropper\": \"1.1.1\",\r\n    \"vue-router\": \"4.2.5\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"@vitejs/plugin-vue\": \"4.5.0\",\r\n    \"@vue/compiler-sfc\": \"3.3.9\",\r\n    \"sass\": \"1.69.5\",\r\n    \"unplugin-auto-import\": \"0.17.1\",\r\n    \"unplugin-vue-setup-extend-plus\": \"1.0.0\",\r\n    \"vite\": \"5.0.4\",\r\n    \"vite-plugin-compression\": \"0.5.1\",\r\n    \"vite-plugin-svg-icons\": \"2.0.1\"\r\n  }\r\n}\r\n"
  },
  {
    "path": "front/src/App.vue",
    "content": "<template>\r\n  <router-view />\r\n</template>\r\n\r\n<script setup>\r\nimport useSettingsStore from '@/store/modules/settings'\r\nimport { handleThemeStyle } from '@/utils/theme'\r\n\r\nonMounted(() => {\r\n  nextTick(() => {\r\n    // 初始化主题样式\r\n    handleThemeStyle(useSettingsStore().theme)\r\n  })\r\n})\r\n</script>\r\n"
  },
  {
    "path": "front/src/api/login.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 登录方法\r\nexport function login(username, password, code, uuid) {\r\n  const data = {\r\n    username,\r\n    password,\r\n    code,\r\n    uuid\r\n  }\r\n  return request({\r\n    url: '/login',\r\n    headers: {\r\n      isToken: false,\r\n      repeatSubmit: false\r\n    },\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n\r\n// 获取用户详细信息\r\nexport function getInfo() {\r\n  return request({\r\n    url: '/getInfo',\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 退出方法\r\nexport function logout() {\r\n  return request({\r\n    url: '/logout',\r\n    method: 'post'\r\n  })\r\n}\r\n\r\n// 获取验证码\r\nexport function getCodeImg() {\r\n  return request({\r\n    url: '/captchaImage',\r\n    headers: {\r\n      isToken: false\r\n    },\r\n    method: 'get',\r\n    timeout: 20000\r\n  })\r\n}"
  },
  {
    "path": "front/src/api/menu.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 获取路由\r\nexport const getRouters = () => {\r\n  return request({\r\n    url: '/getRouters',\r\n    method: 'get'\r\n  })\r\n}"
  },
  {
    "path": "front/src/api/monitor/cache.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询缓存详细\r\nexport function getCache() {\r\n  return request({\r\n    url: '/monitor/cache',\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 查询缓存名称列表\r\nexport function listCacheName() {\r\n  return request({\r\n    url: '/monitor/cache/getNames',\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 查询缓存键名列表\r\nexport function listCacheKey(cacheName) {\r\n  return request({\r\n    url: '/monitor/cache/getKeys/' + cacheName,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 查询缓存内容\r\nexport function getCacheValue(cacheName, cacheKey) {\r\n  return request({\r\n    url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 清理指定名称缓存\r\nexport function clearCacheName(cacheName) {\r\n  return request({\r\n    url: '/monitor/cache/clearCacheName/' + cacheName,\r\n    method: 'delete'\r\n  })\r\n}\r\n\r\n// 清理指定键名缓存\r\nexport function clearCacheKey(cacheKey) {\r\n  return request({\r\n    url: '/monitor/cache/clearCacheKey/' + cacheKey,\r\n    method: 'delete'\r\n  })\r\n}\r\n\r\n// 清理全部缓存\r\nexport function clearCacheAll() {\r\n  return request({\r\n    url: '/monitor/cache/clearCacheAll',\r\n    method: 'delete'\r\n  })\r\n}\r\n"
  },
  {
    "path": "front/src/api/monitor/logininfor.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询登录日志列表\r\nexport function list(query) {\r\n  return request({\r\n    url: '/monitor/logininfor/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 删除登录日志\r\nexport function delLogininfor(infoId) {\r\n  return request({\r\n    url: '/monitor/logininfor/' + infoId,\r\n    method: 'delete'\r\n  })\r\n}\r\n\r\n// 解锁用户登录状态\r\nexport function unlockLogininfor(userName) {\r\n  return request({\r\n    url: '/monitor/logininfor/unlock/' + userName,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 清空登录日志\r\nexport function cleanLogininfor() {\r\n  return request({\r\n    url: '/monitor/logininfor/clean',\r\n    method: 'delete'\r\n  })\r\n}\r\n"
  },
  {
    "path": "front/src/api/monitor/online.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询在线用户列表\r\nexport function list(query) {\r\n  return request({\r\n    url: '/monitor/online/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 强退用户\r\nexport function forceLogout(tokenId) {\r\n  return request({\r\n    url: '/monitor/online/' + tokenId,\r\n    method: 'delete'\r\n  })\r\n}\r\n"
  },
  {
    "path": "front/src/api/monitor/server.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 获取服务信息\r\nexport function getServer() {\r\n  return request({\r\n    url: '/monitor/server',\r\n    method: 'get'\r\n  })\r\n}"
  },
  {
    "path": "front/src/api/system/config.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询参数列表\r\nexport function listConfig(query) {\r\n  return request({\r\n    url: '/system/config/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询参数详细\r\nexport function getConfig(configId) {\r\n  return request({\r\n    url: '/system/config/' + configId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 根据参数键名查询参数值\r\nexport function getConfigKey(configKey) {\r\n  return request({\r\n    url: '/system/config/configKey/' + configKey,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 新增参数配置\r\nexport function addConfig(data) {\r\n  return request({\r\n    url: '/system/config',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 修改参数配置\r\nexport function updateConfig(data) {\r\n  return request({\r\n    url: '/system/config',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 删除参数配置\r\nexport function delConfig(configId) {\r\n  return request({\r\n    url: '/system/config/' + configId,\r\n    method: 'delete'\r\n  })\r\n}\r\n\r\n// 刷新参数缓存\r\nexport function refreshCache() {\r\n  return request({\r\n    url: '/system/config/refreshCache',\r\n    method: 'delete'\r\n  })\r\n}\r\n\r\n\r\n\r\n/** 获取所有 Filekey 列表 */\r\nexport function getKeys() {\r\n  return request({\r\n    url: '/system/config/getFileKeys',\r\n    method: 'get',\r\n  })\r\n}\r\n\r\n/** 根据 key 获取文件数据 */\r\nexport function getInfoByKey(key) {\r\n  return request({\r\n    url: '/system/config/getConfigInfo',\r\n    method: 'get',\r\n    params: { key }\r\n  })\r\n}\r\n\r\n/** 根据 key 修改文件数据 */\r\nexport function updateInfoByKey(key, data) {\r\n  return request({\r\n    url: '/system/config/serverConfig',\r\n    method: 'post',\r\n    params: { key },\r\n    data\r\n  })\r\n}"
  },
  {
    "path": "front/src/api/system/dept.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询部门列表\r\nexport function listDept(query) {\r\n  return request({\r\n    url: '/system/dept/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询部门列表（排除节点）\r\nexport function listDeptExcludeChild(deptId) {\r\n  return request({\r\n    url: '/system/dept/list/exclude/' + deptId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 查询部门详细\r\nexport function getDept(deptId) {\r\n  return request({\r\n    url: '/system/dept/' + deptId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 新增部门\r\nexport function addDept(data) {\r\n  return request({\r\n    url: '/system/dept',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 修改部门\r\nexport function updateDept(data) {\r\n  return request({\r\n    url: '/system/dept',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 删除部门\r\nexport function delDept(deptId) {\r\n  return request({\r\n    url: '/system/dept/' + deptId,\r\n    method: 'delete'\r\n  })\r\n}"
  },
  {
    "path": "front/src/api/system/dict/data.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询字典数据列表\r\nexport function listData(query) {\r\n  return request({\r\n    url: '/system/dict/data/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询字典数据详细\r\nexport function getData(dictCode) {\r\n  return request({\r\n    url: '/system/dict/data/' + dictCode,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 根据字典类型查询字典数据信息\r\nexport function getDicts(dictType) {\r\n  return request({\r\n    url: '/system/dict/data/type/' + dictType,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 新增字典数据\r\nexport function addData(data) {\r\n  return request({\r\n    url: '/system/dict/data',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 修改字典数据\r\nexport function updateData(data) {\r\n  return request({\r\n    url: '/system/dict/data',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 删除字典数据\r\nexport function delData(dictCode) {\r\n  return request({\r\n    url: '/system/dict/data/' + dictCode,\r\n    method: 'delete'\r\n  })\r\n}\r\n"
  },
  {
    "path": "front/src/api/system/dict/type.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询字典类型列表\r\nexport function listType(query) {\r\n  return request({\r\n    url: '/system/dict/type/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询字典类型详细\r\nexport function getType(dictId) {\r\n  return request({\r\n    url: '/system/dict/type/' + dictId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 新增字典类型\r\nexport function addType(data) {\r\n  return request({\r\n    url: '/system/dict/type',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 修改字典类型\r\nexport function updateType(data) {\r\n  return request({\r\n    url: '/system/dict/type',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 删除字典类型\r\nexport function delType(dictId) {\r\n  return request({\r\n    url: '/system/dict/type/' + dictId,\r\n    method: 'delete'\r\n  })\r\n}\r\n\r\n// 刷新字典缓存\r\nexport function refreshCache() {\r\n  return request({\r\n    url: '/system/dict/type/refreshCache',\r\n    method: 'delete'\r\n  })\r\n}\r\n\r\n// 获取字典选择框列表\r\nexport function optionselect() {\r\n  return request({\r\n    url: '/system/dict/type/optionselect',\r\n    method: 'get'\r\n  })\r\n}\r\n"
  },
  {
    "path": "front/src/api/system/menu.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询菜单列表\r\nexport function listMenu(query) {\r\n  return request({\r\n    url: '/system/menu/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询菜单详细\r\nexport function getMenu(menuId) {\r\n  return request({\r\n    url: '/system/menu/' + menuId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 查询菜单下拉树结构\r\nexport function treeselect() {\r\n  return request({\r\n    url: '/system/menu/treeselect',\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 根据角色ID查询菜单下拉树结构\r\nexport function roleMenuTreeselect(roleId) {\r\n  return request({\r\n    url: '/system/menu/roleMenuTreeselect/' + roleId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 新增菜单\r\nexport function addMenu(data) {\r\n  return request({\r\n    url: '/system/menu',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 修改菜单\r\nexport function updateMenu(data) {\r\n  return request({\r\n    url: '/system/menu',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 删除菜单\r\nexport function delMenu(menuId) {\r\n  return request({\r\n    url: '/system/menu/' + menuId,\r\n    method: 'delete'\r\n  })\r\n}"
  },
  {
    "path": "front/src/api/system/notice.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询公告列表\r\nexport function listNotice(query) {\r\n  return request({\r\n    url: '/system/notice/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询公告详细\r\nexport function getNotice(noticeId) {\r\n  return request({\r\n    url: '/system/notice/' + noticeId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 新增公告\r\nexport function addNotice(data) {\r\n  return request({\r\n    url: '/system/notice',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 修改公告\r\nexport function updateNotice(data) {\r\n  return request({\r\n    url: '/system/notice',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 删除公告\r\nexport function delNotice(noticeId) {\r\n  return request({\r\n    url: '/system/notice/' + noticeId,\r\n    method: 'delete'\r\n  })\r\n}"
  },
  {
    "path": "front/src/api/system/post.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询岗位列表\r\nexport function listPost(query) {\r\n  return request({\r\n    url: '/system/post/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询岗位详细\r\nexport function getPost(postId) {\r\n  return request({\r\n    url: '/system/post/' + postId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 新增岗位\r\nexport function addPost(data) {\r\n  return request({\r\n    url: '/system/post',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 修改岗位\r\nexport function updatePost(data) {\r\n  return request({\r\n    url: '/system/post',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 删除岗位\r\nexport function delPost(postId) {\r\n  return request({\r\n    url: '/system/post/' + postId,\r\n    method: 'delete'\r\n  })\r\n}\r\n"
  },
  {
    "path": "front/src/api/system/role.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询角色列表\r\nexport function listRole(query) {\r\n  return request({\r\n    url: '/system/role/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询角色详细\r\nexport function getRole(roleId) {\r\n  return request({\r\n    url: '/system/role/' + roleId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 新增角色\r\nexport function addRole(data) {\r\n  return request({\r\n    url: '/system/role',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 修改角色\r\nexport function updateRole(data) {\r\n  return request({\r\n    url: '/system/role',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 角色数据权限\r\nexport function dataScope(data) {\r\n  return request({\r\n    url: '/system/role/dataScope',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 角色状态修改\r\nexport function changeRoleStatus(roleId, status) {\r\n  const data = {\r\n    roleId,\r\n    status\r\n  }\r\n  return request({\r\n    url: '/system/role/changeStatus',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 删除角色\r\nexport function delRole(roleId) {\r\n  return request({\r\n    url: '/system/role/' + roleId,\r\n    method: 'delete'\r\n  })\r\n}\r\n\r\n// 查询角色已授权用户列表\r\nexport function allocatedUserList(query) {\r\n  return request({\r\n    url: '/system/role/authUser/allocatedList',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询角色未授权用户列表\r\nexport function unallocatedUserList(query) {\r\n  return request({\r\n    url: '/system/role/authUser/unallocatedList',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 取消用户授权角色\r\nexport function authUserCancel(data) {\r\n  return request({\r\n    url: '/system/role/authUser/cancel',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 批量取消用户授权角色\r\nexport function authUserCancelAll(data) {\r\n  return request({\r\n    url: '/system/role/authUser/cancelAll',\r\n    method: 'put',\r\n    params: data\r\n  })\r\n}\r\n\r\n// 授权用户选择\r\nexport function authUserSelectAll(data) {\r\n  return request({\r\n    url: '/system/role/authUser/selectAll',\r\n    method: 'put',\r\n    params: data\r\n  })\r\n}\r\n\r\n// 根据角色ID查询部门树结构\r\nexport function deptTreeSelect(roleId) {\r\n  return request({\r\n    url: '/system/role/deptTree/' + roleId,\r\n    method: 'get'\r\n  })\r\n}\r\n"
  },
  {
    "path": "front/src/api/system/user.js",
    "content": "import request from '@/utils/request'\r\nimport { parseStrEmpty } from \"@/utils/ruoyi\";\r\n\r\n// 查询用户列表\r\nexport function listUser(query) {\r\n  return request({\r\n    url: '/system/user/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询用户详细\r\nexport function getUser(userId) {\r\n  return request({\r\n    url: '/system/user/' + parseStrEmpty(userId),\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 新增用户\r\nexport function addUser(data) {\r\n  return request({\r\n    url: '/system/user',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 修改用户\r\nexport function updateUser(data) {\r\n  return request({\r\n    url: '/system/user',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 删除用户\r\nexport function delUser(userId) {\r\n  return request({\r\n    url: '/system/user/' + userId,\r\n    method: 'delete'\r\n  })\r\n}\r\n\r\n// 用户密码重置\r\nexport function resetUserPwd(userId, password) {\r\n  const data = {\r\n    userId,\r\n    password\r\n  }\r\n  return request({\r\n    url: '/system/user/resetPwd',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 用户状态修改\r\nexport function changeUserStatus(userId, status) {\r\n  const data = {\r\n    userId,\r\n    status\r\n  }\r\n  return request({\r\n    url: '/system/user/changeStatus',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 查询用户个人信息\r\nexport function getUserProfile() {\r\n  return request({\r\n    url: '/system/user/profile',\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 修改用户个人信息\r\nexport function updateUserProfile(data) {\r\n  return request({\r\n    url: '/system/user/profile',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 用户密码重置\r\nexport function updateUserPwd(oldPassword, newPassword) {\r\n  const data = {\r\n    oldPassword,\r\n    newPassword\r\n  }\r\n  return request({\r\n    url: '/system/user/profile/updatePwd',\r\n    method: 'put',\r\n    params: data\r\n  })\r\n}\r\n\r\n// 用户头像上传\r\nexport function uploadAvatar(data) {\r\n  return request({\r\n    url: '/system/user/profile/avatar',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 查询授权角色\r\nexport function getAuthRole(userId) {\r\n  return request({\r\n    url: '/system/user/authRole/' + userId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 保存授权角色\r\nexport function updateAuthRole(data) {\r\n  return request({\r\n    url: '/system/user/authRole',\r\n    method: 'put',\r\n    params: data\r\n  })\r\n}\r\n\r\n// 查询部门下拉树结构\r\nexport function deptTreeSelect() {\r\n  return request({\r\n    url: '/system/user/deptTree',\r\n    method: 'get'\r\n  })\r\n}\r\n"
  },
  {
    "path": "front/src/api/tool/gen.js",
    "content": "import request from '@/utils/request'\r\n\r\n// 查询生成表数据\r\nexport function listTable(query) {\r\n  return request({\r\n    url: '/tool/gen/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n// 查询db数据库列表\r\nexport function listDbTable(query) {\r\n  return request({\r\n    url: '/tool/gen/db/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n// 查询表详细信息\r\nexport function getGenTable(tableId) {\r\n  return request({\r\n    url: '/tool/gen/' + tableId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 修改代码生成信息\r\nexport function updateGenTable(data) {\r\n  return request({\r\n    url: '/tool/gen',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n// 导入表\r\nexport function importTable(data) {\r\n  return request({\r\n    url: '/tool/gen/importTable',\r\n    method: 'post',\r\n    params: data\r\n  })\r\n}\r\n\r\n// 预览生成代码\r\nexport function previewTable(tableId) {\r\n  return request({\r\n    url: '/tool/gen/preview/' + tableId,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 删除表数据\r\nexport function delTable(tableId) {\r\n  return request({\r\n    url: '/tool/gen/' + tableId,\r\n    method: 'delete'\r\n  })\r\n}\r\n\r\n// 生成代码（自定义路径）\r\nexport function genCode(tableName) {\r\n  return request({\r\n    url: '/tool/gen/genCode/' + tableName,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n// 同步数据库\r\nexport function synchDb(tableName) {\r\n  return request({\r\n    url: '/tool/gen/synchDb/' + tableName,\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n\r\n// 执行sql\r\nexport function excuteSql(data) {\r\n  return request({\r\n    url: '/tool/gen/excute',\r\n    method: 'post',\r\n    data\r\n  })\r\n}"
  },
  {
    "path": "front/src/assets/styles/btn.scss",
    "content": "@import './variables.module.scss';\r\n\r\n@mixin colorBtn($color) {\r\n  background: $color;\r\n\r\n  &:hover {\r\n    color: $color;\r\n\r\n    &:before,\r\n    &:after {\r\n      background: $color;\r\n    }\r\n  }\r\n}\r\n\r\n.blue-btn {\r\n  @include colorBtn($blue)\r\n}\r\n\r\n.light-blue-btn {\r\n  @include colorBtn($light-blue)\r\n}\r\n\r\n.red-btn {\r\n  @include colorBtn($red)\r\n}\r\n\r\n.pink-btn {\r\n  @include colorBtn($pink)\r\n}\r\n\r\n.green-btn {\r\n  @include colorBtn($green)\r\n}\r\n\r\n.tiffany-btn {\r\n  @include colorBtn($tiffany)\r\n}\r\n\r\n.yellow-btn {\r\n  @include colorBtn($yellow)\r\n}\r\n\r\n.pan-btn {\r\n  font-size: 14px;\r\n  color: #fff;\r\n  padding: 14px 36px;\r\n  border-radius: 8px;\r\n  border: none;\r\n  outline: none;\r\n  transition: 600ms ease all;\r\n  position: relative;\r\n  display: inline-block;\r\n\r\n  &:hover {\r\n    background: #fff;\r\n\r\n    &:before,\r\n    &:after {\r\n      width: 100%;\r\n      transition: 600ms ease all;\r\n    }\r\n  }\r\n\r\n  &:before,\r\n  &:after {\r\n    content: '';\r\n    position: absolute;\r\n    top: 0;\r\n    right: 0;\r\n    height: 2px;\r\n    width: 0;\r\n    transition: 400ms ease all;\r\n  }\r\n\r\n  &::after {\r\n    right: inherit;\r\n    top: inherit;\r\n    left: 0;\r\n    bottom: 0;\r\n  }\r\n}\r\n\r\n.custom-button {\r\n  display: inline-block;\r\n  line-height: 1;\r\n  white-space: nowrap;\r\n  cursor: pointer;\r\n  background: #fff;\r\n  color: #fff;\r\n  -webkit-appearance: none;\r\n  text-align: center;\r\n  box-sizing: border-box;\r\n  outline: 0;\r\n  margin: 0;\r\n  padding: 10px 15px;\r\n  font-size: 14px;\r\n  border-radius: 4px;\r\n}\r\n"
  },
  {
    "path": "front/src/assets/styles/element-ui.scss",
    "content": "// cover some element-ui styles\r\n\r\n.el-breadcrumb__inner,\r\n.el-breadcrumb__inner a {\r\n  font-weight: 400 !important;\r\n}\r\n\r\n.el-upload {\r\n  input[type=\"file\"] {\r\n    display: none !important;\r\n  }\r\n}\r\n\r\n.el-upload__input {\r\n  display: none;\r\n}\r\n\r\n.cell {\r\n  .el-tag {\r\n    margin-right: 0px;\r\n  }\r\n}\r\n\r\n.small-padding {\r\n  .cell {\r\n    padding-left: 5px;\r\n    padding-right: 5px;\r\n  }\r\n}\r\n\r\n.fixed-width {\r\n  .el-button--mini {\r\n    padding: 7px 10px;\r\n    width: 60px;\r\n  }\r\n}\r\n\r\n.status-col {\r\n  .cell {\r\n    padding: 0 10px;\r\n    text-align: center;\r\n\r\n    .el-tag {\r\n      margin-right: 0px;\r\n    }\r\n  }\r\n}\r\n\r\n// to fixed https://github.com/ElemeFE/element/issues/2461\r\n.el-dialog {\r\n  transform: none;\r\n  left: 0;\r\n  position: relative;\r\n  margin: 0 auto;\r\n}\r\n\r\n// refine element ui upload\r\n.upload-container {\r\n  .el-upload {\r\n    width: 100%;\r\n\r\n    .el-upload-dragger {\r\n      width: 100%;\r\n      height: 200px;\r\n    }\r\n  }\r\n}\r\n\r\n// dropdown\r\n.el-dropdown-menu {\r\n  a {\r\n    display: block\r\n  }\r\n}\r\n\r\n// fix date-picker ui bug in filter-item\r\n.el-range-editor.el-input__inner {\r\n  display: inline-flex !important;\r\n}\r\n\r\n// to fix el-date-picker css style\r\n.el-range-separator {\r\n  box-sizing: content-box;\r\n}\r\n\r\n.el-menu--collapse\r\n  > div\r\n  > .el-submenu\r\n  > .el-submenu__title\r\n  .el-submenu__icon-arrow {\r\n  display: none;\r\n}\r\n\r\n.el-dropdown .el-dropdown-link{\r\n  color: var(--el-color-primary) !important;\r\n}"
  },
  {
    "path": "front/src/assets/styles/index.scss",
    "content": "@import './variables.module.scss';\r\n@import './mixin.scss';\r\n@import './transition.scss';\r\n@import './element-ui.scss';\r\n@import './sidebar.scss';\r\n@import './btn.scss';\r\n@import './ruoyi.scss';\r\n\r\nbody {\r\n  height: 100%;\r\n  margin: 0;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  -webkit-font-smoothing: antialiased;\r\n  text-rendering: optimizeLegibility;\r\n  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;\r\n}\r\n\r\nlabel {\r\n  font-weight: 700;\r\n}\r\n\r\nhtml {\r\n  height: 100%;\r\n  box-sizing: border-box;\r\n}\r\n\r\n#app {\r\n  height: 100%;\r\n}\r\n\r\n*,\r\n*:before,\r\n*:after {\r\n  box-sizing: inherit;\r\n}\r\n\r\n.no-padding {\r\n  padding: 0px !important;\r\n}\r\n\r\n.padding-content {\r\n  padding: 4px 0;\r\n}\r\n\r\na:focus,\r\na:active {\r\n  outline: none;\r\n}\r\n\r\na,\r\na:focus,\r\na:hover {\r\n  cursor: pointer;\r\n  color: inherit;\r\n  text-decoration: none;\r\n}\r\n\r\ndiv:focus {\r\n  outline: none;\r\n}\r\n\r\n.fr {\r\n  float: right;\r\n}\r\n\r\n.fl {\r\n  float: left;\r\n}\r\n\r\n.pr-5 {\r\n  padding-right: 5px;\r\n}\r\n\r\n.pl-5 {\r\n  padding-left: 5px;\r\n}\r\n\r\n.block {\r\n  display: block;\r\n}\r\n\r\n.pointer {\r\n  cursor: pointer;\r\n}\r\n\r\n.inlineBlock {\r\n  display: block;\r\n}\r\n\r\n.clearfix {\r\n  &:after {\r\n    visibility: hidden;\r\n    display: block;\r\n    font-size: 0;\r\n    content: \" \";\r\n    clear: both;\r\n    height: 0;\r\n  }\r\n}\r\n\r\naside {\r\n  background: #eef1f6;\r\n  padding: 8px 24px;\r\n  margin-bottom: 20px;\r\n  border-radius: 2px;\r\n  display: block;\r\n  line-height: 32px;\r\n  font-size: 16px;\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\r\n  color: #2c3e50;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n\r\n  a {\r\n    color: #337ab7;\r\n    cursor: pointer;\r\n\r\n    &:hover {\r\n      color: rgb(32, 160, 255);\r\n    }\r\n  }\r\n}\r\n\r\n//main-container全局样式\r\n.app-container {\r\n  padding: 20px;\r\n}\r\n\r\n.components-container {\r\n  margin: 30px 50px;\r\n  position: relative;\r\n}\r\n\r\n.pagination-container {\r\n  margin-top: 30px;\r\n}\r\n\r\n.text-center {\r\n  text-align: center\r\n}\r\n\r\n.sub-navbar {\r\n  height: 50px;\r\n  line-height: 50px;\r\n  position: relative;\r\n  width: 100%;\r\n  text-align: right;\r\n  padding-right: 20px;\r\n  transition: 600ms ease position;\r\n  background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);\r\n\r\n  .subtitle {\r\n    font-size: 20px;\r\n    color: #fff;\r\n  }\r\n\r\n  &.draft {\r\n    background: #d0d0d0;\r\n  }\r\n\r\n  &.deleted {\r\n    background: #d0d0d0;\r\n  }\r\n}\r\n\r\n.link-type,\r\n.link-type:focus {\r\n  color: #337ab7;\r\n  cursor: pointer;\r\n\r\n  &:hover {\r\n    color: rgb(32, 160, 255);\r\n  }\r\n}\r\n\r\n.filter-container {\r\n  padding-bottom: 10px;\r\n\r\n  .filter-item {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    margin-bottom: 10px;\r\n  }\r\n}\r\n"
  },
  {
    "path": "front/src/assets/styles/mixin.scss",
    "content": "@mixin clearfix {\r\n  &:after {\r\n    content: \"\";\r\n    display: table;\r\n    clear: both;\r\n  }\r\n}\r\n\r\n@mixin scrollBar {\r\n  &::-webkit-scrollbar-track-piece {\r\n    background: #d3dce6;\r\n  }\r\n\r\n  &::-webkit-scrollbar {\r\n    width: 6px;\r\n  }\r\n\r\n  &::-webkit-scrollbar-thumb {\r\n    background: #99a9bf;\r\n    border-radius: 20px;\r\n  }\r\n}\r\n\r\n@mixin relative {\r\n  position: relative;\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n\r\n@mixin pct($pct) {\r\n  width: #{$pct};\r\n  position: relative;\r\n  margin: 0 auto;\r\n}\r\n\r\n@mixin triangle($width, $height, $color, $direction) {\r\n  $width: $width/2;\r\n  $color-border-style: $height solid $color;\r\n  $transparent-border-style: $width solid transparent;\r\n  height: 0;\r\n  width: 0;\r\n\r\n  @if $direction==up {\r\n    border-bottom: $color-border-style;\r\n    border-left: $transparent-border-style;\r\n    border-right: $transparent-border-style;\r\n  }\r\n\r\n  @else if $direction==right {\r\n    border-left: $color-border-style;\r\n    border-top: $transparent-border-style;\r\n    border-bottom: $transparent-border-style;\r\n  }\r\n\r\n  @else if $direction==down {\r\n    border-top: $color-border-style;\r\n    border-left: $transparent-border-style;\r\n    border-right: $transparent-border-style;\r\n  }\r\n\r\n  @else if $direction==left {\r\n    border-right: $color-border-style;\r\n    border-top: $transparent-border-style;\r\n    border-bottom: $transparent-border-style;\r\n  }\r\n}\r\n"
  },
  {
    "path": "front/src/assets/styles/ruoyi.scss",
    "content": " /**\r\n * 通用css样式布局处理\r\n * Copyright (c) 2019 ruoyi\r\n */\r\n\r\n /** 基础通用 **/\r\n.pt5 {\r\n\tpadding-top: 5px;\r\n}\r\n.pr5 {\r\n\tpadding-right: 5px;\r\n}\r\n.pb5 {\r\n\tpadding-bottom: 5px;\r\n}\r\n.mt5 {\r\n\tmargin-top: 5px;\r\n}\r\n.mr5 {\r\n\tmargin-right: 5px;\r\n}\r\n.mb5 {\r\n\tmargin-bottom: 5px;\r\n}\r\n.mb8 {\r\n\tmargin-bottom: 8px;\r\n}\r\n.ml5 {\r\n\tmargin-left: 5px;\r\n}\r\n.mt10 {\r\n\tmargin-top: 10px;\r\n}\r\n.mr10 {\r\n\tmargin-right: 10px;\r\n}\r\n.mb10 {\r\n\tmargin-bottom: 10px;\r\n}\r\n.ml10 {\r\n\tmargin-left: 10px;\r\n}\r\n.mt20 {\r\n\tmargin-top: 20px;\r\n}\r\n.mr20 {\r\n\tmargin-right: 20px;\r\n}\r\n.mb20 {\r\n\tmargin-bottom: 20px;\r\n}\r\n.ml20 {\r\n\tmargin-left: 20px;\r\n}\r\n\r\n.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {\r\n\tfont-family: inherit;\r\n\tfont-weight: 500;\r\n\tline-height: 1.1;\r\n\tcolor: inherit;\r\n}\r\n\r\n.el-form .el-form-item__label {\r\n\tfont-weight: 700;\r\n}\r\n.el-dialog:not(.is-fullscreen) {\r\n\tmargin-top: 6vh !important;\r\n}\r\n\r\n.el-dialog.scrollbar .el-dialog__body {\r\n\toverflow: auto;\r\n\toverflow-x: hidden;\r\n\tmax-height: 70vh;\r\n\tpadding: 10px 20px 0;\r\n}\r\n\r\n.el-table {\r\n\t.el-table__header-wrapper, .el-table__fixed-header-wrapper {\r\n\t\tth {\r\n\t\t\tword-break: break-word;\r\n\t\t\tbackground-color: #f8f8f9 !important;\r\n\t\t\tcolor: #515a6e;\r\n\t\t\theight: 40px !important;\r\n\t\t\tfont-size: 13px;\r\n\t\t}\r\n\t}\r\n\t.el-table__body-wrapper {\r\n\t\t.el-button [class*=\"el-icon-\"] + span {\r\n\t\t\tmargin-left: 1px;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/** 表单布局 **/\r\n.form-header {\r\n    font-size:15px;\r\n\tcolor:#6379bb;\r\n\tborder-bottom:1px solid #ddd;\r\n\tmargin:8px 10px 25px 10px;\r\n\tpadding-bottom:5px\r\n}\r\n\r\n/** 表格布局 **/\r\n.pagination-container {\r\n    position: relative;\r\n    height: 25px;\r\n    margin-bottom: 10px;\r\n    margin-top: 15px;\r\n    padding: 10px 20px !important;\r\n}\r\n\r\n.el-dialog .pagination-container {\r\n    position: static !important;\r\n}\r\n\r\n/* tree border */\r\n.tree-border {\r\n    margin-top: 5px;\r\n    border: 1px solid #e5e6e7;\r\n    background: #FFFFFF none;\r\n    border-radius:4px;\r\n    width: 100%;\r\n}\r\n\r\n.pagination-container .el-pagination {\r\n\tright: 0;\r\n\tposition: absolute;\r\n}\r\n\r\n@media ( max-width : 768px) {\r\n  .pagination-container .el-pagination > .el-pagination__jump {\r\n    display: none !important;\r\n  }\r\n  .pagination-container .el-pagination > .el-pagination__sizes {\r\n    display: none !important;\r\n  }\r\n}\r\n\r\n.el-table .fixed-width .el-button--small {\r\n\tpadding-left: 0;\r\n\tpadding-right: 0;\r\n\twidth: inherit;\r\n}\r\n\r\n/** 表格更多操作下拉样式 */\r\n.el-table .el-dropdown-link {\r\n\tcursor: pointer;\r\n\tcolor: #409EFF;\r\n\tmargin-left: 10px;\r\n}\r\n\r\n.el-table .el-dropdown, .el-icon-arrow-down {\r\n\tfont-size: 12px;\r\n}\r\n\r\n.el-tree-node__content > .el-checkbox {\r\n\tmargin-right: 8px;\r\n}\r\n\r\n.list-group-striped > .list-group-item {\r\n\tborder-left: 0;\r\n\tborder-right: 0;\r\n\tborder-radius: 0;\r\n\tpadding-left: 0;\r\n\tpadding-right: 0;\r\n}\r\n\r\n.list-group {\r\n\tpadding-left: 0px;\r\n\tlist-style: none;\r\n}\r\n\r\n.list-group-item {\r\n\tborder-bottom: 1px solid #e7eaec;\r\n\tborder-top: 1px solid #e7eaec;\r\n\tmargin-bottom: -1px;\r\n\tpadding: 11px 0px;\r\n\tfont-size: 13px;\r\n}\r\n\r\n.pull-right {\r\n\tfloat: right !important;\r\n}\r\n\r\n.el-card__header {\r\n\tpadding: 14px 15px 7px !important;\r\n\tmin-height: 40px;\r\n}\r\n\r\n.el-card__body {\r\n\tpadding: 15px 20px 20px 20px !important;\r\n}\r\n\r\n.card-box {\r\n\tpadding-right: 15px;\r\n\tpadding-left: 15px;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n/* button color */\r\n.el-button--cyan.is-active,\r\n.el-button--cyan:active {\r\n  background: #20B2AA;\r\n  border-color: #20B2AA;\r\n  color: #FFFFFF;\r\n}\r\n\r\n.el-button--cyan:focus,\r\n.el-button--cyan:hover {\r\n  background: #48D1CC;\r\n  border-color: #48D1CC;\r\n  color: #FFFFFF;\r\n}\r\n\r\n.el-button--cyan {\r\n  background-color: #20B2AA;\r\n  border-color: #20B2AA;\r\n  color: #FFFFFF;\r\n}\r\n\r\n/* text color */\r\n.text-navy {\r\n\tcolor: #1ab394;\r\n}\r\n\r\n.text-primary {\r\n\tcolor: inherit;\r\n}\r\n\r\n.text-success {\r\n\tcolor: #1c84c6;\r\n}\r\n\r\n.text-info {\r\n\tcolor: #23c6c8;\r\n}\r\n\r\n.text-warning {\r\n\tcolor: #f8ac59;\r\n}\r\n\r\n.text-danger {\r\n\tcolor: #ed5565;\r\n}\r\n\r\n.text-muted {\r\n\tcolor: #888888;\r\n}\r\n\r\n/* image */\r\n.img-circle {\r\n\tborder-radius: 50%;\r\n}\r\n\r\n.img-lg {\r\n\twidth: 120px;\r\n\theight: 120px;\r\n}\r\n\r\n.avatar-upload-preview {\r\n\tposition: absolute;\r\n\ttop: 50%;\r\n\ttransform: translate(50%, -50%);\r\n\twidth: 200px;\r\n\theight: 200px;\r\n\tborder-radius: 50%;\r\n\tbox-shadow: 0 0 4px #ccc;\r\n\toverflow: hidden;\r\n}\r\n\r\n/* 拖拽列样式 */\r\n.sortable-ghost{\r\n\topacity: .8;\r\n\tcolor: #fff!important;\r\n\tbackground: #42b983!important;\r\n}\r\n\r\n/* 表格右侧工具栏样式 */\r\n.top-right-btn {\r\n\tmargin-left: auto;\r\n}\r\n"
  },
  {
    "path": "front/src/assets/styles/sidebar.scss",
    "content": "#app {\r\n\r\n  .main-container {\r\n    height: 100%;\r\n    transition: margin-left .28s;\r\n    margin-left: $base-sidebar-width;\r\n    position: relative;\r\n  }\r\n\r\n  .sidebarHide {\r\n    margin-left: 0!important;\r\n  }\r\n\r\n  .sidebar-container {\r\n    -webkit-transition: width .28s;\r\n    transition: width 0.28s;\r\n    width: $base-sidebar-width !important;\r\n    background-color: $base-menu-background;\r\n    height: 100%;\r\n    position: fixed;\r\n    font-size: 0px;\r\n    top: 0;\r\n    bottom: 0;\r\n    left: 0;\r\n    z-index: 1001;\r\n    overflow: hidden;\r\n    -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35);\r\n    box-shadow: 2px 0 6px rgba(0,21,41,.35);\r\n\r\n    // reset element-ui css\r\n    .horizontal-collapse-transition {\r\n      transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;\r\n    }\r\n\r\n    .scrollbar-wrapper {\r\n      overflow-x: hidden !important;\r\n    }\r\n\r\n    .el-scrollbar__bar.is-vertical {\r\n      right: 0px;\r\n    }\r\n\r\n    .el-scrollbar {\r\n      height: 100%;\r\n    }\r\n\r\n    &.has-logo {\r\n      .el-scrollbar {\r\n        height: calc(100% - 50px);\r\n      }\r\n    }\r\n\r\n    .is-horizontal {\r\n      display: none;\r\n    }\r\n\r\n    a {\r\n      display: inline-block;\r\n      width: 100%;\r\n      overflow: hidden;\r\n    }\r\n\r\n    .svg-icon {\r\n      margin-right: 16px;\r\n    }\r\n\r\n    .el-menu {\r\n      border: none;\r\n      height: 100%;\r\n      width: 100% !important;\r\n    }\r\n\r\n    .el-menu-item, .menu-title {\r\n      overflow: hidden !important;\r\n      text-overflow: ellipsis !important;\r\n      white-space: nowrap !important;\r\n    }\r\n\r\n    .el-menu-item .el-menu-tooltip__trigger {\r\n      display: inline-block !important;\r\n    }\r\n\r\n    // menu hover\r\n    .sub-menu-title-noDropdown,\r\n    .el-sub-menu__title {\r\n      &:hover {\r\n        background-color: rgba(0, 0, 0, 0.06) !important;\r\n      }\r\n    }\r\n\r\n    & .theme-dark .is-active > .el-sub-menu__title {\r\n      color: $base-menu-color-active !important;\r\n    }\r\n\r\n    & .nest-menu .el-sub-menu>.el-sub-menu__title,\r\n    & .el-sub-menu .el-menu-item {\r\n      min-width: $base-sidebar-width !important;\r\n\r\n      &:hover {\r\n        background-color: rgba(0, 0, 0, 0.06) !important;\r\n      }\r\n    }\r\n\r\n    & .theme-dark .nest-menu .el-sub-menu>.el-sub-menu__title,\r\n    & .theme-dark .el-sub-menu .el-menu-item {\r\n      background-color: $base-sub-menu-background !important;\r\n\r\n      &:hover {\r\n        background-color: $base-sub-menu-hover !important;\r\n      }\r\n    }\r\n  }\r\n\r\n  .hideSidebar {\r\n    .sidebar-container {\r\n      width: 54px !important;\r\n    }\r\n\r\n    .main-container {\r\n      margin-left: 54px;\r\n    }\r\n\r\n    .sub-menu-title-noDropdown {\r\n      padding: 0 !important;\r\n      position: relative;\r\n\r\n      .el-tooltip {\r\n        padding: 0 !important;\r\n\r\n        .svg-icon {\r\n          margin-left: 20px;\r\n        }\r\n      }\r\n    }\r\n\r\n    .el-sub-menu {\r\n      overflow: hidden;\r\n\r\n      &>.el-sub-menu__title {\r\n        padding: 0 !important;\r\n\r\n        .svg-icon {\r\n          margin-left: 20px;\r\n        }\r\n\r\n      }\r\n    }\r\n\r\n    .el-menu--collapse {\r\n      .el-sub-menu {\r\n        &>.el-sub-menu__title {\r\n          &>span {\r\n            height: 0;\r\n            width: 0;\r\n            overflow: hidden;\r\n            visibility: hidden;\r\n            display: inline-block;\r\n          }\r\n          &>i {\r\n            height: 0;\r\n            width: 0;\r\n            overflow: hidden;\r\n            visibility: hidden;\r\n            display: inline-block;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  .el-menu--collapse .el-menu .el-sub-menu {\r\n    min-width: $base-sidebar-width !important;\r\n  }\r\n\r\n  // mobile responsive\r\n  .mobile {\r\n    .main-container {\r\n      margin-left: 0px;\r\n    }\r\n\r\n    .sidebar-container {\r\n      transition: transform .28s;\r\n      width: $base-sidebar-width !important;\r\n    }\r\n\r\n    &.hideSidebar {\r\n      .sidebar-container {\r\n        pointer-events: none;\r\n        transition-duration: 0.3s;\r\n        transform: translate3d(-$base-sidebar-width, 0, 0);\r\n      }\r\n    }\r\n  }\r\n\r\n  .withoutAnimation {\r\n\r\n    .main-container,\r\n    .sidebar-container {\r\n      transition: none;\r\n    }\r\n  }\r\n}\r\n\r\n// when menu collapsed\r\n.el-menu--vertical {\r\n  &>.el-menu {\r\n    .svg-icon {\r\n      margin-right: 16px;\r\n    }\r\n  }\r\n\r\n  .nest-menu .el-sub-menu>.el-sub-menu__title,\r\n  .el-menu-item {\r\n    &:hover {\r\n      // you can use $sub-menuHover\r\n      background-color: rgba(0, 0, 0, 0.06) !important;\r\n    }\r\n  }\r\n\r\n  // the scroll bar appears when the sub-menu is too long\r\n  >.el-menu--popup {\r\n    max-height: 100vh;\r\n    overflow-y: auto;\r\n\r\n    &::-webkit-scrollbar-track-piece {\r\n      background: #d3dce6;\r\n    }\r\n\r\n    &::-webkit-scrollbar {\r\n      width: 6px;\r\n    }\r\n\r\n    &::-webkit-scrollbar-thumb {\r\n      background: #99a9bf;\r\n      border-radius: 20px;\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "front/src/assets/styles/transition.scss",
    "content": "// global transition css\r\n\r\n/* fade */\r\n.fade-enter-active,\r\n.fade-leave-active {\r\n  transition: opacity 0.28s;\r\n}\r\n\r\n.fade-enter,\r\n.fade-leave-active {\r\n  opacity: 0;\r\n}\r\n\r\n/* fade-transform */\r\n.fade-transform--move,\r\n.fade-transform-leave-active,\r\n.fade-transform-enter-active {\r\n  transition: all .5s;\r\n}\r\n\r\n.fade-transform-enter {\r\n  opacity: 0;\r\n  transform: translateX(-30px);\r\n}\r\n\r\n.fade-transform-leave-to {\r\n  opacity: 0;\r\n  transform: translateX(30px);\r\n}\r\n\r\n/* breadcrumb transition */\r\n.breadcrumb-enter-active,\r\n.breadcrumb-leave-active {\r\n  transition: all .5s;\r\n}\r\n\r\n.breadcrumb-enter,\r\n.breadcrumb-leave-active {\r\n  opacity: 0;\r\n  transform: translateX(20px);\r\n}\r\n\r\n.breadcrumb-move {\r\n  transition: all .5s;\r\n}\r\n\r\n.breadcrumb-leave-active {\r\n  position: absolute;\r\n}\r\n"
  },
  {
    "path": "front/src/assets/styles/variables.module.scss",
    "content": "// base color\r\n$blue: #324157;\r\n$light-blue: #3A71A8;\r\n$red: #C03639;\r\n$pink: #E65D6E;\r\n$green: #30B08F;\r\n$tiffany: #4AB7BD;\r\n$yellow: #FEC171;\r\n$panGreen: #30B08F;\r\n\r\n// 默认菜单主题风格\r\n$base-menu-color: #bfcbd9;\r\n$base-menu-color-active: #f4f4f5;\r\n$base-menu-background: #304156;\r\n$base-logo-title-color: #ffffff;\r\n\r\n$base-menu-light-color: rgba(0, 0, 0, 0.7);\r\n$base-menu-light-background: #ffffff;\r\n$base-logo-light-title-color: #001529;\r\n\r\n$base-sub-menu-background: #1f2d3d;\r\n$base-sub-menu-hover: #001528;\r\n\r\n// 自定义暗色菜单风格\r\n/**\r\n$base-menu-color:hsla(0,0%,100%,.65);\r\n$base-menu-color-active:#fff;\r\n$base-menu-background:#001529;\r\n$base-logo-title-color: #ffffff;\r\n\r\n$base-menu-light-color:rgba(0,0,0,.70);\r\n$base-menu-light-background:#ffffff;\r\n$base-logo-light-title-color: #001529;\r\n\r\n$base-sub-menu-background:#000c17;\r\n$base-sub-menu-hover:#001528;\r\n*/\r\n\r\n$--color-primary: #409EFF;\r\n$--color-success: #67C23A;\r\n$--color-warning: #E6A23C;\r\n$--color-danger: #F56C6C;\r\n$--color-info: #909399;\r\n\r\n$base-sidebar-width: 200px;\r\n\r\n// the :export directive is the magic sauce for webpack\r\n// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass\r\n:export {\r\n  menuColor: $base-menu-color;\r\n  menuLightColor: $base-menu-light-color;\r\n  menuColorActive: $base-menu-color-active;\r\n  menuBackground: $base-menu-background;\r\n  menuLightBackground: $base-menu-light-background;\r\n  subMenuBackground: $base-sub-menu-background;\r\n  subMenuHover: $base-sub-menu-hover;\r\n  sideBarWidth: $base-sidebar-width;\r\n  logoTitleColor: $base-logo-title-color;\r\n  logoLightTitleColor: $base-logo-light-title-color;\r\n  primaryColor: $--color-primary;\r\n  successColor: $--color-success;\r\n  dangerColor: $--color-danger;\r\n  infoColor: $--color-info;\r\n  warningColor: $--color-warning;\r\n}\r\n"
  },
  {
    "path": "front/src/components/Breadcrumb/index.vue",
    "content": "<template>\r\n  <el-breadcrumb class=\"app-breadcrumb\" separator=\"/\">\r\n    <transition-group name=\"breadcrumb\">\r\n      <el-breadcrumb-item v-for=\"(item,index) in levelList\" :key=\"item.path\">\r\n        <span v-if=\"item.redirect === 'noRedirect' || index == levelList.length - 1\" class=\"no-redirect\">{{ item.meta.title }}</span>\r\n        <a v-else @click.prevent=\"handleLink(item)\">{{ item.meta.title }}</a>\r\n      </el-breadcrumb-item>\r\n    </transition-group>\r\n  </el-breadcrumb>\r\n</template>\r\n\r\n<script setup>\r\nconst route = useRoute();\r\nconst router = useRouter();\r\nconst levelList = ref([])\r\n\r\nfunction getBreadcrumb() {\r\n  // only show routes with meta.title\r\n  let matched = route.matched.filter(item => item.meta && item.meta.title);\r\n  const first = matched[0]\r\n  // 判断是否为首页\r\n  if (!isDashboard(first)) {\r\n    matched = [{ path: '/index', meta: { title: '首页' } }].concat(matched)\r\n  }\r\n\r\n  levelList.value = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)\r\n}\r\nfunction isDashboard(route) {\r\n  const name = route && route.name\r\n  if (!name) {\r\n    return false\r\n  }\r\n  return name.trim() === 'Index'\r\n}\r\nfunction handleLink(item) {\r\n  const { redirect, path } = item\r\n  if (redirect) {\r\n    router.push(redirect)\r\n    return\r\n  }\r\n  router.push(path)\r\n}\r\n\r\nwatchEffect(() => {\r\n  // if you go to the redirect page, do not update the breadcrumbs\r\n  if (route.path.startsWith('/redirect/')) {\r\n    return\r\n  }\r\n  getBreadcrumb()\r\n})\r\ngetBreadcrumb();\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n.app-breadcrumb.el-breadcrumb {\r\n  display: inline-block;\r\n  font-size: 14px;\r\n  line-height: 50px;\r\n  margin-left: 8px;\r\n\r\n  .no-redirect {\r\n    color: #97a8be;\r\n    cursor: text;\r\n  }\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/Crontab/day.vue",
    "content": "<template>\r\n    <el-form>\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"1\">\r\n                日，允许的通配符[, - * ? / L W]\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"2\">\r\n                不指定\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"3\">\r\n                周期从\r\n                <el-input-number v-model='cycle01' :min=\"1\" :max=\"30\" /> -\r\n                <el-input-number v-model='cycle02' :min=\"cycle01 + 1\" :max=\"31\" /> 日\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"4\">\r\n                从\r\n                <el-input-number v-model='average01' :min=\"1\" :max=\"30\" /> 号开始，每\r\n                <el-input-number v-model='average02' :min=\"1\" :max=\"31 - average01\" /> 日执行一次\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"5\">\r\n                每月\r\n                <el-input-number v-model='workday' :min=\"1\" :max=\"31\" /> 号最近的那个工作日\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"6\">\r\n                本月最后一天\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"7\">\r\n                指定\r\n                <el-select clearable v-model=\"checkboxList\" placeholder=\"可多选\" multiple :multiple-limit=\"10\">\r\n                    <el-option v-for=\"item in 31\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n                </el-select>\r\n            </el-radio>\r\n        </el-form-item>\r\n    </el-form>\r\n</template>\r\n<script setup>\r\nconst emit = defineEmits(['update'])\r\nconst props = defineProps({\r\n    cron: {\r\n        type: Object,\r\n        default: {\r\n            second: \"*\",\r\n            min: \"*\",\r\n            hour: \"*\",\r\n            day: \"*\",\r\n            month: \"*\",\r\n            week: \"?\",\r\n            year: \"\",\r\n        }\r\n    },\r\n    check: {\r\n        type: Function,\r\n        default: () => {\r\n        }\r\n    }\r\n})\r\nconst radioValue = ref(1)\r\nconst cycle01 = ref(1)\r\nconst cycle02 = ref(2)\r\nconst average01 = ref(1)\r\nconst average02 = ref(1)\r\nconst workday = ref(1)\r\nconst checkboxList = ref([])\r\nconst checkCopy = ref([1])\r\nconst cycleTotal = computed(() => {\r\n    cycle01.value = props.check(cycle01.value, 1, 30)\r\n    cycle02.value = props.check(cycle02.value, cycle01.value + 1, 31)\r\n    return cycle01.value + '-' + cycle02.value\r\n})\r\nconst averageTotal = computed(() => {\r\n    average01.value = props.check(average01.value, 1, 30)\r\n    average02.value = props.check(average02.value, 1, 31 - average01.value)\r\n    return average01.value + '/' + average02.value\r\n})\r\nconst workdayTotal = computed(() => {\r\n    workday.value = props.check(workday.value, 1, 31)\r\n    return workday.value + 'W'\r\n})\r\nconst checkboxString = computed(() => {\r\n    return checkboxList.value.join(',')\r\n})\r\nwatch(() => props.cron.day, value => changeRadioValue(value))\r\nwatch([radioValue, cycleTotal, averageTotal, workdayTotal, checkboxString], () => onRadioChange())\r\nfunction changeRadioValue(value) {\r\n    if (value === \"*\") {\r\n        radioValue.value = 1\r\n    } else if (value === \"?\") {\r\n        radioValue.value = 2\r\n    } else if (value.indexOf(\"-\") > -1) {\r\n        const indexArr = value.split('-')\r\n        cycle01.value = Number(indexArr[0])\r\n        cycle02.value = Number(indexArr[1])\r\n        radioValue.value = 3\r\n    } else if (value.indexOf(\"/\") > -1) {\r\n        const indexArr = value.split('/')\r\n        average01.value = Number(indexArr[0])\r\n        average02.value = Number(indexArr[1])\r\n        radioValue.value = 4\r\n    } else if (value.indexOf(\"W\") > -1) {\r\n        const indexArr = value.split(\"W\")\r\n        workday.value = Number(indexArr[0])\r\n        radioValue.value = 5\r\n    } else if (value === \"L\") {\r\n        radioValue.value = 6\r\n    } else {\r\n        checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))]\r\n        radioValue.value = 7\r\n    }\r\n}\r\n// 单选按钮值变化时\r\nfunction onRadioChange() {\r\n    if (radioValue.value === 2 && props.cron.week === '?') {\r\n        emit('update', 'week', '*', 'day')\r\n    }\r\n    if (radioValue.value !== 2 && props.cron.week !== '?') {\r\n        emit('update', 'week', '?', 'day')\r\n    }\r\n    switch (radioValue.value) {\r\n        case 1:\r\n            emit('update', 'day', '*', 'day')\r\n            break\r\n        case 2:\r\n            emit('update', 'day', '?', 'day')\r\n            break\r\n        case 3:\r\n            emit('update', 'day', cycleTotal.value, 'day')\r\n            break\r\n        case 4:\r\n            emit('update', 'day', averageTotal.value, 'day')\r\n            break\r\n        case 5:\r\n            emit('update', 'day', workdayTotal.value, 'day')\r\n            break\r\n        case 6:\r\n            emit('update', 'day', 'L', 'day')\r\n            break\r\n        case 7:\r\n            if (checkboxList.value.length === 0) {\r\n                checkboxList.value.push(checkCopy.value[0])\r\n            } else {\r\n                checkCopy.value = checkboxList.value\r\n            }\r\n            emit('update', 'day', checkboxString.value, 'day')\r\n            break\r\n    }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.el-input-number--small, .el-select, .el-select--small {\r\n    margin: 0 0.2rem;\r\n}\r\n.el-select, .el-select--small {\r\n    width: 18.8rem;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/Crontab/hour.vue",
    "content": "<template>\r\n    <el-form>\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"1\">\r\n                小时，允许的通配符[, - * /]\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"2\">\r\n                周期从\r\n                <el-input-number v-model='cycle01' :min=\"0\" :max=\"22\" /> -\r\n                <el-input-number v-model='cycle02' :min=\"cycle01 + 1\" :max=\"23\" /> 时\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"3\">\r\n                从\r\n                <el-input-number v-model='average01' :min=\"0\" :max=\"22\" /> 时开始，每\r\n                <el-input-number v-model='average02' :min=\"1\" :max=\"23 - average01\" /> 小时执行一次\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"4\">\r\n                指定\r\n                <el-select clearable v-model=\"checkboxList\" placeholder=\"可多选\" multiple :multiple-limit=\"10\">\r\n                    <el-option v-for=\"item in 24\" :key=\"item\" :label=\"item - 1\" :value=\"item - 1\" />\r\n                </el-select>\r\n            </el-radio>\r\n        </el-form-item>\r\n    </el-form>\r\n</template>\r\n\r\n<script setup>\r\nconst emit = defineEmits(['update'])\r\nconst props = defineProps({\r\n    cron: {\r\n        type: Object,\r\n        default: {\r\n            second: \"*\",\r\n            min: \"*\",\r\n            hour: \"*\",\r\n            day: \"*\",\r\n            month: \"*\",\r\n            week: \"?\",\r\n            year: \"\",\r\n        }\r\n    },\r\n    check: {\r\n        type: Function,\r\n        default: () => {\r\n        }\r\n    }\r\n})\r\nconst radioValue = ref(1)\r\nconst cycle01 = ref(0)\r\nconst cycle02 = ref(1)\r\nconst average01 = ref(0)\r\nconst average02 = ref(1)\r\nconst checkboxList = ref([])\r\nconst checkCopy = ref([0])\r\nconst cycleTotal = computed(() => {\r\n    cycle01.value = props.check(cycle01.value, 0, 22)\r\n    cycle02.value = props.check(cycle02.value, cycle01.value + 1, 23)\r\n    return cycle01.value + '-' + cycle02.value\r\n})\r\nconst averageTotal = computed(() => {\r\n    average01.value = props.check(average01.value, 0, 22)\r\n    average02.value = props.check(average02.value, 1, 23 - average01.value)\r\n    return average01.value + '/' + average02.value\r\n})\r\nconst checkboxString = computed(() => {\r\n    return checkboxList.value.join(',')\r\n})\r\nwatch(() => props.cron.hour, value => changeRadioValue(value))\r\nwatch([radioValue, cycleTotal, averageTotal, checkboxString], () => onRadioChange())\r\nfunction changeRadioValue(value) {\r\n    if (value === '*') {\r\n        radioValue.value = 1\r\n    } else if (value.indexOf('-') > -1) {\r\n        const indexArr = value.split('-')\r\n        cycle01.value = Number(indexArr[0])\r\n        cycle02.value = Number(indexArr[1])\r\n        radioValue.value = 2\r\n    } else if (value.indexOf('/') > -1) {\r\n        const indexArr = value.split('/')\r\n        average01.value = Number(indexArr[0])\r\n        average02.value = Number(indexArr[1])\r\n        radioValue.value = 3\r\n    } else {\r\n        checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))]\r\n        radioValue.value = 4\r\n    }\r\n}\r\nfunction onRadioChange() {\r\n    switch (radioValue.value) {\r\n        case 1:\r\n            emit('update', 'hour', '*', 'hour')\r\n            break\r\n        case 2:\r\n            emit('update', 'hour', cycleTotal.value, 'hour')\r\n            break\r\n        case 3:\r\n            emit('update', 'hour', averageTotal.value, 'hour')\r\n            break\r\n        case 4:\r\n            if (checkboxList.value.length === 0) {\r\n                checkboxList.value.push(checkCopy.value[0])\r\n            } else {\r\n                checkCopy.value = checkboxList.value\r\n            }\r\n            emit('update', 'hour', checkboxString.value, 'hour')\r\n            break\r\n    }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.el-input-number--small, .el-select, .el-select--small {\r\n    margin: 0 0.2rem;\r\n}\r\n.el-select, .el-select--small {\r\n    width: 18.8rem;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/Crontab/index.vue",
    "content": "<template>\r\n    <div>\r\n        <el-tabs type=\"border-card\">\r\n            <el-tab-pane label=\"秒\" v-if=\"shouldHide('second')\">\r\n                <CrontabSecond\r\n                    @update=\"updateCrontabValue\"\r\n                    :check=\"checkNumber\"\r\n                    :cron=\"crontabValueObj\"\r\n                    ref=\"cronsecond\"\r\n                />\r\n            </el-tab-pane>\r\n\r\n            <el-tab-pane label=\"分钟\" v-if=\"shouldHide('min')\">\r\n                <CrontabMin\r\n                    @update=\"updateCrontabValue\"\r\n                    :check=\"checkNumber\"\r\n                    :cron=\"crontabValueObj\"\r\n                    ref=\"cronmin\"\r\n                />\r\n            </el-tab-pane>\r\n\r\n            <el-tab-pane label=\"小时\" v-if=\"shouldHide('hour')\">\r\n                <CrontabHour\r\n                    @update=\"updateCrontabValue\"\r\n                    :check=\"checkNumber\"\r\n                    :cron=\"crontabValueObj\"\r\n                    ref=\"cronhour\"\r\n                />\r\n            </el-tab-pane>\r\n\r\n            <el-tab-pane label=\"日\" v-if=\"shouldHide('day')\">\r\n                <CrontabDay\r\n                    @update=\"updateCrontabValue\"\r\n                    :check=\"checkNumber\"\r\n                    :cron=\"crontabValueObj\"\r\n                    ref=\"cronday\"\r\n                />\r\n            </el-tab-pane>\r\n\r\n            <el-tab-pane label=\"月\" v-if=\"shouldHide('month')\">\r\n                <CrontabMonth\r\n                    @update=\"updateCrontabValue\"\r\n                    :check=\"checkNumber\"\r\n                    :cron=\"crontabValueObj\"\r\n                    ref=\"cronmonth\"\r\n                />\r\n            </el-tab-pane>\r\n\r\n            <el-tab-pane label=\"周\" v-if=\"shouldHide('week')\">\r\n                <CrontabWeek\r\n                    @update=\"updateCrontabValue\"\r\n                    :check=\"checkNumber\"\r\n                    :cron=\"crontabValueObj\"\r\n                    ref=\"cronweek\"\r\n                />\r\n            </el-tab-pane>\r\n\r\n            <el-tab-pane label=\"年\" v-if=\"shouldHide('year')\">\r\n                <CrontabYear\r\n                    @update=\"updateCrontabValue\"\r\n                    :check=\"checkNumber\"\r\n                    :cron=\"crontabValueObj\"\r\n                    ref=\"cronyear\"\r\n                />\r\n            </el-tab-pane>\r\n        </el-tabs>\r\n\r\n        <div class=\"popup-main\">\r\n            <div class=\"popup-result\">\r\n                <p class=\"title\">时间表达式</p>\r\n                <table>\r\n                    <thead>\r\n                        <th v-for=\"item of tabTitles\" :key=\"item\">{{item}}</th>\r\n                        <th>Cron 表达式</th>\r\n                    </thead>\r\n                    <tbody>\r\n                        <td>\r\n                            <span v-if=\"crontabValueObj.second.length < 10\">{{crontabValueObj.second}}</span>\r\n                            <el-tooltip v-else :content=\"crontabValueObj.second\" placement=\"top\"><span>{{crontabValueObj.second}}</span></el-tooltip>\r\n                        </td>\r\n                        <td>\r\n                            <span v-if=\"crontabValueObj.min.length < 10\">{{crontabValueObj.min}}</span>\r\n                            <el-tooltip v-else :content=\"crontabValueObj.min\" placement=\"top\"><span>{{crontabValueObj.min}}</span></el-tooltip>\r\n                        </td>\r\n                        <td>\r\n                            <span v-if=\"crontabValueObj.hour.length < 10\">{{crontabValueObj.hour}}</span>\r\n                            <el-tooltip v-else :content=\"crontabValueObj.hour\" placement=\"top\"><span>{{crontabValueObj.hour}}</span></el-tooltip>\r\n                        </td>\r\n                        <td>\r\n                            <span v-if=\"crontabValueObj.day.length < 10\">{{crontabValueObj.day}}</span>\r\n                            <el-tooltip v-else :content=\"crontabValueObj.day\" placement=\"top\"><span>{{crontabValueObj.day}}</span></el-tooltip>\r\n                        </td>\r\n                        <td>\r\n                            <span v-if=\"crontabValueObj.month.length < 10\">{{crontabValueObj.month}}</span>\r\n                            <el-tooltip v-else :content=\"crontabValueObj.month\" placement=\"top\"><span>{{crontabValueObj.month}}</span></el-tooltip>\r\n                        </td>\r\n                        <td>\r\n                            <span v-if=\"crontabValueObj.week.length < 10\">{{crontabValueObj.week}}</span>\r\n                            <el-tooltip v-else :content=\"crontabValueObj.week\" placement=\"top\"><span>{{crontabValueObj.week}}</span></el-tooltip>\r\n                        </td>\r\n                        <td>\r\n                            <span v-if=\"crontabValueObj.year.length < 10\">{{crontabValueObj.year}}</span>\r\n                            <el-tooltip v-else :content=\"crontabValueObj.year\" placement=\"top\"><span>{{crontabValueObj.year}}</span></el-tooltip>\r\n                        </td>\r\n                        <td class=\"result\">\r\n                            <span v-if=\"crontabValueString.length < 90\">{{crontabValueString}}</span>\r\n                            <el-tooltip v-else :content=\"crontabValueString\" placement=\"top\"><span>{{crontabValueString}}</span></el-tooltip>\r\n                        </td>\r\n                    </tbody>\r\n                </table>\r\n            </div>\r\n            <CrontabResult :ex=\"crontabValueString\"></CrontabResult>\r\n\r\n            <div class=\"pop_btn\">\r\n                <el-button type=\"primary\" @click=\"submitFill\">确定</el-button>\r\n                <el-button type=\"warning\" @click=\"clearCron\">重置</el-button>\r\n                <el-button @click=\"hidePopup\">取消</el-button>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script setup>\r\nimport CrontabSecond from \"./second.vue\"\r\nimport CrontabMin from \"./min.vue\"\r\nimport CrontabHour from \"./hour.vue\"\r\nimport CrontabDay from \"./day.vue\"\r\nimport CrontabMonth from \"./month.vue\"\r\nimport CrontabWeek from \"./week.vue\"\r\nimport CrontabYear from \"./year.vue\"\r\nimport CrontabResult from \"./result.vue\"\r\nconst { proxy } = getCurrentInstance()\r\nconst emit = defineEmits(['hide', 'fill'])\r\nconst props = defineProps({\r\n    hideComponent: {\r\n        type: Array,\r\n        default: () => [],\r\n    },\r\n    expression: {\r\n        type: String,\r\n        default: \"\"\r\n    }\r\n})\r\nconst tabTitles = ref([\"秒\", \"分钟\", \"小时\", \"日\", \"月\", \"周\", \"年\"])\r\nconst tabActive = ref(0)\r\nconst hideComponent = ref([])\r\nconst expression = ref('')\r\nconst crontabValueObj = ref({\r\n    second: \"*\",\r\n    min: \"*\",\r\n    hour: \"*\",\r\n    day: \"*\",\r\n    month: \"*\",\r\n    week: \"?\",\r\n    year: \"\",\r\n})\r\nconst crontabValueString = computed(() => {\r\n    const obj = crontabValueObj.value\r\n    return obj.second\r\n        + \" \"\r\n        + obj.min\r\n        + \" \"\r\n        + obj.hour\r\n        + \" \"\r\n        + obj.day\r\n        + \" \"\r\n        + obj.month\r\n        + \" \"\r\n        + obj.week\r\n        + (obj.year === \"\" ? \"\" : \" \" + obj.year)\r\n})\r\nwatch(expression, () => resolveExp())\r\nfunction shouldHide(key) {\r\n    return !(hideComponent.value && hideComponent.value.includes(key))\r\n}\r\nfunction resolveExp() {\r\n    // 反解析 表达式\r\n    if (expression.value) {\r\n        const arr = expression.value.split(/\\s+/)\r\n        if (arr.length >= 6) {\r\n            //6 位以上是合法表达式\r\n            let obj = {\r\n                second: arr[0],\r\n                min: arr[1],\r\n                hour: arr[2],\r\n                day: arr[3],\r\n                month: arr[4],\r\n                week: arr[5],\r\n                year: arr[6] ? arr[6] : \"\"\r\n            }\r\n            crontabValueObj.value = {\r\n                ...obj,\r\n            }\r\n        }\r\n    } else {\r\n        // 没有传入的表达式 则还原\r\n        clearCron()\r\n    }\r\n}\r\n// tab切换值\r\nfunction tabCheck(index) {\r\n    tabActive.value = index\r\n}\r\n// 由子组件触发，更改表达式组成的字段值\r\nfunction updateCrontabValue(name, value, from) {\r\n    crontabValueObj.value[name] = value\r\n}\r\n// 表单选项的子组件校验数字格式（通过-props传递）\r\nfunction checkNumber(value, minLimit, maxLimit) {\r\n    // 检查必须为整数\r\n    value = Math.floor(value)\r\n    if (value < minLimit) {\r\n        value = minLimit\r\n    } else if (value > maxLimit) {\r\n        value = maxLimit\r\n    }\r\n    return value\r\n}\r\n// 隐藏弹窗\r\nfunction hidePopup() {\r\n    emit(\"hide\")\r\n}\r\n// 填充表达式\r\nfunction submitFill() {\r\n    emit(\"fill\", crontabValueString.value)\r\n    hidePopup()\r\n}\r\nfunction clearCron() {\r\n    // 还原选择项\r\n    crontabValueObj.value = {\r\n        second: \"*\",\r\n        min: \"*\",\r\n        hour: \"*\",\r\n        day: \"*\",\r\n        month: \"*\",\r\n        week: \"?\",\r\n        year: \"\",\r\n    }\r\n}\r\nonMounted(() => {\r\n    expression.value = props.expression\r\n    hideComponent.value = props.hideComponent\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.pop_btn {\r\n    text-align: center;\r\n    margin-top: 20px;\r\n}\r\n.popup-main {\r\n    position: relative;\r\n    margin: 10px auto;\r\n    background: #fff;\r\n    border-radius: 5px;\r\n    font-size: 12px;\r\n    overflow: hidden;\r\n}\r\n.popup-title {\r\n    overflow: hidden;\r\n    line-height: 34px;\r\n    padding-top: 6px;\r\n    background: #f2f2f2;\r\n}\r\n.popup-result {\r\n    box-sizing: border-box;\r\n    line-height: 24px;\r\n    margin: 25px auto;\r\n    padding: 15px 10px 10px;\r\n    border: 1px solid #ccc;\r\n    position: relative;\r\n}\r\n.popup-result .title {\r\n    position: absolute;\r\n    top: -28px;\r\n    left: 50%;\r\n    width: 140px;\r\n    font-size: 14px;\r\n    margin-left: -70px;\r\n    text-align: center;\r\n    line-height: 30px;\r\n    background: #fff;\r\n}\r\n.popup-result table {\r\n    text-align: center;\r\n    width: 100%;\r\n    margin: 0 auto;\r\n}\r\n.popup-result table td:not(.result) {\r\n    width: 3.5rem;\r\n    min-width: 3.5rem;\r\n    max-width: 3.5rem;\r\n}\r\n.popup-result table span {\r\n    display: block;\r\n    width: 100%;\r\n    font-family: arial;\r\n    line-height: 30px;\r\n    height: 30px;\r\n    white-space: nowrap;\r\n    overflow: hidden;\r\n    border: 1px solid #e8e8e8;\r\n}\r\n.popup-result-scroll {\r\n    font-size: 12px;\r\n    line-height: 24px;\r\n    height: 10em;\r\n    overflow-y: auto;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/Crontab/min.vue",
    "content": "<template>\r\n    <el-form>\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"1\">\r\n                分钟，允许的通配符[, - * /]\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"2\">\r\n                周期从\r\n                <el-input-number v-model='cycle01' :min=\"0\" :max=\"58\" /> -\r\n                <el-input-number v-model='cycle02' :min=\"cycle01 + 1\" :max=\"59\" /> 分钟\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"3\">\r\n                从\r\n                <el-input-number v-model='average01' :min=\"0\" :max=\"58\" /> 分钟开始， 每\r\n                <el-input-number v-model='average02' :min=\"1\" :max=\"59 - average01\" /> 分钟执行一次\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"4\">\r\n                指定\r\n                <el-select clearable v-model=\"checkboxList\" placeholder=\"可多选\" multiple :multiple-limit=\"10\">\r\n                    <el-option v-for=\"item in 60\" :key=\"item\" :label=\"item - 1\" :value=\"item - 1\" />\r\n                </el-select>\r\n            </el-radio>\r\n        </el-form-item>\r\n    </el-form>\r\n</template>\r\n<script setup>\r\nconst emit = defineEmits(['update'])\r\nconst props = defineProps({\r\n    cron: {\r\n        type: Object,\r\n        default: {\r\n            second: \"*\",\r\n            min: \"*\",\r\n            hour: \"*\",\r\n            day: \"*\",\r\n            month: \"*\",\r\n            week: \"?\",\r\n            year: \"\",\r\n        }\r\n    },\r\n    check: {\r\n        type: Function,\r\n        default: () => {\r\n        }\r\n    }\r\n})\r\nconst radioValue = ref(1)\r\nconst cycle01 = ref(0)\r\nconst cycle02 = ref(1)\r\nconst average01 = ref(0)\r\nconst average02 = ref(1)\r\nconst checkboxList = ref([])\r\nconst checkCopy = ref([0])\r\nconst cycleTotal = computed(() => {\r\n    cycle01.value = props.check(cycle01.value, 0, 58)\r\n    cycle02.value = props.check(cycle02.value, cycle01.value + 1, 59)\r\n    return cycle01.value + '-' + cycle02.value\r\n})\r\nconst averageTotal = computed(() => {\r\n    average01.value = props.check(average01.value, 0, 58)\r\n    average02.value = props.check(average02.value, 1, 59 - average01.value)\r\n    return average01.value + '/' + average02.value\r\n})\r\nconst checkboxString = computed(() => {\r\n    return checkboxList.value.join(',')\r\n})\r\nwatch(() => props.cron.min, value => changeRadioValue(value))\r\nwatch([radioValue, cycleTotal, averageTotal, checkboxString], () => onRadioChange())\r\nfunction changeRadioValue(value) {\r\n    if (value === '*') {\r\n        radioValue.value = 1\r\n    } else if (value.indexOf('-') > -1) {\r\n        const indexArr = value.split('-')\r\n        cycle01.value = Number(indexArr[0])\r\n        cycle02.value = Number(indexArr[1])\r\n        radioValue.value = 2\r\n    } else if (value.indexOf('/') > -1) {\r\n        const indexArr = value.split('/')\r\n        average01.value = Number(indexArr[0])\r\n        average02.value = Number(indexArr[1])\r\n        radioValue.value = 3\r\n    } else {\r\n        checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))]\r\n        radioValue.value = 4\r\n    }\r\n}\r\nfunction onRadioChange() {\r\n    switch (radioValue.value) {\r\n        case 1:\r\n            emit('update', 'min', '*', 'min')\r\n            break\r\n        case 2:\r\n            emit('update', 'min', cycleTotal.value, 'min')\r\n            break\r\n        case 3:\r\n            emit('update', 'min', averageTotal.value, 'min')\r\n            break\r\n        case 4:\r\n            if (checkboxList.value.length === 0) {\r\n                checkboxList.value.push(checkCopy.value[0])\r\n            } else {\r\n                checkCopy.value = checkboxList.value\r\n            }\r\n            emit('update', 'min', checkboxString.value, 'min')\r\n            break\r\n    }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.el-input-number--small, .el-select, .el-select--small {\r\n    margin: 0 0.2rem;\r\n}\r\n.el-select, .el-select--small {\r\n    width: 19.8rem;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/Crontab/month.vue",
    "content": "<template>\r\n    <el-form>\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"1\">\r\n                月，允许的通配符[, - * /]\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"2\">\r\n                周期从\r\n                <el-input-number v-model='cycle01' :min=\"1\" :max=\"11\" /> -\r\n                <el-input-number v-model='cycle02' :min=\"cycle01 + 1\" :max=\"12\" /> 月\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"3\">\r\n                从\r\n                <el-input-number v-model='average01' :min=\"1\" :max=\"11\" /> 月开始，每\r\n                <el-input-number v-model='average02' :min=\"1\" :max=\"12 - average01\" /> 月月执行一次\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"4\">\r\n                指定\r\n                <el-select clearable v-model=\"checkboxList\" placeholder=\"可多选\" multiple :multiple-limit=\"8\">\r\n                    <el-option v-for=\"item in monthList\" :key=\"item.key\" :label=\"item.value\" :value=\"item.key\" />\r\n                </el-select>\r\n            </el-radio>\r\n        </el-form-item>\r\n    </el-form>\r\n</template>\r\n\r\n<script setup>\r\nconst emit = defineEmits(['update'])\r\nconst props = defineProps({\r\n    cron: {\r\n        type: Object,\r\n        default: {\r\n            second: \"*\",\r\n            min: \"*\",\r\n            hour: \"*\",\r\n            day: \"*\",\r\n            month: \"*\",\r\n            week: \"?\",\r\n            year: \"\",\r\n        }\r\n    },\r\n    check: {\r\n        type: Function,\r\n        default: () => {\r\n        }\r\n    }\r\n})\r\nconst radioValue = ref(1)\r\nconst cycle01 = ref(1)\r\nconst cycle02 = ref(2)\r\nconst average01 = ref(1)\r\nconst average02 = ref(1)\r\nconst checkboxList = ref([])\r\nconst checkCopy = ref([1])\r\nconst monthList = ref([\r\n    {key: 1, value: '一月'},\r\n    {key: 2, value: '二月'},\r\n    {key: 3, value: '三月'},\r\n    {key: 4, value: '四月'},\r\n    {key: 5, value: '五月'},\r\n    {key: 6, value: '六月'},\r\n    {key: 7, value: '七月'},\r\n    {key: 8, value: '八月'},\r\n    {key: 9, value: '九月'},\r\n    {key: 10, value: '十月'},\r\n    {key: 11, value: '十一月'},\r\n    {key: 12, value: '十二月'}\r\n])\r\nconst cycleTotal = computed(() => {\r\n    cycle01.value = props.check(cycle01.value, 1, 11)\r\n    cycle02.value = props.check(cycle02.value, cycle01.value + 1, 12)\r\n    return cycle01.value + '-' + cycle02.value\r\n})\r\nconst averageTotal = computed(() => {\r\n    average01.value = props.check(average01.value, 1, 11)\r\n    average02.value = props.check(average02.value, 1, 12 - average01.value)\r\n    return average01.value + '/' + average02.value\r\n})\r\nconst checkboxString = computed(() => {\r\n    return checkboxList.value.join(',')\r\n})\r\nwatch(() => props.cron.month, value => changeRadioValue(value))\r\nwatch([radioValue, cycleTotal, averageTotal, checkboxString], () => onRadioChange())\r\nfunction changeRadioValue(value) {\r\n    if (value === '*') {\r\n        radioValue.value = 1\r\n    } else if (value.indexOf('-') > -1) {\r\n        const indexArr = value.split('-')\r\n        cycle01.value = Number(indexArr[0])\r\n        cycle02.value = Number(indexArr[1])\r\n        radioValue.value = 2\r\n    } else if (value.indexOf('/') > -1) {\r\n        const indexArr = value.split('/')\r\n        average01.value = Number(indexArr[0])\r\n        average02.value = Number(indexArr[1])\r\n        radioValue.value = 3\r\n    } else {\r\n        checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))]\r\n        radioValue.value = 4\r\n    }\r\n}\r\nfunction onRadioChange() {\r\n    switch (radioValue.value) {\r\n        case 1:\r\n            emit('update', 'month', '*', 'month')\r\n            break\r\n        case 2:\r\n            emit('update', 'month', cycleTotal.value, 'month')\r\n            break\r\n        case 3:\r\n            emit('update', 'month', averageTotal.value, 'month')\r\n            break\r\n        case 4:\r\n            if (checkboxList.value.length === 0) {\r\n                checkboxList.value.push(checkCopy.value[0])\r\n            } else {\r\n                checkCopy.value = checkboxList.value\r\n            }\r\n            emit('update', 'month', checkboxString.value, 'month')\r\n            break\r\n    }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.el-input-number--small, .el-select, .el-select--small {\r\n    margin: 0 0.2rem;\r\n}\r\n.el-select, .el-select--small {\r\n    width: 18.8rem;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/Crontab/result.vue",
    "content": "<template>\r\n\t<div class=\"popup-result\">\r\n\t\t<p class=\"title\">最近5次运行时间</p>\r\n\t\t<ul class=\"popup-result-scroll\">\r\n\t\t\t<template v-if='isShow'>\r\n\t\t\t\t<li v-for='item in resultList' :key=\"item\">{{item}}</li>\r\n\t\t\t</template>\r\n\t\t\t<li v-else>计算结果中...</li>\r\n\t\t</ul>\r\n\t</div>\r\n</template>\r\n\r\n<script setup>\r\nconst props = defineProps({\r\n    ex: {\r\n        type: String,\r\n        default: ''\r\n    }\r\n})\r\nconst dayRule = ref('')\r\nconst dayRuleSup = ref('')\r\nconst dateArr = ref([])\r\nconst resultList = ref([])\r\nconst isShow = ref(false)\r\nwatch(() => props.ex, () => expressionChange())\r\n// 表达式值变化时，开始去计算结果\r\nfunction expressionChange() {\r\n    // 计算开始-隐藏结果\r\n    isShow.value = false;\r\n    // 获取规则数组[0秒、1分、2时、3日、4月、5星期、6年]\r\n    let ruleArr = props.ex.split(' ');\r\n    // 用于记录进入循环的次数\r\n    let nums = 0;\r\n    // 用于暂时存符号时间规则结果的数组\r\n    let resultArr = [];\r\n    // 获取当前时间精确至[年、月、日、时、分、秒]\r\n    let nTime = new Date();\r\n    let nYear = nTime.getFullYear();\r\n    let nMonth = nTime.getMonth() + 1;\r\n    let nDay = nTime.getDate();\r\n    let nHour = nTime.getHours();\r\n    let nMin = nTime.getMinutes();\r\n    let nSecond = nTime.getSeconds();\r\n    // 根据规则获取到近100年可能年数组、月数组等等\r\n    getSecondArr(ruleArr[0]);\r\n    getMinArr(ruleArr[1]);\r\n    getHourArr(ruleArr[2]);\r\n    getDayArr(ruleArr[3]);\r\n    getMonthArr(ruleArr[4]);\r\n    getWeekArr(ruleArr[5]);\r\n    getYearArr(ruleArr[6], nYear);\r\n    // 将获取到的数组赋值-方便使用\r\n    let sDate = dateArr.value[0];\r\n    let mDate = dateArr.value[1];\r\n    let hDate = dateArr.value[2];\r\n    let DDate = dateArr.value[3];\r\n    let MDate = dateArr.value[4];\r\n    let YDate = dateArr.value[5];\r\n    // 获取当前时间在数组中的索引\r\n    let sIdx = getIndex(sDate, nSecond);\r\n    let mIdx = getIndex(mDate, nMin);\r\n    let hIdx = getIndex(hDate, nHour);\r\n    let DIdx = getIndex(DDate, nDay);\r\n    let MIdx = getIndex(MDate, nMonth);\r\n    let YIdx = getIndex(YDate, nYear);\r\n    // 重置月日时分秒的函数(后面用的比较多)\r\n    const resetSecond = function () {\r\n        sIdx = 0;\r\n        nSecond = sDate[sIdx]\r\n    }\r\n    const resetMin = function () {\r\n        mIdx = 0;\r\n        nMin = mDate[mIdx]\r\n        resetSecond();\r\n    }\r\n    const resetHour = function () {\r\n        hIdx = 0;\r\n        nHour = hDate[hIdx]\r\n        resetMin();\r\n    }\r\n    const resetDay = function () {\r\n        DIdx = 0;\r\n        nDay = DDate[DIdx]\r\n        resetHour();\r\n    }\r\n    const resetMonth = function () {\r\n        MIdx = 0;\r\n        nMonth = MDate[MIdx]\r\n        resetDay();\r\n    }\r\n    // 如果当前年份不为数组中当前值\r\n    if (nYear !== YDate[YIdx]) {\r\n        resetMonth();\r\n    }\r\n    // 如果当前月份不为数组中当前值\r\n    if (nMonth !== MDate[MIdx]) {\r\n        resetDay();\r\n    }\r\n    // 如果当前“日”不为数组中当前值\r\n    if (nDay !== DDate[DIdx]) {\r\n        resetHour();\r\n    }\r\n    // 如果当前“时”不为数组中当前值\r\n    if (nHour !== hDate[hIdx]) {\r\n        resetMin();\r\n    }\r\n    // 如果当前“分”不为数组中当前值\r\n    if (nMin !== mDate[mIdx]) {\r\n        resetSecond();\r\n    }\r\n    // 循环年份数组\r\n    goYear: for (let Yi = YIdx; Yi < YDate.length; Yi++) {\r\n        let YY = YDate[Yi];\r\n        // 如果到达最大值时\r\n        if (nMonth > MDate[MDate.length - 1]) {\r\n            resetMonth();\r\n            continue;\r\n        }\r\n        // 循环月份数组\r\n        goMonth: for (let Mi = MIdx; Mi < MDate.length; Mi++) {\r\n            // 赋值、方便后面运算\r\n            let MM = MDate[Mi];\r\n            MM = MM < 10 ? '0' + MM : MM;\r\n            // 如果到达最大值时\r\n            if (nDay > DDate[DDate.length - 1]) {\r\n                resetDay();\r\n                if (Mi === MDate.length - 1) {\r\n                    resetMonth();\r\n                    continue goYear;\r\n                }\r\n                continue;\r\n            }\r\n            // 循环日期数组\r\n            goDay: for (let Di = DIdx; Di < DDate.length; Di++) {\r\n                // 赋值、方便后面运算\r\n                let DD = DDate[Di];\r\n                let thisDD = DD < 10 ? '0' + DD : DD;\r\n                // 如果到达最大值时\r\n                if (nHour > hDate[hDate.length - 1]) {\r\n                    resetHour();\r\n                    if (Di === DDate.length - 1) {\r\n                        resetDay();\r\n                        if (Mi === MDate.length - 1) {\r\n                            resetMonth();\r\n                            continue goYear;\r\n                        }\r\n                        continue goMonth;\r\n                    }\r\n                    continue;\r\n                }\r\n                // 判断日期的合法性，不合法的话也是跳出当前循环\r\n                if (checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true && dayRule.value !== 'workDay' && dayRule.value !== 'lastWeek' && dayRule.value !== 'lastDay') {\r\n                    resetDay();\r\n                    continue goMonth;\r\n                }\r\n                // 如果日期规则中有值时\r\n                if (dayRule.value === 'lastDay') {\r\n                    // 如果不是合法日期则需要将前将日期调到合法日期即月末最后一天\r\n                    if (checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n                        while (DD > 0 && checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n                            DD--;\r\n                            thisDD = DD < 10 ? '0' + DD : DD;\r\n                        }\r\n                    }\r\n                } else if (dayRule.value === 'workDay') {\r\n                    // 校验并调整如果是2月30号这种日期传进来时需调整至正常月底\r\n                    if (checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n                        while (DD > 0 && checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n                            DD--;\r\n                            thisDD = DD < 10 ? '0' + DD : DD;\r\n                        }\r\n                    }\r\n                    // 获取达到条件的日期是星期X\r\n                    let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week');\r\n                    // 当星期日时\r\n                    if (thisWeek === 1) {\r\n                        // 先找下一个日，并判断是否为月底\r\n                        DD++;\r\n                        thisDD = DD < 10 ? '0' + DD : DD;\r\n                        // 判断下一日已经不是合法日期\r\n                        if (checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n                            DD -= 3;\r\n                        }\r\n                    } else if (thisWeek === 7) {\r\n                        // 当星期6时只需判断不是1号就可进行操作\r\n                        if (dayRuleSup.value !== 1) {\r\n                            DD--;\r\n                        } else {\r\n                            DD += 2;\r\n                        }\r\n                    }\r\n                } else if (dayRule.value === 'weekDay') {\r\n                    // 如果指定了是星期几\r\n                    // 获取当前日期是属于星期几\r\n                    let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week');\r\n                    // 校验当前星期是否在星期池（dayRuleSup）中\r\n                    if (dayRuleSup.value.indexOf(thisWeek) < 0) {\r\n                        // 如果到达最大值时\r\n                        if (Di === DDate.length - 1) {\r\n                            resetDay();\r\n                            if (Mi === MDate.length - 1) {\r\n                                resetMonth();\r\n                                continue goYear;\r\n                            }\r\n                            continue goMonth;\r\n                        }\r\n                        continue;\r\n                    }\r\n                } else if (dayRule.value === 'assWeek') {\r\n                    // 如果指定了是第几周的星期几\r\n                    // 获取每月1号是属于星期几\r\n                    let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week');\r\n                    if (dayRuleSup.value[1] >= thisWeek) {\r\n                        DD = (dayRuleSup.value[0] - 1) * 7 + dayRuleSup.value[1] - thisWeek + 1;\r\n                    } else {\r\n                        DD = dayRuleSup.value[0] * 7 + dayRuleSup.value[1] - thisWeek + 1;\r\n                    }\r\n                } else if (dayRule.value === 'lastWeek') {\r\n                    // 如果指定了每月最后一个星期几\r\n                    // 校验并调整如果是2月30号这种日期传进来时需调整至正常月底\r\n                    if (checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n                        while (DD > 0 && checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {\r\n                            DD--;\r\n                            thisDD = DD < 10 ? '0' + DD : DD;\r\n                        }\r\n                    }\r\n                    // 获取月末最后一天是星期几\r\n                    let thisWeek = formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week');\r\n                    // 找到要求中最近的那个星期几\r\n                    if (dayRuleSup.value < thisWeek) {\r\n                        DD -= thisWeek - dayRuleSup.value;\r\n                    } else if (dayRuleSup.value > thisWeek) {\r\n                        DD -= 7 - (dayRuleSup.value - thisWeek)\r\n                    }\r\n                }\r\n                // 判断时间值是否小于10置换成“05”这种格式\r\n                DD = DD < 10 ? '0' + DD : DD;\r\n                // 循环“时”数组\r\n                goHour: for (let hi = hIdx; hi < hDate.length; hi++) {\r\n                    let hh = hDate[hi] < 10 ? '0' + hDate[hi] : hDate[hi]\r\n                    // 如果到达最大值时\r\n                    if (nMin > mDate[mDate.length - 1]) {\r\n                        resetMin();\r\n                        if (hi === hDate.length - 1) {\r\n                            resetHour();\r\n                            if (Di === DDate.length - 1) {\r\n                                resetDay();\r\n                                if (Mi === MDate.length - 1) {\r\n                                    resetMonth();\r\n                                    continue goYear;\r\n                                }\r\n                                continue goMonth;\r\n                            }\r\n                            continue goDay;\r\n                        }\r\n                        continue;\r\n                    }\r\n                    // 循环\"分\"数组\r\n                    goMin: for (let mi = mIdx; mi < mDate.length; mi++) {\r\n                        let mm = mDate[mi] < 10 ? '0' + mDate[mi] : mDate[mi];\r\n                        // 如果到达最大值时\r\n                        if (nSecond > sDate[sDate.length - 1]) {\r\n                            resetSecond();\r\n                            if (mi === mDate.length - 1) {\r\n                                resetMin();\r\n                                if (hi === hDate.length - 1) {\r\n                                    resetHour();\r\n                                    if (Di === DDate.length - 1) {\r\n                                        resetDay();\r\n                                        if (Mi === MDate.length - 1) {\r\n                                            resetMonth();\r\n                                            continue goYear;\r\n                                        }\r\n                                        continue goMonth;\r\n                                    }\r\n                                    continue goDay;\r\n                                }\r\n                                continue goHour;\r\n                            }\r\n                            continue;\r\n                        }\r\n                        // 循环\"秒\"数组\r\n                        goSecond: for (let si = sIdx; si <= sDate.length - 1; si++) {\r\n                            let ss = sDate[si] < 10 ? '0' + sDate[si] : sDate[si];\r\n                            // 添加当前时间（时间合法性在日期循环时已经判断）\r\n                            if (MM !== '00' && DD !== '00') {\r\n                                resultArr.push(YY + '-' + MM + '-' + DD + ' ' + hh + ':' + mm + ':' + ss)\r\n                                nums++;\r\n                            }\r\n                            // 如果条数满了就退出循环\r\n                            if (nums === 5) break goYear;\r\n                            // 如果到达最大值时\r\n                            if (si === sDate.length - 1) {\r\n                                resetSecond();\r\n                                if (mi === mDate.length - 1) {\r\n                                    resetMin();\r\n                                    if (hi === hDate.length - 1) {\r\n                                        resetHour();\r\n                                        if (Di === DDate.length - 1) {\r\n                                            resetDay();\r\n                                            if (Mi === MDate.length - 1) {\r\n                                                resetMonth();\r\n                                                continue goYear;\r\n                                            }\r\n                                            continue goMonth;\r\n                                        }\r\n                                        continue goDay;\r\n                                    }\r\n                                    continue goHour;\r\n                                }\r\n                                continue goMin;\r\n                            }\r\n                        } //goSecond\r\n                    } //goMin\r\n                }//goHour\r\n            }//goDay\r\n        }//goMonth\r\n    }\r\n    // 判断100年内的结果条数\r\n    if (resultArr.length === 0) {\r\n        resultList.value = ['没有达到条件的结果！'];\r\n    } else {\r\n        resultList.value = resultArr;\r\n        if (resultArr.length !== 5) {\r\n            resultList.value.push('最近100年内只有上面' + resultArr.length + '条结果！')\r\n        }\r\n    }\r\n    // 计算完成-显示结果\r\n    isShow.value = true;\r\n}\r\n// 用于计算某位数字在数组中的索引\r\nfunction getIndex(arr, value) {\r\n    if (value <= arr[0] || value > arr[arr.length - 1]) {\r\n        return 0;\r\n    } else {\r\n        for (let i = 0; i < arr.length - 1; i++) {\r\n            if (value > arr[i] && value <= arr[i + 1]) {\r\n                return i + 1;\r\n            }\r\n        }\r\n    }\r\n}\r\n// 获取\"年\"数组\r\nfunction getYearArr(rule, year) {\r\n    dateArr.value[5] = getOrderArr(year, year + 100);\r\n    if (rule !== undefined) {\r\n        if (rule.indexOf('-') >= 0) {\r\n            dateArr.value[5] = getCycleArr(rule, year + 100, false)\r\n        } else if (rule.indexOf('/') >= 0) {\r\n            dateArr.value[5] = getAverageArr(rule, year + 100)\r\n        } else if (rule !== '*') {\r\n            dateArr.value[5] = getAssignArr(rule)\r\n        }\r\n    }\r\n}\r\n// 获取\"月\"数组\r\nfunction getMonthArr(rule) {\r\n    dateArr.value[4] = getOrderArr(1, 12);\r\n    if (rule.indexOf('-') >= 0) {\r\n        dateArr.value[4] = getCycleArr(rule, 12, false)\r\n    } else if (rule.indexOf('/') >= 0) {\r\n        dateArr.value[4] = getAverageArr(rule, 12)\r\n    } else if (rule !== '*') {\r\n        dateArr.value[4] = getAssignArr(rule)\r\n    }\r\n}\r\n// 获取\"日\"数组-主要为日期规则\r\nfunction getWeekArr(rule) {\r\n    // 只有当日期规则的两个值均为“”时则表达日期是有选项的\r\n    if (dayRule.value === '' && dayRuleSup.value === '') {\r\n        if (rule.indexOf('-') >= 0) {\r\n            dayRule.value = 'weekDay';\r\n            dayRuleSup.value = getCycleArr(rule, 7, false)\r\n        } else if (rule.indexOf('#') >= 0) {\r\n            dayRule.value = 'assWeek';\r\n            let matchRule = rule.match(/[0-9]{1}/g);\r\n            dayRuleSup.value = [Number(matchRule[1]), Number(matchRule[0])];\r\n            dateArr.value[3] = [1];\r\n            if (dayRuleSup.value[1] === 7) {\r\n                dayRuleSup.value[1] = 0;\r\n            }\r\n        } else if (rule.indexOf('L') >= 0) {\r\n            dayRule.value = 'lastWeek';\r\n            dayRuleSup.value = Number(rule.match(/[0-9]{1,2}/g)[0]);\r\n            dateArr.value[3] = [31];\r\n            if (dayRuleSup.value === 7) {\r\n                dayRuleSup.value = 0;\r\n            }\r\n        } else if (rule !== '*' && rule !== '?') {\r\n            dayRule.value = 'weekDay';\r\n            dayRuleSup.value = getAssignArr(rule)\r\n        }\r\n    }\r\n}\r\n// 获取\"日\"数组-少量为日期规则\r\nfunction getDayArr(rule) {\r\n    dateArr.value[3] = getOrderArr(1, 31);\r\n    dayRule.value = '';\r\n    dayRuleSup.value = '';\r\n    if (rule.indexOf('-') >= 0) {\r\n        dateArr.value[3] = getCycleArr(rule, 31, false)\r\n        dayRuleSup.value = 'null';\r\n    } else if (rule.indexOf('/') >= 0) {\r\n        dateArr.value[3] = getAverageArr(rule, 31)\r\n        dayRuleSup.value = 'null';\r\n    } else if (rule.indexOf('W') >= 0) {\r\n        dayRule.value = 'workDay';\r\n        dayRuleSup.value = Number(rule.match(/[0-9]{1,2}/g)[0]);\r\n        dateArr.value[3] = [dayRuleSup.value];\r\n    } else if (rule.indexOf('L') >= 0) {\r\n        dayRule.value = 'lastDay';\r\n        dayRuleSup.value = 'null';\r\n        dateArr.value[3] = [31];\r\n    } else if (rule !== '*' && rule !== '?') {\r\n        dateArr.value[3] = getAssignArr(rule)\r\n        dayRuleSup.value = 'null';\r\n    } else if (rule === '*') {\r\n        dayRuleSup.value = 'null';\r\n    }\r\n}\r\n// 获取\"时\"数组\r\nfunction getHourArr(rule) {\r\n    dateArr.value[2] = getOrderArr(0, 23);\r\n    if (rule.indexOf('-') >= 0) {\r\n        dateArr.value[2] = getCycleArr(rule, 24, true)\r\n    } else if (rule.indexOf('/') >= 0) {\r\n        dateArr.value[2] = getAverageArr(rule, 23)\r\n    } else if (rule !== '*') {\r\n        dateArr.value[2] = getAssignArr(rule)\r\n    }\r\n}\r\n// 获取\"分\"数组\r\nfunction getMinArr(rule) {\r\n    dateArr.value[1] = getOrderArr(0, 59);\r\n    if (rule.indexOf('-') >= 0) {\r\n        dateArr.value[1] = getCycleArr(rule, 60, true)\r\n    } else if (rule.indexOf('/') >= 0) {\r\n        dateArr.value[1] = getAverageArr(rule, 59)\r\n    } else if (rule !== '*') {\r\n        dateArr.value[1] = getAssignArr(rule)\r\n    }\r\n}\r\n// 获取\"秒\"数组\r\nfunction getSecondArr(rule) {\r\n    dateArr.value[0] = getOrderArr(0, 59);\r\n    if (rule.indexOf('-') >= 0) {\r\n        dateArr.value[0] = getCycleArr(rule, 60, true)\r\n    } else if (rule.indexOf('/') >= 0) {\r\n        dateArr.value[0] = getAverageArr(rule, 59)\r\n    } else if (rule !== '*') {\r\n        dateArr.value[0] = getAssignArr(rule)\r\n    }\r\n}\r\n// 根据传进来的min-max返回一个顺序的数组\r\nfunction getOrderArr(min, max) {\r\n    let arr = [];\r\n    for (let i = min; i <= max; i++) {\r\n        arr.push(i);\r\n    }\r\n    return arr;\r\n}\r\n// 根据规则中指定的零散值返回一个数组\r\nfunction getAssignArr(rule) {\r\n    let arr = [];\r\n    let assiginArr = rule.split(',');\r\n    for (let i = 0; i < assiginArr.length; i++) {\r\n        arr[i] = Number(assiginArr[i])\r\n    }\r\n    arr.sort(compare)\r\n    return arr;\r\n}\r\n// 根据一定算术规则计算返回一个数组\r\nfunction getAverageArr(rule, limit) {\r\n    let arr = [];\r\n    let agArr = rule.split('/');\r\n    let min = Number(agArr[0]);\r\n    let step = Number(agArr[1]);\r\n    while (min <= limit) {\r\n        arr.push(min);\r\n        min += step;\r\n    }\r\n    return arr;\r\n}\r\n// 根据规则返回一个具有周期性的数组\r\nfunction getCycleArr(rule, limit, status) {\r\n    // status--表示是否从0开始（则从1开始）\r\n    let arr = [];\r\n    let cycleArr = rule.split('-');\r\n    let min = Number(cycleArr[0]);\r\n    let max = Number(cycleArr[1]);\r\n    if (min > max) {\r\n        max += limit;\r\n    }\r\n    for (let i = min; i <= max; i++) {\r\n        let add = 0;\r\n        if (status === false && i % limit === 0) {\r\n            add = limit;\r\n        }\r\n        arr.push(Math.round(i % limit + add))\r\n    }\r\n    arr.sort(compare)\r\n    return arr;\r\n}\r\n// 比较数字大小（用于Array.sort）\r\nfunction compare(value1, value2) {\r\n    if (value2 - value1 > 0) {\r\n        return -1;\r\n    } else {\r\n        return 1;\r\n    }\r\n}\r\n// 格式化日期格式如：2017-9-19 18:04:33\r\nfunction formatDate(value, type) {\r\n    // 计算日期相关值\r\n    let time = typeof value == 'number' ? new Date(value) : value;\r\n    let Y = time.getFullYear();\r\n    let M = time.getMonth() + 1;\r\n    let D = time.getDate();\r\n    let h = time.getHours();\r\n    let m = time.getMinutes();\r\n    let s = time.getSeconds();\r\n    let week = time.getDay();\r\n    // 如果传递了type的话\r\n    if (type === undefined) {\r\n        return Y + '-' + (M < 10 ? '0' + M : M) + '-' + (D < 10 ? '0' + D : D) + ' ' + (h < 10 ? '0' + h : h) + ':' + (m < 10 ? '0' + m : m) + ':' + (s < 10 ? '0' + s : s);\r\n    } else if (type === 'week') {\r\n        // 在quartz中 1为星期日\r\n        return week + 1;\r\n    }\r\n}\r\n// 检查日期是否存在\r\nfunction checkDate(value) {\r\n    let time = new Date(value);\r\n    let format = formatDate(time)\r\n    return value === format;\r\n}\r\nonMounted(() => {\r\n    expressionChange()\r\n})\r\n</script>"
  },
  {
    "path": "front/src/components/Crontab/second.vue",
    "content": "<template>\r\n    <el-form>\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"1\">\r\n                秒，允许的通配符[, - * /]\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"2\">\r\n                周期从\r\n                <el-input-number v-model='cycle01' :min=\"0\" :max=\"58\" /> -\r\n                <el-input-number v-model='cycle02' :min=\"cycle01 + 1\" :max=\"59\" /> 秒\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"3\">\r\n                从\r\n                <el-input-number v-model='average01' :min=\"0\" :max=\"58\" /> 秒开始，每\r\n                <el-input-number v-model='average02' :min=\"1\" :max=\"59 - average01\" /> 秒执行一次\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"4\">\r\n                指定\r\n                <el-select clearable v-model=\"checkboxList\" placeholder=\"可多选\" multiple :multiple-limit=\"10\">\r\n                    <el-option v-for=\"item in 60\" :key=\"item\" :label=\"item - 1\" :value=\"item - 1\" />\r\n                </el-select>\r\n            </el-radio>\r\n        </el-form-item>\r\n    </el-form>\r\n</template>\r\n\r\n<script setup>\r\nconst emit = defineEmits(['update'])\r\nconst props = defineProps({\r\n    cron: {\r\n        type: Object,\r\n        default: {\r\n            second: \"*\",\r\n            min: \"*\",\r\n            hour: \"*\",\r\n            day: \"*\",\r\n            month: \"*\",\r\n            week: \"?\",\r\n            year: \"\",\r\n        }\r\n    },\r\n    check: {\r\n        type: Function,\r\n        default: () => {\r\n        }\r\n    }\r\n})\r\nconst radioValue = ref(1)\r\nconst cycle01 = ref(0)\r\nconst cycle02 = ref(1)\r\nconst average01 = ref(0)\r\nconst average02 = ref(1)\r\nconst checkboxList = ref([])\r\nconst checkCopy = ref([0])\r\nconst cycleTotal = computed(() => {\r\n    cycle01.value = props.check(cycle01.value, 0, 58)\r\n    cycle02.value = props.check(cycle02.value, cycle01.value + 1, 59)\r\n    return cycle01.value + '-' + cycle02.value\r\n})\r\nconst averageTotal = computed(() => {\r\n    average01.value = props.check(average01.value, 0, 58)\r\n    average02.value = props.check(average02.value, 1, 59 - average01.value)\r\n    return average01.value + '/' + average02.value\r\n})\r\nconst checkboxString = computed(() => {\r\n    return checkboxList.value.join(',')\r\n})\r\nwatch(() => props.cron.second, value => changeRadioValue(value))\r\nwatch([radioValue, cycleTotal, averageTotal, checkboxString], () => onRadioChange())\r\nfunction changeRadioValue(value) {\r\n    if (value === '*') {\r\n        radioValue.value = 1\r\n    } else if (value.indexOf('-') > -1) {\r\n        const indexArr = value.split('-')\r\n        cycle01.value = Number(indexArr[0])\r\n        cycle02.value = Number(indexArr[1])\r\n        radioValue.value = 2\r\n    } else if (value.indexOf('/') > -1) {\r\n        const indexArr = value.split('/')\r\n        average01.value = Number(indexArr[0])\r\n        average02.value = Number(indexArr[1])\r\n        radioValue.value = 3\r\n    } else {\r\n        checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))]\r\n        radioValue.value = 4\r\n    }\r\n}\r\n// 单选按钮值变化时\r\nfunction onRadioChange() {\r\n    switch (radioValue.value) {\r\n        case 1:\r\n            emit('update', 'second', '*', 'second')\r\n            break\r\n        case 2:\r\n            emit('update', 'second', cycleTotal.value, 'second')\r\n            break\r\n        case 3:\r\n            emit('update', 'second', averageTotal.value, 'second')\r\n            break\r\n        case 4:\r\n            if (checkboxList.value.length === 0) {\r\n                checkboxList.value.push(checkCopy.value[0])\r\n            } else {\r\n                checkCopy.value = checkboxList.value\r\n            }\r\n            emit('update', 'second', checkboxString.value, 'second')\r\n            break\r\n    }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.el-input-number--small, .el-select, .el-select--small {\r\n    margin: 0 0.2rem;\r\n}\r\n.el-select, .el-select--small {\r\n    width: 18.8rem;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/Crontab/week.vue",
    "content": "<template>\r\n    <el-form>\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"1\">\r\n                周，允许的通配符[, - * ? / L #]\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"2\">\r\n                不指定\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"3\">\r\n                周期从\r\n                <el-select clearable v-model=\"cycle01\">\r\n                    <el-option\r\n                        v-for=\"(item,index) of weekList\"\r\n                        :key=\"index\"\r\n                        :label=\"item.value\"\r\n                        :value=\"item.key\"\r\n                        :disabled=\"item.key === 7\"\r\n                    >{{item.value}}</el-option>\r\n                </el-select>\r\n                -\r\n                <el-select clearable v-model=\"cycle02\">\r\n                    <el-option\r\n                        v-for=\"(item,index) of weekList\"\r\n                        :key=\"index\"\r\n                        :label=\"item.value\"\r\n                        :value=\"item.key\"\r\n                        :disabled=\"item.key <= cycle01\"\r\n                    >{{item.value}}</el-option>\r\n                </el-select>\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"4\">\r\n                第\r\n                <el-input-number v-model='average01' :min=\"1\" :max=\"4\" /> 周的\r\n                <el-select clearable v-model=\"average02\">\r\n                    <el-option v-for=\"item in weekList\" :key=\"item.key\" :label=\"item.value\" :value=\"item.key\" />\r\n                </el-select>\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"5\">\r\n                本月最后一个\r\n                <el-select clearable v-model=\"weekday\">\r\n                    <el-option v-for=\"item in weekList\" :key=\"item.key\" :label=\"item.value\" :value=\"item.key\" />\r\n                </el-select>\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio v-model='radioValue' :label=\"6\">\r\n                指定\r\n                <el-select class=\"multiselect\" clearable v-model=\"checkboxList\" placeholder=\"可多选\" multiple :multiple-limit=\"6\">\r\n                    <el-option v-for=\"item in weekList\" :key=\"item.key\" :label=\"item.value\" :value=\"item.key\" />\r\n                </el-select>\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n    </el-form>\r\n</template>\r\n\r\n<script setup>\r\nconst emit = defineEmits(['update'])\r\nconst props = defineProps({\r\n    cron: {\r\n        type: Object,\r\n        default: {\r\n            second: \"*\",\r\n            min: \"*\",\r\n            hour: \"*\",\r\n            day: \"*\",\r\n            month: \"*\",\r\n            week: \"?\",\r\n            year: \"\"\r\n        }\r\n    },\r\n    check: {\r\n        type: Function,\r\n        default: () => {\r\n        }\r\n    }\r\n})\r\nconst radioValue = ref(2)\r\nconst cycle01 = ref(2)\r\nconst cycle02 = ref(3)\r\nconst average01 = ref(1)\r\nconst average02 = ref(2)\r\nconst weekday = ref(2)\r\nconst checkboxList = ref([])\r\nconst checkCopy = ref([2])\r\nconst weekList = ref([\r\n    {key: 1, value: '星期日'},\r\n    {key: 2, value: '星期一'},\r\n    {key: 3, value: '星期二'},\r\n    {key: 4, value: '星期三'},\r\n    {key: 5, value: '星期四'},\r\n    {key: 6, value: '星期五'},\r\n    {key: 7, value: '星期六'}\r\n])\r\nconst cycleTotal = computed(() => {\r\n    cycle01.value = props.check(cycle01.value, 1, 6)\r\n    cycle02.value = props.check(cycle02.value, cycle01.value + 1, 7)\r\n    return cycle01.value + '-' + cycle02.value\r\n})\r\nconst averageTotal = computed(() => {\r\n    average01.value = props.check(average01.value, 1, 4)\r\n    average02.value = props.check(average02.value, 1, 7)\r\n    return average02.value + '#' + average01.value\r\n})\r\nconst weekdayTotal = computed(() => {\r\n    weekday.value = props.check(weekday.value, 1, 7)\r\n    return weekday.value + 'L'\r\n})\r\nconst checkboxString = computed(() => {\r\n    return checkboxList.value.join(',')\r\n})\r\nwatch(() => props.cron.week, value => changeRadioValue(value))\r\nwatch([radioValue, cycleTotal, averageTotal, weekdayTotal, checkboxString], () => onRadioChange())\r\nfunction changeRadioValue(value) {\r\n    if (value === \"*\") {\r\n        radioValue.value = 1\r\n    } else if (value === \"?\") {\r\n        radioValue.value = 2\r\n    } else if (value.indexOf(\"-\") > -1) {\r\n        const indexArr = value.split('-')\r\n        cycle01.value = Number(indexArr[0])\r\n        cycle02.value = Number(indexArr[1])\r\n        radioValue.value = 3\r\n    } else if (value.indexOf(\"#\") > -1) {\r\n        const indexArr = value.split('#')\r\n        average01.value = Number(indexArr[1])\r\n        average02.value = Number(indexArr[0])\r\n        radioValue.value = 4\r\n    } else if (value.indexOf(\"L\") > -1) {\r\n        const indexArr = value.split(\"L\")\r\n        weekday.value = Number(indexArr[0])\r\n        radioValue.value = 5\r\n    } else {\r\n        checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))]\r\n        radioValue.value = 6\r\n    }\r\n}\r\nfunction onRadioChange() {\r\n    if (radioValue.value === 2 && props.cron.day === '?') {\r\n        emit('update', 'day', '*', 'week')\r\n    }\r\n    if (radioValue.value !== 2 && props.cron.day !== '?') {\r\n        emit('update', 'day', '?', 'week')\r\n    }\r\n    switch (radioValue.value) {\r\n        case 1:\r\n            emit('update', 'week', '*', 'week')\r\n            break\r\n        case 2:\r\n            emit('update', 'week', '?', 'week')\r\n            break\r\n        case 3:\r\n            emit('update', 'week', cycleTotal.value, 'week')\r\n            break\r\n        case 4:\r\n            emit('update', 'week', averageTotal.value, 'week')\r\n            break\r\n        case 5:\r\n            emit('update', 'week', weekdayTotal.value, 'week')\r\n            break\r\n        case 6:\r\n            if (checkboxList.value.length === 0) {\r\n                checkboxList.value.push(checkCopy.value[0])\r\n            } else {\r\n                checkCopy.value = checkboxList.value\r\n            }\r\n            emit('update', 'week', checkboxString.value, 'week')\r\n            break\r\n    }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.el-input-number--small, .el-select, .el-select--small {\r\n    margin: 0 0.5rem;\r\n}\r\n.el-select, .el-select--small {\r\n    width: 8rem;\r\n}\r\n.el-select.multiselect, .el-select--small.multiselect {\r\n    width: 17.8rem;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/Crontab/year.vue",
    "content": "<template>\r\n    <el-form>\r\n        <el-form-item>\r\n            <el-radio :label=\"1\" v-model='radioValue'>\r\n                不填，允许的通配符[, - * /]\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio :label=\"2\" v-model='radioValue'>\r\n                每年\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio :label=\"3\" v-model='radioValue'>\r\n                周期从\r\n                <el-input-number v-model='cycle01' :min='fullYear' :max=\"2098\"/> -\r\n                <el-input-number v-model='cycle02' :min=\"cycle01 ? cycle01 + 1 : fullYear + 1\" :max=\"2099\"/>\r\n            </el-radio>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio :label=\"4\" v-model='radioValue'>\r\n                从\r\n                <el-input-number v-model='average01' :min='fullYear' :max=\"2098\"/> 年开始，每\r\n                <el-input-number v-model='average02' :min=\"1\" :max=\"2099 - average01 || fullYear\"/> 年执行一次\r\n            </el-radio>\r\n\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n            <el-radio :label=\"5\" v-model='radioValue'>\r\n                指定\r\n                <el-select clearable v-model=\"checkboxList\" placeholder=\"可多选\" multiple :multiple-limit=\"8\">\r\n                    <el-option v-for=\"item in 9\" :key=\"item\" :value=\"item - 1 + fullYear\" :label=\"item -1 + fullYear\" />\r\n                </el-select>\r\n            </el-radio>\r\n        </el-form-item>\r\n    </el-form>\r\n</template>\r\n\r\n<script setup>\r\nconst emit = defineEmits(['update'])\r\nconst props = defineProps({\r\n    cron: {\r\n        type: Object,\r\n        default: {\r\n            second: \"*\",\r\n            min: \"*\",\r\n            hour: \"*\",\r\n            day: \"*\",\r\n            month: \"*\",\r\n            week: \"?\",\r\n            year: \"\"\r\n        }\r\n    },\r\n    check: {\r\n        type: Function,\r\n        default: () => {\r\n        }\r\n    }\r\n})\r\nconst fullYear = ref(0)\r\nconst maxFullYear = ref(0)\r\nconst radioValue = ref(1)\r\nconst cycle01 = ref(0)\r\nconst cycle02 = ref(0)\r\nconst average01 = ref(0)\r\nconst average02 = ref(1)\r\nconst checkboxList = ref([])\r\nconst checkCopy = ref([])\r\nconst cycleTotal = computed(() => {\r\n    cycle01.value = props.check(cycle01.value, fullYear.value, maxFullYear.value - 1)\r\n    cycle02.value = props.check(cycle02.value, cycle01.value + 1, maxFullYear.value)\r\n    return cycle01.value + '-' + cycle02.value\r\n})\r\nconst averageTotal = computed(() => {\r\n    average01.value = props.check(average01.value, fullYear.value, maxFullYear.value - 1)\r\n    average02.value = props.check(average02.value, 1, 10)\r\n    return average01.value + '/' + average02.value\r\n})\r\nconst checkboxString = computed(() => {\r\n    return checkboxList.value.join(',')\r\n})\r\nwatch(() => props.cron.year, value => changeRadioValue(value))\r\nwatch([radioValue, cycleTotal, averageTotal, checkboxString], () => onRadioChange())\r\nfunction changeRadioValue(value) {\r\n    if (value === '') {\r\n        radioValue.value = 1\r\n    } else if (value === \"*\") {\r\n        radioValue.value = 2\r\n    } else if (value.indexOf(\"-\") > -1) {\r\n        const indexArr = value.split('-')\r\n        cycle01.value = Number(indexArr[0])\r\n        cycle02.value = Number(indexArr[1])\r\n        radioValue.value = 3\r\n    } else if (value.indexOf(\"/\") > -1) {\r\n        const indexArr = value.split('/')\r\n        average01.value = Number(indexArr[1])\r\n        average02.value = Number(indexArr[0])\r\n        radioValue.value = 4\r\n    } else {\r\n        checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))]\r\n        radioValue.value = 5\r\n    }\r\n}\r\nfunction onRadioChange() {\r\n    switch (radioValue.value) {\r\n        case 1:\r\n            emit('update', 'year', '', 'year')\r\n            break\r\n        case 2:\r\n            emit('update', 'year', '*', 'year')\r\n            break\r\n        case 3:\r\n            emit('update', 'year', cycleTotal.value, 'year')\r\n            break\r\n        case 4:\r\n            emit('update', 'year', averageTotal.value, 'year')\r\n            break\r\n        case 5:\r\n            if (checkboxList.value.length === 0) {\r\n                checkboxList.value.push(checkCopy.value[0])\r\n            } else {\r\n                checkCopy.value = checkboxList.value\r\n            }\r\n            emit('update', 'year', checkboxString.value, 'year')\r\n            break\r\n    }\r\n}\r\nonMounted(() => {\r\n    fullYear.value = Number(new Date().getFullYear())\r\n    maxFullYear.value = fullYear.value + 10\r\n    cycle01.value = fullYear.value\r\n    cycle02.value = cycle01.value + 1\r\n    average01.value = fullYear.value\r\n    checkCopy.value = [fullYear.value]\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.el-input-number--small, .el-select, .el-select--small {\r\n    margin: 0 0.2rem;\r\n}\r\n.el-select, .el-select--small {\r\n    width: 18.8rem;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/DictTag/index.vue",
    "content": "<template>\r\n  <div>\r\n    <template v-for=\"(item, index) in options\">\r\n      <template v-if=\"values.includes(item.value)\">\r\n        <span\r\n          v-if=\"(item.elTagType == 'default' || item.elTagType == '') && (item.elTagClass == '' || item.elTagClass == null)\"\r\n          :key=\"item.value\"\r\n          :index=\"index\"\r\n          :class=\"item.elTagClass\"\r\n        >{{ item.label + \" \" }}</span>\r\n        <el-tag\r\n          v-else\r\n          :disable-transitions=\"true\"\r\n          :key=\"item.value + ''\"\r\n          :index=\"index\"\r\n          :type=\"item.elTagType === 'primary' ? '' : item.elTagType\"\r\n          :class=\"item.elTagClass\"\r\n        >{{ item.label + \" \" }}</el-tag>\r\n      </template>\r\n    </template>\r\n    <template v-if=\"unmatch && showValue\">\r\n      {{ unmatchArray | handleArray }}\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\n// 记录未匹配的项\r\nconst unmatchArray = ref([]);\r\n\r\nconst props = defineProps({\r\n  // 数据\r\n  options: {\r\n    type: Array,\r\n    default: null,\r\n  },\r\n  // 当前的值\r\n  value: [Number, String, Array],\r\n  // 当未找到匹配的数据时，显示value\r\n  showValue: {\r\n    type: Boolean,\r\n    default: true,\r\n  },\r\n  separator: {\r\n    type: String,\r\n    default: \",\",\r\n  }\r\n});\r\n\r\nconst values = computed(() => {\r\n  if (props.value === null || typeof props.value === 'undefined' || props.value === '') return [];\r\n  return Array.isArray(props.value) ? props.value.map(item => '' + item) : String(props.value).split(props.separator);\r\n});\r\n\r\nconst unmatch = computed(() => {\r\n  unmatchArray.value = [];\r\n  // 没有value不显示\r\n  if (props.value === null || typeof props.value === 'undefined' || props.value === '') return false\r\n  // 传入值为数组\r\n  let unmatch = false // 添加一个标志来判断是否有未匹配项\r\n  values.value.forEach(item => {\r\n    if (!props.options.some(v => v.value === item)) {\r\n      unmatchArray.value.push(item)\r\n      unmatch = true // 如果有未匹配项，将标志设置为true\r\n    }\r\n  })\r\n  return unmatch // 返回标志的值\r\n});\r\n\r\nfunction handleArray(array) {\r\n  if (array.length === 0) return \"\";\r\n  return array.reduce((pre, cur) => {\r\n    return pre + \" \" + cur;\r\n  });\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.el-tag + .el-tag {\r\n  margin-left: 10px;\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/components/Editor/index.vue",
    "content": "<template>\n  <div>\n    <el-upload\n      :action=\"uploadUrl\"\n      :before-upload=\"handleBeforeUpload\"\n      :on-success=\"handleUploadSuccess\"\n      :on-error=\"handleUploadError\"\n      name=\"file\"\n      :show-file-list=\"false\"\n      :headers=\"headers\"\n      class=\"editor-img-uploader\"\n      v-if=\"type == 'url'\"\n    >\n      <i ref=\"uploadRef\" class=\"editor-img-uploader\"></i>\n    </el-upload>\n  </div>\n  <div class=\"editor\">\n    <quill-editor\n      ref=\"quillEditorRef\"\n      v-model:content=\"content\"\n      contentType=\"html\"\n      @textChange=\"(e) => $emit('update:modelValue', content)\"\n      :options=\"options\"\n      :style=\"styles\"\n    />\n  </div>\n</template>\n\n<script setup>\nimport { QuillEditor } from \"@vueup/vue-quill\";\nimport \"@vueup/vue-quill/dist/vue-quill.snow.css\";\nimport { getToken } from \"@/utils/auth\";\n\nconst { proxy } = getCurrentInstance();\n\nconst quillEditorRef = ref();\nconst uploadUrl = ref(import.meta.env.VITE_APP_BASE_API + \"/common/upload\"); // 上传的图片服务器地址\nconst headers = ref({\n  Authorization: \"Bearer \" + getToken()\n});\n\nconst props = defineProps({\n  /* 编辑器的内容 */\n  modelValue: {\n    type: String,\n  },\n  /* 高度 */\n  height: {\n    type: Number,\n    default: null,\n  },\n  /* 最小高度 */\n  minHeight: {\n    type: Number,\n    default: null,\n  },\n  /* 只读 */\n  readOnly: {\n    type: Boolean,\n    default: false,\n  },\n  /* 上传文件大小限制(MB) */\n  fileSize: {\n    type: Number,\n    default: 5,\n  },\n  /* 类型（base64格式、url格式） */\n  type: {\n    type: String,\n    default: \"url\",\n  }\n});\n\nconst options = ref({\n  theme: \"snow\",\n  bounds: document.body,\n  debug: \"warn\",\n  modules: {\n    // 工具栏配置\n    toolbar: [\n      [\"bold\", \"italic\", \"underline\", \"strike\"],      // 加粗 斜体 下划线 删除线\n      [\"blockquote\", \"code-block\"],                   // 引用  代码块\n      [{ list: \"ordered\" }, { list: \"bullet\" }],      // 有序、无序列表\n      [{ indent: \"-1\" }, { indent: \"+1\" }],           // 缩进\n      [{ size: [\"small\", false, \"large\", \"huge\"] }],  // 字体大小\n      [{ header: [1, 2, 3, 4, 5, 6, false] }],        // 标题\n      [{ color: [] }, { background: [] }],            // 字体颜色、字体背景颜色\n      [{ align: [] }],                                // 对齐方式\n      [\"clean\"],                                      // 清除文本格式\n      [\"link\", \"image\", \"video\"]                      // 链接、图片、视频\n    ],\n  },\n  placeholder: \"请输入内容\",\n  readOnly: props.readOnly\n});\n\nconst styles = computed(() => {\n  let style = {};\n  if (props.minHeight) {\n    style.minHeight = `${props.minHeight}px`;\n  }\n  if (props.height) {\n    style.height = `${props.height}px`;\n  }\n  return style;\n});\n\nconst content = ref(\"\");\nwatch(() => props.modelValue, (v) => {\n  if (v !== content.value) {\n    content.value = v === undefined ? \"<p></p>\" : v;\n  }\n}, { immediate: true });\n\n// 如果设置了上传地址则自定义图片上传事件\nonMounted(() => {\n  if (props.type == 'url') {\n    let quill = quillEditorRef.value.getQuill();\n    let toolbar = quill.getModule(\"toolbar\");\n    toolbar.addHandler(\"image\", (value) => {\n      if (value) {\n        proxy.$refs.uploadRef.click();\n      } else {\n        quill.format(\"image\", false);\n      }\n    });\n  }\n});\n\n// 上传前校检格式和大小\nfunction handleBeforeUpload(file) {\n  const type = [\"image/jpeg\", \"image/jpg\", \"image/png\", \"image/svg\"];\n  const isJPG = type.includes(file.type);\n  //检验文件格式\n  if (!isJPG) {\n    proxy.$modal.msgError(`图片格式错误!`);\n    return false;\n  }\n  // 校检文件大小\n  if (props.fileSize) {\n    const isLt = file.size / 1024 / 1024 < props.fileSize;\n    if (!isLt) {\n      proxy.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`);\n      return false;\n    }\n  }\n  return true;\n}\n\n// 上传成功处理\nfunction handleUploadSuccess(res, file) {\n  // 如果上传成功\n  if (res.code == 200) {\n    // 获取富文本实例\n    let quill = toRaw(quillEditorRef.value).getQuill();\n    // 获取光标位置\n    let length = quill.selection.savedRange.index;\n    // 插入图片，res.url为服务器返回的图片链接地址\n    quill.insertEmbed(length, \"image\", import.meta.env.VITE_APP_BASE_API + res.fileName);\n    // 调整光标到最后\n    quill.setSelection(length + 1);\n  } else {\n    proxy.$modal.msgError(\"图片插入失败\");\n  }\n}\n\n// 上传失败处理\nfunction handleUploadError() {\n  proxy.$modal.msgError(\"图片插入失败\");\n}\n</script>\n\n<style>\n.editor-img-uploader {\n  display: none;\n}\n.editor, .ql-toolbar {\n  white-space: pre-wrap !important;\n  line-height: normal !important;\n}\n.quill-img {\n  display: none;\n}\n.ql-snow .ql-tooltip[data-mode=\"link\"]::before {\n  content: \"请输入链接地址:\";\n}\n.ql-snow .ql-tooltip.ql-editing a.ql-action::after {\n  border-right: 0px;\n  content: \"保存\";\n  padding-right: 0px;\n}\n.ql-snow .ql-tooltip[data-mode=\"video\"]::before {\n  content: \"请输入视频地址:\";\n}\n.ql-snow .ql-picker.ql-size .ql-picker-label::before,\n.ql-snow .ql-picker.ql-size .ql-picker-item::before {\n  content: \"14px\";\n}\n.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=\"small\"]::before,\n.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=\"small\"]::before {\n  content: \"10px\";\n}\n.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=\"large\"]::before,\n.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=\"large\"]::before {\n  content: \"18px\";\n}\n.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=\"huge\"]::before,\n.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=\"huge\"]::before {\n  content: \"32px\";\n}\n.ql-snow .ql-picker.ql-header .ql-picker-label::before,\n.ql-snow .ql-picker.ql-header .ql-picker-item::before {\n  content: \"文本\";\n}\n.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"1\"]::before,\n.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"1\"]::before {\n  content: \"标题1\";\n}\n.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"2\"]::before,\n.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"2\"]::before {\n  content: \"标题2\";\n}\n.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"3\"]::before,\n.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"3\"]::before {\n  content: \"标题3\";\n}\n.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"4\"]::before,\n.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"4\"]::before {\n  content: \"标题4\";\n}\n.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"5\"]::before,\n.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"5\"]::before {\n  content: \"标题5\";\n}\n.ql-snow .ql-picker.ql-header .ql-picker-label[data-value=\"6\"]::before,\n.ql-snow .ql-picker.ql-header .ql-picker-item[data-value=\"6\"]::before {\n  content: \"标题6\";\n}\n.ql-snow .ql-picker.ql-font .ql-picker-label::before,\n.ql-snow .ql-picker.ql-font .ql-picker-item::before {\n  content: \"标准字体\";\n}\n.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=\"serif\"]::before,\n.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=\"serif\"]::before {\n  content: \"衬线字体\";\n}\n.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=\"monospace\"]::before,\n.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=\"monospace\"]::before {\n  content: \"等宽字体\";\n}\n</style>\n"
  },
  {
    "path": "front/src/components/FileList/index.vue",
    "content": "<template>\n  <div>\n    <ul v-if=\"list.length\">\n      <li v-for=\"v in list\" class=\"file-item\">\n        <img :src=\"`${baseUrl}${v.url}`\" width=\"80%\" height=\"80%\" style=\"object-fit: cover;\"\n          v-if=\"['png', 'jpg', 'jpeg', 'gif'].includes(getFileSuffix(v.name))\" />\n        <a :href=\"`${baseUrl}${v.url}`\" target=\"_blank\" v-else style=\"color:currentColor\"> {{ v.name }}\n        </a>\n        <i class=\"el-icon-download\" :title=\"'下载' + v.name\" @click=\"download(`${v.url}`)\" />\n      </li>\n    </ul>\n    <div v-else> <el-tag type=\"warning\">未上传</el-tag></div>\n  </div>\n</template>\n<script setup>\nimport { getFilePath } from \"@/utils/ruoyi.js\"\nconst props = defineProps({\n  fileList: {\n    type: [Array, String],\n    default: () => []\n  },\n})\nconst { proxy } = getCurrentInstance();\nconst baseUrl = ref(import.meta.env.VITE_APP_BASE_API)\n\nconst list = computed(() => {\n  let val = props.fileList\n  if (val) {\n    if (!val) return []\n    // 首先将值转为数组\n    const list = Array.isArray(val) ? val : val.split(',');\n    return list.map(item => {\n      if (typeof item === \"string\") {\n        item = { name: getFileName(item), url: item };\n      } else {\n        item.name = item.name || item.fileName\n        item.url = item.url || item.filePath\n      }\n      item.url = getFilePath(item.url)\n      return item;\n    });\n  } else {\n    return [];\n  }\n})\nfunction down(file) {\n  proxy.$download.name(file.url).then(res => {\n    this.$message.success(\"文件下载成功！\")\n  }).catch(err => {\n    this.$message.error(\"文件下载失败！\")\n  })\n}\n// 获取文件名称\nfunction getFileName(name) {\n  if (name.lastIndexOf(\"/\") > -1) {\n    return name.slice(name.lastIndexOf(\"/\") + 1);\n  } else {\n    return \"\";\n  }\n}\nfunction getFileSuffix(str) {\n  return str.slice(str.lastIndexOf(\".\") + 1)\n}\n</script>\n<style lang=\"scss\" scoped>\nul,\nli {\n  margin: 0;\n  padding: 0;\n}\n\nli {\n  list-style: none;\n}\n\n.file-item {\n  margin-top: 4px;\n  color: #409eff;\n\n  .el-icon-download {\n    color: rgb(243, 159, 4);\n    cursor: pointer;\n  }\n\n  &:hover {\n    background-color: #f5f7fa;\n  }\n\n  .link {\n    &:hover {\n      text-decoration: underline;\n      background-color: #f5f7fa;\n    }\n\n  }\n\n  .el-icon-close {\n    cursor: pointer;\n    color: #2a3a4a;\n  }\n}\n</style>\n"
  },
  {
    "path": "front/src/components/FileUpload/index.vue",
    "content": "<template>\r\n  <div class=\"upload-file\">\r\n    <el-upload multiple :action=\"uploadFileUrl\" :before-upload=\"handleBeforeUpload\" :file-list=\"fileList\" :limit=\"limit\"\r\n      :on-error=\"handleUploadError\" :on-exceed=\"handleExceed\" :on-success=\"handleUploadSuccess\" :show-file-list=\"false\"\r\n      :headers=\"headers\" class=\"upload-file-uploader\" ref=\"fileUpload\">\r\n      <!-- 上传按钮 -->\r\n      <el-button type=\"primary\">选取文件</el-button>\r\n    </el-upload>\r\n    <!-- 上传提示 -->\r\n    <div class=\"el-upload__tip\" v-if=\"showTip\">\r\n      请上传\r\n      <template v-if=\"fileSize\"> 大小不超过 <b style=\"color: #f56c6c\">{{ fileSize }}MB</b> </template>\r\n      <template v-if=\"fileType\"> 格式为 <b style=\"color: #f56c6c\">{{ fileType.join(\"/\") }}</b> </template>\r\n      的文件\r\n    </div>\r\n    <!-- 文件列表 -->\r\n    <transition-group class=\"upload-file-list el-upload-list el-upload-list--text\" name=\"el-fade-in-linear\" tag=\"ul\">\r\n      <li :key=\"file.uid\" class=\"el-upload-list__item ele-upload-list__item-content\" v-for=\"(file, index) in fileList\">\r\n        <el-link :href=\"`${baseUrl}${file.url}`\" :underline=\"false\" target=\"_blank\">\r\n          <span class=\"el-icon-document\"> {{ getFileName(file.name) }} </span>\r\n        </el-link>\r\n        <div class=\"ele-upload-list__item-content-action\">\r\n          <el-link :underline=\"false\" @click=\"handleDelete(index)\" type=\"danger\">删除</el-link>\r\n        </div>\r\n      </li>\r\n    </transition-group>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { getToken } from \"@/utils/auth\";\r\nimport { getFilePath } from \"@/utils/ruoyi.js\"\r\nconst props = defineProps({\r\n  modelValue: [String, Object, Array],\r\n  // 数量限制\r\n  limit: {\r\n    type: Number,\r\n    default: 1,\r\n  },\r\n  // 大小限制(MB)\r\n  fileSize: {\r\n    type: Number,\r\n    default: 100,\r\n  },\r\n  // 文件类型, 例如['png', 'jpg', 'jpeg']\r\n  fileType: {\r\n    type: Array,\r\n    default: () => [\"png\", \"jpg\", \"jpeg\", \"gif\", \"docx\", \"xlsx\", \"ppt\", \"txt\", \"pdf\", \"zip\", \"mp4\", \"mp3\"],\r\n  },\r\n  // 是否显示提示\r\n  isShowTip: {\r\n    type: Boolean,\r\n    default: true\r\n  },\r\n   //是否返回filesList字符串，否则返回数组对象\r\n   isFormat: {\r\n    type: Boolean,\r\n    default:true\r\n  },\r\n});\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst emit = defineEmits();\r\nconst number = ref(0);\r\nconst uploadList = ref([]);\r\nconst baseUrl = import.meta.env.VITE_APP_BASE_API;\r\nconst uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + \"/common/upload\"); // 上传文件服务器地址\r\nconst headers = ref({ Authorization: \"Bearer \" + getToken() });\r\nconst fileList = ref([]);\r\nconst showTip = computed(\r\n  () => props.isShowTip && (props.fileType || props.fileSize)\r\n);\r\n\r\nwatch(() => props.modelValue, val => {\r\n  if (val) {\r\n    let temp = 1;\r\n    // 首先将值转为数组\r\n    const list = Array.isArray(val) ? val : props.modelValue.split(',');\r\n    // 然后将数组转为对象数组\r\n    fileList.value = list.map(item => {\r\n      if (typeof item === \"string\") {\r\n        item = { name: item, url: item };\r\n      } else {\r\n        item.name = item.name || item.fileName\r\n        item.url = item.url || item.filePath\r\n      }\r\n      item.url = getFilePath(item.url)\r\n      item.uid = item.uid || new Date().getTime() + temp++;\r\n      return item;\r\n    });\r\n  } else {\r\n    fileList.value = [];\r\n    return [];\r\n  }\r\n}, { deep: true, immediate: true });\r\n\r\n// 上传前校检格式和大小\r\nfunction handleBeforeUpload(file) {\r\n  // 校检文件类型\r\n  if (props.fileType.length) {\r\n    const fileName = file.name.split('.');\r\n    const fileExt = fileName[fileName.length - 1];\r\n    const isTypeOk = props.fileType.indexOf(fileExt) >= 0;\r\n    if (!isTypeOk) {\r\n      proxy.$modal.msgError(`文件格式不正确, 请上传${props.fileType.join(\"/\")}格式文件!`);\r\n      return false;\r\n    }\r\n  }\r\n  // 校检文件大小\r\n  if (props.fileSize) {\r\n    const isLt = file.size / 1024 / 1024 < props.fileSize;\r\n    if (!isLt) {\r\n      proxy.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`);\r\n      return false;\r\n    }\r\n  }\r\n  proxy.$modal.loading(\"正在上传文件，请稍候...\");\r\n  number.value++;\r\n  return true;\r\n}\r\n\r\n// 文件个数超出\r\nfunction handleExceed() {\r\n  proxy.$modal.msgError(`上传文件数量不能超过 ${props.limit} 个!`);\r\n}\r\n\r\n// 上传失败\r\nfunction handleUploadError(err) {\r\n  proxy.$modal.msgError(\"上传文件失败\");\r\n}\r\n\r\n// 上传成功回调\r\nfunction handleUploadSuccess(res, file) {\r\n  if (res.code === 200) {\r\n    uploadList.value.push({ name: res.fileName, url: res.url });\r\n    uploadedSuccessfully();\r\n  } else {\r\n    number.value--;\r\n    proxy.$modal.closeLoading();\r\n    proxy.$modal.msgError(res.msg);\r\n    proxy.$refs.fileUpload.handleRemove(file);\r\n    uploadedSuccessfully();\r\n  }\r\n}\r\n\r\n// 删除文件\r\nfunction handleDelete(index) {\r\n  fileList.value.splice(index, 1);\r\n  if (props.isFormat) {\r\n    emit(\"update:modelValue\", listToString(fileList.value));\r\n  } else {\r\n    emit(\"update:modelValue\", fileList.value.map(v => (v.url=v.url.replace(baseUrl,\"\"),v)));\r\n  }\r\n\r\n}\r\n\r\n// 上传结束处理\r\nfunction uploadedSuccessfully() {\r\n  if (number.value > 0 && uploadList.value.length === number.value) {\r\n    fileList.value = fileList.value.filter(f => f.url !== undefined).concat(uploadList.value);\r\n    uploadList.value = [];\r\n    number.value = 0;\r\n    if (props.isFormat) {\r\n      emit(\"update:modelValue\", listToString(fileList.value));\r\n    } else {\r\n      emit(\"update:modelValue\", fileList.value.map(v => (v.url=v.url.replace(baseUrl,\"\"),v)));\r\n    }\r\n    proxy.$modal.closeLoading();\r\n  }\r\n}\r\n\r\n// 获取文件名称\r\nfunction getFileName(name) {\r\n  // 如果是url那么取最后的名字 如果不是直接返回\r\n  if (name.lastIndexOf(\"/\") > -1) {\r\n    return name.slice(name.lastIndexOf(\"/\") + 1);\r\n  } else {\r\n    return name;\r\n  }\r\n}\r\n\r\n// 对象转成指定字符串分隔\r\nfunction listToString(list, separator) {\r\n  let strs = \"\";\r\n  separator = separator || \",\";\r\n  for (let i in list) {\r\n    if (undefined !== list[i].url && list[i].url.indexOf(\"blob:\") !== 0) {\r\n      strs += list[i].url.replace(baseUrl, \"\") + separator;\r\n    }\r\n  }\r\n  return strs != '' ? strs.substr(0, strs.length - 1) : '';\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.upload-file-uploader {\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.upload-file-list .el-upload-list__item {\r\n  border: 1px solid #e4e7ed;\r\n  line-height: 2;\r\n  margin-bottom: 10px;\r\n  position: relative;\r\n}\r\n\r\n.upload-file-list .ele-upload-list__item-content {\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  color: inherit;\r\n}\r\n\r\n.ele-upload-list__item-content-action .el-link {\r\n  margin-right: 10px;\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/components/Hamburger/index.vue",
    "content": "<template>\r\n  <div style=\"padding: 0 15px;\" @click=\"toggleClick\">\r\n    <svg\r\n      :class=\"{'is-active':isActive}\"\r\n      class=\"hamburger\"\r\n      viewBox=\"0 0 1024 1024\"\r\n      xmlns=\"http://www.w3.org/2000/svg\"\r\n      width=\"64\"\r\n      height=\"64\"\r\n    >\r\n      <path d=\"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z\" />\r\n    </svg>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\ndefineProps({\r\n  isActive: {\r\n    type: Boolean,\r\n    default: false\r\n  }\r\n})\r\n\r\nconst emit = defineEmits()\r\nconst toggleClick = () => {\r\n  emit('toggleClick');\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.hamburger {\r\n  display: inline-block;\r\n  vertical-align: middle;\r\n  width: 20px;\r\n  height: 20px;\r\n}\r\n\r\n.hamburger.is-active {\r\n  transform: rotate(180deg);\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/components/HeaderSearch/index.vue",
    "content": "<template>\r\n  <div :class=\"{ 'show': show }\" class=\"header-search\">\r\n    <svg-icon class-name=\"search-icon\" icon-class=\"search\" @click.stop=\"click\" />\r\n    <el-select\r\n      ref=\"headerSearchSelectRef\"\r\n      v-model=\"search\"\r\n      :remote-method=\"querySearch\"\r\n      filterable\r\n      default-first-option\r\n      remote\r\n      placeholder=\"Search\"\r\n      class=\"header-search-select\"\r\n      @change=\"change\"\r\n    >\r\n      <el-option v-for=\"option in options\" :key=\"option.item.path\" :value=\"option.item\" :label=\"option.item.title.join(' > ')\" />\r\n    </el-select>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport Fuse from 'fuse.js'\r\nimport { getNormalPath } from '@/utils/ruoyi'\r\nimport { isHttp } from '@/utils/validate'\r\nimport usePermissionStore from '@/store/modules/permission'\r\n\r\nconst search = ref('');\r\nconst options = ref([]);\r\nconst searchPool = ref([]);\r\nconst show = ref(false);\r\nconst fuse = ref(undefined);\r\nconst headerSearchSelectRef = ref(null);\r\nconst router = useRouter();\r\nconst routes = computed(() => usePermissionStore().routes);\r\n\r\nfunction click() {\r\n  show.value = !show.value\r\n  if (show.value) {\r\n    headerSearchSelectRef.value && headerSearchSelectRef.value.focus()\r\n  }\r\n};\r\nfunction close() {\r\n  headerSearchSelectRef.value && headerSearchSelectRef.value.blur()\r\n  options.value = []\r\n  show.value = false\r\n}\r\nfunction change(val) {\r\n  const path = val.path;\r\n  const query = val.query;\r\n  if (isHttp(path)) {\r\n    // http(s):// 路径新窗口打开\r\n    const pindex = path.indexOf(\"http\");\r\n    window.open(path.substr(pindex, path.length), \"_blank\");\r\n  } else {\r\n    if (query) {\r\n      router.push({ path: path, query: JSON.parse(query) });\r\n    } else {\r\n      router.push(path)\r\n    }\r\n  }\r\n\r\n  search.value = ''\r\n  options.value = []\r\n  nextTick(() => {\r\n    show.value = false\r\n  })\r\n}\r\nfunction initFuse(list) {\r\n  fuse.value = new Fuse(list, {\r\n    shouldSort: true,\r\n    threshold: 0.4,\r\n    location: 0,\r\n    distance: 100,\r\n    minMatchCharLength: 1,\r\n    keys: [{\r\n      name: 'title',\r\n      weight: 0.7\r\n    }, {\r\n      name: 'path',\r\n      weight: 0.3\r\n    }]\r\n  })\r\n}\r\n// Filter out the routes that can be displayed in the sidebar\r\n// And generate the internationalized title\r\nfunction generateRoutes(routes, basePath = '', prefixTitle = []) {\r\n  let res = []\r\n\r\n  for (const r of routes) {\r\n    // skip hidden router\r\n    if (r.hidden) { continue }\r\n    const p = r.path.length > 0 && r.path[0] === '/' ? r.path : '/' + r.path;\r\n    const data = {\r\n      path: !isHttp(r.path) ? getNormalPath(basePath + p) : r.path,\r\n      title: [...prefixTitle]\r\n    }\r\n\r\n    if (r.meta && r.meta.title) {\r\n      data.title = [...data.title, r.meta.title]\r\n\r\n      if (r.redirect !== 'noRedirect') {\r\n        // only push the routes with title\r\n        // special case: need to exclude parent router without redirect\r\n        res.push(data)\r\n      }\r\n    }\r\n    if (r.query) {\r\n      data.query = r.query\r\n    }\r\n\r\n    // recursive child routes\r\n    if (r.children) {\r\n      const tempRoutes = generateRoutes(r.children, data.path, data.title)\r\n      if (tempRoutes.length >= 1) {\r\n        res = [...res, ...tempRoutes]\r\n      }\r\n    }\r\n  }\r\n  return res\r\n}\r\nfunction querySearch(query) {\r\n  if (query !== '') {\r\n    options.value = fuse.value.search(query)\r\n  } else {\r\n    options.value = []\r\n  }\r\n}\r\n\r\nonMounted(() => {\r\n  searchPool.value = generateRoutes(routes.value);\r\n})\r\n\r\nwatchEffect(() => {\r\n  searchPool.value = generateRoutes(routes.value)\r\n})\r\n\r\nwatch(show, (value) => {\r\n  if (value) {\r\n    document.body.addEventListener('click', close)\r\n  } else {\r\n    document.body.removeEventListener('click', close)\r\n  }\r\n})\r\n\r\nwatch(searchPool, (list) => {\r\n  initFuse(list)\r\n})\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n.header-search {\r\n  font-size: 0 !important;\r\n\r\n  .search-icon {\r\n    cursor: pointer;\r\n    font-size: 18px;\r\n    vertical-align: middle;\r\n  }\r\n\r\n  .header-search-select {\r\n    font-size: 18px;\r\n    transition: width 0.2s;\r\n    width: 0;\r\n    overflow: hidden;\r\n    background: transparent;\r\n    border-radius: 0;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n\r\n    :deep(.el-input__inner) {\r\n      border-radius: 0;\r\n      border: 0;\r\n      padding-left: 0;\r\n      padding-right: 0;\r\n      box-shadow: none !important;\r\n      border-bottom: 1px solid #d9d9d9;\r\n      vertical-align: middle;\r\n    }\r\n  }\r\n\r\n  &.show {\r\n    .header-search-select {\r\n      width: 210px;\r\n      margin-left: 10px;\r\n    }\r\n  }\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/IconSelect/index.vue",
    "content": "<template>\r\n  <div class=\"icon-body\">\r\n    <el-input\r\n      v-model=\"iconName\"\r\n      class=\"icon-search\"\r\n      clearable\r\n      placeholder=\"请输入图标名称\"\r\n      @clear=\"filterIcons\"\r\n      @input=\"filterIcons\"\r\n    >\r\n      <template #suffix><i class=\"el-icon-search el-input__icon\" /></template>\r\n    </el-input>\r\n    <div class=\"icon-list\">\r\n      <div class=\"list-container\">\r\n        <div v-for=\"(item, index) in iconList\" class=\"icon-item-wrapper\" :key=\"index\" @click=\"selectedIcon(item)\">\r\n          <div :class=\"['icon-item', { active: activeIcon === item }]\">\r\n            <svg-icon :icon-class=\"item\" class-name=\"icon\" style=\"height: 25px;width: 16px;\"/>\r\n            <span>{{ item }}</span>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport icons from './requireIcons'\r\n\r\nconst props = defineProps({\r\n  activeIcon: {\r\n    type: String\r\n  }\r\n});\r\n\r\nconst iconName = ref('');\r\nconst iconList = ref(icons);\r\nconst emit = defineEmits(['selected']);\r\n\r\nfunction filterIcons() {\r\n  iconList.value = icons\r\n  if (iconName.value) {\r\n    iconList.value = icons.filter(item => item.indexOf(iconName.value) !== -1)\r\n  }\r\n}\r\n\r\nfunction selectedIcon(name) {\r\n  emit('selected', name)\r\n  document.body.click()\r\n}\r\n\r\nfunction reset() {\r\n  iconName.value = ''\r\n  iconList.value = icons\r\n}\r\n\r\ndefineExpose({\r\n  reset\r\n})\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n   .icon-body {\r\n    width: 100%;\r\n    padding: 10px;\r\n    .icon-search {\r\n      position: relative;\r\n      margin-bottom: 5px;\r\n    }\r\n    .icon-list {\r\n      height: 200px;\r\n      overflow: auto;\r\n      .list-container {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        .icon-item-wrapper {\r\n          width: calc(100% / 3);\r\n          height: 25px;\r\n          line-height: 25px;\r\n          cursor: pointer;\r\n          display: flex;\r\n          .icon-item {\r\n            display: flex;\r\n            max-width: 100%;\r\n            height: 100%;\r\n            padding: 0 5px;\r\n            &:hover {\r\n              background: #ececec;\r\n              border-radius: 5px;\r\n            }\r\n            .icon {\r\n              flex-shrink: 0;\r\n            }\r\n            span {\r\n              display: inline-block;\r\n              vertical-align: -0.15em;\r\n              fill: currentColor;\r\n              padding-left: 2px;\r\n              overflow: hidden;\r\n              text-overflow: ellipsis;\r\n              white-space: nowrap;\r\n            }\r\n          }\r\n          .icon-item.active {\r\n            background: #ececec;\r\n            border-radius: 5px;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n</style>"
  },
  {
    "path": "front/src/components/IconSelect/requireIcons.js",
    "content": "let icons = []\r\nconst modules = import.meta.glob('./../../assets/icons/svg/*.svg');\r\nfor (const path in modules) {\r\n  const p = path.split('assets/icons/svg/')[1].split('.svg')[0];\r\n  icons.push(p);\r\n}\r\n\r\nexport default icons"
  },
  {
    "path": "front/src/components/ImagePreview/index.vue",
    "content": "<template>\r\n  <div v-if=\"!src\">\r\n    <el-tag type=\"warning\">未上传</el-tag>\r\n  </div>\r\n  <el-image\r\n      v-else\r\n      :src=\"`${realSrc}`\"\r\n      fit=\"cover\"\r\n      :style=\"`width:${realWidth};height:${realHeight};`\"\r\n      :preview-src-list=\"realSrcList\"\r\n      preview-teleported\r\n  >\r\n    <template #error>\r\n      <div class=\"image-slot\">\r\n        <el-icon>\r\n          <picture-filled/>\r\n        </el-icon>\r\n      </div>\r\n    </template>\r\n  </el-image>\r\n</template>\r\n\r\n<script setup>\r\nimport {isExternal} from \"@/utils/validate\";\r\n\r\nconst props = defineProps({\r\n  src: {\r\n    type: String,\r\n    default: \"\"\r\n  },\r\n  width: {\r\n    type: [Number, String],\r\n    default: \"\"\r\n  },\r\n  height: {\r\n    type: [Number, String],\r\n    default: \"\"\r\n  }\r\n});\r\n\r\nconst realSrc = computed(() => {\r\n  if (!props.src) {\r\n    return;\r\n  }\r\n  let real_src = props.src.split(\",\")[0];\r\n  if (isExternal(real_src)) {\r\n    return real_src;\r\n  }\r\n  return import.meta.env.VITE_APP_BASE_API + real_src;\r\n});\r\n\r\nconst realSrcList = computed(() => {\r\n  if (!props.src) {\r\n    return;\r\n  }\r\n  let real_src_list = props.src.split(\",\");\r\n  let srcList = [];\r\n  real_src_list.forEach(item => {\r\n    if (isExternal(item)) {\r\n      return srcList.push(item);\r\n    }\r\n    return srcList.push(import.meta.env.VITE_APP_BASE_API + item);\r\n  });\r\n  return srcList;\r\n});\r\n\r\nconst realWidth = computed(() =>\r\n    typeof props.width == \"string\" ? props.width : `${props.width}px`\r\n);\r\n\r\nconst realHeight = computed(() =>\r\n    typeof props.height == \"string\" ? props.height : `${props.height}px`\r\n);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.el-image {\r\n  border-radius: 5px;\r\n  background-color: #ebeef5;\r\n  box-shadow: 0 0 5px 1px #ccc;\r\n\r\n  :deep(.el-image__inner) {\r\n    transition: all 0.3s;\r\n    cursor: pointer;\r\n\r\n    &:hover {\r\n      transform: scale(1.2);\r\n    }\r\n  }\r\n\r\n  :deep(.image-slot) {\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    width: 100%;\r\n    height: 100%;\r\n    color: #909399;\r\n    font-size: 30px;\r\n  }\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/components/ImageUpload/index.vue",
    "content": "<template>\r\n  <div class=\"component-upload-image\">\r\n    <el-upload multiple :action=\"uploadImgUrl\" list-type=\"picture-card\" :on-success=\"handleUploadSuccess\"\r\n      :before-upload=\"handleBeforeUpload\" :limit=\"limit\" :on-error=\"handleUploadError\" :on-exceed=\"handleExceed\"\r\n      ref=\"imageUpload\" :before-remove=\"handleDelete\" :show-file-list=\"true\" :headers=\"headers\" :file-list=\"fileList\"\r\n      :on-preview=\"handlePictureCardPreview\" :class=\"{ hide: fileList.length >= limit }\">\r\n      <el-icon class=\"avatar-uploader-icon\">\r\n        <plus />\r\n      </el-icon>\r\n    </el-upload>\r\n    <!-- 上传提示 -->\r\n    <div class=\"el-upload__tip\" v-if=\"showTip\">\r\n      请上传\r\n      <template v-if=\"fileSize\">\r\n        大小不超过 <b style=\"color: #f56c6c\">{{ fileSize }}MB</b>\r\n      </template>\r\n      <template v-if=\"fileType\">\r\n        格式为 <b style=\"color: #f56c6c\">{{ fileType.join(\"/\") }}</b>\r\n      </template>\r\n      的文件\r\n    </div>\r\n\r\n    <el-dialog v-model=\"dialogVisible\" title=\"预览\" width=\"800px\" append-to-body>\r\n      <img :src=\"dialogImageUrl\" style=\"display: block; max-width: 100%; margin: 0 auto\" />\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { getToken } from \"@/utils/auth\";\r\nimport { getFilePath } from \"@/utils/ruoyi.js\"\r\nconst props = defineProps({\r\n  modelValue: [String, Object, Array],\r\n  // 图片数量限制\r\n  limit: {\r\n    type: Number,\r\n    default: 1,\r\n  },\r\n  // 大小限制(MB)\r\n  fileSize: {\r\n    type: Number,\r\n    default: 5,\r\n  },\r\n  // 文件类型, 例如['png', 'jpg', 'jpeg']\r\n  fileType: {\r\n    type: Array,\r\n    default: () => [\"png\", \"jpg\", \"jpeg\", \"gif\"],\r\n  },\r\n  // 是否显示提示\r\n  isShowTip: {\r\n    type: Boolean,\r\n    default: true\r\n  },\r\n  //是否返回filesList字符串，否则返回数组对象\r\n  isFormat: {\r\n    type: Boolean,\r\n    default: true\r\n  },\r\n});\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst emit = defineEmits();\r\nconst number = ref(0);\r\nconst uploadList = ref([]);\r\nconst dialogImageUrl = ref(\"\");\r\nconst dialogVisible = ref(false);\r\nconst baseUrl = import.meta.env.VITE_APP_BASE_API;\r\nconst uploadImgUrl = ref(import.meta.env.VITE_APP_BASE_API + \"/common/upload\"); // 上传的图片服务器地址\r\nconst headers = ref({ Authorization: \"Bearer \" + getToken() });\r\nconst fileList = ref([]);\r\nconst showTip = computed(\r\n  () => props.isShowTip && (props.fileType || props.fileSize)\r\n);\r\n\r\nwatch(() => props.modelValue, val => {\r\n  if (val) {\r\n    // 首先将值转为数组\r\n    const list = Array.isArray(val) ? val : props.modelValue.split(\",\");\r\n    // 然后将数组转为对象数组\r\n    fileList.value = list.map(item => {\r\n      if (typeof item === \"string\") {\r\n        item = { name: item, url: item };\r\n      } else {\r\n        item.name = item.name || item.fileName\r\n        item.url = item.url || item.filePath\r\n      }\r\n      item.url = getFilePath(item.url)\r\n      return item;\r\n    });\r\n  } else {\r\n    fileList.value = [];\r\n    return [];\r\n  }\r\n}, { deep: true, immediate: true });\r\n\r\n// 上传前loading加载\r\nfunction handleBeforeUpload(file) {\r\n  let isImg = false;\r\n  if (props.fileType.length) {\r\n    let fileExtension = \"\";\r\n    if (file.name.lastIndexOf(\".\") > -1) {\r\n      fileExtension = file.name.slice(file.name.lastIndexOf(\".\") + 1);\r\n    }\r\n    isImg = props.fileType.some(type => {\r\n      if (file.type.indexOf(type) > -1) return true;\r\n      if (fileExtension && fileExtension.indexOf(type) > -1) return true;\r\n      return false;\r\n    });\r\n  } else {\r\n    isImg = file.type.indexOf(\"image\") > -1;\r\n  }\r\n  if (!isImg) {\r\n    proxy.$modal.msgError(\r\n      `文件格式不正确, 请上传${props.fileType.join(\"/\")}图片格式文件!`\r\n    );\r\n    return false;\r\n  }\r\n  if (props.fileSize) {\r\n    const isLt = file.size / 1024 / 1024 < props.fileSize;\r\n    if (!isLt) {\r\n      proxy.$modal.msgError(`上传头像图片大小不能超过 ${props.fileSize} MB!`);\r\n      return false;\r\n    }\r\n  }\r\n  proxy.$modal.loading(\"正在上传图片，请稍候...\");\r\n  number.value++;\r\n}\r\n\r\n// 文件个数超出\r\nfunction handleExceed() {\r\n  proxy.$modal.msgError(`上传文件数量不能超过 ${props.limit} 个!`);\r\n}\r\n\r\n// 上传成功回调\r\nfunction handleUploadSuccess(res, file) {\r\n  if (res.code === 200) {\r\n    uploadList.value.push({ name: res.fileName, url: getFilePath(res.url) });\r\n    uploadedSuccessfully();\r\n  } else {\r\n    number.value--;\r\n    proxy.$modal.closeLoading();\r\n    proxy.$modal.msgError(res.msg);\r\n    proxy.$refs.imageUpload.handleRemove(file);\r\n    uploadedSuccessfully();\r\n  }\r\n}\r\n\r\n// 删除图片\r\nfunction handleDelete(file) {\r\n  const findex = fileList.value.map(f => f.name).indexOf(file.name);\r\n  if (findex > -1 && uploadList.value.length === number.value) {\r\n    fileList.value.splice(findex, 1);\r\n\r\n    if (props.isFormat) {\r\n      emit(\"update:modelValue\", listToString(fileList.value));\r\n    } else {\r\n      emit(\"update:modelValue\", fileList.value.map(v => (v.url = v.url.replace(baseUrl, \"\"), v)));\r\n    }\r\n    return false;\r\n  }\r\n}\r\n\r\n// 上传结束处理\r\nfunction uploadedSuccessfully() {\r\n  if (number.value > 0 && uploadList.value.length === number.value) {\r\n    fileList.value = fileList.value.filter(f => f.url !== undefined).concat(uploadList.value);\r\n    uploadList.value = [];\r\n    number.value = 0;\r\n    if (props.isFormat) {\r\n      emit(\"update:modelValue\", listToString(fileList.value));\r\n    } else {\r\n      emit(\"update:modelValue\", fileList.value.map(v => (v.url = v.url.replace(baseUrl, \"\"), v)));\r\n    }\r\n    proxy.$modal.closeLoading();\r\n  }\r\n}\r\n\r\n// 上传失败\r\nfunction handleUploadError() {\r\n  proxy.$modal.msgError(\"上传图片失败\");\r\n  proxy.$modal.closeLoading();\r\n}\r\n\r\n// 预览\r\nfunction handlePictureCardPreview(file) {\r\n  dialogImageUrl.value = file.url;\r\n  dialogVisible.value = true;\r\n}\r\n\r\n// 对象转成指定字符串分隔\r\nfunction listToString(list, separator) {\r\n  let strs = \"\";\r\n  separator = separator || \",\";\r\n  for (let i in list) {\r\n    if (undefined !== list[i].url && list[i].url.indexOf(\"blob:\") !== 0) {\r\n      strs += list[i].url.replace(baseUrl, \"\") + separator;\r\n    }\r\n  }\r\n  return strs != \"\" ? strs.substr(0, strs.length - 1) : \"\";\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n// .el-upload--picture-card 控制加号部分\r\n:deep(.hide .el-upload--picture-card) {\r\n  display: none;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/Pagination/index.vue",
    "content": "<template>\r\n  <div :class=\"{ 'hidden': hidden }\" class=\"pagination-container\">\r\n    <el-pagination\r\n      :background=\"background\"\r\n      v-model:current-page=\"currentPage\"\r\n      v-model:page-size=\"pageSize\"\r\n      :layout=\"layout\"\r\n      :page-sizes=\"pageSizes\"\r\n      :pager-count=\"pagerCount\"\r\n      :total=\"total\"\r\n      @size-change=\"handleSizeChange\"\r\n      @current-change=\"handleCurrentChange\"\r\n    />\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { scrollTo } from '@/utils/scroll-to'\r\n\r\nconst props = defineProps({\r\n  total: {\r\n    required: true,\r\n    type: Number\r\n  },\r\n  page: {\r\n    type: Number,\r\n    default: 1\r\n  },\r\n  limit: {\r\n    type: Number,\r\n    default: 20\r\n  },\r\n  pageSizes: {\r\n    type: Array,\r\n    default() {\r\n      return [10, 20, 30, 50]\r\n    }\r\n  },\r\n  // 移动端页码按钮的数量端默认值5\r\n  pagerCount: {\r\n    type: Number,\r\n    default: document.body.clientWidth < 992 ? 5 : 7\r\n  },\r\n  layout: {\r\n    type: String,\r\n    default: 'total, sizes, prev, pager, next, jumper'\r\n  },\r\n  background: {\r\n    type: Boolean,\r\n    default: true\r\n  },\r\n  autoScroll: {\r\n    type: Boolean,\r\n    default: true\r\n  },\r\n  hidden: {\r\n    type: Boolean,\r\n    default: false\r\n  }\r\n})\r\n\r\nconst emit = defineEmits();\r\nconst currentPage = computed({\r\n  get() {\r\n    return props.page\r\n  },\r\n  set(val) {\r\n    emit('update:page', val)\r\n  }\r\n})\r\nconst pageSize = computed({\r\n  get() {\r\n    return props.limit\r\n  },\r\n  set(val){\r\n    emit('update:limit', val)\r\n  }\r\n})\r\nfunction handleSizeChange(val) {\r\n  if (currentPage.value * val > props.total) {\r\n    currentPage.value = 1\r\n  }\r\n  emit('pagination', { page: currentPage.value, limit: val })\r\n  if (props.autoScroll) {\r\n    scrollTo(0, 800)\r\n  }\r\n}\r\nfunction handleCurrentChange(val) {\r\n  emit('pagination', { page: val, limit: pageSize.value })\r\n  if (props.autoScroll) {\r\n    scrollTo(0, 800)\r\n  }\r\n}\r\n\r\n</script>\r\n\r\n<style scoped>\r\n.pagination-container {\r\n  background: #fff;\r\n  padding: 32px 16px;\r\n}\r\n.pagination-container.hidden {\r\n  display: none;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/ParentView/index.vue",
    "content": "<template >\r\n  <router-view />\r\n</template>\r\n"
  },
  {
    "path": "front/src/components/RightToolbar/index.vue",
    "content": "<template>\r\n  <div class=\"top-right-btn\" :style=\"style\">\r\n    <el-row>\r\n      <el-tooltip class=\"item\" effect=\"dark\" :content=\"showSearch ? '隐藏搜索' : '显示搜索'\" placement=\"top\" v-if=\"search\">\r\n        <el-button circle icon=\"Search\" @click=\"toggleSearch()\" />\r\n      </el-tooltip>\r\n      <el-tooltip class=\"item\" effect=\"dark\" content=\"刷新\" placement=\"top\">\r\n        <el-button circle icon=\"Refresh\" @click=\"refresh()\" />\r\n      </el-tooltip>\r\n      <el-tooltip class=\"item\" effect=\"dark\" content=\"显隐列\" placement=\"top\" v-if=\"columns\">\r\n        <el-button circle icon=\"Menu\" @click=\"showColumn()\" v-if=\"showColumnsType == 'transfer'\"/>\r\n        <el-dropdown trigger=\"click\" :hide-on-click=\"false\" style=\"padding-left: 12px\" v-if=\"showColumnsType == 'checkbox'\">\r\n          <el-button circle icon=\"Menu\" />\r\n          <template #dropdown>\r\n            <el-dropdown-menu>\r\n              <template v-for=\"item in columns\" :key=\"item.key\">\r\n                <el-dropdown-item>\r\n                  <el-checkbox :checked=\"item.visible\" @change=\"checkboxChange($event, item.label)\" :label=\"item.label\" />\r\n                </el-dropdown-item>\r\n              </template>\r\n            </el-dropdown-menu>\r\n          </template>\r\n        </el-dropdown>\r\n      </el-tooltip>\r\n    </el-row>\r\n    <el-dialog :title=\"title\" v-model=\"open\" append-to-body>\r\n      <el-transfer\r\n        :titles=\"['显示', '隐藏']\"\r\n        v-model=\"value\"\r\n        :data=\"columns\"\r\n        @change=\"dataChange\"\r\n      ></el-transfer>\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nconst props = defineProps({\r\n  /* 是否显示检索条件 */\r\n  showSearch: {\r\n    type: Boolean,\r\n    default: true,\r\n  },\r\n  /* 显隐列信息 */\r\n  columns: {\r\n    type: Array,\r\n  },\r\n  /* 是否显示检索图标 */\r\n  search: {\r\n    type: Boolean,\r\n    default: true,\r\n  },\r\n  /* 显隐列类型（transfer穿梭框、checkbox复选框） */\r\n  showColumnsType: {\r\n    type: String,\r\n    default: \"checkbox\",\r\n  },\r\n  /* 右外边距 */\r\n  gutter: {\r\n    type: Number,\r\n    default: 10,\r\n  },\r\n})\r\n\r\nconst emits = defineEmits(['update:showSearch', 'queryTable']);\r\n\r\n// 显隐数据\r\nconst value = ref([]);\r\n// 弹出层标题\r\nconst title = ref(\"显示/隐藏\");\r\n// 是否显示弹出层\r\nconst open = ref(false);\r\n\r\nconst style = computed(() => {\r\n  const ret = {};\r\n  if (props.gutter) {\r\n    ret.marginRight = `${props.gutter / 2}px`;\r\n  }\r\n  return ret;\r\n});\r\n\r\n// 搜索\r\nfunction toggleSearch() {\r\n  emits(\"update:showSearch\", !props.showSearch);\r\n}\r\n\r\n// 刷新\r\nfunction refresh() {\r\n  emits(\"queryTable\");\r\n}\r\n\r\n// 右侧列表元素变化\r\nfunction dataChange(data) {\r\n  for (let item in props.columns) {\r\n    const key = props.columns[item].key;\r\n    props.columns[item].visible = !data.includes(key);\r\n  }\r\n}\r\n\r\n// 打开显隐列dialog\r\nfunction showColumn() {\r\n  open.value = true;\r\n}\r\n\r\nif (props.showColumnsType == 'transfer') {\r\n  // 显隐列初始默认隐藏列\r\n  for (let item in props.columns) {\r\n    if (props.columns[item].visible === false) {\r\n      value.value.push(parseInt(item));\r\n    }\r\n  }\r\n}\r\n\r\n// 勾选\r\nfunction checkboxChange(event, label) {\r\n  props.columns.filter(item => item.label == label)[0].visible = event;\r\n}\r\n\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n:deep(.el-transfer__button) {\r\n  border-radius: 50%;\r\n  display: block;\r\n  margin-left: 0px;\r\n}\r\n:deep(.el-transfer__button:first-child) {\r\n  margin-bottom: 10px;\r\n}\r\n:deep(.el-dropdown-menu__item) {\r\n  line-height: 30px;\r\n  padding: 0 17px;\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/components/Screenfull/index.vue",
    "content": "<template>\r\n  <div>\r\n    <svg-icon :icon-class=\"isFullscreen ? 'exit-fullscreen' : 'fullscreen'\" @click=\"toggle\" />\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { useFullscreen } from '@vueuse/core'\r\n\r\nconst { isFullscreen, enter, exit, toggle } = useFullscreen();\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n.screenfull-svg {\r\n  display: inline-block;\r\n  cursor: pointer;\r\n  fill: #5a5e66;\r\n  width: 20px;\r\n  height: 20px;\r\n  vertical-align: 10px;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/SizeSelect/index.vue",
    "content": "<template>\r\n  <div>\r\n    <el-dropdown trigger=\"click\" @command=\"handleSetSize\">\r\n      <div class=\"size-icon--style\">\r\n        <svg-icon class-name=\"size-icon\" icon-class=\"size\" />\r\n      </div>\r\n      <template #dropdown>\r\n        <el-dropdown-menu>\r\n          <el-dropdown-item v-for=\"item of sizeOptions\" :key=\"item.value\" :disabled=\"size === item.value\" :command=\"item.value\">\r\n            {{ item.label }}\r\n          </el-dropdown-item>\r\n        </el-dropdown-menu>\r\n      </template>\r\n    </el-dropdown>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport useAppStore from \"@/store/modules/app\";\r\n\r\nconst appStore = useAppStore();\r\nconst size = computed(() => appStore.size);\r\nconst route = useRoute();\r\nconst router = useRouter();\r\nconst { proxy } = getCurrentInstance();\r\nconst sizeOptions = ref([\r\n  { label: \"较大\", value: \"large\" },\r\n  { label: \"默认\", value: \"default\" },\r\n  { label: \"稍小\", value: \"small\" },\r\n]);\r\n\r\nfunction handleSetSize(size) {\r\n  proxy.$modal.loading(\"正在设置布局大小，请稍候...\");\r\n  appStore.setSize(size);\r\n  setTimeout(\"window.location.reload()\", 1000);\r\n}\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n.size-icon--style {\r\n  font-size: 18px;\r\n  line-height: 50px;\r\n  padding-right: 7px;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/SvgIcon/index.vue",
    "content": "<template>\r\n  <svg :class=\"svgClass\" aria-hidden=\"true\">\r\n    <use :xlink:href=\"iconName\" :fill=\"color\" />\r\n  </svg>\r\n</template>\r\n\r\n<script>\r\nexport default defineComponent({\r\n  props: {\r\n    iconClass: {\r\n      type: String,\r\n      required: true\r\n    },\r\n    className: {\r\n      type: String,\r\n      default: ''\r\n    },\r\n    color: {\r\n      type: String,\r\n      default: ''\r\n    },\r\n  },\r\n  setup(props) {\r\n    return {\r\n      iconName: computed(() => `#icon-${props.iconClass}`),\r\n      svgClass: computed(() => {\r\n        if (props.className) {\r\n          return `svg-icon ${props.className}`\r\n        }\r\n        return 'svg-icon'\r\n      })\r\n    }\r\n  }\r\n})\r\n</script>\r\n\r\n<style scope lang=\"scss\">\r\n.sub-el-icon,\r\n.nav-icon {\r\n  display: inline-block;\r\n  font-size: 15px;\r\n  margin-right: 12px;\r\n  position: relative;\r\n}\r\n\r\n.svg-icon {\r\n  width: 1em;\r\n  height: 1em;\r\n  position: relative;\r\n  fill: currentColor;\r\n  vertical-align: -2px;\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/components/SvgIcon/svgicon.js",
    "content": "import * as components from '@element-plus/icons-vue'\r\n\r\nexport default {\r\n    install: (app) => {\r\n        for (const key in components) {\r\n            const componentConfig = components[key];\r\n            app.component(componentConfig.name, componentConfig);\r\n        }\r\n    },\r\n};\r\n"
  },
  {
    "path": "front/src/components/TopNav/index.vue",
    "content": "<template>\r\n  <el-menu\r\n    :default-active=\"activeMenu\"\r\n    mode=\"horizontal\"\r\n    @select=\"handleSelect\"\r\n    :ellipsis=\"false\"\r\n  >\r\n    <template v-for=\"(item, index) in topMenus\">\r\n      <el-menu-item :style=\"{'--theme': theme}\" :index=\"item.path\" :key=\"index\" v-if=\"index < visibleNumber\">\r\n        <svg-icon\r\n        v-if=\"item.meta && item.meta.icon && item.meta.icon !== '#'\"\r\n        :icon-class=\"item.meta.icon\"/>\r\n        {{ item.meta.title }}\r\n      </el-menu-item>\r\n    </template>\r\n\r\n    <!-- 顶部菜单超出数量折叠 -->\r\n    <el-sub-menu :style=\"{'--theme': theme}\" index=\"more\" v-if=\"topMenus.length > visibleNumber\">\r\n      <template #title>更多菜单</template>\r\n      <template v-for=\"(item, index) in topMenus\">\r\n        <el-menu-item\r\n          :index=\"item.path\"\r\n          :key=\"index\"\r\n          v-if=\"index >= visibleNumber\">\r\n        <svg-icon\r\n          v-if=\"item.meta && item.meta.icon && item.meta.icon !== '#'\"\r\n          :icon-class=\"item.meta.icon\"/>\r\n        {{ item.meta.title }}\r\n        </el-menu-item>\r\n      </template>\r\n    </el-sub-menu>\r\n  </el-menu>\r\n</template>\r\n\r\n<script setup>\r\nimport { constantRoutes } from \"@/router\"\r\nimport { isHttp } from '@/utils/validate'\r\nimport useAppStore from '@/store/modules/app'\r\nimport useSettingsStore from '@/store/modules/settings'\r\nimport usePermissionStore from '@/store/modules/permission'\r\n\r\n// 顶部栏初始数\r\nconst visibleNumber = ref(null);\r\n// 当前激活菜单的 index\r\nconst currentIndex = ref(null);\r\n// 隐藏侧边栏路由\r\nconst hideList = ['/index', '/user/profile'];\r\n\r\nconst appStore = useAppStore()\r\nconst settingsStore = useSettingsStore()\r\nconst permissionStore = usePermissionStore()\r\nconst route = useRoute();\r\nconst router = useRouter();\r\n\r\n// 主题颜色\r\nconst theme = computed(() => settingsStore.theme);\r\n// 所有的路由信息\r\nconst routers = computed(() => permissionStore.topbarRouters);\r\n\r\n// 顶部显示菜单\r\nconst topMenus = computed(() => {\r\n  let topMenus = [];\r\n  routers.value.map((menu) => {\r\n    if (menu.hidden !== true) {\r\n      // 兼容顶部栏一级菜单内部跳转\r\n      if (menu.path === \"/\") {\r\n          topMenus.push(menu.children[0]);\r\n      } else {\r\n          topMenus.push(menu);\r\n      }\r\n    }\r\n  })\r\n  return topMenus;\r\n})\r\n\r\n// 设置子路由\r\nconst childrenMenus = computed(() => {\r\n  let childrenMenus = [];\r\n  routers.value.map((router) => {\r\n    for (let item in router.children) {\r\n      if (router.children[item].parentPath === undefined) {\r\n        if(router.path === \"/\") {\r\n          router.children[item].path = \"/\" + router.children[item].path;\r\n        } else {\r\n          if(!isHttp(router.children[item].path)) {\r\n            router.children[item].path = router.path + \"/\" + router.children[item].path;\r\n          }\r\n        }\r\n        router.children[item].parentPath = router.path;\r\n      }\r\n      childrenMenus.push(router.children[item]);\r\n    }\r\n  })\r\n  return constantRoutes.concat(childrenMenus);\r\n})\r\n\r\n// 默认激活的菜单\r\nconst activeMenu = computed(() => {\r\n  const path = route.path;\r\n  let activePath = path;\r\n  if (path !== undefined && path.lastIndexOf(\"/\") > 0 && hideList.indexOf(path) === -1) {\r\n    const tmpPath = path.substring(1, path.length);\r\n    activePath = \"/\" + tmpPath.substring(0, tmpPath.indexOf(\"/\"));\r\n    if (!route.meta.link) {\r\n        appStore.toggleSideBarHide(false);\r\n    }\r\n  } else if(!route.children) {\r\n    activePath = path;\r\n    appStore.toggleSideBarHide(true);\r\n  }\r\n  activeRoutes(activePath);\r\n  return activePath;\r\n})\r\n\r\nfunction setVisibleNumber() {\r\n  const width = document.body.getBoundingClientRect().width / 3;\r\n  visibleNumber.value = parseInt(width / 85);\r\n}\r\n\r\nfunction handleSelect(key, keyPath) {\r\n  currentIndex.value = key;\r\n  const route = routers.value.find(item => item.path === key);\r\n  if (isHttp(key)) {\r\n    // http(s):// 路径新窗口打开\r\n    window.open(key, \"_blank\");\r\n  } else if (!route || !route.children) {\r\n    // 没有子路由路径内部打开\r\n    const routeMenu = childrenMenus.value.find(item => item.path === key);\r\n    if (routeMenu && routeMenu.query) {\r\n      let query = JSON.parse(routeMenu.query);\r\n      router.push({ path: key, query: query });\r\n    } else {\r\n      router.push({ path: key });\r\n    }\r\n    appStore.toggleSideBarHide(true);\r\n  } else {\r\n    // 显示左侧联动菜单\r\n    activeRoutes(key);\r\n    appStore.toggleSideBarHide(false);\r\n  }\r\n}\r\n\r\nfunction activeRoutes(key) {\r\n  let routes = [];\r\n  if (childrenMenus.value && childrenMenus.value.length > 0) {\r\n    childrenMenus.value.map((item) => {\r\n      if (key == item.parentPath || (key == \"index\" && \"\" == item.path)) {\r\n        routes.push(item);\r\n      }\r\n    });\r\n  }\r\n  if(routes.length > 0) {\r\n    permissionStore.setSidebarRouters(routes);\r\n  } else {\r\n    appStore.toggleSideBarHide(true);\r\n  }\r\n  return routes;\r\n}\r\n\r\nonMounted(() => {\r\n  window.addEventListener('resize', setVisibleNumber)\r\n})\r\nonBeforeUnmount(() => {\r\n  window.removeEventListener('resize', setVisibleNumber)\r\n})\r\n\r\nonMounted(() => {\r\n  setVisibleNumber()\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.topmenu-container.el-menu--horizontal > .el-menu-item {\r\n  float: left;\r\n  height: 50px !important;\r\n  line-height: 50px !important;\r\n  color: #999093 !important;\r\n  padding: 0 5px !important;\r\n  margin: 0 10px !important;\r\n}\r\n\r\n.topmenu-container.el-menu--horizontal > .el-menu-item.is-active, .el-menu--horizontal > .el-sub-menu.is-active .el-submenu__title {\r\n  border-bottom: 2px solid #{'var(--theme)'} !important;\r\n  color: #303133;\r\n}\r\n\r\n/* sub-menu item */\r\n.topmenu-container.el-menu--horizontal > .el-sub-menu .el-sub-menu__title {\r\n  float: left;\r\n  height: 50px !important;\r\n  line-height: 50px !important;\r\n  color: #999093 !important;\r\n  padding: 0 5px !important;\r\n  margin: 0 10px !important;\r\n}\r\n\r\n/* 背景色隐藏 */\r\n.topmenu-container.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus, .topmenu-container.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover, .topmenu-container.el-menu--horizontal>.el-submenu .el-submenu__title:hover {\r\n  background-color: #ffffff !important;\r\n}\r\n\r\n/* 图标右间距 */\r\n.topmenu-container .svg-icon {\r\n  margin-right: 4px;\r\n}\r\n\r\n/* topmenu more arrow */\r\n.topmenu-container .el-sub-menu .el-sub-menu__icon-arrow {\r\n  position: static;\r\n  vertical-align: middle;\r\n  margin-left: 8px;\r\n  margin-top: 0px;\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/components/TreeSelect/index.vue",
    "content": "<template>\r\n  <div class=\"el-tree-select\">\r\n    <el-select style=\"width: 100%\" v-model=\"valueId\" ref=\"treeSelect\" :filterable=\"true\" :clearable=\"true\"\r\n      @clear=\"clearHandle\" :filter-method=\"selectFilterData\" :placeholder=\"placeholder\">\r\n      <el-option :value=\"valueId\" :label=\"valueTitle\">\r\n        <el-tree id=\"tree-option\" ref=\"selectTree\" :accordion=\"accordion\" :data=\"options\" :props=\"objMap\"\r\n          :node-key=\"objMap.value\" :expand-on-click-node=\"false\" :default-expanded-keys=\"defaultExpandedKey\"\r\n          :filter-node-method=\"filterNode\" @node-click=\"handleNodeClick\"></el-tree>\r\n      </el-option>\r\n    </el-select>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ITEM_RENDER_EVT } from 'element-plus/es/components/virtual-list/src/defaults';\r\n\r\n\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst props = defineProps({\r\n  /* 配置项 */\r\n  objMap: {\r\n    type: Object,\r\n    default: () => {\r\n      return {\r\n        value: 'id', // ID字段名\r\n        label: 'label', // 显示名称\r\n        children: 'children' // 子级字段名\r\n      }\r\n    }\r\n  },\r\n  /* 自动收起 */\r\n  accordion: {\r\n    type: Boolean,\r\n    default: () => {\r\n      return false\r\n    }\r\n  },\r\n  /**当前双向数据绑定的值 */\r\n  value: {\r\n    type: [String, Number],\r\n    default: ''\r\n  },\r\n  /**当前的数据 */\r\n  options: {\r\n    type: Array,\r\n    default: () => []\r\n  },\r\n  /**输入框内部的文字 */\r\n  placeholder: {\r\n    type: String,\r\n    default: ''\r\n  }\r\n})\r\n\r\nconst emit = defineEmits(['update:value']);\r\n\r\nconst valueId = computed({\r\n  get: () => props.value,\r\n  set: (val) => {\r\n    emit('update:value', val)\r\n  }\r\n});\r\nconst valueTitle = ref('');\r\nconst defaultExpandedKey = ref([]);\r\n\r\nfunction initHandle() {\r\n  nextTick(() => {\r\n    const selectedValue = valueId.value;\r\n    if (selectedValue !== null && typeof (selectedValue) !== 'undefined') {\r\n      const node = proxy.$refs.selectTree.getNode(selectedValue)\r\n      if (node) {\r\n        valueTitle.value = node.data[props.objMap.label]\r\n        proxy.$refs.selectTree.setCurrentKey(selectedValue) // 设置默认选中\r\n        defaultExpandedKey.value = [selectedValue] // 设置默认展开\r\n      }\r\n    } else {\r\n      clearHandle()\r\n    }\r\n  })\r\n}\r\nfunction handleNodeClick(node) {\r\n  valueTitle.value = node[props.objMap.label]\r\n  valueId.value = node[props.objMap.value];\r\n  defaultExpandedKey.value = [];\r\n  proxy.$refs.treeSelect.blur()\r\n  selectFilterData('')\r\n}\r\nfunction selectFilterData(val) {\r\n  proxy.$refs.selectTree.filter(val)\r\n}\r\nfunction filterNode(value, data) {\r\n  if (!value) return true\r\n  return data[props.objMap['label']].indexOf(value) !== -1\r\n}\r\nfunction clearHandle() {\r\n  valueTitle.value = ''\r\n  valueId.value = ''\r\n  defaultExpandedKey.value = [];\r\n  clearSelected()\r\n}\r\nfunction clearSelected() {\r\n  const allNode = document.querySelectorAll('#tree-option .el-tree-node')\r\n  allNode.forEach((element) => element.classList.remove('is-current'))\r\n}\r\n\r\nonMounted(() => {\r\n  initHandle()\r\n})\r\n\r\nwatch(valueId, () => {\r\n  initHandle();\r\n})\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n@import \"@/assets/styles/variables.module.scss\";\r\n\r\n.el-scrollbar .el-scrollbar__view .el-select-dropdown__item {\r\n  padding: 0;\r\n  background-color: #fff;\r\n  height: auto;\r\n}\r\n\r\n.el-select-dropdown__item.selected {\r\n  font-weight: normal;\r\n}\r\n\r\nul li .el-tree .el-tree-node__content {\r\n  height: auto;\r\n  padding: 0 20px;\r\n  box-sizing: border-box;\r\n}\r\n\r\n:deep(.el-tree-node__content:hover),\r\n:deep(.el-tree-node__content:active),\r\n:deep(.is-current > div:first-child),\r\n:deep(.el-tree-node__content:focus) {\r\n  background-color: mix(#fff, $--color-primary, 90%);\r\n  color: $--color-primary;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/components/iFrame/index.vue",
    "content": "<template>\r\n  <div v-loading=\"loading\" :style=\"'height:' + height\">\r\n    <iframe \r\n      :src=\"url\" \r\n      frameborder=\"no\" \r\n      style=\"width: 100%; height: 100%\" \r\n      scrolling=\"auto\" />\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nconst props = defineProps({\r\n  src: {\r\n    type: String,\r\n    required: true\r\n  }\r\n})\r\n\r\nconst height = ref(document.documentElement.clientHeight - 94.5 + \"px;\")\r\nconst loading = ref(true)\r\nconst url = computed(() => props.src)\r\n\r\nonMounted(() => {\r\n  setTimeout(() => {\r\n    loading.value = false;\r\n  }, 300);\r\n  window.onresize = function temp() {\r\n    height.value = document.documentElement.clientHeight - 94.5 + \"px;\";\r\n  };\r\n})\r\n</script>\r\n"
  },
  {
    "path": "front/src/directive/common/copyText.js",
    "content": "/**\r\n* v-copyText 复制文本内容\r\n* Copyright (c) 2022 ruoyi\r\n*/\r\n\r\nexport default {\r\n  beforeMount(el, { value, arg }) {\r\n    if (arg === \"callback\") {\r\n      el.$copyCallback = value;\r\n    } else {\r\n      el.$copyValue = value;\r\n      const handler = () => {\r\n        copyTextToClipboard(el.$copyValue);\r\n        if (el.$copyCallback) {\r\n          el.$copyCallback(el.$copyValue);\r\n        }\r\n      };\r\n      el.addEventListener(\"click\", handler);\r\n      el.$destroyCopy = () => el.removeEventListener(\"click\", handler);\r\n    }\r\n  }\r\n}\r\n\r\nfunction copyTextToClipboard(input, { target = document.body } = {}) {\r\n  const element = document.createElement('textarea');\r\n  const previouslyFocusedElement = document.activeElement;\r\n\r\n  element.value = input;\r\n\r\n  // Prevent keyboard from showing on mobile\r\n  element.setAttribute('readonly', '');\r\n\r\n  element.style.contain = 'strict';\r\n  element.style.position = 'absolute';\r\n  element.style.left = '-9999px';\r\n  element.style.fontSize = '12pt'; // Prevent zooming on iOS\r\n\r\n  const selection = document.getSelection();\r\n  const originalRange = selection.rangeCount > 0 && selection.getRangeAt(0);\r\n\r\n  target.append(element);\r\n  element.select();\r\n\r\n  // Explicit selection workaround for iOS\r\n  element.selectionStart = 0;\r\n  element.selectionEnd = input.length;\r\n\r\n  let isSuccess = false;\r\n  try {\r\n    isSuccess = document.execCommand('copy');\r\n  } catch { }\r\n\r\n  element.remove();\r\n\r\n  if (originalRange) {\r\n    selection.removeAllRanges();\r\n    selection.addRange(originalRange);\r\n  }\r\n\r\n  // Get the focus back on the previously focused element, if any\r\n  if (previouslyFocusedElement) {\r\n    previouslyFocusedElement.focus();\r\n  }\r\n\r\n  return isSuccess;\r\n}\r\n"
  },
  {
    "path": "front/src/directive/index.js",
    "content": "import hasRole from './permission/hasRole'\r\nimport hasPermi from './permission/hasPermi'\r\nimport copyText from './common/copyText'\r\n\r\nexport default function directive(app){\r\n  app.directive('hasRole', hasRole)\r\n  app.directive('hasPermi', hasPermi)\r\n  app.directive('copyText', copyText)\r\n}"
  },
  {
    "path": "front/src/directive/permission/hasPermi.js",
    "content": " /**\r\n * v-hasPermi 操作权限处理\r\n * Copyright (c) 2019 ruoyi\r\n */\r\n \r\nimport useUserStore from '@/store/modules/user'\r\n\r\nexport default {\r\n  mounted(el, binding, vnode) {\r\n    const { value } = binding\r\n    const all_permission = \"*:*:*\";\r\n    const permissions = useUserStore().permissions\r\n\r\n    if (value && value instanceof Array && value.length > 0) {\r\n      const permissionFlag = value\r\n\r\n      const hasPermissions = permissions.some(permission => {\r\n        return all_permission === permission || permissionFlag.includes(permission)\r\n      })\r\n\r\n      if (!hasPermissions) {\r\n        el.parentNode && el.parentNode.removeChild(el)\r\n      }\r\n    } else {\r\n      throw new Error(`请设置操作权限标签值`)\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "front/src/directive/permission/hasRole.js",
    "content": " /**\r\n * v-hasRole 角色权限处理\r\n * Copyright (c) 2019 ruoyi\r\n */\r\n \r\nimport useUserStore from '@/store/modules/user'\r\n\r\nexport default {\r\n  mounted(el, binding, vnode) {\r\n    const { value } = binding\r\n    const super_admin = \"admin\";\r\n    const roles = useUserStore().roles\r\n\r\n    if (value && value instanceof Array && value.length > 0) {\r\n      const roleFlag = value\r\n\r\n      const hasRole = roles.some(role => {\r\n        return super_admin === role || roleFlag.includes(role)\r\n      })\r\n\r\n      if (!hasRole) {\r\n        el.parentNode && el.parentNode.removeChild(el)\r\n      }\r\n    } else {\r\n      throw new Error(`请设置角色权限标签值`)\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "front/src/layout/components/AppMain.vue",
    "content": "<template>\r\n  <section class=\"app-main\">\r\n    <router-view v-slot=\"{ Component, route }\">\r\n      <transition name=\"fade-transform\" mode=\"out-in\">\r\n        <keep-alive :include=\"tagsViewStore.cachedViews\">\r\n          <component v-if=\"!route.meta.link\" :is=\"Component\" :key=\"route.path\"/>\r\n        </keep-alive>\r\n      </transition>\r\n    </router-view>\r\n    <iframe-toggle />\r\n  </section>\r\n</template>\r\n\r\n<script setup>\r\nimport iframeToggle from \"./IframeToggle/index\"\r\nimport useTagsViewStore from '@/store/modules/tagsView'\r\n\r\nconst tagsViewStore = useTagsViewStore()\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.app-main {\r\n  /* 50= navbar  50  */\r\n  min-height: calc(100vh - 50px);\r\n  width: 100%;\r\n  position: relative;\r\n  overflow: hidden;\r\n}\r\n\r\n.fixed-header + .app-main {\r\n  padding-top: 50px;\r\n}\r\n\r\n.hasTagsView {\r\n  .app-main {\r\n    /* 84 = navbar + tags-view = 50 + 34 */\r\n    min-height: calc(100vh - 84px);\r\n  }\r\n\r\n  .fixed-header + .app-main {\r\n    padding-top: 84px;\r\n  }\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n// fix css style bug in open el-dialog\r\n.el-popup-parent--hidden {\r\n  .fixed-header {\r\n    padding-right: 6px;\r\n  }\r\n}\r\n\r\n::-webkit-scrollbar {\r\n  width: 6px;\r\n  height: 6px;\r\n}\r\n\r\n::-webkit-scrollbar-track {\r\n  background-color: #f1f1f1;\r\n}\r\n\r\n::-webkit-scrollbar-thumb {\r\n  background-color: #c0c0c0;\r\n  border-radius: 3px;\r\n}\r\n</style>\r\n\r\n"
  },
  {
    "path": "front/src/layout/components/IframeToggle/index.vue",
    "content": "<template>\r\n  <inner-link\r\n    v-for=\"(item, index) in tagsViewStore.iframeViews\"\r\n    :key=\"item.path\"\r\n    :iframeId=\"'iframe' + index\"\r\n    v-show=\"route.path === item.path\"\r\n    :src=\"iframeUrl(item.meta.link, item.query)\"\r\n  ></inner-link>\r\n</template>\r\n\r\n<script setup>\r\nimport InnerLink from \"../InnerLink/index\";\r\nimport useTagsViewStore from \"@/store/modules/tagsView\";\r\n\r\nconst route = useRoute();\r\nconst tagsViewStore = useTagsViewStore();\r\n\r\nfunction iframeUrl(url, query) {\r\n  if (Object.keys(query).length > 0) {\r\n    let params = Object.keys(query).map((key) => key + \"=\" + query[key]).join(\"&\");\r\n    return url + \"?\" + params;\r\n  }\r\n  return url;\r\n}\r\n</script>\r\n"
  },
  {
    "path": "front/src/layout/components/InnerLink/index.vue",
    "content": "<template>\r\n  <div :style=\"'height:' + height\">\r\n    <iframe\r\n      :id=\"iframeId\"\r\n      style=\"width: 100%; height: 100%\"\r\n      :src=\"src\"\r\n      frameborder=\"no\"\r\n    ></iframe>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nconst props = defineProps({\r\n  src: {\r\n    type: String,\r\n    default: \"/\"\r\n  },\r\n  iframeId: {\r\n    type: String\r\n  }\r\n});\r\n\r\nconst height = ref(document.documentElement.clientHeight - 94.5 + \"px\");\r\n</script>\r\n"
  },
  {
    "path": "front/src/layout/components/Navbar.vue",
    "content": "<template>\r\n  <div class=\"navbar\">\r\n    <hamburger id=\"hamburger-container\" :is-active=\"appStore.sidebar.opened\" class=\"hamburger-container\" @toggleClick=\"toggleSideBar\" />\r\n    <breadcrumb id=\"breadcrumb-container\" class=\"breadcrumb-container\" v-if=\"!settingsStore.topNav\" />\r\n    <top-nav id=\"topmenu-container\" class=\"topmenu-container\" v-if=\"settingsStore.topNav\" />\r\n\r\n    <div class=\"right-menu\">\r\n      <template v-if=\"appStore.device !== 'mobile'\">\r\n        <header-search id=\"header-search\" class=\"right-menu-item\" />\r\n\r\n        <el-tooltip content=\"源码地址\" effect=\"dark\" placement=\"bottom\">\r\n\t\t\t\t\t<div id=\"ruoyi-git\" class=\"right-menu-item hover-effect\" >\r\n            <svg-icon icon-class=\"github\" @click=\"gotoGithub\" />\r\n            </div>\r\n\t\t\t\t</el-tooltip>\r\n        <screenfull id=\"screenfull\" class=\"right-menu-item hover-effect\" />\r\n\r\n        <el-tooltip content=\"布局大小\" effect=\"dark\" placement=\"bottom\">\r\n          <size-select id=\"size-select\" class=\"right-menu-item hover-effect\" />\r\n        </el-tooltip>\r\n      </template>\r\n      <div class=\"avatar-container\">\r\n        <el-dropdown @command=\"handleCommand\" class=\"right-menu-item hover-effect\" trigger=\"click\">\r\n          <div class=\"avatar-wrapper\">\r\n            <img :src=\"userStore.avatar\" class=\"user-avatar\" />\r\n            <el-icon><caret-bottom /></el-icon>\r\n          </div>\r\n          <template #dropdown>\r\n            <el-dropdown-menu>\r\n              <router-link to=\"/user/profile\">\r\n                <el-dropdown-item>个人中心</el-dropdown-item>\r\n              </router-link>\r\n              <el-dropdown-item command=\"setLayout\" v-if=\"settingsStore.showSettings\">\r\n                <span>布局设置</span>\r\n              </el-dropdown-item>\r\n              <el-dropdown-item divided command=\"logout\">\r\n                <span>退出登录</span>\r\n              </el-dropdown-item>\r\n            </el-dropdown-menu>\r\n          </template>\r\n        </el-dropdown>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ElMessageBox } from 'element-plus'\r\nimport Breadcrumb from '@/components/Breadcrumb'\r\nimport TopNav from '@/components/TopNav'\r\nimport Hamburger from '@/components/Hamburger'\r\nimport Screenfull from '@/components/Screenfull'\r\nimport SizeSelect from '@/components/SizeSelect'\r\nimport HeaderSearch from '@/components/HeaderSearch'\r\nimport useAppStore from '@/store/modules/app'\r\nimport useUserStore from '@/store/modules/user'\r\nimport useSettingsStore from '@/store/modules/settings'\r\n\r\nconst appStore = useAppStore()\r\nconst userStore = useUserStore()\r\nconst settingsStore = useSettingsStore()\r\n\r\nfunction toggleSideBar() {\r\n  appStore.toggleSideBar()\r\n}\r\n\r\nfunction handleCommand(command) {\r\n  switch (command) {\r\n    case \"setLayout\":\r\n      setLayout();\r\n      break;\r\n    case \"logout\":\r\n      logout();\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n}\r\n\r\nfunction logout() {\r\n  ElMessageBox.confirm('确定注销并退出系统吗？', '提示', {\r\n    confirmButtonText: '确定',\r\n    cancelButtonText: '取消',\r\n    type: 'warning'\r\n  }).then(() => {\r\n    userStore.logOut().then(() => {\r\n      location.href = '/index';\r\n    })\r\n  }).catch(() => { });\r\n}\r\nfunction gotoGithub() { \r\n  window.open('https://github.com/Carole007/carole-admin')\r\n}\r\n\r\nconst emits = defineEmits(['setLayout'])\r\nfunction setLayout() {\r\n  emits('setLayout');\r\n}\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n.navbar {\r\n  height: 50px;\r\n  overflow: hidden;\r\n  position: relative;\r\n  background: #fff;\r\n  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);\r\n\r\n  .hamburger-container {\r\n    line-height: 46px;\r\n    height: 100%;\r\n    float: left;\r\n    cursor: pointer;\r\n    transition: background 0.3s;\r\n    -webkit-tap-highlight-color: transparent;\r\n\r\n    &:hover {\r\n      background: rgba(0, 0, 0, 0.025);\r\n    }\r\n  }\r\n\r\n  .breadcrumb-container {\r\n    float: left;\r\n  }\r\n\r\n  .topmenu-container {\r\n    position: absolute;\r\n    left: 50px;\r\n  }\r\n\r\n  .errLog-container {\r\n    display: inline-block;\r\n    vertical-align: top;\r\n  }\r\n\r\n  .right-menu {\r\n    float: right;\r\n    height: 100%;\r\n    line-height: 50px;\r\n    display: flex;\r\n\r\n    &:focus {\r\n      outline: none;\r\n    }\r\n\r\n    .right-menu-item {\r\n      display: inline-block;\r\n      padding: 0 8px;\r\n      height: 100%;\r\n      font-size: 18px;\r\n      color: #5a5e66;\r\n      vertical-align: text-bottom;\r\n\r\n      &.hover-effect {\r\n        cursor: pointer;\r\n        transition: background 0.3s;\r\n\r\n        &:hover {\r\n          background: rgba(0, 0, 0, 0.025);\r\n        }\r\n      }\r\n    }\r\n\r\n    .avatar-container {\r\n      margin-right: 40px;\r\n\r\n      .avatar-wrapper {\r\n        margin-top: 5px;\r\n        position: relative;\r\n\r\n        .user-avatar {\r\n          cursor: pointer;\r\n          width: 40px;\r\n          height: 40px;\r\n          border-radius: 10px;\r\n        }\r\n\r\n        i {\r\n          cursor: pointer;\r\n          position: absolute;\r\n          right: -20px;\r\n          top: 25px;\r\n          font-size: 12px;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/layout/components/Settings/index.vue",
    "content": "<template>\r\n  <el-drawer v-model=\"showSettings\" :withHeader=\"false\" direction=\"rtl\" size=\"300px\">\r\n    <div class=\"setting-drawer-title\">\r\n      <h3 class=\"drawer-title\">主题风格设置</h3>\r\n    </div>\r\n    <div class=\"setting-drawer-block-checbox\">\r\n      <div class=\"setting-drawer-block-checbox-item\" @click=\"handleTheme('theme-dark')\">\r\n        <img src=\"@/assets/images/dark.svg\" alt=\"dark\" />\r\n        <div v-if=\"sideTheme === 'theme-dark'\" class=\"setting-drawer-block-checbox-selectIcon\" style=\"display: block;\">\r\n          <i aria-label=\"图标: check\" class=\"anticon anticon-check\">\r\n            <svg viewBox=\"64 64 896 896\" data-icon=\"check\" width=\"1em\" height=\"1em\" :fill=\"theme\" aria-hidden=\"true\" focusable=\"false\" class>\r\n              <path d=\"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z\" />\r\n            </svg>\r\n          </i>\r\n        </div>\r\n      </div>\r\n      <div class=\"setting-drawer-block-checbox-item\" @click=\"handleTheme('theme-light')\">\r\n        <img src=\"@/assets/images/light.svg\" alt=\"light\" />\r\n        <div v-if=\"sideTheme === 'theme-light'\" class=\"setting-drawer-block-checbox-selectIcon\" style=\"display: block;\">\r\n          <i aria-label=\"图标: check\" class=\"anticon anticon-check\">\r\n            <svg viewBox=\"64 64 896 896\" data-icon=\"check\" width=\"1em\" height=\"1em\" :fill=\"theme\" aria-hidden=\"true\" focusable=\"false\" class>\r\n              <path d=\"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z\" />\r\n            </svg>\r\n          </i>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"drawer-item\">\r\n      <span>主题颜色</span>\r\n      <span class=\"comp-style\">\r\n        <el-color-picker v-model=\"theme\" :predefine=\"predefineColors\" @change=\"themeChange\"/>\r\n      </span>\r\n    </div>\r\n    <el-divider />\r\n\r\n    <h3 class=\"drawer-title\">系统布局配置</h3>\r\n\r\n    <div class=\"drawer-item\">\r\n      <span>开启 TopNav</span>\r\n      <span class=\"comp-style\">\r\n        <el-switch v-model=\"settingsStore.topNav\" @change=\"topNavChange\" class=\"drawer-switch\" />\r\n      </span>\r\n    </div>\r\n\r\n    <div class=\"drawer-item\">\r\n      <span>开启 Tags-Views</span>\r\n      <span class=\"comp-style\">\r\n        <el-switch v-model=\"settingsStore.tagsView\" class=\"drawer-switch\" />\r\n      </span>\r\n    </div>\r\n\r\n    <div class=\"drawer-item\">\r\n      <span>固定 Header</span>\r\n      <span class=\"comp-style\">\r\n        <el-switch v-model=\"settingsStore.fixedHeader\" class=\"drawer-switch\" />\r\n      </span>\r\n    </div>\r\n\r\n    <div class=\"drawer-item\">\r\n      <span>显示 Logo</span>\r\n      <span class=\"comp-style\">\r\n        <el-switch v-model=\"settingsStore.sidebarLogo\" class=\"drawer-switch\" />\r\n      </span>\r\n    </div>\r\n\r\n    <div class=\"drawer-item\">\r\n      <span>动态标题</span>\r\n      <span class=\"comp-style\">\r\n        <el-switch v-model=\"settingsStore.dynamicTitle\" class=\"drawer-switch\" />\r\n      </span>\r\n    </div>\r\n\r\n    <el-divider />\r\n\r\n    <el-button type=\"primary\" plain icon=\"DocumentAdd\" @click=\"saveSetting\">保存配置</el-button>\r\n    <el-button plain icon=\"Refresh\" @click=\"resetSetting\">重置配置</el-button>\r\n  </el-drawer>\r\n\r\n</template>\r\n\r\n<script setup>\r\nimport variables from '@/assets/styles/variables.module.scss'\r\nimport axios from 'axios'\r\nimport { ElLoading, ElMessage } from 'element-plus'\r\nimport { useDynamicTitle } from '@/utils/dynamicTitle'\r\nimport useAppStore from '@/store/modules/app'\r\nimport useSettingsStore from '@/store/modules/settings'\r\nimport usePermissionStore from '@/store/modules/permission'\r\nimport { handleThemeStyle } from '@/utils/theme'\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst appStore = useAppStore()\r\nconst settingsStore = useSettingsStore()\r\nconst permissionStore = usePermissionStore()\r\nconst showSettings = ref(false);\r\nconst theme = ref(settingsStore.theme);\r\nconst sideTheme = ref(settingsStore.sideTheme);\r\nconst storeSettings = computed(() => settingsStore);\r\nconst predefineColors = ref(['#3F51B5', '#409EFF', '#FF9CA8','#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3', '#00BCD4', '#009688', '#795548', '#607D8F'])\r\n\r\n/** 是否需要topnav */\r\nfunction topNavChange(val) {\r\n  if (!val) {\r\n    appStore.toggleSideBarHide(false);\r\n    permissionStore.setSidebarRouters(permissionStore.defaultRoutes);\r\n  }\r\n}\r\n\r\nfunction themeChange(val) {\r\n  settingsStore.theme = val;\r\n  handleThemeStyle(val);\r\n}\r\nfunction handleTheme(val) {\r\n  settingsStore.sideTheme = val;\r\n  sideTheme.value = val;\r\n}\r\nfunction saveSetting() {\r\n  proxy.$modal.loading(\"正在保存到本地，请稍候...\");\r\n  let layoutSetting = {\r\n    \"topNav\": storeSettings.value.topNav,\r\n    \"tagsView\": storeSettings.value.tagsView,\r\n    \"fixedHeader\": storeSettings.value.fixedHeader,\r\n    \"sidebarLogo\": storeSettings.value.sidebarLogo,\r\n    \"dynamicTitle\": storeSettings.value.dynamicTitle,\r\n    \"sideTheme\": storeSettings.value.sideTheme,\r\n    \"theme\": storeSettings.value.theme\r\n  };\r\n  localStorage.setItem(\"layout-setting\", JSON.stringify(layoutSetting));\r\n  setTimeout(proxy.$modal.closeLoading(), 1000)\r\n}\r\nfunction resetSetting() {\r\n  proxy.$modal.loading(\"正在清除设置缓存并刷新，请稍候...\");\r\n  localStorage.removeItem(\"layout-setting\")\r\n  setTimeout(\"window.location.reload()\", 1000)\r\n}\r\nfunction openSetting() {\r\n  showSettings.value = true;\r\n}\r\n\r\ndefineExpose({\r\n  openSetting,\r\n})\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n.setting-drawer-title {\r\n  margin-bottom: 12px;\r\n  color: rgba(0, 0, 0, 0.85);\r\n  line-height: 22px;\r\n  font-weight: bold;\r\n  .drawer-title {\r\n    font-size: 14px;\r\n  }\r\n}\r\n.setting-drawer-block-checbox {\r\n  display: flex;\r\n  justify-content: flex-start;\r\n  align-items: center;\r\n  margin-top: 10px;\r\n  margin-bottom: 20px;\r\n\r\n  .setting-drawer-block-checbox-item {\r\n    position: relative;\r\n    margin-right: 16px;\r\n    border-radius: 2px;\r\n    cursor: pointer;\r\n\r\n    img {\r\n      width: 48px;\r\n      height: 48px;\r\n    }\r\n\r\n    .custom-img {\r\n      width: 48px;\r\n      height: 38px;\r\n      border-radius: 5px;\r\n      box-shadow: 1px 1px 2px #898484;\r\n    }\r\n\r\n    .setting-drawer-block-checbox-selectIcon {\r\n      position: absolute;\r\n      top: 0;\r\n      right: 0;\r\n      width: 100%;\r\n      height: 100%;\r\n      padding-top: 15px;\r\n      padding-left: 24px;\r\n      color: #1890ff;\r\n      font-weight: 700;\r\n      font-size: 14px;\r\n    }\r\n  }\r\n}\r\n\r\n.drawer-item {\r\n  color: rgba(0, 0, 0, 0.65);\r\n  padding: 12px 0;\r\n  font-size: 14px;\r\n\r\n  .comp-style {\r\n    float: right;\r\n    margin: -3px 8px 0px 0px;\r\n  }\r\n}\r\n</style>"
  },
  {
    "path": "front/src/layout/components/Sidebar/Link.vue",
    "content": "<template>\r\n  <component :is=\"type\" v-bind=\"linkProps()\">\r\n    <slot />\r\n  </component>\r\n</template>\r\n\r\n<script setup>\r\nimport { isExternal } from '@/utils/validate'\r\n\r\nconst props = defineProps({\r\n  to: {\r\n    type: [String, Object],\r\n    required: true\r\n  }\r\n})\r\n\r\nconst isExt = computed(() => {\r\n  return isExternal(props.to)\r\n})\r\n\r\nconst type = computed(() => {\r\n  if (isExt.value) {\r\n    return 'a'\r\n  }\r\n  return 'router-link'\r\n})\r\n\r\nfunction linkProps() {\r\n  if (isExt.value) {\r\n    return {\r\n      href: props.to,\r\n      target: '_blank',\r\n      rel: 'noopener'\r\n    }\r\n  }\r\n  return {\r\n    to: props.to\r\n  }\r\n}\r\n</script>\r\n"
  },
  {
    "path": "front/src/layout/components/Sidebar/Logo.vue",
    "content": "<template>\r\n  <div class=\"sidebar-logo-container\" :class=\"{ 'collapse': collapse }\" :style=\"{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }\">\r\n    <transition name=\"sidebarLogoFade\">\r\n      <router-link v-if=\"collapse\" key=\"collapse\" class=\"sidebar-logo-link\" to=\"/\">\r\n        <img v-if=\"logo\" :src=\"logo\" class=\"sidebar-logo\" />\r\n        <h1 v-else class=\"sidebar-title\" :style=\"{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }\">{{ title }}</h1>\r\n      </router-link>\r\n      <router-link v-else key=\"expand\" class=\"sidebar-logo-link\" to=\"/\">\r\n        <img v-if=\"logo\" :src=\"logo\" class=\"sidebar-logo\" />\r\n        <h1 class=\"sidebar-title\" :style=\"{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }\">{{ title }}</h1>\r\n      </router-link>\r\n    </transition>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport variables from '@/assets/styles/variables.module.scss'\r\nimport logo from '@/assets/logo/logo.png'\r\nimport useSettingsStore from '@/store/modules/settings'\r\n\r\ndefineProps({\r\n  collapse: {\r\n    type: Boolean,\r\n    required: true\r\n  }\r\n})\r\n\r\nconst title = import.meta.env.VITE_APP_TITLE;\r\nconst settingsStore = useSettingsStore();\r\nconst sideTheme = computed(() => settingsStore.sideTheme);\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.sidebarLogoFade-enter-active {\r\n  transition: opacity 1.5s;\r\n}\r\n\r\n.sidebarLogoFade-enter,\r\n.sidebarLogoFade-leave-to {\r\n  opacity: 0;\r\n}\r\n\r\n.sidebar-logo-container {\r\n  position: relative;\r\n  width: 100%;\r\n  height: 50px;\r\n  line-height: 50px;\r\n  background: #2b2f3a;\r\n  text-align: center;\r\n  overflow: hidden;\r\n\r\n  & .sidebar-logo-link {\r\n    height: 100%;\r\n    width: 100%;\r\n\r\n    & .sidebar-logo {\r\n      width: 32px;\r\n      height: 32px;\r\n      vertical-align: middle;\r\n      margin-right: 12px;\r\n    }\r\n\r\n    & .sidebar-title {\r\n      display: inline-block;\r\n      margin: 0;\r\n      color: #fff;\r\n      font-weight: 600;\r\n      line-height: 50px;\r\n      font-size: 14px;\r\n      font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;\r\n      vertical-align: middle;\r\n    }\r\n  }\r\n\r\n  &.collapse {\r\n    .sidebar-logo {\r\n      margin-right: 0px;\r\n    }\r\n  }\r\n}\r\n</style>"
  },
  {
    "path": "front/src/layout/components/Sidebar/SidebarItem.vue",
    "content": "<template>\r\n  <div v-if=\"!item.hidden\">\r\n    <template v-if=\"hasOneShowingChild(item.children, item) && (!onlyOneChild.children || onlyOneChild.noShowingChildren) && !item.alwaysShow\">\r\n      <app-link v-if=\"onlyOneChild.meta\" :to=\"resolvePath(onlyOneChild.path, onlyOneChild.query)\">\r\n        <el-menu-item :index=\"resolvePath(onlyOneChild.path)\" :class=\"{ 'submenu-title-noDropdown': !isNest }\">\r\n          <svg-icon :icon-class=\"onlyOneChild.meta.icon || (item.meta && item.meta.icon)\"/>\r\n          <template #title><span class=\"menu-title\" :title=\"hasTitle(onlyOneChild.meta.title)\">{{ onlyOneChild.meta.title }}</span></template>\r\n        </el-menu-item>\r\n      </app-link>\r\n    </template>\r\n\r\n    <el-sub-menu v-else ref=\"subMenu\" :index=\"resolvePath(item.path)\" teleported>\r\n      <template v-if=\"item.meta\" #title>\r\n        <svg-icon :icon-class=\"item.meta && item.meta.icon\" />\r\n        <span class=\"menu-title\" :title=\"hasTitle(item.meta.title)\">{{ item.meta.title }}</span>\r\n      </template>\r\n\r\n      <sidebar-item\r\n        v-for=\"(child, index) in item.children\"\r\n        :key=\"child.path + index\"\r\n        :is-nest=\"true\"\r\n        :item=\"child\"\r\n        :base-path=\"resolvePath(child.path)\"\r\n        class=\"nest-menu\"\r\n      />\r\n    </el-sub-menu>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { isExternal } from '@/utils/validate'\r\nimport AppLink from './Link'\r\nimport { getNormalPath } from '@/utils/ruoyi'\r\n\r\nconst props = defineProps({\r\n  // route object\r\n  item: {\r\n    type: Object,\r\n    required: true\r\n  },\r\n  isNest: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  basePath: {\r\n    type: String,\r\n    default: ''\r\n  }\r\n})\r\n\r\nconst onlyOneChild = ref({});\r\n\r\nfunction hasOneShowingChild(children = [], parent) {\r\n  if (!children) {\r\n    children = [];\r\n  }\r\n  const showingChildren = children.filter(item => {\r\n    if (item.hidden) {\r\n      return false\r\n    } else {\r\n      // Temp set(will be used if only has one showing child)\r\n      onlyOneChild.value = item\r\n      return true\r\n    }\r\n  })\r\n\r\n  // When there is only one child router, the child router is displayed by default\r\n  if (showingChildren.length === 1) {\r\n    return true\r\n  }\r\n\r\n  // Show parent if there are no child router to display\r\n  if (showingChildren.length === 0) {\r\n    onlyOneChild.value = { ...parent, path: '', noShowingChildren: true }\r\n    return true\r\n  }\r\n\r\n  return false\r\n};\r\n\r\nfunction resolvePath(routePath, routeQuery) {\r\n  if (isExternal(routePath)) {\r\n    return routePath\r\n  }\r\n  if (isExternal(props.basePath)) {\r\n    return props.basePath\r\n  }\r\n  if (routeQuery) {\r\n    let query = JSON.parse(routeQuery);\r\n    return { path: getNormalPath(props.basePath + '/' + routePath), query: query }\r\n  }\r\n  return getNormalPath(props.basePath + '/' + routePath)\r\n}\r\n\r\nfunction hasTitle(title){\r\n  if (title.length > 5) {\r\n    return title;\r\n  } else {\r\n    return \"\";\r\n  }\r\n}\r\n</script>\r\n"
  },
  {
    "path": "front/src/layout/components/Sidebar/index.vue",
    "content": "<template>\r\n  <div :class=\"{ 'has-logo': showLogo }\" :style=\"{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }\">\r\n    <logo v-if=\"showLogo\" :collapse=\"isCollapse\" />\r\n    <el-scrollbar :class=\"sideTheme\" wrap-class=\"scrollbar-wrapper\">\r\n      <el-menu\r\n        :default-active=\"activeMenu\"\r\n        :collapse=\"isCollapse\"\r\n        :background-color=\"sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground\"\r\n        :text-color=\"sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor\"\r\n        :unique-opened=\"true\"\r\n        :active-text-color=\"theme\"\r\n        :collapse-transition=\"false\"\r\n        mode=\"vertical\"\r\n      >\r\n        <sidebar-item\r\n          v-for=\"(route, index) in sidebarRouters\"\r\n          :key=\"route.path + index\"\r\n          :item=\"route\"\r\n          :base-path=\"route.path\"\r\n        />\r\n      </el-menu>\r\n    </el-scrollbar>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport Logo from './Logo'\r\nimport SidebarItem from './SidebarItem'\r\nimport variables from '@/assets/styles/variables.module.scss'\r\nimport useAppStore from '@/store/modules/app'\r\nimport useSettingsStore from '@/store/modules/settings'\r\nimport usePermissionStore from '@/store/modules/permission'\r\n\r\nconst route = useRoute();\r\nconst appStore = useAppStore()\r\nconst settingsStore = useSettingsStore()\r\nconst permissionStore = usePermissionStore()\r\n\r\nconst sidebarRouters =  computed(() => permissionStore.sidebarRouters);\r\nconst showLogo = computed(() => settingsStore.sidebarLogo);\r\nconst sideTheme = computed(() => settingsStore.sideTheme);\r\nconst theme = computed(() => settingsStore.theme);\r\nconst isCollapse = computed(() => !appStore.sidebar.opened);\r\n\r\nconst activeMenu = computed(() => {\r\n  const { meta, path } = route;\r\n  // if set path, the sidebar will highlight the path you set\r\n  if (meta.activeMenu) {\r\n    return meta.activeMenu;\r\n  }\r\n  return path;\r\n})\r\n\r\n</script>\r\n"
  },
  {
    "path": "front/src/layout/components/TagsView/ScrollPane.vue",
    "content": "<template>\r\n  <el-scrollbar\r\n    ref=\"scrollContainer\"\r\n    :vertical=\"false\"\r\n    class=\"scroll-container\"\r\n    @wheel.prevent=\"handleScroll\"\r\n  >\r\n    <slot />\r\n  </el-scrollbar>\r\n</template>\r\n\r\n<script setup>\r\nimport useTagsViewStore from '@/store/modules/tagsView'\r\n\r\nconst tagAndTagSpacing = ref(4);\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst scrollWrapper = computed(() => proxy.$refs.scrollContainer.$refs.wrapRef);\r\n\r\nonMounted(() => {\r\n  scrollWrapper.value.addEventListener('scroll', emitScroll, true)\r\n})\r\nonBeforeUnmount(() => {\r\n  scrollWrapper.value.removeEventListener('scroll', emitScroll)\r\n})\r\n\r\nfunction handleScroll(e) {\r\n  const eventDelta = e.wheelDelta || -e.deltaY * 40\r\n  const $scrollWrapper = scrollWrapper.value;\r\n  $scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4\r\n}\r\nconst emits = defineEmits()\r\nconst emitScroll = () => {\r\n  emits('scroll')\r\n}\r\n\r\nconst tagsViewStore = useTagsViewStore()\r\nconst visitedViews = computed(() => tagsViewStore.visitedViews);\r\n\r\nfunction moveToTarget(currentTag) {\r\n  const $container = proxy.$refs.scrollContainer.$el\r\n  const $containerWidth = $container.offsetWidth\r\n  const $scrollWrapper = scrollWrapper.value;\r\n\r\n  let firstTag = null\r\n  let lastTag = null\r\n\r\n  // find first tag and last tag\r\n  if (visitedViews.value.length > 0) {\r\n    firstTag = visitedViews.value[0]\r\n    lastTag = visitedViews.value[visitedViews.value.length - 1]\r\n  }\r\n\r\n  if (firstTag === currentTag) {\r\n    $scrollWrapper.scrollLeft = 0\r\n  } else if (lastTag === currentTag) {\r\n    $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth\r\n  } else {\r\n    const tagListDom = document.getElementsByClassName('tags-view-item');\r\n    const currentIndex = visitedViews.value.findIndex(item => item === currentTag)\r\n    let prevTag = null\r\n    let nextTag = null\r\n    for (const k in tagListDom) {\r\n      if (k !== 'length' && Object.hasOwnProperty.call(tagListDom, k)) {\r\n        if (tagListDom[k].dataset.path === visitedViews.value[currentIndex - 1].path) {\r\n          prevTag = tagListDom[k];\r\n        }\r\n        if (tagListDom[k].dataset.path === visitedViews.value[currentIndex + 1].path) {\r\n          nextTag = tagListDom[k];\r\n        }\r\n      }\r\n    }\r\n\r\n    // the tag's offsetLeft after of nextTag\r\n    const afterNextTagOffsetLeft = nextTag.offsetLeft + nextTag.offsetWidth + tagAndTagSpacing.value\r\n\r\n    // the tag's offsetLeft before of prevTag\r\n    const beforePrevTagOffsetLeft = prevTag.offsetLeft - tagAndTagSpacing.value\r\n    if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) {\r\n      $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth\r\n    } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {\r\n      $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft\r\n    }\r\n  }\r\n}\r\n\r\ndefineExpose({\r\n  moveToTarget,\r\n})\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n.scroll-container {\r\n  white-space: nowrap;\r\n  position: relative;\r\n  overflow: hidden;\r\n  width: 100%;\r\n  :deep(.el-scrollbar__bar) {\r\n    bottom: 0px;\r\n  }\r\n  :deep(.el-scrollbar__wrap) {\r\n    height: 39px;\r\n  }\r\n}\r\n</style>"
  },
  {
    "path": "front/src/layout/components/TagsView/index.vue",
    "content": "<template>\r\n  <div id=\"tags-view-container\" class=\"tags-view-container\">\r\n    <scroll-pane ref=\"scrollPaneRef\" class=\"tags-view-wrapper\" @scroll=\"handleScroll\">\r\n      <router-link\r\n        v-for=\"tag in visitedViews\"\r\n        :key=\"tag.path\"\r\n        :data-path=\"tag.path\"\r\n        :class=\"isActive(tag) ? 'active' : ''\"\r\n        :to=\"{ path: tag.path, query: tag.query, fullPath: tag.fullPath }\"\r\n        class=\"tags-view-item\"\r\n        :style=\"activeStyle(tag)\"\r\n        @click.middle=\"!isAffix(tag) ? closeSelectedTag(tag) : ''\"\r\n        @contextmenu.prevent=\"openMenu(tag, $event)\"\r\n      >\r\n        {{ tag.title }}\r\n        <span v-if=\"!isAffix(tag)\" @click.prevent.stop=\"closeSelectedTag(tag)\">\r\n          <close class=\"el-icon-close\" style=\"width: 1em; height: 1em;vertical-align: middle;\" />\r\n        </span>\r\n      </router-link>\r\n    </scroll-pane>\r\n    <ul v-show=\"visible\" :style=\"{ left: left + 'px', top: top + 'px' }\" class=\"contextmenu\">\r\n      <li @click=\"refreshSelectedTag(selectedTag)\">\r\n        <refresh-right style=\"width: 1em; height: 1em;\" /> 刷新页面\r\n      </li>\r\n      <li v-if=\"!isAffix(selectedTag)\" @click=\"closeSelectedTag(selectedTag)\">\r\n        <close style=\"width: 1em; height: 1em;\" /> 关闭当前\r\n      </li>\r\n      <li @click=\"closeOthersTags\">\r\n        <circle-close style=\"width: 1em; height: 1em;\" /> 关闭其他\r\n      </li>\r\n      <li v-if=\"!isFirstView()\" @click=\"closeLeftTags\">\r\n        <back style=\"width: 1em; height: 1em;\" /> 关闭左侧\r\n      </li>\r\n      <li v-if=\"!isLastView()\" @click=\"closeRightTags\">\r\n        <right style=\"width: 1em; height: 1em;\" /> 关闭右侧\r\n      </li>\r\n      <li @click=\"closeAllTags(selectedTag)\">\r\n        <circle-close style=\"width: 1em; height: 1em;\" /> 全部关闭\r\n      </li>\r\n    </ul>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport ScrollPane from './ScrollPane'\r\nimport { getNormalPath } from '@/utils/ruoyi'\r\nimport useTagsViewStore from '@/store/modules/tagsView'\r\nimport useSettingsStore from '@/store/modules/settings'\r\nimport usePermissionStore from '@/store/modules/permission'\r\n\r\nconst visible = ref(false);\r\nconst top = ref(0);\r\nconst left = ref(0);\r\nconst selectedTag = ref({});\r\nconst affixTags = ref([]);\r\nconst scrollPaneRef = ref(null);\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst route = useRoute();\r\nconst router = useRouter();\r\n\r\nconst visitedViews = computed(() => useTagsViewStore().visitedViews);\r\nconst routes = computed(() => usePermissionStore().routes);\r\nconst theme = computed(() => useSettingsStore().theme);\r\n\r\nwatch(route, () => {\r\n  addTags()\r\n  moveToCurrentTag()\r\n})\r\nwatch(visible, (value) => {\r\n  if (value) {\r\n    document.body.addEventListener('click', closeMenu)\r\n  } else {\r\n    document.body.removeEventListener('click', closeMenu)\r\n  }\r\n})\r\nonMounted(() => {\r\n  initTags()\r\n  addTags()\r\n})\r\n\r\nfunction isActive(r) {\r\n  return r.path === route.path\r\n}\r\nfunction activeStyle(tag) {\r\n  if (!isActive(tag)) return {};\r\n  return {\r\n    \"background-color\": theme.value,\r\n    \"border-color\": theme.value\r\n  };\r\n}\r\nfunction isAffix(tag) {\r\n  return tag.meta && tag.meta.affix\r\n}\r\nfunction isFirstView() {\r\n  try {\r\n    return selectedTag.value.fullPath === '/index' || selectedTag.value.fullPath === visitedViews.value[1].fullPath\r\n  } catch (err) {\r\n    return false\r\n  }\r\n}\r\nfunction isLastView() {\r\n  try {\r\n    return selectedTag.value.fullPath === visitedViews.value[visitedViews.value.length - 1].fullPath\r\n  } catch (err) {\r\n    return false\r\n  }\r\n}\r\nfunction filterAffixTags(routes, basePath = '') {\r\n  let tags = []\r\n  routes.forEach(route => {\r\n    if (route.meta && route.meta.affix) {\r\n      const tagPath = getNormalPath(basePath + '/' + route.path)\r\n      tags.push({\r\n        fullPath: tagPath,\r\n        path: tagPath,\r\n        name: route.name,\r\n        meta: { ...route.meta }\r\n      })\r\n    }\r\n    if (route.children) {\r\n      const tempTags = filterAffixTags(route.children, route.path)\r\n      if (tempTags.length >= 1) {\r\n        tags = [...tags, ...tempTags]\r\n      }\r\n    }\r\n  })\r\n  return tags\r\n}\r\nfunction initTags() {\r\n  const res = filterAffixTags(routes.value);\r\n  affixTags.value = res;\r\n  for (const tag of res) {\r\n    // Must have tag name\r\n    if (tag.name) {\r\n       useTagsViewStore().addVisitedView(tag)\r\n    }\r\n  }\r\n}\r\nfunction addTags() {\r\n  const { name } = route\r\n  if (name) {\r\n    useTagsViewStore().addView(route)\r\n    if (route.meta.link) {\r\n      useTagsViewStore().addIframeView(route);\r\n    }\r\n  }\r\n  return false\r\n}\r\nfunction moveToCurrentTag() {\r\n  nextTick(() => {\r\n    for (const r of visitedViews.value) {\r\n      if (r.path === route.path) {\r\n        scrollPaneRef.value.moveToTarget(r);\r\n        // when query is different then update\r\n        if (r.fullPath !== route.fullPath) {\r\n          useTagsViewStore().updateVisitedView(route)\r\n        }\r\n      }\r\n    }\r\n  })\r\n}\r\nfunction refreshSelectedTag(view) {\r\n  proxy.$tab.refreshPage(view);\r\n  if (route.meta.link) {\r\n    useTagsViewStore().delIframeView(route);\r\n  }\r\n}\r\nfunction closeSelectedTag(view) {\r\n  proxy.$tab.closePage(view).then(({ visitedViews }) => {\r\n    if (isActive(view)) {\r\n      toLastView(visitedViews, view)\r\n    }\r\n  })\r\n}\r\nfunction closeRightTags() {\r\n  proxy.$tab.closeRightPage(selectedTag.value).then(visitedViews => {\r\n    if (!visitedViews.find(i => i.fullPath === route.fullPath)) {\r\n      toLastView(visitedViews)\r\n    }\r\n  })\r\n}\r\nfunction closeLeftTags() {\r\n  proxy.$tab.closeLeftPage(selectedTag.value).then(visitedViews => {\r\n    if (!visitedViews.find(i => i.fullPath === route.fullPath)) {\r\n      toLastView(visitedViews)\r\n    }\r\n  })\r\n}\r\nfunction closeOthersTags() {\r\n  router.push(selectedTag.value).catch(() => { });\r\n  proxy.$tab.closeOtherPage(selectedTag.value).then(() => {\r\n    moveToCurrentTag()\r\n  })\r\n}\r\nfunction closeAllTags(view) {\r\n  proxy.$tab.closeAllPage().then(({ visitedViews }) => {\r\n    if (affixTags.value.some(tag => tag.path === route.path)) {\r\n      return\r\n    }\r\n    toLastView(visitedViews, view)\r\n  })\r\n}\r\nfunction toLastView(visitedViews, view) {\r\n  const latestView = visitedViews.slice(-1)[0]\r\n  if (latestView) {\r\n    router.push(latestView.fullPath)\r\n  } else {\r\n    // now the default is to redirect to the home page if there is no tags-view,\r\n    // you can adjust it according to your needs.\r\n    if (view.name === 'Dashboard') {\r\n      // to reload home page\r\n      router.replace({ path: '/redirect' + view.fullPath })\r\n    } else {\r\n      router.push('/')\r\n    }\r\n  }\r\n}\r\nfunction openMenu(tag, e) {\r\n  const menuMinWidth = 105\r\n  const offsetLeft = proxy.$el.getBoundingClientRect().left // container margin left\r\n  const offsetWidth = proxy.$el.offsetWidth // container width\r\n  const maxLeft = offsetWidth - menuMinWidth // left boundary\r\n  const l = e.clientX - offsetLeft + 15 // 15: margin right\r\n\r\n  if (l > maxLeft) {\r\n    left.value = maxLeft\r\n  } else {\r\n    left.value = l\r\n  }\r\n\r\n  top.value = e.clientY\r\n  visible.value = true\r\n  selectedTag.value = tag\r\n}\r\nfunction closeMenu() {\r\n  visible.value = false\r\n}\r\nfunction handleScroll() {\r\n  closeMenu()\r\n}\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n.tags-view-container {\r\n  height: 34px;\r\n  width: 100%;\r\n  background: #fff;\r\n  border-bottom: 1px solid #d8dce5;\r\n  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 0 3px 0 rgba(0, 0, 0, 0.04);\r\n  .tags-view-wrapper {\r\n    .tags-view-item {\r\n      display: inline-block;\r\n      position: relative;\r\n      cursor: pointer;\r\n      height: 26px;\r\n      line-height: 26px;\r\n      border: 1px solid #d8dce5;\r\n      color: #495060;\r\n      background: #fff;\r\n      padding: 0 8px;\r\n      font-size: 12px;\r\n      margin-left: 5px;\r\n      margin-top: 4px;\r\n      &:first-of-type {\r\n        margin-left: 15px;\r\n      }\r\n      &:last-of-type {\r\n        margin-right: 15px;\r\n      }\r\n      &.active {\r\n        background-color: #42b983;\r\n        color: #fff;\r\n        border-color: #42b983;\r\n        &::before {\r\n          content: \"\";\r\n          background: #fff;\r\n          display: inline-block;\r\n          width: 8px;\r\n          height: 8px;\r\n          border-radius: 50%;\r\n          position: relative;\r\n          margin-right: 5px;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  .contextmenu {\r\n    margin: 0;\r\n    background: #fff;\r\n    z-index: 3000;\r\n    position: absolute;\r\n    list-style-type: none;\r\n    padding: 5px 0;\r\n    border-radius: 4px;\r\n    font-size: 12px;\r\n    font-weight: 400;\r\n    color: #333;\r\n    box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.3);\r\n    li {\r\n      margin: 0;\r\n      padding: 7px 16px;\r\n      cursor: pointer;\r\n      &:hover {\r\n        background: #eee;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\">\r\n//reset element css of el-icon-close\r\n.tags-view-wrapper {\r\n  .tags-view-item {\r\n    .el-icon-close {\r\n      width: 16px;\r\n      height: 16px;\r\n      vertical-align: 2px;\r\n      border-radius: 50%;\r\n      text-align: center;\r\n      transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\r\n      transform-origin: 100% 50%;\r\n      &:before {\r\n        transform: scale(0.6);\r\n        display: inline-block;\r\n        vertical-align: -3px;\r\n      }\r\n      &:hover {\r\n        background-color: #b4bccc;\r\n        color: #fff;\r\n        width: 12px !important;\r\n        height: 12px !important;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>"
  },
  {
    "path": "front/src/layout/components/index.js",
    "content": "export { default as AppMain } from './AppMain'\r\nexport { default as Navbar } from './Navbar'\r\nexport { default as Settings } from './Settings'\r\nexport { default as TagsView } from './TagsView/index.vue'\r\n"
  },
  {
    "path": "front/src/layout/index.vue",
    "content": "<template>\r\n  <div :class=\"classObj\" class=\"app-wrapper\" :style=\"{ '--current-color': theme }\">\r\n    <div v-if=\"device === 'mobile' && sidebar.opened\" class=\"drawer-bg\" @click=\"handleClickOutside\"/>\r\n    <sidebar v-if=\"!sidebar.hide\" class=\"sidebar-container\" />\r\n    <div :class=\"{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }\" class=\"main-container\">\r\n      <div :class=\"{ 'fixed-header': fixedHeader }\">\r\n        <navbar @setLayout=\"setLayout\" />\r\n        <tags-view v-if=\"needTagsView\" />\r\n      </div>\r\n      <app-main />\r\n      <settings ref=\"settingRef\" />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { useWindowSize } from '@vueuse/core'\r\nimport Sidebar from './components/Sidebar/index.vue'\r\nimport { AppMain, Navbar, Settings, TagsView } from './components'\r\nimport defaultSettings from '@/settings'\r\n\r\nimport useAppStore from '@/store/modules/app'\r\nimport useSettingsStore from '@/store/modules/settings'\r\n\r\nconst settingsStore = useSettingsStore()\r\nconst theme = computed(() => settingsStore.theme);\r\nconst sideTheme = computed(() => settingsStore.sideTheme);\r\nconst sidebar = computed(() => useAppStore().sidebar);\r\nconst device = computed(() => useAppStore().device);\r\nconst needTagsView = computed(() => settingsStore.tagsView);\r\nconst fixedHeader = computed(() => settingsStore.fixedHeader);\r\n\r\nconst classObj = computed(() => ({\r\n  hideSidebar: !sidebar.value.opened,\r\n  openSidebar: sidebar.value.opened,\r\n  withoutAnimation: sidebar.value.withoutAnimation,\r\n  mobile: device.value === 'mobile'\r\n}))\r\n\r\nconst { width, height } = useWindowSize();\r\nconst WIDTH = 992; // refer to Bootstrap's responsive design\r\n\r\nwatchEffect(() => {\r\n  if (device.value === 'mobile' && sidebar.value.opened) {\r\n    useAppStore().closeSideBar({ withoutAnimation: false })\r\n  }\r\n  if (width.value - 1 < WIDTH) {\r\n    useAppStore().toggleDevice('mobile')\r\n    useAppStore().closeSideBar({ withoutAnimation: true })\r\n  } else {\r\n    useAppStore().toggleDevice('desktop')\r\n  }\r\n})\r\n\r\nfunction handleClickOutside() {\r\n  useAppStore().closeSideBar({ withoutAnimation: false })\r\n}\r\n\r\nconst settingRef = ref(null);\r\nfunction setLayout() {\r\n  settingRef.value.openSetting();\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n  @import \"@/assets/styles/mixin.scss\";\r\n  @import \"@/assets/styles/variables.module.scss\";\r\n\r\n.app-wrapper {\r\n  @include clearfix;\r\n  position: relative;\r\n  height: 100%;\r\n  width: 100%;\r\n\r\n  &.mobile.openSidebar {\r\n    position: fixed;\r\n    top: 0;\r\n  }\r\n}\r\n\r\n.drawer-bg {\r\n  background: #000;\r\n  opacity: 0.3;\r\n  width: 100%;\r\n  top: 0;\r\n  height: 100%;\r\n  position: absolute;\r\n  z-index: 999;\r\n}\r\n\r\n.fixed-header {\r\n  position: fixed;\r\n  top: 0;\r\n  right: 0;\r\n  z-index: 9;\r\n  width: calc(100% - #{$base-sidebar-width});\r\n  transition: width 0.28s;\r\n}\r\n\r\n.hideSidebar .fixed-header {\r\n  width: calc(100% - 54px);\r\n}\r\n\r\n.sidebarHide .fixed-header {\r\n  width: 100%;\r\n}\r\n\r\n.mobile .fixed-header {\r\n  width: 100%;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/main.js",
    "content": "import { createApp } from 'vue'\r\n\r\nimport Cookies from 'js-cookie'\r\n\r\nimport ElementPlus from 'element-plus'\r\nimport 'element-plus/dist/index.css'\r\nimport locale from 'element-plus/es/locale/lang/zh-cn'\r\n\r\nimport '@/assets/styles/index.scss' // global css\r\n\r\nimport App from './App'\r\nimport store from './store'\r\nimport router from './router'\r\nimport directive from './directive' // directive\r\n\r\n// 注册指令\r\nimport plugins from './plugins' // plugins\r\nimport { download } from '@/utils/request'\r\n\r\n// svg图标\r\nimport 'virtual:svg-icons-register'\r\nimport SvgIcon from '@/components/SvgIcon'\r\nimport elementIcons from '@/components/SvgIcon/svgicon'\r\n\r\nimport './permission' // permission control\r\n\r\nimport { useDict } from '@/utils/dict'\r\nimport { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi'\r\n\r\n// 分页组件\r\nimport Pagination from '@/components/Pagination'\r\n// 自定义表格工具组件\r\nimport RightToolbar from '@/components/RightToolbar'\r\n// 富文本组件\r\nimport Editor from \"@/components/Editor\"\r\n// 文件上传组件\r\nimport FileUpload from \"@/components/FileUpload\"\r\n// 图片上传组件\r\nimport ImageUpload from \"@/components/ImageUpload\"\r\n// 图片预览组件\r\nimport ImagePreview from \"@/components/ImagePreview\"\r\n// 自定义树选择组件\r\nimport TreeSelect from '@/components/TreeSelect'\r\n// 字典标签组件\r\nimport DictTag from '@/components/DictTag'\r\n//文件列表显示组件\r\nimport FileList from \"@/components/FileList\"\r\n//文件编辑\r\nimport { install as VueMonacoEditorPlugin } from '@guolao/vue-monaco-editor'\r\nconst app = createApp(App)\r\napp.use(VueMonacoEditorPlugin, {\r\n  paths: {\r\n     vs: 'https://unpkg.com/monaco-editor@0.43.0/min/vs'\r\n  },\r\n})\r\n// 全局方法挂载\r\napp.config.globalProperties.useDict = useDict\r\napp.config.globalProperties.download = download\r\napp.config.globalProperties.parseTime = parseTime\r\napp.config.globalProperties.resetForm = resetForm\r\napp.config.globalProperties.handleTree = handleTree\r\napp.config.globalProperties.addDateRange = addDateRange\r\napp.config.globalProperties.selectDictLabel = selectDictLabel\r\napp.config.globalProperties.selectDictLabels = selectDictLabels\r\n\r\n// 全局组件挂载\r\napp.component('DictTag', DictTag)\r\napp.component('Pagination', Pagination)\r\napp.component('TreeSelect', TreeSelect)\r\napp.component('FileUpload', FileUpload)\r\napp.component('ImageUpload', ImageUpload)\r\napp.component('ImagePreview', ImagePreview)\r\napp.component('RightToolbar', RightToolbar)\r\napp.component('Editor', Editor)\r\napp.component('FileList', FileList)\r\n\r\n\r\napp.use(router)\r\napp.use(store)\r\napp.use(plugins)\r\napp.use(elementIcons)\r\napp.component('svg-icon', SvgIcon)\r\n\r\ndirective(app)\r\n\r\n// 使用element-plus 并且设置全局的大小\r\napp.use(ElementPlus, {\r\n  locale: locale,\r\n  // 支持 large、default、small\r\n  size: Cookies.get('size') || 'default'\r\n})\r\n\r\napp.mount('#app')\r\n"
  },
  {
    "path": "front/src/permission.js",
    "content": "import router from './router'\r\nimport { ElMessage } from 'element-plus'\r\nimport NProgress from 'nprogress'\r\nimport 'nprogress/nprogress.css'\r\nimport { getToken } from '@/utils/auth'\r\nimport { isHttp } from '@/utils/validate'\r\nimport { isRelogin } from '@/utils/request'\r\nimport useUserStore from '@/store/modules/user'\r\nimport useSettingsStore from '@/store/modules/settings'\r\nimport usePermissionStore from '@/store/modules/permission'\r\n\r\nNProgress.configure({ showSpinner: false });\r\n\r\nconst whiteList = ['/login', '/register'];\r\n\r\nrouter.beforeEach((to, from, next) => {\r\n  NProgress.start()\r\n  if (getToken()) {\r\n    to.meta.title && useSettingsStore().setTitle(to.meta.title)\r\n    /* has token*/\r\n    if (to.path === '/login') {\r\n      next({ path: '/' })\r\n      NProgress.done()\r\n    } else if (whiteList.indexOf(to.path) !== -1) {\r\n      next()\r\n    } else {\r\n      if (useUserStore().roles.length === 0) {\r\n        isRelogin.show = true\r\n        // 判断当前用户是否已拉取完user_info信息\r\n        useUserStore().getInfo().then(() => {\r\n          isRelogin.show = false\r\n          usePermissionStore().generateRoutes().then(accessRoutes => {\r\n            // 根据roles权限生成可访问的路由表\r\n            accessRoutes.forEach(route => {\r\n              if (!isHttp(route.path)) {\r\n                router.addRoute(route) // 动态添加可访问路由表\r\n              }\r\n            })\r\n            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成\r\n          })\r\n        }).catch(err => {\r\n          useUserStore().logOut().then(() => {\r\n            ElMessage.error(err)\r\n            next({ path: '/' })\r\n          })\r\n        })\r\n      } else {\r\n        next()\r\n      }\r\n    }\r\n  } else {\r\n    // 没有token\r\n    if (whiteList.indexOf(to.path) !== -1) {\r\n      // 在免登录白名单，直接进入\r\n      next()\r\n    } else {\r\n      next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页\r\n      NProgress.done()\r\n    }\r\n  }\r\n})\r\n\r\nrouter.afterEach(() => {\r\n  NProgress.done()\r\n})\r\n"
  },
  {
    "path": "front/src/plugins/auth.js",
    "content": "import useUserStore from '@/store/modules/user'\r\n\r\nfunction authPermission(permission) {\r\n  const all_permission = \"*:*:*\";\r\n  const permissions = useUserStore().permissions\r\n  if (permission && permission.length > 0) {\r\n    return permissions.some(v => {\r\n      return all_permission === v || v === permission\r\n    })\r\n  } else {\r\n    return false\r\n  }\r\n}\r\n\r\nfunction authRole(role) {\r\n  const super_admin = \"admin\";\r\n  const roles = useUserStore().roles\r\n  if (role && role.length > 0) {\r\n    return roles.some(v => {\r\n      return super_admin === v || v === role\r\n    })\r\n  } else {\r\n    return false\r\n  }\r\n}\r\n\r\nexport default {\r\n  // 验证用户是否具备某权限\r\n  hasPermi(permission) {\r\n    return authPermission(permission);\r\n  },\r\n  // 验证用户是否含有指定权限，只需包含其中一个\r\n  hasPermiOr(permissions) {\r\n    return permissions.some(item => {\r\n      return authPermission(item)\r\n    })\r\n  },\r\n  // 验证用户是否含有指定权限，必须全部拥有\r\n  hasPermiAnd(permissions) {\r\n    return permissions.every(item => {\r\n      return authPermission(item)\r\n    })\r\n  },\r\n  // 验证用户是否具备某角色\r\n  hasRole(role) {\r\n    return authRole(role);\r\n  },\r\n  // 验证用户是否含有指定角色，只需包含其中一个\r\n  hasRoleOr(roles) {\r\n    return roles.some(item => {\r\n      return authRole(item)\r\n    })\r\n  },\r\n  // 验证用户是否含有指定角色，必须全部拥有\r\n  hasRoleAnd(roles) {\r\n    return roles.every(item => {\r\n      return authRole(item)\r\n    })\r\n  }\r\n}\r\n"
  },
  {
    "path": "front/src/plugins/cache.js",
    "content": "const sessionCache = {\r\n  set (key, value) {\r\n    if (!sessionStorage) {\r\n      return\r\n    }\r\n    if (key != null && value != null) {\r\n      sessionStorage.setItem(key, value)\r\n    }\r\n  },\r\n  get (key) {\r\n    if (!sessionStorage) {\r\n      return null\r\n    }\r\n    if (key == null) {\r\n      return null\r\n    }\r\n    return sessionStorage.getItem(key)\r\n  },\r\n  setJSON (key, jsonValue) {\r\n    if (jsonValue != null) {\r\n      this.set(key, JSON.stringify(jsonValue))\r\n    }\r\n  },\r\n  getJSON (key) {\r\n    const value = this.get(key)\r\n    if (value != null) {\r\n      return JSON.parse(value)\r\n    }\r\n  },\r\n  remove (key) {\r\n    sessionStorage.removeItem(key);\r\n  }\r\n}\r\nconst localCache = {\r\n  set (key, value) {\r\n    if (!localStorage) {\r\n      return\r\n    }\r\n    if (key != null && value != null) {\r\n      localStorage.setItem(key, value)\r\n    }\r\n  },\r\n  get (key) {\r\n    if (!localStorage) {\r\n      return null\r\n    }\r\n    if (key == null) {\r\n      return null\r\n    }\r\n    return localStorage.getItem(key)\r\n  },\r\n  setJSON (key, jsonValue) {\r\n    if (jsonValue != null) {\r\n      this.set(key, JSON.stringify(jsonValue))\r\n    }\r\n  },\r\n  getJSON (key) {\r\n    const value = this.get(key)\r\n    if (value != null) {\r\n      return JSON.parse(value)\r\n    }\r\n  },\r\n  remove (key) {\r\n    localStorage.removeItem(key);\r\n  }\r\n}\r\n\r\nexport default {\r\n  /**\r\n   * 会话级缓存\r\n   */\r\n  session: sessionCache,\r\n  /**\r\n   * 本地缓存\r\n   */\r\n  local: localCache\r\n}\r\n"
  },
  {
    "path": "front/src/plugins/download.js",
    "content": "﻿import axios from 'axios'\r\nimport { ElLoading, ElMessage } from 'element-plus'\r\nimport { saveAs } from 'file-saver'\r\nimport { getToken } from '@/utils/auth'\r\nimport errorCode from '@/utils/errorCode'\r\nimport { blobValidate } from '@/utils/ruoyi'\r\n\r\nconst baseURL = import.meta.env.VITE_APP_BASE_API\r\nlet downloadLoadingInstance;\r\n\r\nexport default {\r\n  name(name, isDelete = true) {\r\n    let url = baseURL + encodeURIComponent(name)\r\n    axios({\r\n      method: 'get',\r\n      url: url,\r\n      responseType: 'blob',\r\n      headers: { 'Authorization': 'Bearer ' + getToken() }\r\n    }).then((res) => {\r\n      const isBlob = blobValidate(res.data);\r\n      if (isBlob) {\r\n        const blob = new Blob([res.data])\r\n        this.saveAs(blob)\r\n      } else {\r\n        this.printErrMsg(res.data);\r\n      }\r\n    })\r\n  },\r\n  resource(resource) {\r\n    let url = baseURL + encodeURIComponent(resource);\r\n    axios({\r\n      method: 'get',\r\n      url: url,\r\n      responseType: 'blob',\r\n      headers: { 'Authorization': 'Bearer ' + getToken() }\r\n    }).then((res) => {\r\n      const isBlob = blobValidate(res.data);\r\n      if (isBlob) {\r\n        const blob = new Blob([res.data])\r\n        this.saveAs(blob)\r\n      } else {\r\n        this.printErrMsg(res.data);\r\n      }\r\n    })\r\n  },\r\n  zip(url, name) {\r\n    url = baseURL + url\r\n    downloadLoadingInstance = ElLoading.service({ text: \"正在下载数据，请稍候\", background: \"rgba(0, 0, 0, 0.7)\", })\r\n    axios({\r\n      method: 'get',\r\n      url: url,\r\n      responseType: 'blob',\r\n      headers: { 'Authorization': 'Bearer ' + getToken() }\r\n    }).then((res) => {\r\n      const isBlob = blobValidate(res.data);\r\n      if (isBlob) {\r\n        const blob = new Blob([res.data], { type: 'application/zip' })\r\n        this.saveAs(blob, name)\r\n      } else {\r\n        this.printErrMsg(res.data);\r\n      }\r\n      downloadLoadingInstance.close();\r\n    }).catch((r) => {\r\n      console.error(r)\r\n      ElMessage.error('下载文件出现错误，请联系管理员！')\r\n      downloadLoadingInstance.close();\r\n    })\r\n  },\r\n  saveAs(text, name, opts) {\r\n    saveAs(text, name, opts);\r\n  },\r\n  async printErrMsg(data) {\r\n    const resText = await data.text();\r\n    const rspObj = JSON.parse(resText);\r\n    const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']\r\n    ElMessage.error(errMsg);\r\n  }\r\n}\r\n\r\n"
  },
  {
    "path": "front/src/plugins/index.js",
    "content": "import tab from './tab'\r\nimport auth from './auth'\r\nimport cache from './cache'\r\nimport modal from './modal'\r\nimport download from './download'\r\n\r\nexport default function installPlugins(app){\r\n  // 页签操作\r\n  app.config.globalProperties.$tab = tab\r\n  // 认证对象\r\n  app.config.globalProperties.$auth = auth\r\n  // 缓存对象\r\n  app.config.globalProperties.$cache = cache\r\n  // 模态框对象\r\n  app.config.globalProperties.$modal = modal\r\n  // 下载文件\r\n  app.config.globalProperties.$download = download\r\n}\r\n"
  },
  {
    "path": "front/src/plugins/modal.js",
    "content": "import { ElMessage, ElMessageBox, ElNotification, ElLoading } from 'element-plus'\r\n\r\nlet loadingInstance;\r\n\r\nexport default {\r\n  // 消息提示\r\n  msg(content) {\r\n    ElMessage.info(content)\r\n  },\r\n  // 错误消息\r\n  msgError(content) {\r\n    ElMessage.error(content)\r\n  },\r\n  // 成功消息\r\n  msgSuccess(content) {\r\n    ElMessage.success(content)\r\n  },\r\n  // 警告消息\r\n  msgWarning(content) {\r\n    ElMessage.warning(content)\r\n  },\r\n  // 弹出提示\r\n  alert(content) {\r\n    ElMessageBox.alert(content, \"系统提示\")\r\n  },\r\n  // 错误提示\r\n  alertError(content) {\r\n    ElMessageBox.alert(content, \"系统提示\", { type: 'error' })\r\n  },\r\n  // 成功提示\r\n  alertSuccess(content) {\r\n    ElMessageBox.alert(content, \"系统提示\", { type: 'success' })\r\n  },\r\n  // 警告提示\r\n  alertWarning(content) {\r\n    ElMessageBox.alert(content, \"系统提示\", { type: 'warning' })\r\n  },\r\n  // 通知提示\r\n  notify(content) {\r\n    ElNotification.info(content)\r\n  },\r\n  // 错误通知\r\n  notifyError(content) {\r\n    ElNotification.error(content);\r\n  },\r\n  // 成功通知\r\n  notifySuccess(content) {\r\n    ElNotification.success(content)\r\n  },\r\n  // 警告通知\r\n  notifyWarning(content) {\r\n    ElNotification.warning(content)\r\n  },\r\n  // 确认窗体\r\n  confirm(content) {\r\n    return ElMessageBox.confirm(content, \"系统提示\", {\r\n      confirmButtonText: '确定',\r\n      cancelButtonText: '取消',\r\n      type: \"warning\",\r\n    })\r\n  },\r\n  // 提交内容\r\n  prompt(content) {\r\n    return ElMessageBox.prompt(content, \"系统提示\", {\r\n      confirmButtonText: '确定',\r\n      cancelButtonText: '取消',\r\n      type: \"warning\",\r\n    })\r\n  },\r\n  // 打开遮罩层\r\n  loading(content) {\r\n    loadingInstance = ElLoading.service({\r\n      lock: true,\r\n      text: content,\r\n      background: \"rgba(0, 0, 0, 0.7)\",\r\n    })\r\n  },\r\n  // 关闭遮罩层\r\n  closeLoading() {\r\n    loadingInstance.close();\r\n  }\r\n}\r\n"
  },
  {
    "path": "front/src/plugins/tab.js",
    "content": "import useTagsViewStore from '@/store/modules/tagsView'\r\nimport router from '@/router'\r\n\r\nexport default {\r\n  // 刷新当前tab页签\r\n  refreshPage(obj) {\r\n    const { path, query, matched } = router.currentRoute.value;\r\n    if (obj === undefined) {\r\n      matched.forEach((m) => {\r\n        if (m.components && m.components.default && m.components.default.name) {\r\n          if (!['Layout', 'ParentView'].includes(m.components.default.name)) {\r\n            obj = { name: m.components.default.name, path: path, query: query };\r\n          }\r\n        }\r\n      });\r\n    }\r\n    return useTagsViewStore().delCachedView(obj).then(() => {\r\n      const { path, query } = obj\r\n      router.replace({\r\n        path: '/redirect' + path,\r\n        query: query\r\n      })\r\n    })\r\n  },\r\n  // 关闭当前tab页签，打开新页签\r\n  closeOpenPage(obj) {\r\n    useTagsViewStore().delView(router.currentRoute.value);\r\n    if (obj !== undefined) {\r\n      return router.push(obj);\r\n    }\r\n  },\r\n  // 关闭指定tab页签\r\n  closePage(obj) {\r\n    if (obj === undefined) {\r\n      return useTagsViewStore().delView(router.currentRoute.value).then(({ visitedViews }) => {\r\n        const latestView = visitedViews.slice(-1)[0]\r\n        if (latestView) {\r\n          return router.push(latestView.fullPath)\r\n        }\r\n        return router.push('/');\r\n      });\r\n    }\r\n    return useTagsViewStore().delView(obj);\r\n  },\r\n  // 关闭所有tab页签\r\n  closeAllPage() {\r\n    return useTagsViewStore().delAllViews();\r\n  },\r\n  // 关闭左侧tab页签\r\n  closeLeftPage(obj) {\r\n    return useTagsViewStore().delLeftTags(obj || router.currentRoute.value);\r\n  },\r\n  // 关闭右侧tab页签\r\n  closeRightPage(obj) {\r\n    return useTagsViewStore().delRightTags(obj || router.currentRoute.value);\r\n  },\r\n  // 关闭其他tab页签\r\n  closeOtherPage(obj) {\r\n    return useTagsViewStore().delOthersViews(obj || router.currentRoute.value);\r\n  },\r\n  // 打开tab页签\r\n  openPage(url) {\r\n    return router.push(url);\r\n  },\r\n  // 修改tab页签\r\n  updatePage(obj) {\r\n    return useTagsViewStore().updateVisitedView(obj);\r\n  }\r\n}\r\n"
  },
  {
    "path": "front/src/router/index.js",
    "content": "import { createWebHistory, createRouter } from 'vue-router'\r\n/* Layout */\r\nimport Layout from '@/layout'\r\n\r\n/**\r\n * Note: 路由配置项\r\n *\r\n * hidden: true                     // 当设置 true 的时候该路由不会再侧边栏出现 如401，login等页面，或者如一些编辑页面/edit/1\r\n * alwaysShow: true                 // 当你一个路由下面的 children 声明的路由大于1个时，自动会变成嵌套的模式--如组件页面\r\n *                                  // 只有一个时，会将那个子路由当做根路由显示在侧边栏--如引导页面\r\n *                                  // 若你想不管路由下面的 children 声明的个数都显示你的根路由\r\n *                                  // 你可以设置 alwaysShow: true，这样它就会忽略之前定义的规则，一直显示根路由\r\n * redirect: noRedirect             // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击\r\n * name:'router-name'               // 设定路由的名字，一定要填写不然使用<keep-alive>时会出现各种问题\r\n * query: '{\"id\": 1, \"name\": \"ry\"}' // 访问路由的默认传递参数\r\n * roles: ['admin', 'common']       // 访问路由的角色权限\r\n * permissions: ['a:a:a', 'b:b:b']  // 访问路由的菜单权限\r\n * meta : {\r\n    noCache: true                   // 如果设置为true，则不会被 <keep-alive> 缓存(默认 false)\r\n    title: 'title'                  // 设置该路由在侧边栏和面包屑中展示的名字\r\n    icon: 'svg-name'                // 设置该路由的图标，对应路径src/assets/icons/svg\r\n    breadcrumb: false               // 如果设置为false，则不会在breadcrumb面包屑中显示\r\n    activeMenu: '/system/user'      // 当路由设置了该属性，则会高亮相对应的侧边栏。\r\n  }\r\n */\r\n\r\n// 公共路由\r\nexport const constantRoutes = [\r\n  {\r\n    path: '/redirect',\r\n    component: Layout,\r\n    hidden: true,\r\n    children: [\r\n      {\r\n        path: '/redirect/:path(.*)',\r\n        component: () => import('@/views/redirect/index.vue')\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/login',\r\n    component: () => import('@/views/login'),\r\n    hidden: true\r\n  },\r\n  {\r\n    path: \"/:pathMatch(.*)*\",\r\n    component: () => import('@/views/error/404'),\r\n    hidden: true\r\n  },\r\n  {\r\n    path: '/401',\r\n    component: () => import('@/views/error/401'),\r\n    hidden: true\r\n  },\r\n  {\r\n    path: '',\r\n    component: Layout,\r\n    redirect: '/index',\r\n    children: [\r\n      {\r\n        path: '/index',\r\n        component: () => import('@/views/index'),\r\n        name: 'Index',\r\n        meta: { title: '首页', icon: 'dashboard', affix: true,noCache: false }\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/user',\r\n    component: Layout,\r\n    hidden: true,\r\n    redirect: 'noredirect',\r\n    children: [\r\n      {\r\n        path: 'profile',\r\n        component: () => import('@/views/system/user/profile/index'),\r\n        name: 'Profile',\r\n        meta: { title: '个人中心', icon: 'user' }\r\n      }\r\n    ]\r\n  }\r\n]\r\n\r\n// 动态路由，基于用户权限动态去加载\r\nexport const dynamicRoutes = [\r\n  {\r\n    path: '/system/user-auth',\r\n    component: Layout,\r\n    hidden: true,\r\n    permissions: ['system:user:edit'],\r\n    children: [\r\n      {\r\n        path: 'role/:userId(\\\\d+)',\r\n        component: () => import('@/views/system/user/authRole'),\r\n        name: 'AuthRole',\r\n        meta: { title: '分配角色', activeMenu: '/system/user' }\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/system/role-auth',\r\n    component: Layout,\r\n    hidden: true,\r\n    permissions: ['system:role:edit'],\r\n    children: [\r\n      {\r\n        path: 'user/:roleId(\\\\d+)',\r\n        component: () => import('@/views/system/role/authUser'),\r\n        name: 'AuthUser',\r\n        meta: { title: '分配用户', activeMenu: '/system/role' }\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/system/dict-data',\r\n    component: Layout,\r\n    hidden: true,\r\n    permissions: ['system:dict:list'],\r\n    children: [\r\n      {\r\n        path: 'index/:dictId(\\\\d+)',\r\n        component: () => import('@/views/system/dict/data'),\r\n        name: 'Data',\r\n        meta: { title: '字典数据', activeMenu: '/system/dict' }\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/tool/gen-edit',\r\n    component: Layout,\r\n    hidden: true,\r\n    permissions: ['tool:gen:edit'],\r\n    children: [\r\n      {\r\n        path: 'index/:tableId(\\\\d+)',\r\n        component: () => import('@/views/tool/gen/editTable'),\r\n        name: 'GenEdit',\r\n        meta: { title: '修改生成配置', activeMenu: '/tool/gen' }\r\n      }\r\n    ]\r\n  }\r\n]\r\n\r\nconst router = createRouter({\r\n  history: createWebHistory(),\r\n  routes: constantRoutes,\r\n  scrollBehavior(to, from, savedPosition) {\r\n    if (savedPosition) {\r\n      return savedPosition\r\n    } else {\r\n      return { top: 0 }\r\n    }\r\n  },\r\n});\r\n\r\nexport default router;\r\n"
  },
  {
    "path": "front/src/settings.js",
    "content": "export default {\r\n  /**\r\n   * 网页标题\r\n   */\r\n  title: import.meta.env.VITE_APP_TITLE,\r\n  /**\r\n   * 侧边栏主题 深色主题theme-dark，浅色主题theme-light\r\n   */\r\n  sideTheme: 'theme-light',\r\n  /**\r\n   * 是否系统布局配置\r\n   */\r\n  showSettings: true,\r\n\r\n  /**\r\n   * 是否显示顶部导航\r\n   */\r\n  topNav: false,\r\n\r\n  /**\r\n   * 是否显示 tagsView\r\n   */\r\n  tagsView: true,\r\n\r\n  /**\r\n   * 是否固定头部\r\n   */\r\n  fixedHeader: false,\r\n\r\n  /**\r\n   * 是否显示logo\r\n   */\r\n  sidebarLogo: true,\r\n\r\n  /**\r\n   * 是否显示动态标题\r\n   */\r\n  dynamicTitle: false,\r\n\r\n  /**\r\n   * @type {string | array} 'production' | ['production', 'development']\r\n   * @description Need show err logs component.\r\n   * The default is only used in the production env\r\n   * If you want to also use it in dev, you can pass ['production', 'development']\r\n   */\r\n  errorLog: 'production'\r\n}\r\n"
  },
  {
    "path": "front/src/store/index.js",
    "content": "const store = createPinia()\r\n\r\nexport default store"
  },
  {
    "path": "front/src/store/modules/app.js",
    "content": "import Cookies from 'js-cookie'\r\n\r\nconst useAppStore = defineStore(\r\n  'app',\r\n  {\r\n    state: () => ({\r\n      sidebar: {\r\n        opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,\r\n        withoutAnimation: false,\r\n        hide: false\r\n      },\r\n      device: 'desktop',\r\n      size: Cookies.get('size') || 'default'\r\n    }),\r\n    actions: {\r\n      toggleSideBar(withoutAnimation) {\r\n        if (this.sidebar.hide) {\r\n          return false;\r\n        }\r\n        this.sidebar.opened = !this.sidebar.opened\r\n        this.sidebar.withoutAnimation = withoutAnimation\r\n        if (this.sidebar.opened) {\r\n          Cookies.set('sidebarStatus', 1)\r\n        } else {\r\n          Cookies.set('sidebarStatus', 0)\r\n        }\r\n      },\r\n      closeSideBar({ withoutAnimation }) {\r\n        Cookies.set('sidebarStatus', 0)\r\n        this.sidebar.opened = false\r\n        this.sidebar.withoutAnimation = withoutAnimation\r\n      },\r\n      toggleDevice(device) {\r\n        this.device = device\r\n      },\r\n      setSize(size) {\r\n        this.size = size;\r\n        Cookies.set('size', size)\r\n      },\r\n      toggleSideBarHide(status) {\r\n        this.sidebar.hide = status\r\n      }\r\n    }\r\n  })\r\n\r\nexport default useAppStore\r\n"
  },
  {
    "path": "front/src/store/modules/dict.js",
    "content": "const useDictStore = defineStore(\r\n  'dict',\r\n  {\r\n    state: () => ({\r\n      dict: new Array()\r\n    }),\r\n    actions: {\r\n      // 获取字典\r\n      getDict(_key) {\r\n        if (_key == null && _key == \"\") {\r\n          return null;\r\n        }\r\n        try {\r\n          for (let i = 0; i < this.dict.length; i++) {\r\n            if (this.dict[i].key == _key) {\r\n              return this.dict[i].value;\r\n            }\r\n          }\r\n        } catch (e) {\r\n          return null;\r\n        }\r\n      },\r\n      // 设置字典\r\n      setDict(_key, value) {\r\n        if (_key !== null && _key !== \"\") {\r\n          this.dict.push({\r\n            key: _key,\r\n            value: value\r\n          });\r\n        }\r\n      },\r\n      // 删除字典\r\n      removeDict(_key) {\r\n        var bln = false;\r\n        try {\r\n          for (let i = 0; i < this.dict.length; i++) {\r\n            if (this.dict[i].key == _key) {\r\n              this.dict.splice(i, 1);\r\n              return true;\r\n            }\r\n          }\r\n        } catch (e) {\r\n          bln = false;\r\n        }\r\n        return bln;\r\n      },\r\n      // 清空字典\r\n      cleanDict() {\r\n        this.dict = new Array();\r\n      },\r\n      // 初始字典\r\n      initDict() {\r\n      }\r\n    }\r\n  })\r\n\r\nexport default useDictStore\r\n"
  },
  {
    "path": "front/src/store/modules/permission.js",
    "content": "import auth from '@/plugins/auth'\r\nimport router, { constantRoutes, dynamicRoutes } from '@/router'\r\nimport { getRouters } from '@/api/menu'\r\nimport Layout from '@/layout/index'\r\nimport ParentView from '@/components/ParentView'\r\nimport InnerLink from '@/layout/components/InnerLink'\r\n\r\n// 匹配views里面所有的.vue文件\r\nconst modules = import.meta.glob('./../../views/**/*.vue')\r\n\r\nconst usePermissionStore = defineStore(\r\n  'permission',\r\n  {\r\n    state: () => ({\r\n      routes: [],\r\n      addRoutes: [],\r\n      defaultRoutes: [],\r\n      topbarRouters: [],\r\n      sidebarRouters: []\r\n    }),\r\n    actions: {\r\n      setRoutes(routes) {\r\n        this.addRoutes = routes\r\n        this.routes = constantRoutes.concat(routes)\r\n      },\r\n      setDefaultRoutes(routes) {\r\n        this.defaultRoutes = constantRoutes.concat(routes)\r\n      },\r\n      setTopbarRoutes(routes) {\r\n        this.topbarRouters = routes\r\n      },\r\n      setSidebarRouters(routes) {\r\n        this.sidebarRouters = routes\r\n      },\r\n      generateRoutes(roles) {\r\n        return new Promise(resolve => {\r\n          // 向后端请求路由数据\r\n          getRouters().then(res => {\r\n            const sdata = JSON.parse(JSON.stringify(res.data))\r\n            const rdata = JSON.parse(JSON.stringify(res.data))\r\n            const defaultData = JSON.parse(JSON.stringify(res.data))\r\n            const sidebarRoutes = filterAsyncRouter(sdata)\r\n            const rewriteRoutes = filterAsyncRouter(rdata, false, true)\r\n            const defaultRoutes = filterAsyncRouter(defaultData)\r\n            const asyncRoutes = filterDynamicRoutes(dynamicRoutes)\r\n            asyncRoutes.forEach(route => { router.addRoute(route) })\r\n            this.setRoutes(rewriteRoutes)\r\n            this.setSidebarRouters(constantRoutes.concat(sidebarRoutes))\r\n            this.setDefaultRoutes(sidebarRoutes)\r\n            this.setTopbarRoutes(defaultRoutes)\r\n            resolve(rewriteRoutes)\r\n          })\r\n        })\r\n      }\r\n    }\r\n  })\r\n\r\n// 遍历后台传来的路由字符串，转换为组件对象\r\nfunction filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {\r\n  return asyncRouterMap.filter(route => {\r\n    if (type && route.children) {\r\n      route.children = filterChildren(route.children)\r\n    }\r\n    if (route.component) {\r\n      // Layout ParentView 组件特殊处理\r\n      if (route.component === 'Layout') {\r\n        route.component = Layout\r\n      } else if (route.component === 'ParentView') {\r\n        route.component = ParentView\r\n      } else if (route.component === 'InnerLink') {\r\n        route.component = InnerLink\r\n      } else {\r\n        route.component = loadView(route.component)\r\n      }\r\n    }\r\n    if (route.children != null && route.children && route.children.length) {\r\n      route.children = filterAsyncRouter(route.children, route, type)\r\n    } else {\r\n      delete route['children']\r\n      delete route['redirect']\r\n    }\r\n    return true\r\n  })\r\n}\r\n\r\nfunction filterChildren(childrenMap, lastRouter = false) {\r\n  var children = []\r\n  childrenMap.forEach((el, index) => {\r\n    if (el.children && el.children.length) {\r\n      if (el.component === 'ParentView' && !lastRouter) {\r\n        el.children.forEach(c => {\r\n          c.path = el.path + '/' + c.path\r\n          if (c.children && c.children.length) {\r\n            children = children.concat(filterChildren(c.children, c))\r\n            return\r\n          }\r\n          children.push(c)\r\n        })\r\n        return\r\n      }\r\n    }\r\n    if (lastRouter) {\r\n      el.path = lastRouter.path + '/' + el.path\r\n      if (el.children && el.children.length) {\r\n        children = children.concat(filterChildren(el.children, el))\r\n        return\r\n      }\r\n    }\r\n    children = children.concat(el)\r\n  })\r\n  return children\r\n}\r\n\r\n// 动态路由遍历，验证是否具备权限\r\nexport function filterDynamicRoutes(routes) {\r\n  const res = []\r\n  routes.forEach(route => {\r\n    if (route.permissions) {\r\n      if (auth.hasPermiOr(route.permissions)) {\r\n        res.push(route)\r\n      }\r\n    } else if (route.roles) {\r\n      if (auth.hasRoleOr(route.roles)) {\r\n        res.push(route)\r\n      }\r\n    }\r\n  })\r\n  return res\r\n}\r\n\r\nexport const loadView = (view) => {\r\n  let res;\r\n  for (const path in modules) {\r\n    const dir = path.split('views/')[1].split('.vue')[0];\r\n    if (dir === view) {\r\n      res = () => modules[path]();\r\n    }\r\n  }\r\n  return res;\r\n}\r\n\r\nexport default usePermissionStore\r\n"
  },
  {
    "path": "front/src/store/modules/settings.js",
    "content": "import defaultSettings from '@/settings'\r\nimport { useDynamicTitle } from '@/utils/dynamicTitle'\r\n\r\nconst { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings\r\n\r\nconst storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''\r\n\r\nconst useSettingsStore = defineStore(\r\n  'settings',\r\n  {\r\n    state: () => ({\r\n      title: '',\r\n      theme: storageSetting.theme || '#3F51B5',\r\n      sideTheme: storageSetting.sideTheme || sideTheme,\r\n      showSettings: showSettings,\r\n      topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,\r\n      tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,\r\n      fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader,\r\n      sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo,\r\n      dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle\r\n    }),\r\n    actions: {\r\n      // 修改布局设置\r\n      changeSetting(data) {\r\n        const { key, value } = data\r\n        if (this.hasOwnProperty(key)) {\r\n          this[key] = value\r\n        }\r\n      },\r\n      // 设置网页标题\r\n      setTitle(title) {\r\n        this.title = title\r\n        useDynamicTitle();\r\n      }\r\n    }\r\n  })\r\n\r\nexport default useSettingsStore\r\n"
  },
  {
    "path": "front/src/store/modules/tagsView.js",
    "content": "const useTagsViewStore = defineStore(\r\n  'tags-view',\r\n  {\r\n    state: () => ({\r\n      visitedViews: [],\r\n      cachedViews: [],\r\n      iframeViews: []\r\n    }),\r\n    actions: {\r\n      addView(view) {\r\n        this.addVisitedView(view)\r\n        this.addCachedView(view)\r\n      },\r\n      addIframeView(view) {\r\n        if (this.iframeViews.some(v => v.path === view.path)) return\r\n        this.iframeViews.push(\r\n          Object.assign({}, view, {\r\n            title: view.meta.title || 'no-name'\r\n          })\r\n        )\r\n      },\r\n      addVisitedView(view) {\r\n        if (this.visitedViews.some(v => v.path === view.path)) return\r\n        this.visitedViews.push(\r\n          Object.assign({}, view, {\r\n            title: view.meta.title || 'no-name'\r\n          })\r\n        )\r\n      },\r\n      addCachedView(view) {\r\n        if (this.cachedViews.includes(view.name)) return\r\n        if (!view.meta.noCache) {\r\n          this.cachedViews.push(view.name)\r\n        }\r\n      },\r\n      delView(view) {\r\n        return new Promise(resolve => {\r\n          this.delVisitedView(view)\r\n          this.delCachedView(view)\r\n          resolve({\r\n            visitedViews: [...this.visitedViews],\r\n            cachedViews: [...this.cachedViews]\r\n          })\r\n        })\r\n      },\r\n      delVisitedView(view) {\r\n        return new Promise(resolve => {\r\n          for (const [i, v] of this.visitedViews.entries()) {\r\n            if (v.path === view.path) {\r\n              this.visitedViews.splice(i, 1)\r\n              break\r\n            }\r\n          }\r\n          this.iframeViews = this.iframeViews.filter(item => item.path !== view.path)\r\n          resolve([...this.visitedViews])\r\n        })\r\n      },\r\n      delIframeView(view) {\r\n        return new Promise(resolve => {\r\n          this.iframeViews = this.iframeViews.filter(item => item.path !== view.path)\r\n          resolve([...this.iframeViews])\r\n        })\r\n      },\r\n      delCachedView(view) {\r\n        return new Promise(resolve => {\r\n          const index = this.cachedViews.indexOf(view.name)\r\n          index > -1 && this.cachedViews.splice(index, 1)\r\n          resolve([...this.cachedViews])\r\n        })\r\n      },\r\n      delOthersViews(view) {\r\n        return new Promise(resolve => {\r\n          this.delOthersVisitedViews(view)\r\n          this.delOthersCachedViews(view)\r\n          resolve({\r\n            visitedViews: [...this.visitedViews],\r\n            cachedViews: [...this.cachedViews]\r\n          })\r\n        })\r\n      },\r\n      delOthersVisitedViews(view) {\r\n        return new Promise(resolve => {\r\n          this.visitedViews = this.visitedViews.filter(v => {\r\n            return v.meta.affix || v.path === view.path\r\n          })\r\n          this.iframeViews = this.iframeViews.filter(item => item.path === view.path)\r\n          resolve([...this.visitedViews])\r\n        })\r\n      },\r\n      delOthersCachedViews(view) {\r\n        return new Promise(resolve => {\r\n          const index = this.cachedViews.indexOf(view.name)\r\n          if (index > -1) {\r\n            this.cachedViews = this.cachedViews.slice(index, index + 1)\r\n          } else {\r\n            this.cachedViews = []\r\n          }\r\n          resolve([...this.cachedViews])\r\n        })\r\n      },\r\n      delAllViews(view) {\r\n        return new Promise(resolve => {\r\n          this.delAllVisitedViews(view)\r\n          this.delAllCachedViews(view)\r\n          resolve({\r\n            visitedViews: [...this.visitedViews],\r\n            cachedViews: [...this.cachedViews]\r\n          })\r\n        })\r\n      },\r\n      delAllVisitedViews(view) {\r\n        return new Promise(resolve => {\r\n          const affixTags = this.visitedViews.filter(tag => tag.meta.affix)\r\n          this.visitedViews = affixTags\r\n          this.iframeViews = []\r\n          resolve([...this.visitedViews])\r\n        })\r\n      },\r\n      delAllCachedViews(view) {\r\n        return new Promise(resolve => {\r\n          this.cachedViews = []\r\n          resolve([...this.cachedViews])\r\n        })\r\n      },\r\n      updateVisitedView(view) {\r\n        for (let v of this.visitedViews) {\r\n          if (v.path === view.path) {\r\n            v = Object.assign(v, view)\r\n            break\r\n          }\r\n        }\r\n      },\r\n      delRightTags(view) {\r\n        return new Promise(resolve => {\r\n          const index = this.visitedViews.findIndex(v => v.path === view.path)\r\n          if (index === -1) {\r\n            return\r\n          }\r\n          this.visitedViews = this.visitedViews.filter((item, idx) => {\r\n            if (idx <= index || (item.meta && item.meta.affix)) {\r\n              return true\r\n            }\r\n            const i = this.cachedViews.indexOf(item.name)\r\n            if (i > -1) {\r\n              this.cachedViews.splice(i, 1)\r\n            }\r\n            if(item.meta.link) {\r\n              const fi = this.iframeViews.findIndex(v => v.path === item.path)\r\n              this.iframeViews.splice(fi, 1)\r\n            }\r\n            return false\r\n          })\r\n          resolve([...this.visitedViews])\r\n        })\r\n      },\r\n      delLeftTags(view) {\r\n        return new Promise(resolve => {\r\n          const index = this.visitedViews.findIndex(v => v.path === view.path)\r\n          if (index === -1) {\r\n            return\r\n          }\r\n          this.visitedViews = this.visitedViews.filter((item, idx) => {\r\n            if (idx >= index || (item.meta && item.meta.affix)) {\r\n              return true\r\n            }\r\n            const i = this.cachedViews.indexOf(item.name)\r\n            if (i > -1) {\r\n              this.cachedViews.splice(i, 1)\r\n            }\r\n            if(item.meta.link) {\r\n              const fi = this.iframeViews.findIndex(v => v.path === item.path)\r\n              this.iframeViews.splice(fi, 1)\r\n            }\r\n            return false\r\n          })\r\n          resolve([...this.visitedViews])\r\n        })\r\n      }\r\n    }\r\n  })\r\n\r\nexport default useTagsViewStore\r\n"
  },
  {
    "path": "front/src/store/modules/user.js",
    "content": "import { login, logout, getInfo } from '@/api/login'\r\nimport { getToken, setToken, removeToken } from '@/utils/auth'\r\nimport defAva from '@/assets/images/profile.jpg'\r\n\r\nconst useUserStore = defineStore(\r\n  'user',\r\n  {\r\n    state: () => ({\r\n      token: getToken(),\r\n      id: '',\r\n      name: '',\r\n      avatar: '',\r\n      roles: [],\r\n      permissions: []\r\n    }),\r\n    actions: {\r\n      // 登录\r\n      login(userInfo) {\r\n        const username = userInfo.username.trim()\r\n        const password = userInfo.password\r\n        const code = userInfo.code\r\n        const uuid = userInfo.uuid\r\n        return new Promise((resolve, reject) => {\r\n          login(username, password, code, uuid).then(res => {\r\n            setToken(res.token)\r\n            this.token = res.token\r\n            resolve()\r\n          }).catch(error => {\r\n            reject(error)\r\n          })\r\n        })\r\n      },\r\n      // 获取用户信息\r\n      getInfo() {\r\n        return new Promise((resolve, reject) => {\r\n          getInfo().then(res => {\r\n            const user = res.user\r\n            const avatar = (user.avatar == \"\" || user.avatar == null) ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar;\r\n            if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组\r\n              this.roles = res.roles\r\n              this.permissions = res.permissions\r\n            } else {\r\n              this.roles = ['ROLE_DEFAULT']\r\n            }\r\n            this.id = user.userId\r\n            this.name = user.userName\r\n            this.avatar = avatar\r\n            resolve(res)\r\n          }).catch(error => {\r\n            reject(error)\r\n          })\r\n        })\r\n      },\r\n      // 退出系统\r\n      logOut() {\r\n        return new Promise((resolve, reject) => {\r\n          logout(this.token).then(() => {\r\n            this.token = ''\r\n            this.roles = []\r\n            this.permissions = []\r\n            removeToken()\r\n            resolve()\r\n          }).catch(error => {\r\n            reject(error)\r\n          })\r\n        })\r\n      }\r\n    }\r\n  })\r\n\r\nexport default useUserStore\r\n"
  },
  {
    "path": "front/src/utils/auth.js",
    "content": "import Cookies from 'js-cookie'\r\n\r\nconst TokenKey = 'Admin-Token'\r\n\r\nexport function getToken() {\r\n  return Cookies.get(TokenKey)\r\n}\r\n\r\nexport function setToken(token) {\r\n  return Cookies.set(TokenKey, token)\r\n}\r\n\r\nexport function removeToken() {\r\n  return Cookies.remove(TokenKey)\r\n}\r\n"
  },
  {
    "path": "front/src/utils/dict.js",
    "content": "import useDictStore from '@/store/modules/dict'\r\nimport { getDicts } from '@/api/system/dict/data'\r\n\r\n/**\r\n * 获取字典数据\r\n */\r\nexport function useDict(...args) {\r\n  const res = ref({});\r\n  return (() => {\r\n    args.forEach((dictType, index) => {\r\n      res.value[dictType] = [];\r\n      const dicts = useDictStore().getDict(dictType);\r\n      if (dicts) {\r\n        res.value[dictType] = dicts;\r\n      } else {\r\n        getDicts(dictType).then(resp => {\r\n          res.value[dictType] = resp.data.map(p => ({ label: p.dictLabel, value: p.dictValue, elTagType: p.listClass, elTagClass: p.cssClass }))\r\n          useDictStore().setDict(dictType, res.value[dictType]);\r\n        })\r\n      }\r\n    })\r\n    return toRefs(res.value);\r\n  })()\r\n}"
  },
  {
    "path": "front/src/utils/dynamicTitle.js",
    "content": "import store from '@/store'\r\nimport defaultSettings from '@/settings'\r\nimport useSettingsStore from '@/store/modules/settings'\r\n\r\n/**\r\n * 动态修改标题\r\n */\r\nexport function useDynamicTitle() {\r\n  const settingsStore = useSettingsStore();\r\n  if (settingsStore.dynamicTitle) {\r\n    document.title = settingsStore.title + ' - ' + defaultSettings.title;\r\n  } else {\r\n    document.title = defaultSettings.title;\r\n  }\r\n}"
  },
  {
    "path": "front/src/utils/errorCode.js",
    "content": "export default {\r\n  '401': '认证失败，无法访问系统资源',\r\n  '403': '当前操作没有权限',\r\n  '404': '访问资源不存在',\r\n  'default': '系统未知错误，请反馈给管理员'\r\n}\r\n"
  },
  {
    "path": "front/src/utils/index.js",
    "content": "import { parseTime } from './ruoyi'\r\n\r\n/**\r\n * 表格时间格式化\r\n */\r\nexport function formatDate(cellValue) {\r\n  if (cellValue == null || cellValue == \"\") return \"\";\r\n  var date = new Date(cellValue) \r\n  var year = date.getFullYear()\r\n  var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1\r\n  var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() \r\n  var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() \r\n  var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() \r\n  var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()\r\n  return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds\r\n}\r\n\r\n/**\r\n * @param {number} time\r\n * @param {string} option\r\n * @returns {string}\r\n */\r\nexport function formatTime(time, option) {\r\n  if (('' + time).length === 10) {\r\n    time = parseInt(time) * 1000\r\n  } else {\r\n    time = +time\r\n  }\r\n  const d = new Date(time)\r\n  const now = Date.now()\r\n\r\n  const diff = (now - d) / 1000\r\n\r\n  if (diff < 30) {\r\n    return '刚刚'\r\n  } else if (diff < 3600) {\r\n    // less 1 hour\r\n    return Math.ceil(diff / 60) + '分钟前'\r\n  } else if (diff < 3600 * 24) {\r\n    return Math.ceil(diff / 3600) + '小时前'\r\n  } else if (diff < 3600 * 24 * 2) {\r\n    return '1天前'\r\n  }\r\n  if (option) {\r\n    return parseTime(time, option)\r\n  } else {\r\n    return (\r\n      d.getMonth() +\r\n      1 +\r\n      '月' +\r\n      d.getDate() +\r\n      '日' +\r\n      d.getHours() +\r\n      '时' +\r\n      d.getMinutes() +\r\n      '分'\r\n    )\r\n  }\r\n}\r\n\r\n/**\r\n * @param {string} url\r\n * @returns {Object}\r\n */\r\nexport function getQueryObject(url) {\r\n  url = url == null ? window.location.href : url\r\n  const search = url.substring(url.lastIndexOf('?') + 1)\r\n  const obj = {}\r\n  const reg = /([^?&=]+)=([^?&=]*)/g\r\n  search.replace(reg, (rs, $1, $2) => {\r\n    const name = decodeURIComponent($1)\r\n    let val = decodeURIComponent($2)\r\n    val = String(val)\r\n    obj[name] = val\r\n    return rs\r\n  })\r\n  return obj\r\n}\r\n\r\n/**\r\n * @param {string} input value\r\n * @returns {number} output value\r\n */\r\nexport function byteLength(str) {\r\n  // returns the byte length of an utf8 string\r\n  let s = str.length\r\n  for (var i = str.length - 1; i >= 0; i--) {\r\n    const code = str.charCodeAt(i)\r\n    if (code > 0x7f && code <= 0x7ff) s++\r\n    else if (code > 0x7ff && code <= 0xffff) s += 2\r\n    if (code >= 0xDC00 && code <= 0xDFFF) i--\r\n  }\r\n  return s\r\n}\r\n\r\n/**\r\n * @param {Array} actual\r\n * @returns {Array}\r\n */\r\nexport function cleanArray(actual) {\r\n  const newArray = []\r\n  for (let i = 0; i < actual.length; i++) {\r\n    if (actual[i]) {\r\n      newArray.push(actual[i])\r\n    }\r\n  }\r\n  return newArray\r\n}\r\n\r\n/**\r\n * @param {Object} json\r\n * @returns {Array}\r\n */\r\nexport function param(json) {\r\n  if (!json) return ''\r\n  return cleanArray(\r\n    Object.keys(json).map(key => {\r\n      if (json[key] === undefined) return ''\r\n      return encodeURIComponent(key) + '=' + encodeURIComponent(json[key])\r\n    })\r\n  ).join('&')\r\n}\r\n\r\n/**\r\n * @param {string} url\r\n * @returns {Object}\r\n */\r\nexport function param2Obj(url) {\r\n  const search = decodeURIComponent(url.split('?')[1]).replace(/\\+/g, ' ')\r\n  if (!search) {\r\n    return {}\r\n  }\r\n  const obj = {}\r\n  const searchArr = search.split('&')\r\n  searchArr.forEach(v => {\r\n    const index = v.indexOf('=')\r\n    if (index !== -1) {\r\n      const name = v.substring(0, index)\r\n      const val = v.substring(index + 1, v.length)\r\n      obj[name] = val\r\n    }\r\n  })\r\n  return obj\r\n}\r\n\r\n/**\r\n * @param {string} val\r\n * @returns {string}\r\n */\r\nexport function html2Text(val) {\r\n  const div = document.createElement('div')\r\n  div.innerHTML = val\r\n  return div.textContent || div.innerText\r\n}\r\n\r\n/**\r\n * Merges two objects, giving the last one precedence\r\n * @param {Object} target\r\n * @param {(Object|Array)} source\r\n * @returns {Object}\r\n */\r\nexport function objectMerge(target, source) {\r\n  if (typeof target !== 'object') {\r\n    target = {}\r\n  }\r\n  if (Array.isArray(source)) {\r\n    return source.slice()\r\n  }\r\n  Object.keys(source).forEach(property => {\r\n    const sourceProperty = source[property]\r\n    if (typeof sourceProperty === 'object') {\r\n      target[property] = objectMerge(target[property], sourceProperty)\r\n    } else {\r\n      target[property] = sourceProperty\r\n    }\r\n  })\r\n  return target\r\n}\r\n\r\n/**\r\n * @param {HTMLElement} element\r\n * @param {string} className\r\n */\r\nexport function toggleClass(element, className) {\r\n  if (!element || !className) {\r\n    return\r\n  }\r\n  let classString = element.className\r\n  const nameIndex = classString.indexOf(className)\r\n  if (nameIndex === -1) {\r\n    classString += '' + className\r\n  } else {\r\n    classString =\r\n      classString.substr(0, nameIndex) +\r\n      classString.substr(nameIndex + className.length)\r\n  }\r\n  element.className = classString\r\n}\r\n\r\n/**\r\n * @param {string} type\r\n * @returns {Date}\r\n */\r\nexport function getTime(type) {\r\n  if (type === 'start') {\r\n    return new Date().getTime() - 3600 * 1000 * 24 * 90\r\n  } else {\r\n    return new Date(new Date().toDateString())\r\n  }\r\n}\r\n\r\n/**\r\n * @param {Function} func\r\n * @param {number} wait\r\n * @param {boolean} immediate\r\n * @return {*}\r\n */\r\nexport function debounce(func, wait, immediate) {\r\n  let timeout, args, context, timestamp, result\r\n\r\n  const later = function() {\r\n    // 据上一次触发时间间隔\r\n    const last = +new Date() - timestamp\r\n\r\n    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait\r\n    if (last < wait && last > 0) {\r\n      timeout = setTimeout(later, wait - last)\r\n    } else {\r\n      timeout = null\r\n      // 如果设定为immediate===true，因为开始边界已经调用过了此处无需调用\r\n      if (!immediate) {\r\n        result = func.apply(context, args)\r\n        if (!timeout) context = args = null\r\n      }\r\n    }\r\n  }\r\n\r\n  return function(...args) {\r\n    context = this\r\n    timestamp = +new Date()\r\n    const callNow = immediate && !timeout\r\n    // 如果延时不存在，重新设定延时\r\n    if (!timeout) timeout = setTimeout(later, wait)\r\n    if (callNow) {\r\n      result = func.apply(context, args)\r\n      context = args = null\r\n    }\r\n\r\n    return result\r\n  }\r\n}\r\n\r\n/**\r\n * This is just a simple version of deep copy\r\n * Has a lot of edge cases bug\r\n * If you want to use a perfect deep copy, use lodash's _.cloneDeep\r\n * @param {Object} source\r\n * @returns {Object}\r\n */\r\nexport function deepClone(source) {\r\n  if (!source && typeof source !== 'object') {\r\n    throw new Error('error arguments', 'deepClone')\r\n  }\r\n  const targetObj = source.constructor === Array ? [] : {}\r\n  Object.keys(source).forEach(keys => {\r\n    if (source[keys] && typeof source[keys] === 'object') {\r\n      targetObj[keys] = deepClone(source[keys])\r\n    } else {\r\n      targetObj[keys] = source[keys]\r\n    }\r\n  })\r\n  return targetObj\r\n}\r\n\r\n/**\r\n * @param {Array} arr\r\n * @returns {Array}\r\n */\r\nexport function uniqueArr(arr) {\r\n  return Array.from(new Set(arr))\r\n}\r\n\r\n/**\r\n * @returns {string}\r\n */\r\nexport function createUniqueString() {\r\n  const timestamp = +new Date() + ''\r\n  const randomNum = parseInt((1 + Math.random()) * 65536) + ''\r\n  return (+(randomNum + timestamp)).toString(32)\r\n}\r\n\r\n/**\r\n * Check if an element has a class\r\n * @param {HTMLElement} elm\r\n * @param {string} cls\r\n * @returns {boolean}\r\n */\r\nexport function hasClass(ele, cls) {\r\n  return !!ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'))\r\n}\r\n\r\n/**\r\n * Add class to element\r\n * @param {HTMLElement} elm\r\n * @param {string} cls\r\n */\r\nexport function addClass(ele, cls) {\r\n  if (!hasClass(ele, cls)) ele.className += ' ' + cls\r\n}\r\n\r\n/**\r\n * Remove class from element\r\n * @param {HTMLElement} elm\r\n * @param {string} cls\r\n */\r\nexport function removeClass(ele, cls) {\r\n  if (hasClass(ele, cls)) {\r\n    const reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)')\r\n    ele.className = ele.className.replace(reg, ' ')\r\n  }\r\n}\r\n\r\nexport function makeMap(str, expectsLowerCase) {\r\n  const map = Object.create(null)\r\n  const list = str.split(',')\r\n  for (let i = 0; i < list.length; i++) {\r\n    map[list[i]] = true\r\n  }\r\n  return expectsLowerCase\r\n    ? val => map[val.toLowerCase()]\r\n    : val => map[val]\r\n}\r\n \r\nexport const exportDefault = 'export default '\r\n\r\nexport const beautifierConf = {\r\n  html: {\r\n    indent_size: '2',\r\n    indent_char: ' ',\r\n    max_preserve_newlines: '-1',\r\n    preserve_newlines: false,\r\n    keep_array_indentation: false,\r\n    break_chained_methods: false,\r\n    indent_scripts: 'separate',\r\n    brace_style: 'end-expand',\r\n    space_before_conditional: true,\r\n    unescape_strings: false,\r\n    jslint_happy: false,\r\n    end_with_newline: true,\r\n    wrap_line_length: '110',\r\n    indent_inner_html: true,\r\n    comma_first: false,\r\n    e4x: true,\r\n    indent_empty_lines: true\r\n  },\r\n  js: {\r\n    indent_size: '2',\r\n    indent_char: ' ',\r\n    max_preserve_newlines: '-1',\r\n    preserve_newlines: false,\r\n    keep_array_indentation: false,\r\n    break_chained_methods: false,\r\n    indent_scripts: 'normal',\r\n    brace_style: 'end-expand',\r\n    space_before_conditional: true,\r\n    unescape_strings: false,\r\n    jslint_happy: true,\r\n    end_with_newline: true,\r\n    wrap_line_length: '110',\r\n    indent_inner_html: true,\r\n    comma_first: false,\r\n    e4x: true,\r\n    indent_empty_lines: true\r\n  }\r\n}\r\n\r\n// 首字母大小\r\nexport function titleCase(str) {\r\n  return str.replace(/( |^)[a-z]/g, L => L.toUpperCase())\r\n}\r\n\r\n// 下划转驼峰\r\nexport function camelCase(str) {\r\n  return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase())\r\n}\r\n\r\nexport function isNumberStr(str) {\r\n  return /^[+-]?(0|([1-9]\\d*))(\\.\\d+)?$/g.test(str)\r\n}\r\n \r\n"
  },
  {
    "path": "front/src/utils/jsencrypt.js",
    "content": "import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'\r\n\r\n// 密钥对生成 http://web.chacuo.net/netrsakeypair\r\n\r\nconst publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\\n' +\r\n  'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='\r\n\r\nconst privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\\n' +\r\n  '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\\n' +\r\n  'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\\n' +\r\n  'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\\n' +\r\n  'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\\n' +\r\n  'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\\n' +\r\n  'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\\n' +\r\n  'UP8iWi1Qw0Y='\r\n\r\n// 加密\r\nexport function encrypt(txt) {\r\n  const encryptor = new JSEncrypt()\r\n  encryptor.setPublicKey(publicKey) // 设置公钥\r\n  return encryptor.encrypt(txt) // 对数据进行加密\r\n}\r\n\r\n// 解密\r\nexport function decrypt(txt) {\r\n  const encryptor = new JSEncrypt()\r\n  encryptor.setPrivateKey(privateKey) // 设置私钥\r\n  return encryptor.decrypt(txt) // 对数据进行解密\r\n}\r\n\r\n"
  },
  {
    "path": "front/src/utils/permission.js",
    "content": "import useUserStore from '@/store/modules/user'\r\n\r\n/**\r\n * 字符权限校验\r\n * @param {Array} value 校验值\r\n * @returns {Boolean}\r\n */\r\nexport function checkPermi(value) {\r\n  if (value && value instanceof Array && value.length > 0) {\r\n    const permissions = useUserStore().permissions\r\n    const permissionDatas = value\r\n    const all_permission = \"*:*:*\";\r\n\r\n    const hasPermission = permissions.some(permission => {\r\n      return all_permission === permission || permissionDatas.includes(permission)\r\n    })\r\n\r\n    if (!hasPermission) {\r\n      return false\r\n    }\r\n    return true\r\n  } else {\r\n    console.error(`need roles! Like checkPermi=\"['system:user:add','system:user:edit']\"`)\r\n    return false\r\n  }\r\n}\r\n\r\n/**\r\n * 角色权限校验\r\n * @param {Array} value 校验值\r\n * @returns {Boolean}\r\n */\r\nexport function checkRole(value) {\r\n  if (value && value instanceof Array && value.length > 0) {\r\n    const roles = useUserStore().roles\r\n    const permissionRoles = value\r\n    const super_admin = \"admin\";\r\n\r\n    const hasRole = roles.some(role => {\r\n      return super_admin === role || permissionRoles.includes(role)\r\n    })\r\n\r\n    if (!hasRole) {\r\n      return false\r\n    }\r\n    return true\r\n  } else {\r\n    console.error(`need roles! Like checkRole=\"['admin','editor']\"`)\r\n    return false\r\n  }\r\n}"
  },
  {
    "path": "front/src/utils/request.js",
    "content": "import axios from 'axios'\r\nimport { ElNotification, ElMessageBox, ElMessage, ElLoading } from 'element-plus'\r\nimport { getToken } from '@/utils/auth'\r\nimport errorCode from '@/utils/errorCode'\r\nimport { tansParams, blobValidate } from '@/utils/ruoyi'\r\nimport cache from '@/plugins/cache'\r\nimport { saveAs } from 'file-saver'\r\nimport useUserStore from '@/store/modules/user'\r\n\r\nlet downloadLoadingInstance;\r\n// 是否显示重新登录\r\nexport let isRelogin = { show: false };\r\n\r\naxios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'\r\n// 创建axios实例\r\nconst service = axios.create({\r\n  // axios中请求配置有baseURL选项，表示请求URL公共部分\r\n  baseURL: import.meta.env.VITE_APP_BASE_API,\r\n  // 超时\r\n  timeout: 10000\r\n})\r\n\r\n// request拦截器\r\nservice.interceptors.request.use(config => {\r\n  // 是否需要设置 token\r\n  const isToken = (config.headers || {}).isToken === false\r\n  // 是否需要防止数据重复提交\r\n  const isRepeatSubmit = (config.headers || {}).repeatSubmit === false\r\n  if (getToken() && !isToken) {\r\n    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改\r\n  }\r\n  // get请求映射params参数\r\n  if (config.method === 'get' && config.params) {\r\n    let url = config.url + '?' + tansParams(config.params);\r\n    url = url.slice(0, -1);\r\n    config.params = {};\r\n    config.url = url;\r\n  }\r\n  if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {\r\n    const requestObj = {\r\n      url: config.url,\r\n      data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,\r\n      time: new Date().getTime()\r\n    }\r\n    const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小\r\n    const limitSize = 5 * 1024 * 1024; // 限制存放数据5M\r\n    if (requestSize >= limitSize) {\r\n      console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制，无法进行防重复提交验证。')\r\n      return config;\r\n    }\r\n    const sessionObj = cache.session.getJSON('sessionObj')\r\n    if (sessionObj === undefined || sessionObj === null || sessionObj === '') {\r\n      cache.session.setJSON('sessionObj', requestObj)\r\n    } else {\r\n      const s_url = sessionObj.url;                // 请求地址\r\n      const s_data = sessionObj.data;              // 请求数据\r\n      const s_time = sessionObj.time;              // 请求时间\r\n      const interval = 1000;                       // 间隔时间(ms)，小于此时间视为重复提交\r\n      if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {\r\n        const message = '数据正在处理，请勿重复提交';\r\n        console.warn(`[${s_url}]: ` + message)\r\n        return Promise.reject(new Error(message))\r\n      } else {\r\n        cache.session.setJSON('sessionObj', requestObj)\r\n      }\r\n    }\r\n  }\r\n  return config\r\n}, error => {\r\n  console.log(error)\r\n  Promise.reject(error)\r\n})\r\n\r\n// 响应拦截器\r\nservice.interceptors.response.use(res => {\r\n  // 未设置状态码则默认成功状态\r\n  const code = res.data.code || 200;\r\n  // 获取错误信息\r\n  const msg = errorCode[code] || res.data.msg || errorCode['default']\r\n  // 二进制数据则直接返回\r\n  if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {\r\n    return res.data\r\n  }\r\n  if (code === 401) {\r\n    if (!isRelogin.show) {\r\n      isRelogin.show = true;\r\n      ElMessageBox.confirm('登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {\r\n        isRelogin.show = false;\r\n        useUserStore().logOut().then(() => {\r\n          location.href = '/index';\r\n        })\r\n      }).catch(() => {\r\n        isRelogin.show = false;\r\n      });\r\n    }\r\n    return Promise.reject('无效的会话，或者会话已过期，请重新登录。')\r\n  } else if (code === 500) {\r\n    ElMessage({ message: msg, type: 'error' })\r\n    return Promise.reject(new Error(msg))\r\n  } else if (code === 422) {\r\n    ElMessage({ message: msg, type: 'error' })\r\n    return Promise.reject(new Error(msg))\r\n  } else if (code !== 200) {\r\n    ElNotification.error({ title: msg })\r\n    return Promise.reject('error')\r\n  } else {\r\n    return Promise.resolve(res.data)\r\n  }\r\n},\r\n  error => {\r\n    console.log('err' + error)\r\n    let { message } = error;\r\n    if (message == \"Network Error\") {\r\n      message = \"后端接口连接异常\";\r\n    } else if (message.includes(\"timeout\")) {\r\n      message = \"系统接口请求超时\";\r\n    } else if (message.includes(\"Request failed with status code\")) {\r\n      message = \"系统接口\" + message.substr(message.length - 3) + \"异常\";\r\n    }\r\n    ElMessage({ message: message, type: 'error', duration: 5 * 1000 })\r\n    return Promise.reject(error)\r\n  }\r\n)\r\n\r\n// 通用下载方法\r\nexport function download(url, params = {}, filename, config) {\r\n  downloadLoadingInstance = ElLoading.service({ text: \"正在下载数据，请稍候\", background: \"rgba(0, 0, 0, 0.7)\", })\r\n  return service.get(url, {\r\n    responseType: 'blob',\r\n    ...config,\r\n    params\r\n  }).then(async (data) => {\r\n    const isBlob = blobValidate(data);\r\n    if (isBlob) {\r\n      const blob = new Blob([data])\r\n      saveAs(blob, filename)\r\n    } else {\r\n      const resText = await data.text();\r\n      const rspObj = JSON.parse(resText);\r\n      const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']\r\n      ElMessage.error(errMsg);\r\n    }\r\n    downloadLoadingInstance.close();\r\n  }).catch((r) => {\r\n    console.error(r)\r\n    ElMessage.error('下载文件出现错误，请联系管理员！')\r\n    downloadLoadingInstance.close();\r\n  })\r\n}\r\n\r\nexport default service\r\n"
  },
  {
    "path": "front/src/utils/ruoyi.js",
    "content": "\r\nimport { isExternal } from \"./validate\"\r\n/**\r\n * 通用js方法封装处理\r\n * Copyright (c) 2019 ruoyi\r\n */\r\n\r\n// 日期格式化\r\nexport function parseTime(time, pattern) {\r\n  if (arguments.length === 0 || !time) {\r\n    return null\r\n  }\r\n  const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'\r\n  let date\r\n  if (typeof time === 'object') {\r\n    date = time\r\n  } else {\r\n    if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {\r\n      time = parseInt(time)\r\n    } else if (typeof time === 'string') {\r\n      time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\\.[\\d]{3}/gm), '');\r\n    }\r\n    if ((typeof time === 'number') && (time.toString().length === 10)) {\r\n      time = time * 1000\r\n    }\r\n    date = new Date(time)\r\n  }\r\n  const formatObj = {\r\n    y: date.getFullYear(),\r\n    m: date.getMonth() + 1,\r\n    d: date.getDate(),\r\n    h: date.getHours(),\r\n    i: date.getMinutes(),\r\n    s: date.getSeconds(),\r\n    a: date.getDay()\r\n  }\r\n  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {\r\n    let value = formatObj[key]\r\n    // Note: getDay() returns 0 on Sunday\r\n    if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }\r\n    if (result.length > 0 && value < 10) {\r\n      value = '0' + value\r\n    }\r\n    return value || 0\r\n  })\r\n  return time_str\r\n}\r\n\r\n// 表单重置\r\nexport function resetForm(refName) {\r\n  if (this.$refs[refName]) {\r\n    this.$refs[refName].resetFields();\r\n  }\r\n}\r\n\r\n// 添加日期范围\r\nexport function addDateRange(params, dateRange, propName) {\r\n  let search = params;\r\n  search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};\r\n  dateRange = Array.isArray(dateRange) ? dateRange : [];\r\n  if (typeof (propName) === 'undefined') {\r\n    search.params['beginTime'] = dateRange[0];\r\n    search.params['endTime'] = dateRange[1];\r\n  } else {\r\n    search.params['begin' + propName] = dateRange[0];\r\n    search.params['end' + propName] = dateRange[1];\r\n  }\r\n  return search;\r\n}\r\n\r\n// 回显数据字典\r\nexport function selectDictLabel(datas, value) {\r\n  if (value === undefined) {\r\n    return \"\";\r\n  }\r\n  var actions = [];\r\n  Object.keys(datas).some((key) => {\r\n    if (datas[key].value == ('' + value)) {\r\n      actions.push(datas[key].label);\r\n      return true;\r\n    }\r\n  })\r\n  if (actions.length === 0) {\r\n    actions.push(value);\r\n  }\r\n  return actions.join('');\r\n}\r\n\r\n// 回显数据字典（字符串数组）\r\nexport function selectDictLabels(datas, value, separator) {\r\n  if (value === undefined || value.length ===0) {\r\n    return \"\";\r\n  }\r\n  if (Array.isArray(value)) {\r\n    value = value.join(\",\");\r\n  }\r\n  var actions = [];\r\n  var currentSeparator = undefined === separator ? \",\" : separator;\r\n  var temp = value.split(currentSeparator);\r\n  Object.keys(value.split(currentSeparator)).some((val) => {\r\n    var match = false;\r\n    Object.keys(datas).some((key) => {\r\n      if (datas[key].value == ('' + temp[val])) {\r\n        actions.push(datas[key].label + currentSeparator);\r\n        match = true;\r\n      }\r\n    })\r\n    if (!match) {\r\n      actions.push(temp[val] + currentSeparator);\r\n    }\r\n  })\r\n  return actions.join('').substring(0, actions.join('').length - 1);\r\n}\r\n\r\n// 字符串格式化(%s )\r\nexport function sprintf(str) {\r\n  var args = arguments, flag = true, i = 1;\r\n  str = str.replace(/%s/g, function () {\r\n    var arg = args[i++];\r\n    if (typeof arg === 'undefined') {\r\n      flag = false;\r\n      return '';\r\n    }\r\n    return arg;\r\n  });\r\n  return flag ? str : '';\r\n}\r\n\r\n// 转换字符串，undefined,null等转化为\"\"\r\nexport function parseStrEmpty(str) {\r\n  if (!str || str == \"undefined\" || str == \"null\") {\r\n    return \"\";\r\n  }\r\n  return str;\r\n}\r\n\r\n// 数据合并\r\nexport function mergeRecursive(source, target) {\r\n  for (var p in target) {\r\n    try {\r\n      if (target[p].constructor == Object) {\r\n        source[p] = mergeRecursive(source[p], target[p]);\r\n      } else {\r\n        source[p] = target[p];\r\n      }\r\n    } catch (e) {\r\n      source[p] = target[p];\r\n    }\r\n  }\r\n  return source;\r\n};\r\n\r\n/**\r\n * 构造树型结构数据\r\n * @param {*} data 数据源\r\n * @param {*} id id字段 默认 'id'\r\n * @param {*} parentId 父节点字段 默认 'parentId'\r\n * @param {*} children 孩子节点字段 默认 'children'\r\n */\r\nexport function handleTree(data, id, parentId, children) {\r\n  let config = {\r\n    id: id || 'id',\r\n    parentId: parentId || 'parentId',\r\n    childrenList: children || 'children'\r\n  };\r\n\r\n  var childrenListMap = {};\r\n  var nodeIds = {};\r\n  var tree = [];\r\n\r\n  for (let d of data) {\r\n    let parentId = d[config.parentId];\r\n    if (childrenListMap[parentId] == null) {\r\n      childrenListMap[parentId] = [];\r\n    }\r\n    nodeIds[d[config.id]] = d;\r\n    childrenListMap[parentId].push(d);\r\n  }\r\n\r\n  for (let d of data) {\r\n    let parentId = d[config.parentId];\r\n    if (nodeIds[parentId] == null) {\r\n      tree.push(d);\r\n    }\r\n  }\r\n\r\n  for (let t of tree) {\r\n    adaptToChildrenList(t);\r\n  }\r\n\r\n  function adaptToChildrenList(o) {\r\n    if (childrenListMap[o[config.id]] !== null) {\r\n      o[config.childrenList] = childrenListMap[o[config.id]];\r\n    }\r\n    if (o[config.childrenList]) {\r\n      for (let c of o[config.childrenList]) {\r\n        adaptToChildrenList(c);\r\n      }\r\n    }\r\n  }\r\n  return tree;\r\n}\r\n\r\n/**\r\n* 参数处理\r\n* @param {*} params  参数\r\n*/\r\nexport function tansParams(params) {\r\n  let result = ''\r\n  for (const propName of Object.keys(params)) {\r\n    const value = params[propName];\r\n    var part = encodeURIComponent(propName) + \"=\";\r\n    if (value !== null && value !== \"\" && typeof (value) !== \"undefined\") {\r\n      if (typeof value === 'object') {\r\n        for (const key of Object.keys(value)) {\r\n          if (value[key] !== null && value[key] !== \"\" && typeof (value[key]) !== 'undefined') {\r\n            let params = propName + '[' + key + ']';\r\n            var subPart = encodeURIComponent(params) + \"=\";\r\n            result += subPart + encodeURIComponent(value[key]) + \"&\";\r\n          }\r\n        }\r\n      } else {\r\n        result += part + encodeURIComponent(value) + \"&\";\r\n      }\r\n    }\r\n  }\r\n  return result\r\n}\r\n\r\n\r\n// 返回项目路径\r\nexport function getNormalPath(p) {\r\n  if (p.length === 0 || !p || p == 'undefined') {\r\n    return p\r\n  };\r\n  let res = p.replace('//', '/')\r\n  if (res[res.length - 1] === '/') {\r\n    return res.slice(0, res.length - 1)\r\n  }\r\n  return res;\r\n}\r\n\r\n// 验证是否为blob格式\r\nexport function blobValidate(data) {\r\n  return data.type !== 'application/json'\r\n}\r\n//获取文件或者图片地址\r\nexport function getFilePath(path) {\r\n  return isExternal(path) ? path : import.meta.env.VITE_APP_BASE_API + path;\r\n }"
  },
  {
    "path": "front/src/utils/scroll-to.js",
    "content": "Math.easeInOutQuad = function(t, b, c, d) {\r\n  t /= d / 2\r\n  if (t < 1) {\r\n    return c / 2 * t * t + b\r\n  }\r\n  t--\r\n  return -c / 2 * (t * (t - 2) - 1) + b\r\n}\r\n\r\n// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts\r\nvar requestAnimFrame = (function() {\r\n  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) }\r\n})()\r\n\r\n/**\r\n * Because it's so fucking difficult to detect the scrolling element, just move them all\r\n * @param {number} amount\r\n */\r\nfunction move(amount) {\r\n  document.documentElement.scrollTop = amount\r\n  document.body.parentNode.scrollTop = amount\r\n  document.body.scrollTop = amount\r\n}\r\n\r\nfunction position() {\r\n  return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop\r\n}\r\n\r\n/**\r\n * @param {number} to\r\n * @param {number} duration\r\n * @param {Function} callback\r\n */\r\nexport function scrollTo(to, duration, callback) {\r\n  const start = position()\r\n  const change = to - start\r\n  const increment = 20\r\n  let currentTime = 0\r\n  duration = (typeof (duration) === 'undefined') ? 500 : duration\r\n  var animateScroll = function() {\r\n    // increment the time\r\n    currentTime += increment\r\n    // find the value with the quadratic in-out easing function\r\n    var val = Math.easeInOutQuad(currentTime, start, change, duration)\r\n    // move the document.body\r\n    move(val)\r\n    // do the animation unless its over\r\n    if (currentTime < duration) {\r\n      requestAnimFrame(animateScroll)\r\n    } else {\r\n      if (callback && typeof (callback) === 'function') {\r\n        // the animation is done so lets callback\r\n        callback()\r\n      }\r\n    }\r\n  }\r\n  animateScroll()\r\n}\r\n"
  },
  {
    "path": "front/src/utils/theme.js",
    "content": "// 处理主题样式\nexport function handleThemeStyle(theme) {\n\tdocument.documentElement.style.setProperty('--el-color-primary', theme)\n\tfor (let i = 1; i <= 9; i++) {\n\t\tdocument.documentElement.style.setProperty(`--el-color-primary-light-${i}`, `${getLightColor(theme, i / 10)}`)\n\t}\n\tfor (let i = 1; i <= 9; i++) {\n\t\tdocument.documentElement.style.setProperty(`--el-color-primary-dark-${i}`, `${getDarkColor(theme, i / 10)}`)\n\t}\n}\n\n// hex颜色转rgb颜色\nexport function hexToRgb(str) {\n\tstr = str.replace('#', '')\n\tlet hexs = str.match(/../g)\n\tfor (let i = 0; i < 3; i++) {\n\t\thexs[i] = parseInt(hexs[i], 16)\n\t}\n\treturn hexs\n}\n\n// rgb颜色转Hex颜色\nexport function rgbToHex(r, g, b) {\n\tlet hexs = [r.toString(16), g.toString(16), b.toString(16)]\n\tfor (let i = 0; i < 3; i++) {\n\t\tif (hexs[i].length == 1) {\n\t\t\thexs[i] = `0${hexs[i]}`\n\t\t}\n\t}\n\treturn `#${hexs.join('')}`\n}\n\n// 变浅颜色值\nexport function getLightColor(color, level) {\n\tlet rgb = hexToRgb(color)\n\tfor (let i = 0; i < 3; i++) {\n\t\trgb[i] = Math.floor((255 - rgb[i]) * level + rgb[i])\n\t}\n\treturn rgbToHex(rgb[0], rgb[1], rgb[2])\n}\n\n// 变深颜色值\nexport function getDarkColor(color, level) {\n\tlet rgb = hexToRgb(color)\n\tfor (let i = 0; i < 3; i++) {\n\t\trgb[i] = Math.floor(rgb[i] * (1 - level))\n\t}\n\treturn rgbToHex(rgb[0], rgb[1], rgb[2])\n}\n"
  },
  {
    "path": "front/src/utils/validate.js",
    "content": "/**\r\n * 判断url是否是http或https \r\n * @param {string} path\r\n * @returns {Boolean}\r\n */\r\n export function isHttp(url) {\r\n  return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1\r\n}\r\n\r\n/**\r\n * 判断path是否为外链\r\n * @param {string} path\r\n * @returns {Boolean}\r\n */\r\n export function isExternal(path) {\r\n  return /^(https?:|mailto:|tel:)/.test(path)\r\n}\r\n\r\n/**\r\n * @param {string} str\r\n * @returns {Boolean}\r\n */\r\nexport function validUsername(str) {\r\n  const valid_map = ['admin', 'editor']\r\n  return valid_map.indexOf(str.trim()) >= 0\r\n}\r\n\r\n/**\r\n * @param {string} url\r\n * @returns {Boolean}\r\n */\r\nexport function validURL(url) {\r\n  const reg = /^(https?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\\/($|[a-zA-Z0-9.,?'\\\\+&%$#=~_-]+))*$/\r\n  return reg.test(url)\r\n}\r\n\r\n/**\r\n * @param {string} str\r\n * @returns {Boolean}\r\n */\r\nexport function validLowerCase(str) {\r\n  const reg = /^[a-z]+$/\r\n  return reg.test(str)\r\n}\r\n\r\n/**\r\n * @param {string} str\r\n * @returns {Boolean}\r\n */\r\nexport function validUpperCase(str) {\r\n  const reg = /^[A-Z]+$/\r\n  return reg.test(str)\r\n}\r\n\r\n/**\r\n * @param {string} str\r\n * @returns {Boolean}\r\n */\r\nexport function validAlphabets(str) {\r\n  const reg = /^[A-Za-z]+$/\r\n  return reg.test(str)\r\n}\r\n\r\n/**\r\n * @param {string} email\r\n * @returns {Boolean}\r\n */\r\nexport function validEmail(email) {\r\n  const reg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n  return reg.test(email)\r\n}\r\n\r\n/**\r\n * @param {string} str\r\n * @returns {Boolean}\r\n */\r\nexport function isString(str) {\r\n  if (typeof str === 'string' || str instanceof String) {\r\n    return true\r\n  }\r\n  return false\r\n}\r\n\r\n/**\r\n * @param {Array} arg\r\n * @returns {Boolean}\r\n */\r\nexport function isArray(arg) {\r\n  if (typeof Array.isArray === 'undefined') {\r\n    return Object.prototype.toString.call(arg) === '[object Array]'\r\n  }\r\n  return Array.isArray(arg)\r\n}\r\n"
  },
  {
    "path": "front/src/views/error/401.vue",
    "content": "<template>\r\n  <div class=\"errPage-container\">\r\n    <el-button icon=\"arrow-left\" class=\"pan-back-btn\" @click=\"back\">\r\n      返回\r\n    </el-button>\r\n    <el-row>\r\n      <el-col :span=\"12\">\r\n        <h1 class=\"text-jumbo text-ginormous\">\r\n          401错误!\r\n        </h1>\r\n        <h2>您没有访问权限！</h2>\r\n        <h6>对不起，您没有访问权限，请不要进行非法操作！您可以返回主页面</h6>\r\n        <ul class=\"list-unstyled\">\r\n          <li class=\"link-type\">\r\n            <router-link to=\"/\">\r\n              回首页\r\n            </router-link>\r\n          </li>\r\n        </ul>\r\n      </el-col>\r\n      <el-col :span=\"12\">\r\n        <img :src=\"errGif\" width=\"313\" height=\"428\" alt=\"Girl has dropped her ice cream.\">\r\n      </el-col>\r\n    </el-row>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport errImage from \"@/assets/401_images/401.gif\";\r\n\r\nlet { proxy } = getCurrentInstance();\r\n\r\nconst errGif = ref(errImage + \"?\" + +new Date());\r\n\r\nfunction back() {\r\n  if (proxy.$route.query.noGoBack) {\r\n    proxy.$router.push({ path: \"/\" });\r\n  } else {\r\n    proxy.$router.go(-1);\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.errPage-container {\r\n  width: 800px;\r\n  max-width: 100%;\r\n  margin: 100px auto;\r\n  .pan-back-btn {\r\n    background: #008489;\r\n    color: #fff;\r\n    border: none !important;\r\n  }\r\n  .pan-gif {\r\n    margin: 0 auto;\r\n    display: block;\r\n  }\r\n  .pan-img {\r\n    display: block;\r\n    margin: 0 auto;\r\n    width: 100%;\r\n  }\r\n  .text-jumbo {\r\n    font-size: 60px;\r\n    font-weight: 700;\r\n    color: #484848;\r\n  }\r\n  .list-unstyled {\r\n    font-size: 14px;\r\n    li {\r\n      padding-bottom: 5px;\r\n    }\r\n    a {\r\n      color: #008489;\r\n      text-decoration: none;\r\n      &:hover {\r\n        text-decoration: underline;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/views/error/404.vue",
    "content": "<template>\r\n  <div class=\"wscn-http404-container\">\r\n    <div class=\"wscn-http404\">\r\n      <div class=\"pic-404\">\r\n        <img class=\"pic-404__parent\" src=\"@/assets/404_images/404.png\" alt=\"404\">\r\n        <img class=\"pic-404__child left\" src=\"@/assets/404_images/404_cloud.png\" alt=\"404\">\r\n        <img class=\"pic-404__child mid\" src=\"@/assets/404_images/404_cloud.png\" alt=\"404\">\r\n        <img class=\"pic-404__child right\" src=\"@/assets/404_images/404_cloud.png\" alt=\"404\">\r\n      </div>\r\n      <div class=\"bullshit\">\r\n        <div class=\"bullshit__oops\">\r\n          404错误!\r\n        </div>\r\n        <div class=\"bullshit__headline\">\r\n          {{ message }}\r\n        </div>\r\n        <div class=\"bullshit__info\">\r\n          对不起，您正在寻找的页面不存在。尝试检查URL的错误，然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。\r\n        </div>\r\n        <router-link to=\"/index\" class=\"bullshit__return-home\">\r\n          返回首页\r\n        </router-link>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nlet message = computed(() => {\r\n  return '找不到网页！'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.wscn-http404-container{\r\n  transform: translate(-50%,-50%);\r\n  position: absolute;\r\n  top: 40%;\r\n  left: 50%;\r\n}\r\n.wscn-http404 {\r\n  position: relative;\r\n  width: 1200px;\r\n  padding: 0 50px;\r\n  overflow: hidden;\r\n  .pic-404 {\r\n    position: relative;\r\n    float: left;\r\n    width: 600px;\r\n    overflow: hidden;\r\n    &__parent {\r\n      width: 100%;\r\n    }\r\n    &__child {\r\n      position: absolute;\r\n      &.left {\r\n        width: 80px;\r\n        top: 17px;\r\n        left: 220px;\r\n        opacity: 0;\r\n        animation-name: cloudLeft;\r\n        animation-duration: 2s;\r\n        animation-timing-function: linear;\r\n        animation-fill-mode: forwards;\r\n        animation-delay: 1s;\r\n      }\r\n      &.mid {\r\n        width: 46px;\r\n        top: 10px;\r\n        left: 420px;\r\n        opacity: 0;\r\n        animation-name: cloudMid;\r\n        animation-duration: 2s;\r\n        animation-timing-function: linear;\r\n        animation-fill-mode: forwards;\r\n        animation-delay: 1.2s;\r\n      }\r\n      &.right {\r\n        width: 62px;\r\n        top: 100px;\r\n        left: 500px;\r\n        opacity: 0;\r\n        animation-name: cloudRight;\r\n        animation-duration: 2s;\r\n        animation-timing-function: linear;\r\n        animation-fill-mode: forwards;\r\n        animation-delay: 1s;\r\n      }\r\n      @keyframes cloudLeft {\r\n        0% {\r\n          top: 17px;\r\n          left: 220px;\r\n          opacity: 0;\r\n        }\r\n        20% {\r\n          top: 33px;\r\n          left: 188px;\r\n          opacity: 1;\r\n        }\r\n        80% {\r\n          top: 81px;\r\n          left: 92px;\r\n          opacity: 1;\r\n        }\r\n        100% {\r\n          top: 97px;\r\n          left: 60px;\r\n          opacity: 0;\r\n        }\r\n      }\r\n      @keyframes cloudMid {\r\n        0% {\r\n          top: 10px;\r\n          left: 420px;\r\n          opacity: 0;\r\n        }\r\n        20% {\r\n          top: 40px;\r\n          left: 360px;\r\n          opacity: 1;\r\n        }\r\n        70% {\r\n          top: 130px;\r\n          left: 180px;\r\n          opacity: 1;\r\n        }\r\n        100% {\r\n          top: 160px;\r\n          left: 120px;\r\n          opacity: 0;\r\n        }\r\n      }\r\n      @keyframes cloudRight {\r\n        0% {\r\n          top: 100px;\r\n          left: 500px;\r\n          opacity: 0;\r\n        }\r\n        20% {\r\n          top: 120px;\r\n          left: 460px;\r\n          opacity: 1;\r\n        }\r\n        80% {\r\n          top: 180px;\r\n          left: 340px;\r\n          opacity: 1;\r\n        }\r\n        100% {\r\n          top: 200px;\r\n          left: 300px;\r\n          opacity: 0;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  .bullshit {\r\n    position: relative;\r\n    float: left;\r\n    width: 300px;\r\n    padding: 30px 0;\r\n    overflow: hidden;\r\n    &__oops {\r\n      font-size: 32px;\r\n      font-weight: bold;\r\n      line-height: 40px;\r\n      color: #1482f0;\r\n      opacity: 0;\r\n      margin-bottom: 20px;\r\n      animation-name: slideUp;\r\n      animation-duration: 0.5s;\r\n      animation-fill-mode: forwards;\r\n    }\r\n    &__headline {\r\n      font-size: 20px;\r\n      line-height: 24px;\r\n      color: #222;\r\n      font-weight: bold;\r\n      opacity: 0;\r\n      margin-bottom: 10px;\r\n      animation-name: slideUp;\r\n      animation-duration: 0.5s;\r\n      animation-delay: 0.1s;\r\n      animation-fill-mode: forwards;\r\n    }\r\n    &__info {\r\n      font-size: 13px;\r\n      line-height: 21px;\r\n      color: grey;\r\n      opacity: 0;\r\n      margin-bottom: 30px;\r\n      animation-name: slideUp;\r\n      animation-duration: 0.5s;\r\n      animation-delay: 0.2s;\r\n      animation-fill-mode: forwards;\r\n    }\r\n    &__return-home {\r\n      display: block;\r\n      float: left;\r\n      width: 110px;\r\n      height: 36px;\r\n      background: #1482f0;\r\n      border-radius: 100px;\r\n      text-align: center;\r\n      color: #ffffff;\r\n      opacity: 0;\r\n      font-size: 14px;\r\n      line-height: 36px;\r\n      cursor: pointer;\r\n      animation-name: slideUp;\r\n      animation-duration: 0.5s;\r\n      animation-delay: 0.3s;\r\n      animation-fill-mode: forwards;\r\n    }\r\n    @keyframes slideUp {\r\n      0% {\r\n        transform: translateY(60px);\r\n        opacity: 0;\r\n      }\r\n      100% {\r\n        transform: translateY(0);\r\n        opacity: 1;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/views/index.vue",
    "content": "<template>\r\n  <div class=\"app-container home\">\r\n    <el-row :gutter=\"20\">\r\n      <el-col :sm=\"24\" :lg=\"12\" style=\"padding-left: 20px\">\r\n        <h2>Carole-admin后台管理框架</h2>\r\n        <p>\r\n          一款Nestjs+Prisma+Vue+Vite前后端分离的后台框架,\r\n          前端基于<el-link type=\"primary\" href='https://github.com/yangzongzhuan/RuoYi-Vue3'>若依</el-link>。\r\n        </p>\r\n        <p><el-link type=\"primary\" href=\"https://github.com/Carole007/carole-admin?tab=readme-ov-file#%E6%96%87%E6%A1%A3\" icon=\"document\">查看文档</el-link></p>\r\n        <ul style=\"list-style: circle;padding-left: 15px;\">\r\n          <li>前端采用Vue3、Element-Plus、Vite。</li>\r\n          <li>后端采用Nest、Prisma、Redis &amp; Jwt。</li>\r\n          <li>权限认证使用Jwt，支持多终端认证系统。</li>\r\n          <li>支持加载动态权限菜单，多方式轻松权限控制。</li>\r\n          <li>支持接口限流</li>\r\n          <li>高效率开发，使用代码生成器可以一键生成前后端代码。</li>\r\n        </ul>\r\n\r\n        \r\n        <p>\r\n          <b>当前版本:</b> <span>v{{ version }}</span>\r\n        </p>\r\n        <p>\r\n          <el-tag type=\"danger\">&yen;免费开源</el-tag>\r\n        </p>\r\n        <p>\r\n          <el-button type=\"primary\" plain @click=\"goTarget('https://github.com/Carole007/carole-admin')\"> <svg-icon\r\n              icon-class=\"github\" />github</el-button>\r\n        </p>\r\n      </el-col>\r\n\r\n      <el-col :sm=\"24\" :lg=\"12\" style=\"padding-left: 50px\">\r\n        <el-row>\r\n          <el-col :span=\"12\">\r\n            <h2>技术选型</h2>\r\n          </el-col>\r\n        </el-row>\r\n        <el-row>\r\n          <el-col :span=\"6\">\r\n            <h4>后端技术</h4>\r\n            <ul>\r\n              <li>Node</li>\r\n              <li>Nestjs</li>\r\n              <li>JWT</li>\r\n              <li>Mysql</li>\r\n              <li>Prisma</li>\r\n              <li>Redis</li>\r\n              <li>...</li>\r\n            </ul>\r\n          </el-col>\r\n          <el-col :span=\"6\">\r\n            <h4>前端技术</h4>\r\n            <ul>\r\n              <li>Vue3</li>\r\n              <li>Vuex</li>\r\n              <li>Element-plus</li>\r\n              <li>Axios</li>\r\n              <li>Sass</li>\r\n              <li>Quill</li>\r\n              <li>...</li>\r\n            </ul>\r\n          </el-col>\r\n        </el-row>\r\n      </el-col>\r\n    </el-row>\r\n    <el-divider />\r\n    <el-row :gutter=\"20\">\r\n      <el-col :xs=\"24\" :sm=\"24\" :md=\"12\" :lg=\"8\">\r\n        <el-card class=\"update-log\">\r\n          <template v-slot:header>\r\n            <div class=\"clearfix\">\r\n              <span>联系信息</span>\r\n            </div>\r\n          </template>\r\n          <div class=\"body\">\r\n            <p>\r\n              <i class=\"el-icon-user-solid\"></i> 邮箱：<el-link type=\"primary\" href=\"mailto:bobbi6837@gmail.com\"\r\n                target=\"_blank\">bobbi6837@gmail.com</el-link>\r\n            </p>\r\n          </div>\r\n        </el-card>\r\n      </el-col>\r\n    </el-row>\r\n  </div>\r\n</template>\r\n\r\n<script setup name=\"Index\">\r\nconst version = ref('1.0.0')\r\n\r\nfunction goTarget(url) {\r\n  window.open(url, '__blank')\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.home {\r\n  blockquote {\r\n    padding: 10px 20px;\r\n    margin: 0 0 20px;\r\n    font-size: 17.5px;\r\n    border-left: 5px solid #eee;\r\n  }\r\n\r\n  hr {\r\n    margin-top: 20px;\r\n    margin-bottom: 20px;\r\n    border: 0;\r\n    border-top: 1px solid #eee;\r\n  }\r\n\r\n  .col-item {\r\n    margin-bottom: 20px;\r\n  }\r\n\r\n  ul {\r\n    padding: 0;\r\n    margin: 0;\r\n  }\r\n\r\n  font-family: \"open sans\",\r\n  \"Helvetica Neue\",\r\n  Helvetica,\r\n  Arial,\r\n  sans-serif;\r\n  font-size: 13px;\r\n  color: #676a6c;\r\n  overflow-x: hidden;\r\n\r\n  ul {\r\n    list-style-type: none;\r\n  }\r\n\r\n  h4 {\r\n    margin-top: 0px;\r\n  }\r\n\r\n  h2 {\r\n    margin-top: 10px;\r\n    font-size: 26px;\r\n    font-weight: 100;\r\n  }\r\n\r\n  p {\r\n    margin-top: 10px;\r\n\r\n    b {\r\n      font-weight: 700;\r\n    }\r\n  }\r\n\r\n  .update-log {\r\n    ol {\r\n      display: block;\r\n      list-style-type: decimal;\r\n      margin-block-start: 1em;\r\n      margin-block-end: 1em;\r\n      margin-inline-start: 0;\r\n      margin-inline-end: 0;\r\n      padding-inline-start: 40px;\r\n    }\r\n  }\r\n}\r\n</style>\r\n"
  },
  {
    "path": "front/src/views/login.vue",
    "content": "<template>\r\n  <div class=\"content\">\r\n    <div class=\"login-bg\" style=\"overflow: hidden;\">\r\n      <div class=\"cover-slate\"></div>\r\n      <div class=\"login\">\r\n        <el-form ref=\"loginRef\" :model=\"loginForm\" :rules=\"loginRules\" class=\"login-form\">\r\n          <h3 class=\"title\">Carole后台管理系统</h3>\r\n          <el-form-item prop=\"username\">\r\n            <el-input v-model=\"loginForm.username\" type=\"text\" size=\"large\" auto-complete=\"off\" placeholder=\"账号\">\r\n              <template #prefix>\r\n                <svg  class=\"el-input__icon input-icon\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 448 512\"><path d=\"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0S96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\" fill=\"var(--el-color-primary-light-6)\" ></path></svg>\r\n                </template>\r\n            </el-input>\r\n          </el-form-item>\r\n          <el-form-item prop=\"password\">\r\n            <el-input v-model=\"loginForm.password\" type=\"password\" size=\"large\" auto-complete=\"off\" placeholder=\"密码\"\r\n              @keyup.enter=\"handleLogin\">\r\n              <template #prefix>\r\n                <svg class=\"el-input__icon input-icon\"  xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 448 512\"><path d=\"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9c40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0C139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z\" fill=\"var(--el-color-primary-light-6)\"></path></svg>\r\n               </template>\r\n            </el-input>\r\n          </el-form-item>\r\n          <el-form-item prop=\"code\" v-if=\"captchaEnabled\">\r\n            <el-input v-model=\"loginForm.code\" size=\"large\" auto-complete=\"off\" placeholder=\"验证码\" style=\"width: 63%\"\r\n              @keyup.enter=\"handleLogin\">\r\n              <template #prefix>\r\n                <svg t=\"1717471493285\" class=\"el-input__icon input-icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5230\" width=\"200\" height=\"200\"><path d=\"M905.450308 125.1037C896.061252 125.413837 886.857235 125.529313 877.875951 125.529313 640.975313 125.529313 536.595731 24.886788 535.697946 23.964627L512.065963 0 488.341461 23.964627C487.370003 25.002264 385.085824 125.529313 146.190869 125.529313 137.182172 125.529313 128.039835 125.413837 118.556545 125.1037L85.333333 124.052866 85.333333 580.377175C85.333333 699.862129 128.353375 874.191718 500.387895 1007.504132L511.999142 1011.694272 523.60525 1007.504132C895.638059 874.18512 938.666667 699.862129 938.666667 580.377175L938.666667 124.052866 905.450308 125.1037 905.450308 125.1037ZM475.450355 698.445071 261.083455 511.162345 317.998615 465.71418 431.988275 548.583255C431.988275 548.583255 589.347494 388.025039 741.338848 313.003401L763.015919 337.149491C763.015919 337.149491 573.091405 492.385901 475.450355 698.445071L475.450355 698.445071Z\" fill=\"var(--el-color-primary-light-6)\" p-id=\"5231\"></path></svg>\r\n              </template>\r\n            </el-input>\r\n            <div class=\"login-code\">\r\n              <div @click=\"getCode\" class=\"login-code-img\" v-html=\"codeUrl\">\r\n              </div>\r\n            </div>\r\n          </el-form-item>\r\n          <el-checkbox v-model=\"loginForm.rememberMe\" style=\"margin:0px 0px 25px 0px;\">记住密码</el-checkbox>\r\n          <el-form-item style=\"width:100%;\">\r\n            <el-button :loading=\"loading\" size=\"large\" type=\"primary\" style=\"width:100%;\" @click.prevent=\"handleLogin\">\r\n              <span v-if=\"!loading\">登 录</span>\r\n              <span v-else>登 录 中...</span>\r\n            </el-button>\r\n          </el-form-item>\r\n        </el-form>\r\n        <!--  底部  -->\r\n        <div class=\"el-login-footer\">\r\n          <span>Copyright © 2024-{{ new Date().getFullYear() }} carole-admin All Rights Reserved.</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { getCodeImg } from \"@/api/login\";\r\nimport Cookies from \"js-cookie\";\r\nimport { encrypt, decrypt } from \"@/utils/jsencrypt\";\r\nimport useUserStore from '@/store/modules/user'\r\nconst userStore = useUserStore()\r\nconst route = useRoute();\r\nconst router = useRouter();\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst loginForm = ref({\r\n  username: \"admin\",\r\n  password: \"carole\",\r\n  rememberMe: false,\r\n  code: \"\",\r\n  uuid: \"\"\r\n});\r\n\r\nconst loginRules = {\r\n  username: [{ required: true, trigger: \"blur\", message: \"请输入您的账号\" }],\r\n  password: [{ required: true, trigger: \"blur\", message: \"请输入您的密码\" }],\r\n  code: [{ required: true, trigger: \"change\", message: \"请输入验证码\" }]\r\n};\r\n\r\nconst codeUrl = ref(\"\");\r\nconst loading = ref(false);\r\n// 验证码开关\r\nconst captchaEnabled = ref(true);\r\n// 注册开关\r\nconst register = ref(false);\r\nconst redirect = ref(undefined);\r\n\r\nwatch(route, (newRoute) => {\r\n  redirect.value = newRoute.query && newRoute.query.redirect;\r\n}, { immediate: true });\r\n\r\nfunction handleLogin() {\r\n  proxy.$refs.loginRef.validate(valid => {\r\n    if (valid) {\r\n      loading.value = true;\r\n      // 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码\r\n      if (loginForm.value.rememberMe) {\r\n        Cookies.set(\"username\", loginForm.value.username, { expires: 30 });\r\n        Cookies.set(\"password\", encrypt(loginForm.value.password), { expires: 30 });\r\n        Cookies.set(\"rememberMe\", loginForm.value.rememberMe, { expires: 30 });\r\n      } else {\r\n        // 否则移除\r\n        Cookies.remove(\"username\");\r\n        Cookies.remove(\"password\");\r\n        Cookies.remove(\"rememberMe\");\r\n      }\r\n      // 调用action的登录方法\r\n      userStore.login(loginForm.value).then(() => {\r\n        const query = route.query;\r\n        const otherQueryParams = Object.keys(query).reduce((acc, cur) => {\r\n          if (cur !== \"redirect\") {\r\n            acc[cur] = query[cur];\r\n          }\r\n          return acc;\r\n        }, {});\r\n        router.push({ path: redirect.value || \"/\", query: otherQueryParams });\r\n      }).catch(() => {\r\n        loading.value = false;\r\n        // 重新获取验证码\r\n        if (captchaEnabled.value) {\r\n          getCode();\r\n        }\r\n      });\r\n    }\r\n  });\r\n}\r\n\r\nfunction getCode() {\r\n  getCodeImg().then(res => {\r\n    captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled;\r\n    if (captchaEnabled.value) {\r\n      codeUrl.value = res.img;\r\n      loginForm.value.uuid = res.uuid;\r\n    }\r\n  });\r\n}\r\n\r\nfunction getCookie() {\r\n  const username = Cookies.get(\"username\");\r\n  const password = Cookies.get(\"password\");\r\n  const rememberMe = Cookies.get(\"rememberMe\");\r\n  loginForm.value = {\r\n    username: username === undefined ? loginForm.value.username : username,\r\n    password: password === undefined ? loginForm.value.password : decrypt(password),\r\n    rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)\r\n  };\r\n}\r\ngetCode();\r\ngetCookie();\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n.content {\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n\r\n.cover-slate {\r\n  position: absolute;\r\n  top: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  left: 0;\r\n  z-index: 0;\r\n  display: block;\r\n  background-color: rgba(60, 91, 147, 0.65);\r\n  background-image: linear-gradient(140deg, rgba(61, 66, 96, 0.6) 20%, rgba(21, 23, 34, 0.8));\r\n}\r\n\r\n\r\n.login-bg {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  overflow: hidden;\r\n  background: url(\"/assets/bg.jpg\") center top/cover;\r\n}\r\n\r\n.login {\r\n  position: absolute;\r\n}\r\n\r\n.title {\r\n  margin: 0px auto 30px auto;\r\n  text-align: center;\r\n  font-weight: 700;\r\n  font-size: 24px;\r\n  color: var(--el-color-primary);\r\n}\r\n\r\n.login-form {\r\n  border-radius: 12px;\r\n  backdrop-filter: blur(4px);\r\n  background-color: rgba(106, 109, 117, 0.123);\r\n  box-shadow: rgba(0, 0, 0, 0.3) 2px 8px 8px;\r\n  border: 3px rgba(255, 255, 255, 0.4) solid;\r\n  border-bottom: 3px rgba(40, 40, 40, 0.35) solid;\r\n  border-right: 3px rgba(40, 40, 40, 0.35) solid;\r\n  width: clamp(350px, 50vw, 560px);\r\n  min-width: 350px;\r\n  padding: 51px 32px 30px;\r\n\r\n  .el-input {\r\n    height: 38px;\r\n\r\n    input {\r\n      height: 38px;\r\n    }\r\n  }\r\n\r\n  .input-icon {\r\n    height: 39px;\r\n    width: 14px;\r\n    margin-left: 2px;\r\n  }\r\n}\r\n\r\n.login-tip {\r\n  font-size: 13px;\r\n  text-align: center;\r\n  color: #bfbfbf;\r\n}\r\n\r\n.login-code {\r\n  width: 33%;\r\n  height: 38px;\r\n  float: right;\r\n  margin-left: 10px;\r\n  img {\r\n    cursor: pointer;\r\n    vertical-align: middle;\r\n  }\r\n}\r\n\r\n.el-login-footer {\r\n  height: 40px;\r\n  line-height: 40px;\r\n  position: fixed;\r\n  bottom: 0;\r\n  left: 0;\r\n  width: 100%;\r\n  text-align: center;\r\n  color: #fff;\r\n  font-family: Arial;\r\n  font-size: 12px;\r\n  letter-spacing: 1px;\r\n}\r\n\r\n.login-code-img {\r\n  height: 38px;\r\n}\r\n:deep(svg){\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n\r\n</style>"
  },
  {
    "path": "front/src/views/monitor/cache/index.vue",
    "content": "<template>\r\n  <div class=\"app-container\">\r\n    <el-row>\r\n      <el-col :span=\"24\" class=\"card-box\">\r\n        <el-card>\r\n          <template #header><Monitor style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">基本信息</span></template>\r\n          <div class=\"el-table el-table--enable-row-hover el-table--medium\">\r\n            <table cellspacing=\"0\" style=\"width: 100%\">\r\n              <tbody>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">Redis版本</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ cache.info.redis_version }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">运行模式</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ cache.info.redis_mode == \"standalone\" ? \"单机\" : \"集群\" }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">端口</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ cache.info.tcp_port }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">客户端数</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ cache.info.connected_clients }}</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">运行时间(天)</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ cache.info.uptime_in_days }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">使用内存</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ cache.info.used_memory_human }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">使用CPU</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ parseFloat(cache.info.used_cpu_user_children).toFixed(2) }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">内存配置</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ cache.info.maxmemory_human }}</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">AOF是否开启</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ cache.info.aof_enabled == \"0\" ? \"否\" : \"是\" }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">RDB是否成功</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ cache.info.rdb_last_bgsave_status }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">Key数量</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.dbSize\">{{ cache.dbSize }} </div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">网络入口/出口</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"cache.info\">{{ cache.info.instantaneous_input_kbps }}kps/{{cache.info.instantaneous_output_kbps}}kps</div></td>\r\n                </tr>\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n        </el-card>\r\n      </el-col>\r\n\r\n      <el-col :span=\"12\" class=\"card-box\">\r\n        <el-card>\r\n          <template #header><PieChart style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">命令统计</span></template>\r\n          <div class=\"el-table el-table--enable-row-hover el-table--medium\">\r\n            <div ref=\"commandstats\" style=\"height: 420px\" />\r\n          </div>\r\n        </el-card>\r\n      </el-col>\r\n\r\n      <el-col :span=\"12\" class=\"card-box\">\r\n        <el-card>\r\n          <template #header><Odometer style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">内存信息</span></template>\r\n          <div class=\"el-table el-table--enable-row-hover el-table--medium\">\r\n            <div ref=\"usedmemory\" style=\"height: 420px\" />\r\n          </div>\r\n        </el-card>\r\n      </el-col>\r\n    </el-row>\r\n  </div>\r\n</template>\r\n\r\n<script setup name=\"Cache\">\r\nimport { getCache } from '@/api/monitor/cache';\r\nimport * as echarts from 'echarts';\r\n\r\nconst cache = ref([]);\r\nconst commandstats = ref(null);\r\nconst usedmemory = ref(null);\r\nconst { proxy } = getCurrentInstance();\r\n\r\nfunction getList() {\r\n  proxy.$modal.loading(\"正在加载缓存监控数据，请稍候！\");\r\n  getCache().then(response => {\r\n    proxy.$modal.closeLoading();\r\n    cache.value = response.data;\r\n\r\n    const commandstatsIntance = echarts.init(commandstats.value, \"macarons\");\r\n    commandstatsIntance.setOption({\r\n      tooltip: {\r\n        trigger: \"item\",\r\n        formatter: \"{a} <br/>{b} : {c} ({d}%)\"\r\n      },\r\n      series: [\r\n        {\r\n          name: \"命令\",\r\n          type: \"pie\",\r\n          roseType: \"radius\",\r\n          radius: [15, 95],\r\n          center: [\"50%\", \"38%\"],\r\n          data: response.data.commandStats,\r\n          animationEasing: \"cubicInOut\",\r\n          animationDuration: 1000\r\n        }\r\n      ]\r\n    });\r\n    const usedmemoryInstance = echarts.init(usedmemory.value, \"macarons\");\r\n    usedmemoryInstance.setOption({\r\n      tooltip: {\r\n        formatter: \"{b} <br/>{a} : \" + cache.value.info.used_memory_human\r\n      },\r\n      series: [\r\n        {\r\n          name: \"峰值\",\r\n          type: \"gauge\",\r\n          min: 0,\r\n          max: 1000,\r\n          detail: {\r\n            formatter: cache.value.info.used_memory_human\r\n          },\r\n          data: [\r\n            {\r\n              value: parseFloat(cache.value.info.used_memory_human),\r\n              name: \"内存消耗\"\r\n            }\r\n          ]\r\n        }\r\n      ]\r\n    })\r\n    window.addEventListener(\"resize\", () => {\r\n      commandstatsIntance.resize();\r\n      usedmemoryInstance.resize();\r\n    });\r\n  })\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/monitor/cache/list.vue",
    "content": "<template>\r\n  <div class=\"app-container\">\r\n    <el-row :gutter=\"10\">\r\n      <el-col :span=\"8\">\r\n        <el-card style=\"height: calc(100vh - 125px)\">\r\n          <template #header>\r\n            <Collection style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">缓存列表</span>\r\n            <el-button\r\n              style=\"float: right; padding: 3px 0\"\r\n              link\r\n              type=\"primary\"\r\n              icon=\"Refresh\"\r\n              @click=\"refreshCacheNames()\"\r\n            ></el-button>\r\n          </template>\r\n          <el-table\r\n            v-loading=\"loading\"\r\n            :data=\"cacheNames\"\r\n            :height=\"tableHeight\"\r\n            highlight-current-row\r\n            @row-click=\"getCacheKeys\"\r\n            style=\"width: 100%\"\r\n          >\r\n            <el-table-column\r\n              label=\"序号\"\r\n              width=\"60\"\r\n              type=\"index\"\r\n            ></el-table-column>\r\n\r\n            <el-table-column\r\n              label=\"缓存名称\"\r\n              align=\"center\"\r\n              prop=\"cacheName\"\r\n              :show-overflow-tooltip=\"true\"\r\n              :formatter=\"nameFormatter\"\r\n            ></el-table-column>\r\n\r\n            <el-table-column\r\n              label=\"备注\"\r\n              align=\"center\"\r\n              prop=\"remark\"\r\n              :show-overflow-tooltip=\"true\"\r\n            />\r\n            <el-table-column\r\n              label=\"操作\"\r\n              width=\"60\"\r\n              align=\"center\"\r\n              class-name=\"small-padding fixed-width\"\r\n            >\r\n              <template #default=\"scope\">\r\n                <el-button\r\n                  link\r\n                  type=\"primary\"\r\n                  icon=\"Delete\"\r\n                  @click=\"handleClearCacheName(scope.row)\"\r\n                ></el-button>\r\n              </template>\r\n            </el-table-column>\r\n          </el-table>\r\n        </el-card>\r\n      </el-col>\r\n\r\n      <el-col :span=\"8\">\r\n        <el-card style=\"height: calc(100vh - 125px)\">\r\n          <template #header>\r\n            <Key style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">键名列表</span>\r\n            <el-button\r\n              style=\"float: right; padding: 3px 0\"\r\n              link\r\n              type=\"primary\"\r\n              icon=\"Refresh\"\r\n              @click=\"refreshCacheKeys()\"\r\n            ></el-button>\r\n          </template>\r\n          <el-table\r\n            v-loading=\"subLoading\"\r\n            :data=\"cacheKeys\"\r\n            :height=\"tableHeight\"\r\n            highlight-current-row\r\n            @row-click=\"handleCacheValue\"\r\n            style=\"width: 100%\"\r\n          >\r\n            <el-table-column\r\n              label=\"序号\"\r\n              width=\"60\"\r\n              type=\"index\"\r\n            ></el-table-column>\r\n            <el-table-column\r\n              label=\"缓存键名\"\r\n              align=\"center\"\r\n              :show-overflow-tooltip=\"true\"\r\n              :formatter=\"keyFormatter\"\r\n            >\r\n            </el-table-column>\r\n            <el-table-column\r\n              label=\"操作\"\r\n              width=\"60\"\r\n              align=\"center\"\r\n              class-name=\"small-padding fixed-width\"\r\n            >\r\n              <template #default=\"scope\">\r\n                <el-button\r\n                  link\r\n                  type=\"primary\"\r\n                  icon=\"Delete\"\r\n                  @click=\"handleClearCacheKey(scope.row)\"\r\n                ></el-button>\r\n              </template>\r\n            </el-table-column>\r\n          </el-table>\r\n        </el-card>\r\n      </el-col>\r\n\r\n      <el-col :span=\"8\">\r\n        <el-card :bordered=\"false\" style=\"height: calc(100vh - 125px)\">\r\n          <template #header>\r\n            <Document style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">缓存内容</span>\r\n            <el-button\r\n              style=\"float: right; padding: 3px 0\"\r\n              link\r\n              type=\"primary\"\r\n              icon=\"Refresh\"\r\n              @click=\"handleClearCacheAll()\"\r\n              >清理全部</el-button\r\n            >\r\n          </template>\r\n          <el-form :model=\"cacheForm\">\r\n            <el-row :gutter=\"32\">\r\n              <el-col :offset=\"1\" :span=\"22\">\r\n                <el-form-item label=\"缓存名称:\" prop=\"cacheName\">\r\n                  <el-input v-model=\"cacheForm.cacheName\" :readOnly=\"true\" />\r\n                </el-form-item>\r\n              </el-col>\r\n              <el-col :offset=\"1\" :span=\"22\">\r\n                <el-form-item label=\"缓存键名:\" prop=\"cacheKey\">\r\n                  <el-input v-model=\"cacheForm.cacheKey\" :readOnly=\"true\" />\r\n                </el-form-item>\r\n              </el-col>\r\n              <el-col :offset=\"1\" :span=\"22\">\r\n                <el-form-item label=\"缓存内容:\" prop=\"cacheValue\">\r\n                  <el-input\r\n                    v-model=\"cacheForm.cacheValue\"\r\n                    type=\"textarea\"\r\n                    :rows=\"8\"\r\n                    :readOnly=\"true\"\r\n                  />\r\n                </el-form-item>\r\n              </el-col>\r\n            </el-row>\r\n          </el-form>\r\n        </el-card>\r\n      </el-col>\r\n    </el-row>\r\n  </div>\r\n</template>\r\n\r\n<script setup name=\"CacheList\">\r\nimport { listCacheName, listCacheKey, getCacheValue, clearCacheName, clearCacheKey, clearCacheAll } from \"@/api/monitor/cache\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst cacheNames = ref([]);\r\nconst cacheKeys = ref([]);\r\nconst cacheForm = ref({});\r\nconst loading = ref(true);\r\nconst subLoading = ref(false);\r\nconst nowCacheName = ref(\"\");\r\nconst tableHeight = ref(window.innerHeight - 200);\r\n\r\n/** 查询缓存名称列表 */\r\nfunction getCacheNames() {\r\n  loading.value = true;\r\n  listCacheName().then(response => {\r\n    cacheNames.value = response.data;\r\n    loading.value = false;\r\n  });\r\n}\r\n\r\n/** 刷新缓存名称列表 */\r\nfunction refreshCacheNames() {\r\n  getCacheNames();\r\n  proxy.$modal.msgSuccess(\"刷新缓存列表成功\");\r\n}\r\n\r\n/** 清理指定名称缓存 */\r\nfunction handleClearCacheName(row) {\r\n  clearCacheName(row.cacheName).then(response => {\r\n    proxy.$modal.msgSuccess(\"清理缓存名称[\" + row.cacheName + \"]成功\");\r\n    getCacheKeys();\r\n  });\r\n}\r\n\r\n/** 查询缓存键名列表 */\r\nfunction getCacheKeys(row) {\r\n  const cacheName = row !== undefined ? row.cacheName : nowCacheName.value;\r\n  if (cacheName === \"\") {\r\n    return;\r\n  }\r\n  subLoading.value = true;\r\n  listCacheKey(cacheName).then(response => {\r\n    cacheKeys.value = response.data;\r\n    subLoading.value = false;\r\n    nowCacheName.value = cacheName;\r\n  });\r\n}\r\n\r\n/** 刷新缓存键名列表 */\r\nfunction refreshCacheKeys() {\r\n  getCacheKeys();\r\n  proxy.$modal.msgSuccess(\"刷新键名列表成功\");\r\n}\r\n\r\n/** 清理指定键名缓存 */\r\nfunction handleClearCacheKey(cacheKey) {\r\n  clearCacheKey(cacheKey).then(response => {\r\n    proxy.$modal.msgSuccess(\"清理缓存键名[\" + cacheKey + \"]成功\");\r\n    getCacheKeys();\r\n  });\r\n}\r\n\r\n/** 列表前缀去除 */\r\nfunction nameFormatter(row) {\r\n  return row.cacheName.replace(\":\", \"\");\r\n}\r\n\r\n/** 键名前缀去除 */\r\nfunction keyFormatter(cacheKey) {\r\n  return cacheKey.replace(nowCacheName.value, \"\");\r\n}\r\n\r\n/** 查询缓存内容详细 */\r\nfunction handleCacheValue(cacheKey) {\r\n  getCacheValue(nowCacheName.value, cacheKey).then(response => {\r\n    cacheForm.value = response.data;\r\n  });\r\n}\r\n\r\n/** 清理全部缓存 */\r\nfunction handleClearCacheAll() {\r\n  clearCacheAll().then(response => {\r\n    proxy.$modal.msgSuccess(\"清理全部缓存成功\");\r\n  });\r\n}\r\n\r\ngetCacheNames();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/monitor/logininfor/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\" label-width=\"68px\">\r\n         <el-form-item label=\"登录地址\" prop=\"ipaddr\">\r\n            <el-input\r\n               v-model=\"queryParams.ipaddr\"\r\n               placeholder=\"请输入登录地址\"\r\n               clearable\r\n               style=\"width: 240px;\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"用户名称\" prop=\"userName\">\r\n            <el-input\r\n               v-model=\"queryParams.userName\"\r\n               placeholder=\"请输入用户名称\"\r\n               clearable\r\n               style=\"width: 240px;\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"状态\" prop=\"status\">\r\n            <el-select\r\n               v-model=\"queryParams.status\"\r\n               placeholder=\"登录状态\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n            >\r\n               <el-option\r\n                  v-for=\"dict in sys_common_status\"\r\n                  :key=\"dict.value\"\r\n                  :label=\"dict.label\"\r\n                  :value=\"dict.value\"\r\n               />\r\n            </el-select>\r\n         </el-form-item>\r\n         <el-form-item label=\"登录时间\" style=\"width: 308px\">\r\n            <el-date-picker\r\n               v-model=\"dateRange\"\r\n               value-format=\"YYYY-MM-DD HH:mm:ss\"\r\n               type=\"daterange\"\r\n               range-separator=\"-\"\r\n               start-placeholder=\"开始日期\"\r\n               end-placeholder=\"结束日期\"\r\n               :default-time=\"[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]\"\r\n            ></el-date-picker>\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"Delete\"\r\n               :disabled=\"multiple\"\r\n               @click=\"handleDelete\"\r\n               v-hasPermi=\"['monitor:logininfor:remove']\"\r\n            >删除</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"Delete\"\r\n               @click=\"handleClean\"\r\n               v-hasPermi=\"['monitor:logininfor:remove']\"\r\n            >清空</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"warning\"\r\n               plain\r\n               icon=\"Download\"\r\n               @click=\"handleExport\"\r\n               v-hasPermi=\"['monitor:logininfor:export']\"\r\n            >导出</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n\r\n      <el-table ref=\"logininforRef\" v-loading=\"loading\" :data=\"logininforList\" @selection-change=\"handleSelectionChange\" :default-sort=\"defaultSort\" @sort-change=\"handleSortChange\">\r\n         <el-table-column type=\"selection\" width=\"55\" align=\"center\" />\r\n         <el-table-column label=\"访问编号\" align=\"center\" prop=\"infoId\" />\r\n         <el-table-column label=\"用户名称\" align=\"center\" prop=\"userName\" :show-overflow-tooltip=\"true\" sortable=\"custom\" :sort-orders=\"['descending', 'ascending']\" />\r\n         <el-table-column label=\"地址\" align=\"center\" prop=\"ipaddr\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"登录地点\" align=\"center\" prop=\"loginLocation\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"操作系统\" align=\"center\" prop=\"os\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"浏览器\" align=\"center\" prop=\"browser\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"登录状态\" align=\"center\" prop=\"status\">\r\n            <template #default=\"scope\">\r\n               <dict-tag :options=\"sys_common_status\" :value=\"scope.row.status\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"描述\" align=\"center\" prop=\"msg\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"访问时间\" align=\"center\" prop=\"loginTime\" sortable=\"custom\" :sort-orders=\"['descending', 'ascending']\" width=\"180\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.loginTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <pagination\r\n         v-show=\"total > 0\"\r\n         :total=\"total\"\r\n         v-model:page=\"queryParams.pageNum\"\r\n         v-model:limit=\"queryParams.pageSize\"\r\n         @pagination=\"getList\"\r\n      />\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Logininfor\">\r\nimport { list, delLogininfor, cleanLogininfor, unlockLogininfor } from \"@/api/monitor/logininfor\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_common_status } = proxy.useDict(\"sys_common_status\");\r\n\r\nconst logininforList = ref([]);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst ids = ref([]);\r\nconst single = ref(true);\r\nconst multiple = ref(true);\r\nconst selectName = ref(\"\");\r\nconst total = ref(0);\r\nconst dateRange = ref([]);\r\nconst defaultSort = ref({ prop: \"loginTime\", order: \"descending\" });\r\n\r\n// 查询参数\r\nconst queryParams = ref({\r\n  pageNum: 1,\r\n  pageSize: 10,\r\n  ipaddr: undefined,\r\n  userName: undefined,\r\n  status: undefined,\r\n  orderByColumn: undefined,\r\n  isAsc: undefined\r\n});\r\n\r\n/** 查询登录日志列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  list(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {\r\n    logininforList.value = response.rows;\r\n    total.value = response.total;\r\n    loading.value = false;\r\n  });\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.value.pageNum = 1;\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  dateRange.value = [];\r\n  proxy.resetForm(\"queryRef\");\r\n  queryParams.value.pageNum = 1;\r\n  proxy.$refs[\"logininforRef\"].sort(defaultSort.value.prop, defaultSort.value.order);\r\n}\r\n/** 多选框选中数据 */\r\nfunction handleSelectionChange(selection) {\r\n  ids.value = selection.map(item => item.infoId);\r\n  multiple.value = !selection.length;\r\n  single.value = selection.length != 1;\r\n  selectName.value = selection.map(item => item.userName);\r\n}\r\n/** 排序触发事件 */\r\nfunction handleSortChange(column, prop, order) {\r\n  queryParams.value.orderByColumn = column.prop;\r\n  queryParams.value.isAsc = column.order;\r\n  getList();\r\n}\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  const infoIds = row.infoId || ids.value;\r\n  proxy.$modal.confirm('是否确认删除访问编号为\"' + infoIds + '\"的数据项?').then(function () {\r\n    return delLogininfor(infoIds);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n  }).catch(() => {});\r\n}\r\n/** 清空按钮操作 */\r\nfunction handleClean() {\r\n  proxy.$modal.confirm(\"是否确认清空所有登录日志数据项?\").then(function () {\r\n    return cleanLogininfor();\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"清空成功\");\r\n  }).catch(() => {});\r\n}\r\n/** 导出按钮操作 */\r\nfunction handleExport() {\r\n  proxy.download(\"monitor/logininfor/export\", {\r\n    ...queryParams.value,\r\n  }, `config_${new Date().getTime()}.xlsx`);\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/monitor/online/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\">\r\n         <el-form-item label=\"登录地址\" prop=\"ipaddr\">\r\n            <el-input v-model=\"queryParams.ipaddr\" placeholder=\"请输入登录地址\" clearable style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\" />\r\n         </el-form-item>\r\n         <el-form-item label=\"用户名称\" prop=\"userName\">\r\n            <el-input v-model=\"queryParams.userName\" placeholder=\"请输入用户名称\" clearable style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\" />\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button type=\"danger\" plain icon=\"Delete\" :disabled=\"multiple\" @click=\"handleForceLogout\"\r\n               v-hasPermi=\"['monitor:online:forceLogout']\">批量强退</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n      <el-table v-loading=\"loading\" :data=\"onlineList.slice((pageNum - 1) * pageSize, pageNum * pageSize)\"\r\n         style=\"width: 100%;\" @selection-change=\"handleSelectionChange\">\r\n         <el-table-column width=\"50\" type=\"selection\" align=\"center\"></el-table-column>\r\n         <el-table-column label=\"序号\" width=\"50\" type=\"index\" align=\"center\">\r\n            <template #default=\"scope\">\r\n               <span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"会话编号\" align=\"center\" prop=\"tokenId\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"登录名称\" align=\"center\" prop=\"userName\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"所属部门\" align=\"center\" prop=\"deptName\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"主机\" align=\"center\" prop=\"ipaddr\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"登录地点\" align=\"center\" prop=\"loginLocation\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"操作系统\" align=\"center\" prop=\"os\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"浏览器\" align=\"center\" prop=\"browser\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"登录时间\" align=\"center\" prop=\"loginTime\" width=\"180\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.loginTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"操作\" align=\"center\" class-name=\"small-padding fixed-width\">\r\n            <template #default=\"scope\">\r\n               <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleForceLogout(scope.row)\"\r\n                  v-hasPermi=\"['monitor:online:forceLogout']\">强退</el-button>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <pagination v-show=\"total > 0\" :total=\"total\" v-model:page=\"pageNum\" v-model:limit=\"pageSize\" />\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Online\">\r\nimport { forceLogout, list as initData } from \"@/api/monitor/online\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst onlineList = ref([]);\r\nconst loading = ref(true);\r\nconst total = ref(0);\r\nconst pageNum = ref(1);\r\nconst pageSize = ref(10);\r\nconst queryParams = ref({\r\n   ipaddr: undefined,\r\n   userName: undefined\r\n});\r\nconst multiple = ref(true)\r\nconst tokenIds = ref([])\r\n/** 查询登录日志列表 */\r\nfunction getList() {\r\n   loading.value = true;\r\n   initData(queryParams.value).then(response => {\r\n      onlineList.value = response.rows;\r\n      total.value = response.total;\r\n      loading.value = false;\r\n   });\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n   pageNum.value = 1;\r\n   getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n   proxy.resetForm(\"queryRef\");\r\n   handleQuery();\r\n}\r\n/** 多选框选中数据 */\r\nfunction handleSelectionChange(selection) {\r\n   tokenIds.value = selection.map(item => item.tokenId);\r\n   multiple.value = !selection.length;\r\n}\r\n/** 强退按钮操作 */\r\nfunction handleForceLogout(row) {\r\n   let ids = row.tokenId ? row.tokenId : tokenIds.value.join(\",\")\r\n   let userNames = onlineList.value.filter(v => ids.includes(v.tokenId)).map(v => v.userName)\r\n   proxy.$modal.confirm('是否确认强退名称为\"' + userNames + '\"的用户?').then(function () {\r\n      return forceLogout(ids);\r\n   }).then(() => {\r\n      getList();\r\n      proxy.$modal.msgSuccess(\"强退成功\");\r\n   }).catch(() => { });\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/monitor/server/index.vue",
    "content": "<template>\r\n  <div class=\"app-container\">\r\n    <el-row>\r\n      <el-col :span=\"12\" class=\"card-box\">\r\n        <el-card>\r\n          <template #header><Cpu style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">CPU</span></template>\r\n          <div class=\"el-table el-table--enable-row-hover el-table--medium\">\r\n            <table cellspacing=\"0\" style=\"width: 100%;\">\r\n              <thead>\r\n                <tr>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">属性</div></th>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">值</div></th>\r\n                </tr>\r\n              </thead>\r\n              <tbody>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">核心数</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.cpu\">{{ server.cpu.cpuNum }}</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">用户使用率</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.cpu\">{{ server.cpu.used }}%</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">系统使用率</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.cpu\">{{ server.cpu.sys }}%</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">当前空闲率</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.cpu\">{{ server.cpu.free }}%</div></td>\r\n                </tr>\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n        </el-card>\r\n      </el-col>\r\n\r\n      <el-col :span=\"12\" class=\"card-box\">\r\n        <el-card>\r\n          <template #header><Tickets style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">内存</span></template>\r\n          <div class=\"el-table el-table--enable-row-hover el-table--medium\">\r\n            <table cellspacing=\"0\" style=\"width: 100%;\">\r\n              <thead>\r\n                <tr>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">属性</div></th>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">内存</div></th>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">项目</div></th>\r\n                </tr>\r\n              </thead>\r\n              <tbody>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">总内存</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.mem\">{{ server.mem.total }}G</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.project\">{{ server.project.total }}M</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">已用内存</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.mem\">{{ server.mem.used}}G</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.project\">{{ server.project.used}}M</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">剩余内存</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.mem\">{{ server.mem.free }}G</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.project\">{{ server.project.free }}M</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">使用率</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.mem\" :class=\"{'text-danger': server.mem.usage > 80}\">{{ server.mem.usage }}%</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.project\" :class=\"{'text-danger': server.project.usage > 80}\">{{ server.project.usage }}%</div></td>\r\n                </tr>\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n        </el-card>\r\n      </el-col>\r\n\r\n      <el-col :span=\"24\" class=\"card-box\">\r\n        <el-card>\r\n          <template #header><Monitor style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">服务器信息</span></template>\r\n          <div class=\"el-table el-table--enable-row-hover el-table--medium\">\r\n            <table cellspacing=\"0\" style=\"width: 100%;\">\r\n              <tbody>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">服务器名称</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.sys\">{{ server.sys.computerName }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">操作系统</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.sys\">{{ server.sys.osName }}</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">服务器IP</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.sys\">{{ server.sys.computerIp }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">系统架构</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.sys\">{{ server.sys.osArch }}</div></td>\r\n                </tr>\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n        </el-card>\r\n      </el-col>\r\n\r\n      <el-col :span=\"24\" class=\"card-box\">\r\n        <el-card>\r\n          <template #header><CoffeeCup style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">NodeJs信息</span></template>\r\n          <div class=\"el-table el-table--enable-row-hover el-table--medium\">\r\n            <table cellspacing=\"0\" style=\"width: 100%;table-layout:fixed;\">\r\n              <tbody>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">Node名称</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.project\">{{ server.project.name }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">Node版本</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.project\">{{ server.project.version }}</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">启动时间</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.project\">{{ server.project.startTime }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">运行时长</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.project\">{{ server.project.runTime }}</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td colspan=\"1\" class=\"el-table__cell is-leaf\"><div class=\"cell\">安装路径</div></td>\r\n                  <td colspan=\"3\" class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.project\">{{ server.project.home }}</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td colspan=\"1\" class=\"el-table__cell is-leaf\"><div class=\"cell\">项目路径</div></td>\r\n                  <td colspan=\"3\" class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.sys\">{{ server.sys.userDir }}</div></td>\r\n                </tr>\r\n                <tr>\r\n                  <td colspan=\"1\" class=\"el-table__cell is-leaf\"><div class=\"cell\">运行参数</div></td>\r\n                  <td colspan=\"3\" class=\"el-table__cell is-leaf\"><div class=\"cell\" v-if=\"server.project\">{{ server.project.inputArgs }}</div></td>\r\n                </tr>\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n        </el-card>\r\n      </el-col>\r\n\r\n      <el-col :span=\"24\" class=\"card-box\">\r\n        <el-card>\r\n          <template #header><MessageBox style=\"width: 1em; height: 1em; vertical-align: middle;\" /> <span style=\"vertical-align: middle;\">磁盘状态</span></template>\r\n          <div class=\"el-table el-table--enable-row-hover el-table--medium\">\r\n            <table cellspacing=\"0\" style=\"width: 100%;\">\r\n              <thead>\r\n                <tr>\r\n                  <th class=\"el-table__cell el-table__cell is-leaf\"><div class=\"cell\">盘符路径</div></th>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">文件系统</div></th>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">盘符类型</div></th>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">总大小</div></th>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">可用大小</div></th>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">已用大小</div></th>\r\n                  <th class=\"el-table__cell is-leaf\"><div class=\"cell\">已用百分比</div></th>\r\n                </tr>\r\n              </thead>\r\n              <tbody v-if=\"server.sysFiles\">\r\n                <tr v-for=\"(sysFile, index) in server.sysFiles\" :key=\"index\">\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">{{ sysFile.dirName }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">{{ sysFile.sysTypeName }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">{{ sysFile.typeName }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">{{ sysFile.total }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">{{ sysFile.free }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\">{{ sysFile.used }}</div></td>\r\n                  <td class=\"el-table__cell is-leaf\"><div class=\"cell\" :class=\"{'text-danger': sysFile.usage > 80}\">{{ sysFile.usage }}%</div></td>\r\n                </tr>\r\n              </tbody>\r\n            </table>\r\n          </div>\r\n        </el-card>\r\n      </el-col>\r\n    </el-row>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { getServer } from '@/api/monitor/server'\r\n\r\nconst server = ref([]);\r\nconst { proxy } = getCurrentInstance();\r\n\r\nfunction getList() {\r\n  proxy.$modal.loading(\"正在加载服务监控数据，请稍候！\");\r\n  getServer().then(response => {\r\n    server.value = response.data;\r\n    proxy.$modal.closeLoading();\r\n  });\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/redirect/index.vue",
    "content": "<template>\r\n  <div></div>\r\n</template>\r\n\r\n<script setup>\r\nimport { useRoute, useRouter } from 'vue-router'\r\n\r\nconst route = useRoute();\r\nconst router = useRouter();\r\nconst { params, query } = route\r\nconst { path } = params\r\n\r\nrouter.replace({ path: '/' + path, query })\r\n</script>"
  },
  {
    "path": "front/src/views/system/config/edit.vue",
    "content": "<template>\n  <div class=\"app-container\">\n    <aside>\n      <el-select v-model=\"selectedKey\" placeholder=\"请选择文件\" style=\"width: 300px;\" @change=\"loadData\">\n        <el-option\n          v-for=\"(item, key) in keyMap\"\n          :key=\"key\"\n          :label=\"`${key} - ${item.desc}`\"\n          :value=\"key\"\n        />\n      </el-select>\n    </aside>\n\n    <div v-if=\"selectedKey\" style=\"height: 600px; margin-top: 10px;\">\n      <vue-monaco-editor\n        v-model:value=\"code\"\n        theme=\"vs-dark\"\n        language=\"json\"\n        :options=\"MONACO_EDITOR_OPTIONS\"\n        @mount=\"handleMount\"\n      />\n    </div>\n\n    <el-button\n      v-if=\"selectedKey\"\n      type=\"primary\"\n      @click=\"handleSave\"\n      style=\"margin-top: 10px;\"\n    >\n      保存\n    </el-button>\n  </div>\n</template>\n\n<script setup name=\"appinfo\">\nimport { ref, shallowRef, onMounted } from 'vue'\nimport { getKeys, getInfoByKey, updateInfoByKey } from '../../../api/system/config'\nimport { ElMessage } from 'element-plus'\n\nconst MONACO_EDITOR_OPTIONS = {\n  automaticLayout: true,\n  formatOnType: true,\n  formatOnPaste: true,\n}\n\nconst keyMap = ref({})\nconst selectedKey = ref('')\nconst code = ref('')\nconst editorRef = shallowRef()\n\nconst handleMount = (editor) => {\n  editorRef.value = editor\n\n  // 添加 Ctrl+S 保存快捷键\n  editor.addCommand(\n    monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS,\n    () => {\n      handleSave()\n    }\n  )\n}\n\n\nconst formatCode = () => {\n  editorRef.value?.getAction('editor.action.formatDocument').run()\n}\n\n// 加载 key 列表并默认选第一个 key\nconst loadKeys = async () => {\n  try {\n    const { data } = await getKeys()\n    keyMap.value = data\n    const keys = Object.keys(data)\n    if (keys.length > 0) {\n      selectedKey.value = keys[0]\n      await loadData()\n    }\n  } catch (e) {\n    ElMessage.error('获取 key 列表失败')\n  }\n}\n\n// 加载当前选中的 key 的数据\nconst loadData = async () => {\n  if (!selectedKey.value) return\n  try {\n    const { data } = await getInfoByKey(selectedKey.value)\n    code.value = JSON.stringify(data, null, 2)\n    formatCode()\n  } catch (e) {\n    ElMessage.error('获取数据失败')\n  }\n}\n\n// 保存\nconst handleSave = async () => {\n  try {\n    const parsedData = JSON.parse(code.value)\n    await updateInfoByKey(selectedKey.value, parsedData)\n    ElMessage.success('保存成功')\n  } catch (e) {\n    ElMessage.error('保存失败，请检查 JSON 格式')\n  }\n}\n\nonMounted(() => {\n  loadKeys()\n})\n</script>\n\n\n<style scoped>\n.app-container {\n  padding: 20px;\n  background-color: #fff;\n  border-radius: 4px;\n  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n</style>\n"
  },
  {
    "path": "front/src/views/system/config/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\" label-width=\"68px\">\r\n         <el-form-item label=\"参数名称\" prop=\"configName\">\r\n            <el-input\r\n               v-model=\"queryParams.configName\"\r\n               placeholder=\"请输入参数名称\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"参数键名\" prop=\"configKey\">\r\n            <el-input\r\n               v-model=\"queryParams.configKey\"\r\n               placeholder=\"请输入参数键名\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"系统内置\" prop=\"configType\">\r\n            <el-select v-model=\"queryParams.configType\" placeholder=\"系统内置\" clearable>\r\n               <el-option\r\n                  v-for=\"dict in sys_yes_no\"\r\n                  :key=\"dict.value\"\r\n                  :label=\"dict.label\"\r\n                  :value=\"dict.value\"\r\n               />\r\n            </el-select>\r\n         </el-form-item>\r\n         <el-form-item label=\"创建时间\" style=\"width: 308px;\">\r\n            <el-date-picker\r\n               v-model=\"dateRange\"\r\n               value-format=\"YYYY-MM-DD\"\r\n               type=\"daterange\"\r\n               range-separator=\"-\"\r\n               start-placeholder=\"开始日期\"\r\n               end-placeholder=\"结束日期\"\r\n            ></el-date-picker>\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"primary\"\r\n               plain\r\n               icon=\"Plus\"\r\n               @click=\"handleAdd\"\r\n               v-hasPermi=\"['system:config:add']\"\r\n            >新增</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"success\"\r\n               plain\r\n               icon=\"Edit\"\r\n               :disabled=\"single\"\r\n               @click=\"handleUpdate\"\r\n               v-hasPermi=\"['system:config:edit']\"\r\n            >修改</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"Delete\"\r\n               :disabled=\"multiple\"\r\n               @click=\"handleDelete\"\r\n               v-hasPermi=\"['system:config:remove']\"\r\n            >删除</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"warning\"\r\n               plain\r\n               icon=\"Download\"\r\n               @click=\"handleExport\"\r\n               v-hasPermi=\"['system:config:export']\"\r\n            >导出</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"Refresh\"\r\n               @click=\"handleRefreshCache\"\r\n               v-hasPermi=\"['system:config:remove']\"\r\n            >刷新缓存</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n\r\n      <el-table v-loading=\"loading\" :data=\"configList\" @selection-change=\"handleSelectionChange\">\r\n         <el-table-column type=\"selection\" width=\"55\" align=\"center\" />\r\n         <el-table-column label=\"参数主键\" align=\"center\" prop=\"configId\" />\r\n         <el-table-column label=\"参数名称\" align=\"center\" prop=\"configName\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"参数键名\" align=\"center\" prop=\"configKey\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"参数键值\" align=\"center\" prop=\"configValue\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"系统内置\" align=\"center\" prop=\"configType\">\r\n            <template #default=\"scope\">\r\n               <dict-tag :options=\"sys_yes_no\" :value=\"scope.row.configType\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"备注\" align=\"center\" prop=\"remark\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"180\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.createTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"操作\" align=\"center\" width=\"150\" class-name=\"small-padding fixed-width\">\r\n            <template #default=\"scope\">\r\n               <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['system:config:edit']\" >修改</el-button>\r\n               <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['system:config:remove']\">删除</el-button>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <pagination\r\n         v-show=\"total > 0\"\r\n         :total=\"total\"\r\n         v-model:page=\"queryParams.pageNum\"\r\n         v-model:limit=\"queryParams.pageSize\"\r\n         @pagination=\"getList\"\r\n      />\r\n\r\n      <!-- 添加或修改参数配置对话框 -->\r\n      <el-dialog :title=\"title\" v-model=\"open\" width=\"500px\" append-to-body>\r\n         <el-form ref=\"configRef\" :model=\"form\" :rules=\"rules\" label-width=\"80px\">\r\n            <el-form-item label=\"参数名称\" prop=\"configName\">\r\n               <el-input v-model=\"form.configName\" placeholder=\"请输入参数名称\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"参数键名\" prop=\"configKey\">\r\n               <el-input v-model=\"form.configKey\" placeholder=\"请输入参数键名\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"参数键值\" prop=\"configValue\">\r\n               <el-input v-model=\"form.configValue\" placeholder=\"请输入参数键值\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"系统内置\" prop=\"configType\">\r\n               <el-radio-group v-model=\"form.configType\">\r\n                  <el-radio\r\n                     v-for=\"dict in sys_yes_no\"\r\n                     :key=\"dict.value\"\r\n                     :label=\"dict.value\"\r\n                  >{{ dict.label }}</el-radio>\r\n               </el-radio-group>\r\n            </el-form-item>\r\n            <el-form-item label=\"备注\" prop=\"remark\">\r\n               <el-input v-model=\"form.remark\" type=\"textarea\" placeholder=\"请输入内容\" />\r\n            </el-form-item>\r\n         </el-form>\r\n         <template #footer>\r\n            <div class=\"dialog-footer\">\r\n               <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n               <el-button @click=\"cancel\">取 消</el-button>\r\n            </div>\r\n         </template>\r\n      </el-dialog>\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Config\">\r\nimport { listConfig, getConfig, delConfig, addConfig, updateConfig, refreshCache } from \"@/api/system/config\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_yes_no } = proxy.useDict(\"sys_yes_no\");\r\n\r\nconst configList = ref([]);\r\nconst open = ref(false);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst ids = ref([]);\r\nconst single = ref(true);\r\nconst multiple = ref(true);\r\nconst total = ref(0);\r\nconst title = ref(\"\");\r\nconst dateRange = ref([]);\r\n\r\nconst data = reactive({\r\n  form: {},\r\n  queryParams: {\r\n    pageNum: 1,\r\n    pageSize: 10,\r\n    configName: undefined,\r\n    configKey: undefined,\r\n    configType: undefined\r\n  },\r\n  rules: {\r\n    configName: [{ required: true, message: \"参数名称不能为空\", trigger: \"blur\" }],\r\n    configKey: [{ required: true, message: \"参数键名不能为空\", trigger: \"blur\" }],\r\n    configValue: [{ required: true, message: \"参数键值不能为空\", trigger: \"blur\" }]\r\n  }\r\n});\r\n\r\nconst { queryParams, form, rules } = toRefs(data);\r\n\r\n/** 查询参数列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  listConfig(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {\r\n    configList.value = response.rows;\r\n    total.value = response.total;\r\n    loading.value = false;\r\n  });\r\n}\r\n/** 取消按钮 */\r\nfunction cancel() {\r\n  open.value = false;\r\n  reset();\r\n}\r\n/** 表单重置 */\r\nfunction reset() {\r\n  form.value = {\r\n    configId: undefined,\r\n    configName: undefined,\r\n    configKey: undefined,\r\n    configValue: undefined,\r\n    configType: \"Y\",\r\n    remark: undefined\r\n  };\r\n  proxy.resetForm(\"configRef\");\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.value.pageNum = 1;\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  dateRange.value = [];\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\n/** 多选框选中数据 */\r\nfunction handleSelectionChange(selection) {\r\n  ids.value = selection.map(item => item.configId);\r\n  single.value = selection.length != 1;\r\n  multiple.value = !selection.length;\r\n}\r\n/** 新增按钮操作 */\r\nfunction handleAdd() {\r\n  reset();\r\n  open.value = true;\r\n  title.value = \"添加参数\";\r\n}\r\n/** 修改按钮操作 */\r\nfunction handleUpdate(row) {\r\n  reset();\r\n  const configId = row.configId || ids.value;\r\n  getConfig(configId).then(response => {\r\n    form.value = response.data;\r\n    open.value = true;\r\n    title.value = \"修改参数\";\r\n  });\r\n}\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n  proxy.$refs[\"configRef\"].validate(valid => {\r\n    if (valid) {\r\n      if (form.value.configId != undefined) {\r\n        updateConfig(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"修改成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      } else {\r\n        addConfig(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"新增成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      }\r\n    }\r\n  });\r\n}\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  const configIds = row.configId || ids.value;\r\n  proxy.$modal.confirm('是否确认删除参数编号为\"' + configIds + '\"的数据项？').then(function () {\r\n    return delConfig(configIds);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n  }).catch(() => {});\r\n}\r\n/** 导出按钮操作 */\r\nfunction handleExport() {\r\n  proxy.download(\"system/config/export\", {\r\n    ...queryParams.value\r\n  }, `config_${new Date().getTime()}.xlsx`);\r\n}\r\n/** 刷新缓存按钮操作 */\r\nfunction handleRefreshCache() {\r\n  refreshCache().then(() => {\r\n    proxy.$modal.msgSuccess(\"刷新缓存成功\");\r\n  });\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/dept/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\">\r\n         <el-form-item label=\"部门名称\" prop=\"deptName\">\r\n            <el-input\r\n               v-model=\"queryParams.deptName\"\r\n               placeholder=\"请输入部门名称\"\r\n               clearable\r\n               style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"状态\" prop=\"status\">\r\n            <el-select v-model=\"queryParams.status\" placeholder=\"部门状态\" clearable style=\"width: 200px\">\r\n               <el-option\r\n                  v-for=\"dict in sys_normal_disable\"\r\n                  :key=\"dict.value\"\r\n                  :label=\"dict.label\"\r\n                  :value=\"dict.value\"\r\n               />\r\n            </el-select>\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"primary\"\r\n               plain\r\n               icon=\"Plus\"\r\n               @click=\"handleAdd\"\r\n               v-hasPermi=\"['system:dept:add']\"\r\n            >新增</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"info\"\r\n               plain\r\n               icon=\"Sort\"\r\n               @click=\"toggleExpandAll\"\r\n            >展开/折叠</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n\r\n      <el-table\r\n         v-if=\"refreshTable\"\r\n         v-loading=\"loading\"\r\n         :data=\"deptList\"\r\n         row-key=\"deptId\"\r\n         :default-expand-all=\"isExpandAll\"\r\n         :tree-props=\"{ children: 'children', hasChildren: 'hasChildren' }\"\r\n      >\r\n         <el-table-column prop=\"deptName\" label=\"部门名称\" width=\"260\"></el-table-column>\r\n         <el-table-column prop=\"orderNum\" label=\"排序\" width=\"200\"></el-table-column>\r\n         <el-table-column prop=\"status\" label=\"状态\" width=\"100\">\r\n            <template #default=\"scope\">\r\n               <dict-tag :options=\"sys_normal_disable\" :value=\"scope.row.status\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"200\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.createTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"操作\" align=\"center\" class-name=\"small-padding fixed-width\">\r\n            <template #default=\"scope\">\r\n               <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['system:dept:edit']\">修改</el-button>\r\n               <el-button link type=\"primary\" icon=\"Plus\" @click=\"handleAdd(scope.row)\" v-hasPermi=\"['system:dept:add']\">新增</el-button>\r\n               <el-button v-if=\"scope.row.parentId != 0\" link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['system:dept:remove']\">删除</el-button>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <!-- 添加或修改部门对话框 -->\r\n      <el-dialog :title=\"title\" v-model=\"open\" width=\"600px\" append-to-body>\r\n         <el-form ref=\"deptRef\" :model=\"form\" :rules=\"rules\" label-width=\"80px\">\r\n            <el-row>\r\n               <el-col :span=\"24\" v-if=\"form.parentId !== 0\">\r\n                  <el-form-item label=\"上级部门\" prop=\"parentId\">\r\n                     <el-tree-select\r\n                        v-model=\"form.parentId\"\r\n                        :data=\"deptOptions\"\r\n                        :props=\"{ value: 'deptId', label: 'deptName', children: 'children' }\"\r\n                        value-key=\"deptId\"\r\n                        placeholder=\"选择上级部门\"\r\n                        check-strictly\r\n                     />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"部门名称\" prop=\"deptName\">\r\n                     <el-input v-model=\"form.deptName\" placeholder=\"请输入部门名称\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"显示排序\" prop=\"orderNum\">\r\n                     <el-input-number v-model=\"form.orderNum\" controls-position=\"right\" :min=\"0\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"负责人\" prop=\"leader\">\r\n                     <el-input v-model=\"form.leader\" placeholder=\"请输入负责人\" maxlength=\"20\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"联系电话\" prop=\"phone\">\r\n                     <el-input v-model=\"form.phone\" placeholder=\"请输入联系电话\" maxlength=\"11\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"邮箱\" prop=\"email\">\r\n                     <el-input v-model=\"form.email\" placeholder=\"请输入邮箱\" maxlength=\"50\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"部门状态\">\r\n                     <el-radio-group v-model=\"form.status\">\r\n                        <el-radio\r\n                           v-for=\"dict in sys_normal_disable\"\r\n                           :key=\"dict.value\"\r\n                           :label=\"dict.value\"\r\n                        >{{ dict.label }}</el-radio>\r\n                     </el-radio-group>\r\n                  </el-form-item>\r\n               </el-col>\r\n            </el-row>\r\n         </el-form>\r\n         <template #footer>\r\n            <div class=\"dialog-footer\">\r\n               <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n               <el-button @click=\"cancel\">取 消</el-button>\r\n            </div>\r\n         </template>\r\n      </el-dialog>\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Dept\">\r\nimport { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from \"@/api/system/dept\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_normal_disable } = proxy.useDict(\"sys_normal_disable\");\r\n\r\nconst deptList = ref([]);\r\nconst open = ref(false);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst title = ref(\"\");\r\nconst deptOptions = ref([]);\r\nconst isExpandAll = ref(true);\r\nconst refreshTable = ref(true);\r\n\r\nconst data = reactive({\r\n  form: {},\r\n  queryParams: {\r\n    deptName: undefined,\r\n    status: undefined\r\n  },\r\n  rules: {\r\n    parentId: [{ required: true, message: \"上级部门不能为空\", trigger: \"blur\" }],\r\n    deptName: [{ required: true, message: \"部门名称不能为空\", trigger: \"blur\" }],\r\n    orderNum: [{ required: true, message: \"显示排序不能为空\", trigger: \"blur\" }],\r\n    email: [{ type: \"email\", message: \"请输入正确的邮箱地址\", trigger: [\"blur\", \"change\"] }],\r\n    phone: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\\d{8}$/, message: \"请输入正确的手机号码\", trigger: \"blur\" }]\r\n  },\r\n});\r\n\r\nconst { queryParams, form, rules } = toRefs(data);\r\n\r\n/** 查询部门列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  listDept(queryParams.value).then(response => {\r\n    deptList.value = proxy.handleTree(response.data, \"deptId\");\r\n    loading.value = false;\r\n  });\r\n}\r\n/** 取消按钮 */\r\nfunction cancel() {\r\n  open.value = false;\r\n  reset();\r\n}\r\n/** 表单重置 */\r\nfunction reset() {\r\n  form.value = {\r\n    deptId: undefined,\r\n    parentId: undefined,\r\n    deptName: undefined,\r\n    orderNum: 0,\r\n    leader: undefined,\r\n    phone: undefined,\r\n    email: undefined,\r\n    status: \"1\"\r\n  };\r\n  proxy.resetForm(\"deptRef\");\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\n/** 新增按钮操作 */\r\nfunction handleAdd(row) {\r\n  reset();\r\n  listDept().then(response => {\r\n    deptOptions.value = proxy.handleTree(response.data, \"deptId\");\r\n  });\r\n  if (row != undefined) {\r\n    form.value.parentId = row.deptId;\r\n  }\r\n  open.value = true;\r\n  title.value = \"添加部门\";\r\n}\r\n/** 展开/折叠操作 */\r\nfunction toggleExpandAll() {\r\n  refreshTable.value = false;\r\n  isExpandAll.value = !isExpandAll.value;\r\n  nextTick(() => {\r\n    refreshTable.value = true;\r\n  });\r\n}\r\n/** 修改按钮操作 */\r\nfunction handleUpdate(row) {\r\n  reset();\r\n  listDeptExcludeChild(row.deptId).then(response => {\r\n    deptOptions.value = proxy.handleTree(response.data, \"deptId\");\r\n  });\r\n  getDept(row.deptId).then(response => {\r\n    form.value = response.data;\r\n    open.value = true;\r\n    title.value = \"修改部门\";\r\n  });\r\n}\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n  proxy.$refs[\"deptRef\"].validate(valid => {\r\n    if (valid) {\r\n      if (form.value.deptId != undefined) {\r\n        updateDept(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"修改成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      } else {\r\n        addDept(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"新增成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      }\r\n    }\r\n  });\r\n}\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  proxy.$modal.confirm('是否确认删除名称为\"' + row.deptName + '\"的数据项?').then(function() {\r\n    return delDept(row.deptId);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n  }).catch(() => {});\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/dict/data.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\">\r\n         <el-form-item label=\"字典名称\" prop=\"dictType\">\r\n            <el-select v-model=\"queryParams.dictType\" style=\"width: 200px\">\r\n               <el-option\r\n                  v-for=\"item in typeOptions\"\r\n                  :key=\"item.dictId\"\r\n                  :label=\"item.dictName\"\r\n                  :value=\"item.dictType\"\r\n               />\r\n            </el-select>\r\n         </el-form-item>\r\n         <el-form-item label=\"字典标签\" prop=\"dictLabel\">\r\n            <el-input\r\n               v-model=\"queryParams.dictLabel\"\r\n               placeholder=\"请输入字典标签\"\r\n               clearable\r\n               style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"状态\" prop=\"status\">\r\n            <el-select v-model=\"queryParams.status\" placeholder=\"数据状态\" clearable style=\"width: 200px\">\r\n               <el-option\r\n                  v-for=\"dict in sys_normal_disable\"\r\n                  :key=\"dict.value\"\r\n                  :label=\"dict.label\"\r\n                  :value=\"dict.value\"\r\n               />\r\n            </el-select>\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"primary\"\r\n               plain\r\n               icon=\"Plus\"\r\n               @click=\"handleAdd\"\r\n               v-hasPermi=\"['system:dict:add']\"\r\n            >新增</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"success\"\r\n               plain\r\n               icon=\"Edit\"\r\n               :disabled=\"single\"\r\n               @click=\"handleUpdate\"\r\n               v-hasPermi=\"['system:dict:edit']\"\r\n            >修改</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"Delete\"\r\n               :disabled=\"multiple\"\r\n               @click=\"handleDelete\"\r\n               v-hasPermi=\"['system:dict:remove']\"\r\n            >删除</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"warning\"\r\n               plain\r\n               icon=\"Download\"\r\n               @click=\"handleExport\"\r\n               v-hasPermi=\"['system:dict:export']\"\r\n            >导出</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"warning\"\r\n               plain\r\n               icon=\"Close\"\r\n               @click=\"handleClose\"\r\n            >关闭</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n\r\n      <el-table v-loading=\"loading\" :data=\"dataList\" @selection-change=\"handleSelectionChange\">\r\n         <el-table-column type=\"selection\" width=\"55\" align=\"center\" />\r\n         <el-table-column label=\"字典编码\" align=\"center\" prop=\"dictCode\" />\r\n         <el-table-column label=\"字典标签\" align=\"center\" prop=\"dictLabel\">\r\n            <template #default=\"scope\">\r\n               <span v-if=\"(scope.row.listClass == '' || scope.row.listClass == 'default') && (scope.row.cssClass == '' || scope.row.cssClass == null)\">{{ scope.row.dictLabel }}</span>\r\n               <el-tag v-else :type=\"scope.row.listClass == 'primary' ? '' : scope.row.listClass\" :class=\"scope.row.cssClass\">{{ scope.row.dictLabel }}</el-tag>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"字典键值\" align=\"center\" prop=\"dictValue\" />\r\n         <el-table-column label=\"字典排序\" align=\"center\" prop=\"dictSort\" />\r\n         <el-table-column label=\"状态\" align=\"center\" prop=\"status\">\r\n            <template #default=\"scope\">\r\n               <dict-tag :options=\"sys_normal_disable\" :value=\"scope.row.status\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"备注\" align=\"center\" prop=\"remark\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"180\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.createTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"操作\" align=\"center\" width=\"160\" class-name=\"small-padding fixed-width\">\r\n            <template #default=\"scope\">\r\n               <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['system:dict:edit']\">修改</el-button>\r\n               <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['system:dict:remove']\">删除</el-button>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <pagination\r\n         v-show=\"total > 0\"\r\n         :total=\"total\"\r\n         v-model:page=\"queryParams.pageNum\"\r\n         v-model:limit=\"queryParams.pageSize\"\r\n         @pagination=\"getList\"\r\n      />\r\n\r\n      <!-- 添加或修改参数配置对话框 -->\r\n      <el-dialog :title=\"title\" v-model=\"open\" width=\"500px\" append-to-body>\r\n         <el-form ref=\"dataRef\" :model=\"form\" :rules=\"rules\" label-width=\"80px\">\r\n            <el-form-item label=\"字典类型\">\r\n               <el-input v-model=\"form.dictType\" :disabled=\"true\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"数据标签\" prop=\"dictLabel\">\r\n               <el-input v-model=\"form.dictLabel\" placeholder=\"请输入数据标签\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"数据键值\" prop=\"dictValue\">\r\n               <el-input v-model=\"form.dictValue\" placeholder=\"请输入数据键值\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"样式属性\" prop=\"cssClass\">\r\n               <el-input v-model=\"form.cssClass\" placeholder=\"请输入样式属性\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"显示排序\" prop=\"dictSort\">\r\n               <el-input-number v-model=\"form.dictSort\" controls-position=\"right\" :min=\"0\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"回显样式\" prop=\"listClass\">\r\n               <el-select v-model=\"form.listClass\">\r\n                  <el-option\r\n                     v-for=\"item in listClassOptions\"\r\n                     :key=\"item.value\"\r\n                     :label=\"item.label + '(' + item.value + ')'\"\r\n                     :value=\"item.value\"\r\n                  ></el-option>\r\n               </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"状态\" prop=\"status\">\r\n               <el-radio-group v-model=\"form.status\">\r\n                  <el-radio\r\n                     v-for=\"dict in sys_normal_disable\"\r\n                     :key=\"dict.value\"\r\n                     :label=\"dict.value\"\r\n                  >{{ dict.label }}</el-radio>\r\n               </el-radio-group>\r\n            </el-form-item>\r\n            <el-form-item label=\"备注\" prop=\"remark\">\r\n               <el-input v-model=\"form.remark\" type=\"textarea\" placeholder=\"请输入内容\"></el-input>\r\n            </el-form-item>\r\n         </el-form>\r\n         <template #footer>\r\n            <div class=\"dialog-footer\">\r\n               <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n               <el-button @click=\"cancel\">取 消</el-button>\r\n            </div>\r\n         </template>\r\n      </el-dialog>\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Data\">\r\nimport useDictStore from '@/store/modules/dict'\r\nimport { optionselect as getDictOptionselect, getType } from \"@/api/system/dict/type\";\r\nimport { listData, getData, delData, addData, updateData } from \"@/api/system/dict/data\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_normal_disable } = proxy.useDict(\"sys_normal_disable\");\r\n\r\nconst dataList = ref([]);\r\nconst open = ref(false);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst ids = ref([]);\r\nconst single = ref(true);\r\nconst multiple = ref(true);\r\nconst total = ref(0);\r\nconst title = ref(\"\");\r\nconst defaultDictType = ref(\"\");\r\nconst typeOptions = ref([]);\r\nconst route = useRoute();\r\n// 数据标签回显样式\r\nconst listClassOptions = ref([\r\n  { value: \"default\", label: \"默认\" }, \r\n  { value: \"primary\", label: \"主要\" }, \r\n  { value: \"success\", label: \"成功\" },\r\n  { value: \"info\", label: \"信息\" },\r\n  { value: \"warning\", label: \"警告\" },\r\n  { value: \"danger\", label: \"危险\" }\r\n]);\r\n\r\nconst data = reactive({\r\n  form: {},\r\n  queryParams: {\r\n    pageNum: 1,\r\n    pageSize: 10,\r\n    dictType: undefined,\r\n    dictLabel: undefined,\r\n    status: undefined\r\n  },\r\n  rules: {\r\n    dictLabel: [{ required: true, message: \"数据标签不能为空\", trigger: \"blur\" }],\r\n    dictValue: [{ required: true, message: \"数据键值不能为空\", trigger: \"blur\" }],\r\n    dictSort: [{ required: true, message: \"数据顺序不能为空\", trigger: \"blur\" }]\r\n  }\r\n});\r\n\r\nconst { queryParams, form, rules } = toRefs(data);\r\n\r\n/** 查询字典类型详细 */\r\nfunction getTypes(dictId) {\r\n  getType(dictId).then(response => {\r\n    queryParams.value.dictType = response.data.dictType;\r\n    defaultDictType.value = response.data.dictType;\r\n    getList();\r\n  });\r\n}\r\n\r\n/** 查询字典类型列表 */\r\nfunction getTypeList() {\r\n  getDictOptionselect().then(response => {\r\n    typeOptions.value = response.data;\r\n  });\r\n}\r\n/** 查询字典数据列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  listData(queryParams.value).then(response => {\r\n    dataList.value = response.rows;\r\n    total.value = response.total;\r\n    loading.value = false;\r\n  });\r\n}\r\n/** 取消按钮 */\r\nfunction cancel() {\r\n  open.value = false;\r\n  reset();\r\n}\r\n/** 表单重置 */\r\nfunction reset() {\r\n  form.value = {\r\n    dictCode: undefined,\r\n    dictLabel: undefined,\r\n    dictValue: undefined,\r\n    cssClass: undefined,\r\n    listClass: \"default\",\r\n    dictSort: 0,\r\n    status: \"1\",\r\n    remark: undefined\r\n  };\r\n  proxy.resetForm(\"dataRef\");\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.value.pageNum = 1;\r\n  getList();\r\n}\r\n/** 返回按钮操作 */\r\nfunction handleClose() {\r\n  const obj = { path: \"/system/dict\" };\r\n  proxy.$tab.closeOpenPage(obj);\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  proxy.resetForm(\"queryRef\");\r\n  queryParams.value.dictType = defaultDictType.value;\r\n  handleQuery();\r\n}\r\n/** 新增按钮操作 */\r\nfunction handleAdd() {\r\n  reset();\r\n  open.value = true;\r\n  title.value = \"添加字典数据\";\r\n  form.value.dictType = queryParams.value.dictType;\r\n}\r\n/** 多选框选中数据 */\r\nfunction handleSelectionChange(selection) {\r\n  ids.value = selection.map(item => item.dictCode);\r\n  single.value = selection.length != 1;\r\n  multiple.value = !selection.length;\r\n}\r\n/** 修改按钮操作 */\r\nfunction handleUpdate(row) {\r\n  reset();\r\n  const dictCode = row.dictCode || ids.value;\r\n  getData(dictCode).then(response => {\r\n    form.value = response.data;\r\n    open.value = true;\r\n    title.value = \"修改字典数据\";\r\n  });\r\n}\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n  proxy.$refs[\"dataRef\"].validate(valid => {\r\n    if (valid) {\r\n      if (form.value.dictCode != undefined) {\r\n        updateData(form.value).then(response => {\r\n          useDictStore().removeDict(queryParams.value.dictType);\r\n          proxy.$modal.msgSuccess(\"修改成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      } else {\r\n        addData(form.value).then(response => {\r\n          useDictStore().removeDict(queryParams.value.dictType);\r\n          proxy.$modal.msgSuccess(\"新增成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      }\r\n    }\r\n  });\r\n}\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  const dictCodes = row.dictCode || ids.value;\r\n  proxy.$modal.confirm('是否确认删除字典编码为\"' + dictCodes + '\"的数据项？').then(function() {\r\n    return delData(dictCodes);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n    useDictStore().removeDict(queryParams.value.dictType);\r\n  }).catch(() => {});\r\n}\r\n/** 导出按钮操作 */\r\nfunction handleExport() {\r\n  proxy.download(\"system/dict/data/export\", {\r\n    ...queryParams.value\r\n  }, `dict_data_${new Date().getTime()}.xlsx`);\r\n}\r\n\r\ngetTypes(route.params && route.params.dictId);\r\ngetTypeList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/dict/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\" label-width=\"68px\">\r\n         <el-form-item label=\"字典名称\" prop=\"dictName\">\r\n            <el-input\r\n               v-model=\"queryParams.dictName\"\r\n               placeholder=\"请输入字典名称\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"字典类型\" prop=\"dictType\">\r\n            <el-input\r\n               v-model=\"queryParams.dictType\"\r\n               placeholder=\"请输入字典类型\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"状态\" prop=\"status\">\r\n            <el-select\r\n               v-model=\"queryParams.status\"\r\n               placeholder=\"字典状态\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n            >\r\n               <el-option\r\n                  v-for=\"dict in sys_normal_disable\"\r\n                  :key=\"dict.value\"\r\n                  :label=\"dict.label\"\r\n                  :value=\"dict.value\"\r\n               />\r\n            </el-select>\r\n         </el-form-item>\r\n         <el-form-item label=\"创建时间\" style=\"width: 308px\">\r\n            <el-date-picker\r\n               v-model=\"dateRange\"\r\n               value-format=\"YYYY-MM-DD\"\r\n               type=\"daterange\"\r\n               range-separator=\"-\"\r\n               start-placeholder=\"开始日期\"\r\n               end-placeholder=\"结束日期\"\r\n            ></el-date-picker>\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"primary\"\r\n               plain\r\n               icon=\"Plus\"\r\n               @click=\"handleAdd\"\r\n               v-hasPermi=\"['system:dict:add']\"\r\n            >新增</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"success\"\r\n               plain\r\n               icon=\"Edit\"\r\n               :disabled=\"single\"\r\n               @click=\"handleUpdate\"\r\n               v-hasPermi=\"['system:dict:edit']\"\r\n            >修改</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"Delete\"\r\n               :disabled=\"multiple\"\r\n               @click=\"handleDelete\"\r\n               v-hasPermi=\"['system:dict:remove']\"\r\n            >删除</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"warning\"\r\n               plain\r\n               icon=\"Download\"\r\n               @click=\"handleExport\"\r\n               v-hasPermi=\"['system:dict:export']\"\r\n            >导出</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"Refresh\"\r\n               @click=\"handleRefreshCache\"\r\n               v-hasPermi=\"['system:dict:remove']\"\r\n            >刷新缓存</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n\r\n      <el-table v-loading=\"loading\" :data=\"typeList\" @selection-change=\"handleSelectionChange\">\r\n         <el-table-column type=\"selection\" width=\"55\" align=\"center\" />\r\n         <el-table-column label=\"字典编号\" align=\"center\" prop=\"dictId\" />\r\n         <el-table-column label=\"字典名称\" align=\"center\" prop=\"dictName\" :show-overflow-tooltip=\"true\"/>\r\n         <el-table-column label=\"字典类型\" align=\"center\" :show-overflow-tooltip=\"true\">\r\n            <template #default=\"scope\">\r\n               <router-link :to=\"'/system/dict-data/index/' + scope.row.dictId\" class=\"link-type\">\r\n                  <span>{{ scope.row.dictType }}</span>\r\n               </router-link>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"状态\" align=\"center\" prop=\"status\">\r\n            <template #default=\"scope\">\r\n               <dict-tag :options=\"sys_normal_disable\" :value=\"scope.row.status\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"备注\" align=\"center\" prop=\"remark\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"180\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.createTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"操作\" align=\"center\" width=\"160\" class-name=\"small-padding fixed-width\">\r\n            <template #default=\"scope\">\r\n               <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['system:dict:edit']\">修改</el-button>\r\n               <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['system:dict:remove']\">删除</el-button>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <pagination\r\n         v-show=\"total > 0\"\r\n         :total=\"total\"\r\n         v-model:page=\"queryParams.pageNum\"\r\n         v-model:limit=\"queryParams.pageSize\"\r\n         @pagination=\"getList\"\r\n      />\r\n\r\n      <!-- 添加或修改参数配置对话框 -->\r\n      <el-dialog :title=\"title\" v-model=\"open\" width=\"500px\" append-to-body>\r\n         <el-form ref=\"dictRef\" :model=\"form\" :rules=\"rules\" label-width=\"80px\">\r\n            <el-form-item label=\"字典名称\" prop=\"dictName\">\r\n               <el-input v-model=\"form.dictName\" placeholder=\"请输入字典名称\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"字典类型\" prop=\"dictType\">\r\n               <el-input v-model=\"form.dictType\" placeholder=\"请输入字典类型\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"状态\" prop=\"status\">\r\n               <el-radio-group v-model=\"form.status\">\r\n                  <el-radio\r\n                     v-for=\"dict in sys_normal_disable\"\r\n                     :key=\"dict.value\"\r\n                     :label=\"dict.value\"\r\n                  >{{ dict.label }}</el-radio>\r\n               </el-radio-group>\r\n            </el-form-item>\r\n            <el-form-item label=\"备注\" prop=\"remark\">\r\n               <el-input v-model=\"form.remark\" type=\"textarea\" placeholder=\"请输入内容\"></el-input>\r\n            </el-form-item>\r\n         </el-form>\r\n         <template #footer>\r\n            <div class=\"dialog-footer\">\r\n               <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n               <el-button @click=\"cancel\">取 消</el-button>\r\n            </div>\r\n         </template>\r\n      </el-dialog>\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Dict\">\r\nimport useDictStore from '@/store/modules/dict'\r\nimport { listType, getType, delType, addType, updateType, refreshCache } from \"@/api/system/dict/type\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_normal_disable } = proxy.useDict(\"sys_normal_disable\");\r\n\r\nconst typeList = ref([]);\r\nconst open = ref(false);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst ids = ref([]);\r\nconst single = ref(true);\r\nconst multiple = ref(true);\r\nconst total = ref(0);\r\nconst title = ref(\"\");\r\nconst dateRange = ref([]);\r\n\r\nconst data = reactive({\r\n  form: {},\r\n  queryParams: {\r\n    pageNum: 1,\r\n    pageSize: 10,\r\n    dictName: undefined,\r\n    dictType: undefined,\r\n    status: undefined\r\n  },\r\n  rules: {\r\n    dictName: [{ required: true, message: \"字典名称不能为空\", trigger: \"blur\" }],\r\n    dictType: [{ required: true, message: \"字典类型不能为空\", trigger: \"blur\" }]\r\n  },\r\n});\r\n\r\nconst { queryParams, form, rules } = toRefs(data);\r\n\r\n/** 查询字典类型列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  listType(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {\r\n    typeList.value = response.rows;\r\n    total.value = response.total;\r\n    loading.value = false;\r\n  });\r\n}\r\n/** 取消按钮 */\r\nfunction cancel() {\r\n  open.value = false;\r\n  reset();\r\n}\r\n/** 表单重置 */\r\nfunction reset() {\r\n  form.value = {\r\n    dictId: undefined,\r\n    dictName: undefined,\r\n    dictType: undefined,\r\n    status: \"1\",\r\n    remark: undefined\r\n  };\r\n  proxy.resetForm(\"dictRef\");\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.value.pageNum = 1;\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  dateRange.value = [];\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\n/** 新增按钮操作 */\r\nfunction handleAdd() {\r\n  reset();\r\n  open.value = true;\r\n  title.value = \"添加字典类型\";\r\n}\r\n/** 多选框选中数据 */\r\nfunction handleSelectionChange(selection) {\r\n  ids.value = selection.map(item => item.dictId);\r\n  single.value = selection.length != 1;\r\n  multiple.value = !selection.length;\r\n}\r\n/** 修改按钮操作 */\r\nfunction handleUpdate(row) {\r\n  reset();\r\n  const dictId = row.dictId || ids.value;\r\n  getType(dictId).then(response => {\r\n    form.value = response.data;\r\n    open.value = true;\r\n    title.value = \"修改字典类型\";\r\n  });\r\n}\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n  proxy.$refs[\"dictRef\"].validate(valid => {\r\n    if (valid) {\r\n      if (form.value.dictId != undefined) {\r\n        updateType(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"修改成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      } else {\r\n        addType(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"新增成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      }\r\n    }\r\n  });\r\n}\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  const dictIds = row.dictId || ids.value;\r\n  proxy.$modal.confirm('是否确认删除字典编号为\"' + dictIds + '\"的数据项？').then(function() {\r\n    return delType(dictIds);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n  }).catch(() => {});\r\n}\r\n/** 导出按钮操作 */\r\nfunction handleExport() {\r\n  proxy.download(\"system/dict/type/export\", {\r\n    ...queryParams.value\r\n  }, `dict_${new Date().getTime()}.xlsx`);\r\n}\r\n/** 刷新缓存按钮操作 */\r\nfunction handleRefreshCache() {\r\n  refreshCache().then(() => {\r\n    proxy.$modal.msgSuccess(\"刷新成功\");\r\n    useDictStore().cleanDict();\r\n  });\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/menu/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\">\r\n         <el-form-item label=\"菜单名称\" prop=\"menuName\">\r\n            <el-input\r\n               v-model=\"queryParams.menuName\"\r\n               placeholder=\"请输入菜单名称\"\r\n               clearable\r\n               style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"状态\" prop=\"status\">\r\n            <el-select v-model=\"queryParams.status\" placeholder=\"菜单状态\" clearable style=\"width: 200px\">\r\n               <el-option\r\n                  v-for=\"dict in sys_normal_disable\"\r\n                  :key=\"dict.value\"\r\n                  :label=\"dict.label\"\r\n                  :value=\"dict.value\"\r\n               />\r\n            </el-select>\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"primary\"\r\n               plain\r\n               icon=\"Plus\"\r\n               @click=\"handleAdd\"\r\n               v-hasPermi=\"['system:menu:add']\"\r\n            >新增</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button \r\n               type=\"info\"\r\n               plain\r\n               icon=\"Sort\"\r\n               @click=\"toggleExpandAll\"\r\n            >展开/折叠</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n\r\n      <el-table\r\n         v-if=\"refreshTable\"\r\n         v-loading=\"loading\"\r\n         :data=\"menuList\"\r\n         row-key=\"menuId\"\r\n         :default-expand-all=\"isExpandAll\"\r\n         :tree-props=\"{ children: 'children', hasChildren: 'hasChildren' }\"\r\n      >\r\n         <el-table-column prop=\"menuName\" label=\"菜单名称\" :show-overflow-tooltip=\"true\" width=\"160\"></el-table-column>\r\n         <el-table-column prop=\"icon\" label=\"图标\" align=\"center\" width=\"100\">\r\n            <template #default=\"scope\">\r\n               <svg-icon :icon-class=\"scope.row.icon\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column prop=\"orderNum\" label=\"排序\" width=\"60\"></el-table-column>\r\n         <el-table-column prop=\"perms\" label=\"权限标识\" :show-overflow-tooltip=\"true\"></el-table-column>\r\n         <el-table-column prop=\"component\" label=\"组件路径\" :show-overflow-tooltip=\"true\"></el-table-column>\r\n         <el-table-column prop=\"status\" label=\"状态\" width=\"80\">\r\n            <template #default=\"scope\">\r\n               <dict-tag :options=\"sys_normal_disable\" :value=\"scope.row.status\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"创建时间\" align=\"center\" width=\"160\" prop=\"createTime\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.createTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"操作\" align=\"center\" width=\"210\" class-name=\"small-padding fixed-width\">\r\n            <template #default=\"scope\">\r\n               <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['system:menu:edit']\">修改</el-button>\r\n               <el-button link type=\"primary\" icon=\"Plus\" @click=\"handleAdd(scope.row)\" v-hasPermi=\"['system:menu:add']\">新增</el-button>\r\n               <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['system:menu:remove']\">删除</el-button>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <!-- 添加或修改菜单对话框 -->\r\n      <el-dialog :title=\"title\" v-model=\"open\" width=\"680px\" append-to-body>\r\n         <el-form ref=\"menuRef\" :model=\"form\" :rules=\"rules\" label-width=\"100px\">\r\n            <el-row>\r\n               <el-col :span=\"24\">\r\n                  <el-form-item label=\"上级菜单\">\r\n                     <el-tree-select\r\n                        v-model=\"form.parentId\"\r\n                        :data=\"menuOptions\"\r\n                        :props=\"{ value: 'menuId', label: 'menuName', children: 'children' }\"\r\n                        value-key=\"menuId\"\r\n                        placeholder=\"选择上级菜单\"\r\n                        check-strictly\r\n                     />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"24\">\r\n                  <el-form-item label=\"菜单类型\" prop=\"menuType\">\r\n                     <el-radio-group v-model=\"form.menuType\">\r\n                        <el-radio label=\"M\">目录</el-radio>\r\n                        <el-radio label=\"C\">菜单</el-radio>\r\n                        <el-radio label=\"F\">按钮</el-radio>\r\n                     </el-radio-group>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"24\" v-if=\"form.menuType != 'F'\">\r\n                  <el-form-item label=\"菜单图标\" prop=\"icon\">\r\n                     <el-popover\r\n                        placement=\"bottom-start\"\r\n                        :width=\"540\"\r\n                        trigger=\"click\"\r\n                     >\r\n                        <template #reference>\r\n                           <el-input v-model=\"form.icon\" placeholder=\"点击选择图标\" @blur=\"showSelectIcon\" readonly>\r\n                              <template #prefix>\r\n                                 <svg-icon\r\n                                    v-if=\"form.icon\"\r\n                                    :icon-class=\"form.icon\"\r\n                                    class=\"el-input__icon\"\r\n                                    style=\"height: 32px;width: 16px;\"\r\n                                 />\r\n                                 <el-icon v-else style=\"height: 32px;width: 16px;\"><search /></el-icon>\r\n                              </template>\r\n                           </el-input>\r\n                        </template>\r\n                        <icon-select ref=\"iconSelectRef\" @selected=\"selected\" :active-icon=\"form.icon\" />\r\n                     </el-popover>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"菜单名称\" prop=\"menuName\">\r\n                     <el-input v-model=\"form.menuName\" placeholder=\"请输入菜单名称\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"显示排序\" prop=\"orderNum\">\r\n                     <el-input-number v-model=\"form.orderNum\" controls-position=\"right\" :min=\"0\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\" v-if=\"form.menuType != 'F'\">\r\n                  <el-form-item>\r\n                     <template #label>\r\n                        <span>\r\n                           <el-tooltip content=\"选择是外链则路由地址需要以`http(s)://`开头\" placement=\"top\">\r\n                              <el-icon><question-filled /></el-icon>\r\n                           </el-tooltip>是否外链\r\n                        </span>\r\n                     </template>\r\n                     <el-radio-group v-model=\"form.isFrame\">\r\n                        <el-radio :label=\"1\">是</el-radio>\r\n                        <el-radio :label=\"0\">否</el-radio>\r\n                     </el-radio-group>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\" v-if=\"form.menuType != 'F'\">\r\n                  <el-form-item prop=\"path\">\r\n                     <template #label>\r\n                        <span>\r\n                           <el-tooltip content=\"访问的路由地址，如：`user`，如外网地址需内链访问则以`http(s)://`开头\" placement=\"top\">\r\n                              <el-icon><question-filled /></el-icon>\r\n                           </el-tooltip>\r\n                           路由地址\r\n                        </span>\r\n                     </template>\r\n                     <el-input v-model=\"form.path\" placeholder=\"请输入路由地址\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\" v-if=\"form.menuType == 'C'\">\r\n                  <el-form-item prop=\"component\">\r\n                     <template #label>\r\n                        <span>\r\n                           <el-tooltip content=\"访问的组件路径，如：`system/user/index`，默认在`views`目录下\" placement=\"top\">\r\n                              <el-icon><question-filled /></el-icon>\r\n                           </el-tooltip>\r\n                           组件路径\r\n                        </span>\r\n                     </template>\r\n                     <el-input v-model=\"form.component\" placeholder=\"请输入组件路径\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\" v-if=\"form.menuType != 'M'\">\r\n                  <el-form-item>\r\n                     <el-input v-model=\"form.perms\" placeholder=\"请输入权限标识\" maxlength=\"100\" />\r\n                     <template #label>\r\n                        <span>\r\n                           <el-tooltip content=\"控制器中定义的权限字符，如：@PreAuthorize(`@ss.hasPermi('system:user:list')`)\" placement=\"top\">\r\n                              <el-icon><question-filled /></el-icon>\r\n                           </el-tooltip>\r\n                           权限字符\r\n                        </span>\r\n                     </template>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\" v-if=\"form.menuType == 'C'\">\r\n                  <el-form-item>\r\n                     <el-input v-model=\"form.query\" placeholder=\"请输入路由参数\" maxlength=\"255\" />\r\n                     <template #label>\r\n                        <span>\r\n                           <el-tooltip content='访问路由的默认传递参数，如：`{\"id\": 1, \"name\": \"ry\"}`' placement=\"top\">\r\n                              <el-icon><question-filled /></el-icon>\r\n                           </el-tooltip>\r\n                           路由参数\r\n                        </span>\r\n                     </template>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\" v-if=\"form.menuType == 'C'\">\r\n                  <el-form-item>\r\n                     <template #label>\r\n                        <span>\r\n                           <el-tooltip content=\"选择是则会被`keep-alive`缓存，需要匹配组件的`name`和地址保持一致\" placement=\"top\">\r\n                              <el-icon><question-filled /></el-icon>\r\n                           </el-tooltip>\r\n                           是否缓存\r\n                        </span>\r\n                     </template>\r\n                     <el-radio-group v-model=\"form.isCache\">\r\n                        <el-radio :label=\"1\">缓存</el-radio>\r\n                        <el-radio :label=\"0\">不缓存</el-radio>\r\n                     </el-radio-group>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\" v-if=\"form.menuType != 'F'\">\r\n                  <el-form-item>\r\n                     <template #label>\r\n                        <span>\r\n                           <el-tooltip content=\"选择隐藏则路由将不会出现在侧边栏，但仍然可以访问\" placement=\"top\">\r\n                              <el-icon><question-filled /></el-icon>\r\n                           </el-tooltip>\r\n                           显示状态\r\n                        </span>\r\n                     </template>\r\n                     <el-radio-group v-model=\"form.visible\">\r\n                        <el-radio\r\n                           v-for=\"dict in sys_show_hide\"\r\n                           :key=\"dict.value\"\r\n                           :label=\"dict.value\"\r\n                        >{{ dict.label }}</el-radio>\r\n                     </el-radio-group>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item>\r\n                     <template #label>\r\n                        <span>\r\n                           <el-tooltip content=\"选择停用则路由将不会出现在侧边栏，也不能被访问\" placement=\"top\">\r\n                              <el-icon><question-filled /></el-icon>\r\n                           </el-tooltip>\r\n                           菜单状态\r\n                        </span>\r\n                     </template>\r\n                     <el-radio-group v-model=\"form.status\">\r\n                        <el-radio\r\n                           v-for=\"dict in sys_normal_disable\"\r\n                           :key=\"dict.value\"\r\n                           :label=\"dict.value\"\r\n                        >{{ dict.label }}</el-radio>\r\n                     </el-radio-group>\r\n                  </el-form-item>\r\n               </el-col>\r\n            </el-row>\r\n         </el-form>\r\n         <template #footer>\r\n            <div class=\"dialog-footer\">\r\n               <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n               <el-button @click=\"cancel\">取 消</el-button>\r\n            </div>\r\n         </template>\r\n      </el-dialog>\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Menu\">\r\nimport { addMenu, delMenu, getMenu, listMenu, updateMenu } from \"@/api/system/menu\";\r\nimport SvgIcon from \"@/components/SvgIcon\";\r\nimport IconSelect from \"@/components/IconSelect\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_show_hide, sys_normal_disable } = proxy.useDict(\"sys_show_hide\", \"sys_normal_disable\");\r\n\r\nconst menuList = ref([]);\r\nconst open = ref(false);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst title = ref(\"\");\r\nconst menuOptions = ref([]);\r\nconst isExpandAll = ref(false);\r\nconst refreshTable = ref(true);\r\nconst iconSelectRef = ref(null);\r\n\r\nconst data = reactive({\r\n  form: {},\r\n  queryParams: {\r\n    menuName: undefined,\r\n    visible: undefined\r\n  },\r\n  rules: {\r\n    menuName: [{ required: true, message: \"菜单名称不能为空\", trigger: \"blur\" }],\r\n    orderNum: [{ required: true, message: \"菜单顺序不能为空\", trigger: \"blur\" }],\r\n    path: [{ required: true, message: \"路由地址不能为空\", trigger: \"blur\" }]\r\n  },\r\n});\r\n\r\nconst { queryParams, form, rules } = toRefs(data);\r\n\r\n/** 查询菜单列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  listMenu(queryParams.value).then(response => {\r\n    menuList.value = proxy.handleTree(response.data, \"menuId\");\r\n    loading.value = false;\r\n  });\r\n}\r\n/** 查询菜单下拉树结构 */\r\nfunction getTreeselect() {\r\n  menuOptions.value = [];\r\n  listMenu().then(response => {\r\n    const menu = { menuId: 0, menuName: \"主类目\", children: [] };\r\n    menu.children = proxy.handleTree(response.data, \"menuId\");\r\n    menuOptions.value.push(menu);\r\n  });\r\n}\r\n/** 取消按钮 */\r\nfunction cancel() {\r\n  open.value = false;\r\n  reset();\r\n}\r\n/** 表单重置 */\r\nfunction reset() {\r\n  form.value = {\r\n    menuId: undefined,\r\n    parentId: 0,\r\n    menuName: undefined,\r\n    icon: undefined,\r\n    menuType: \"M\",\r\n    orderNum: 0,\r\n    isFrame: 0,\r\n    isCache: 1,\r\n    visible: \"1\",\r\n    status: \"1\"\r\n  };\r\n  proxy.resetForm(\"menuRef\");\r\n}\r\n/** 展示下拉图标 */\r\nfunction showSelectIcon() {\r\n  iconSelectRef.value.reset();\r\n}\r\n/** 选择图标 */\r\nfunction selected(name) {\r\n  form.value.icon = name;\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\n/** 新增按钮操作 */\r\nfunction handleAdd(row) {\r\n  reset();\r\n  getTreeselect();\r\n  if (row != null && row.menuId) {\r\n    form.value.parentId = row.menuId;\r\n  } else {\r\n    form.value.parentId = 0;\r\n  }\r\n  open.value = true;\r\n  title.value = \"添加菜单\";\r\n}\r\n/** 展开/折叠操作 */\r\nfunction toggleExpandAll() {\r\n  refreshTable.value = false;\r\n  isExpandAll.value = !isExpandAll.value;\r\n  nextTick(() => {\r\n    refreshTable.value = true;\r\n  });\r\n}\r\n/** 修改按钮操作 */\r\nasync function handleUpdate(row) {\r\n  reset();\r\n  await getTreeselect();\r\n  getMenu(row.menuId).then(response => {\r\n    form.value = response.data;\r\n    open.value = true;\r\n    title.value = \"修改菜单\";\r\n  });\r\n}\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n  proxy.$refs[\"menuRef\"].validate(valid => {\r\n    if (valid) {\r\n      if (form.value.menuId != undefined) {\r\n        updateMenu(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"修改成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      } else {\r\n        addMenu(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"新增成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      }\r\n    }\r\n  });\r\n}\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  proxy.$modal.confirm('是否确认删除名称为\"' + row.menuName + '\"的数据项?').then(function() {\r\n    return delMenu(row.menuId);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n  }).catch(() => {});\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/notice/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\">\r\n         <el-form-item label=\"公告标题\" prop=\"noticeTitle\">\r\n            <el-input\r\n               v-model=\"queryParams.noticeTitle\"\r\n               placeholder=\"请输入公告标题\"\r\n               clearable\r\n               style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"创建者\" prop=\"createBy\">\r\n            <el-input\r\n               v-model=\"queryParams.createBy\"\r\n               placeholder=\"请输入创建者\"\r\n               clearable\r\n               style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"类型\" prop=\"noticeType\">\r\n            <el-select v-model=\"queryParams.noticeType\" placeholder=\"公告类型\" clearable style=\"width: 200px\">\r\n               <el-option\r\n                  v-for=\"dict in sys_notice_type\"\r\n                  :key=\"dict.value\"\r\n                  :label=\"dict.label\"\r\n                  :value=\"dict.value\"\r\n               />\r\n            </el-select>\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"primary\"\r\n               plain\r\n               icon=\"Plus\"\r\n               @click=\"handleAdd\"\r\n               v-hasPermi=\"['system:notice:add']\"\r\n            >新增</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"success\"\r\n               plain\r\n               icon=\"Edit\"\r\n               :disabled=\"single\"\r\n               @click=\"handleUpdate\"\r\n               v-hasPermi=\"['system:notice:edit']\"\r\n            >修改</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"Delete\"\r\n               :disabled=\"multiple\"\r\n               @click=\"handleDelete\"\r\n               v-hasPermi=\"['system:notice:remove']\"\r\n            >删除</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n\r\n      <el-table v-loading=\"loading\" :data=\"noticeList\" @selection-change=\"handleSelectionChange\">\r\n         <el-table-column type=\"selection\" width=\"55\" align=\"center\" />\r\n         <el-table-column label=\"序号\" align=\"center\" prop=\"noticeId\" width=\"100\" />\r\n         <el-table-column\r\n            label=\"公告标题\"\r\n            align=\"center\"\r\n            prop=\"noticeTitle\"\r\n            :show-overflow-tooltip=\"true\"\r\n         />\r\n         <el-table-column label=\"公告类型\" align=\"center\" prop=\"noticeType\" width=\"100\">\r\n            <template #default=\"scope\">\r\n               <dict-tag :options=\"sys_notice_type\" :value=\"scope.row.noticeType\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"状态\" align=\"center\" prop=\"status\" width=\"100\">\r\n            <template #default=\"scope\">\r\n               <dict-tag :options=\"sys_notice_status\" :value=\"scope.row.status\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"创建者\" align=\"center\" prop=\"createBy\" width=\"100\" />\r\n         <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"100\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"操作\" align=\"center\" class-name=\"small-padding fixed-width\">\r\n            <template #default=\"scope\">\r\n               <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['system:notice:edit']\">修改</el-button>\r\n               <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['system:notice:remove']\" >删除</el-button>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <pagination\r\n         v-show=\"total > 0\"\r\n         :total=\"total\"\r\n         v-model:page=\"queryParams.pageNum\"\r\n         v-model:limit=\"queryParams.pageSize\"\r\n         @pagination=\"getList\"\r\n      />\r\n\r\n      <!-- 添加或修改公告对话框 -->\r\n      <el-dialog :title=\"title\" v-model=\"open\" width=\"780px\" append-to-body>\r\n         <el-form ref=\"noticeRef\" :model=\"form\" :rules=\"rules\" label-width=\"80px\">\r\n            <el-row>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"公告标题\" prop=\"noticeTitle\">\r\n                     <el-input v-model=\"form.noticeTitle\" placeholder=\"请输入公告标题\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"公告类型\" prop=\"noticeType\">\r\n                     <el-select v-model=\"form.noticeType\" placeholder=\"请选择\">\r\n                        <el-option\r\n                           v-for=\"dict in sys_notice_type\"\r\n                           :key=\"dict.value\"\r\n                           :label=\"dict.label\"\r\n                           :value=\"dict.value\"\r\n                        ></el-option>\r\n                     </el-select>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"24\">\r\n                  <el-form-item label=\"状态\">\r\n                     <el-radio-group v-model=\"form.status\">\r\n                        <el-radio\r\n                           v-for=\"dict in sys_notice_status\"\r\n                           :key=\"dict.value\"\r\n                           :label=\"dict.value\"\r\n                        >{{ dict.label }}</el-radio>\r\n                     </el-radio-group>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"24\">\r\n                  <el-form-item label=\"内容\">\r\n                    <editor v-model=\"form.noticeContent\" :min-height=\"192\"/>\r\n                  </el-form-item>\r\n               </el-col>\r\n            </el-row>\r\n         </el-form>\r\n         <template #footer>\r\n            <div class=\"dialog-footer\">\r\n               <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n               <el-button @click=\"cancel\">取 消</el-button>\r\n            </div>\r\n         </template>\r\n      </el-dialog>\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Notice\">\r\nimport { listNotice, getNotice, delNotice, addNotice, updateNotice } from \"@/api/system/notice\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_notice_status, sys_notice_type } = proxy.useDict(\"sys_notice_status\", \"sys_notice_type\");\r\n\r\nconst noticeList = ref([]);\r\nconst open = ref(false);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst ids = ref([]);\r\nconst single = ref(true);\r\nconst multiple = ref(true);\r\nconst total = ref(0);\r\nconst title = ref(\"\");\r\n\r\nconst data = reactive({\r\n  form: {},\r\n  queryParams: {\r\n    pageNum: 1,\r\n    pageSize: 10,\r\n    noticeTitle: undefined,\r\n    createBy: undefined,\r\n    status: undefined\r\n  },\r\n  rules: {\r\n    noticeTitle: [{ required: true, message: \"公告标题不能为空\", trigger: \"blur\" }],\r\n    noticeType: [{ required: true, message: \"公告类型不能为空\", trigger: \"change\" }]\r\n  },\r\n});\r\n\r\nconst { queryParams, form, rules } = toRefs(data);\r\n\r\n/** 查询公告列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  listNotice(queryParams.value).then(response => {\r\n    noticeList.value = response.rows;\r\n    total.value = response.total;\r\n    loading.value = false;\r\n  });\r\n}\r\n/** 取消按钮 */\r\nfunction cancel() {\r\n  open.value = false;\r\n  reset();\r\n}\r\n/** 表单重置 */\r\nfunction reset() {\r\n  form.value = {\r\n    noticeId: undefined,\r\n    noticeTitle: undefined,\r\n    noticeType: undefined,\r\n    noticeContent: undefined,\r\n    status: \"1\"\r\n  };\r\n  proxy.resetForm(\"noticeRef\");\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.value.pageNum = 1;\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\n/** 多选框选中数据 */\r\nfunction handleSelectionChange(selection) {\r\n  ids.value = selection.map(item => item.noticeId);\r\n  single.value = selection.length != 1;\r\n  multiple.value = !selection.length;\r\n}\r\n/** 新增按钮操作 */\r\nfunction handleAdd() {\r\n  reset();\r\n  open.value = true;\r\n  title.value = \"添加公告\";\r\n}\r\n/**修改按钮操作 */\r\nfunction handleUpdate(row) {\r\n  reset();\r\n  const noticeId = row.noticeId || ids.value;\r\n  getNotice(noticeId).then(response => {\r\n    form.value = response.data;\r\n    open.value = true;\r\n    title.value = \"修改公告\";\r\n  });\r\n}\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n  proxy.$refs[\"noticeRef\"].validate(valid => {\r\n    if (valid) {\r\n      if (form.value.noticeId != undefined) {\r\n        updateNotice(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"修改成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      } else {\r\n        addNotice(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"新增成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      }\r\n    }\r\n  });\r\n}\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  const noticeIds = row.noticeId || ids.value\r\n  proxy.$modal.confirm('是否确认删除公告编号为\"' + noticeIds + '\"的数据项？').then(function() {\r\n    return delNotice(noticeIds);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n  }).catch(() => {});\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/post/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\">\r\n         <el-form-item label=\"岗位编码\" prop=\"postCode\">\r\n            <el-input\r\n               v-model=\"queryParams.postCode\"\r\n               placeholder=\"请输入岗位编码\"\r\n               clearable\r\n               style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"岗位名称\" prop=\"postName\">\r\n            <el-input\r\n               v-model=\"queryParams.postName\"\r\n               placeholder=\"请输入岗位名称\"\r\n               clearable\r\n               style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"状态\" prop=\"status\">\r\n            <el-select v-model=\"queryParams.status\" placeholder=\"岗位状态\" clearable style=\"width: 200px\">\r\n               <el-option\r\n                  v-for=\"dict in sys_normal_disable\"\r\n                  :key=\"dict.value\"\r\n                  :label=\"dict.label\"\r\n                  :value=\"dict.value\"\r\n               />\r\n            </el-select>\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"primary\"\r\n               plain\r\n               icon=\"Plus\"\r\n               @click=\"handleAdd\"\r\n               v-hasPermi=\"['system:post:add']\"\r\n            >新增</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"success\"\r\n               plain\r\n               icon=\"Edit\"\r\n               :disabled=\"single\"\r\n               @click=\"handleUpdate\"\r\n               v-hasPermi=\"['system:post:edit']\"\r\n            >修改</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"Delete\"\r\n               :disabled=\"multiple\"\r\n               @click=\"handleDelete\"\r\n               v-hasPermi=\"['system:post:remove']\"\r\n            >删除</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"warning\"\r\n               plain\r\n               icon=\"Download\"\r\n               @click=\"handleExport\"\r\n               v-hasPermi=\"['system:post:export']\"\r\n            >导出</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n\r\n      <el-table v-loading=\"loading\" :data=\"postList\" @selection-change=\"handleSelectionChange\">\r\n         <el-table-column type=\"selection\" width=\"55\" align=\"center\" />\r\n         <el-table-column label=\"岗位编号\" align=\"center\" prop=\"postId\" />\r\n         <el-table-column label=\"岗位编码\" align=\"center\" prop=\"postCode\" />\r\n         <el-table-column label=\"岗位名称\" align=\"center\" prop=\"postName\" />\r\n         <el-table-column label=\"岗位排序\" align=\"center\" prop=\"postSort\" />\r\n         <el-table-column label=\"状态\" align=\"center\" prop=\"status\">\r\n            <template #default=\"scope\">\r\n               <dict-tag :options=\"sys_normal_disable\" :value=\"scope.row.status\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"180\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.createTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"操作\" width=\"180\" align=\"center\" class-name=\"small-padding fixed-width\">\r\n            <template #default=\"scope\">\r\n               <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['system:post:edit']\">修改</el-button>\r\n               <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['system:post:remove']\">删除</el-button>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <pagination\r\n         v-show=\"total > 0\"\r\n         :total=\"total\"\r\n         v-model:page=\"queryParams.pageNum\"\r\n         v-model:limit=\"queryParams.pageSize\"\r\n         @pagination=\"getList\"\r\n      />\r\n\r\n      <!-- 添加或修改岗位对话框 -->\r\n      <el-dialog :title=\"title\" v-model=\"open\" width=\"500px\" append-to-body>\r\n         <el-form ref=\"postRef\" :model=\"form\" :rules=\"rules\" label-width=\"80px\">\r\n            <el-form-item label=\"岗位名称\" prop=\"postName\">\r\n               <el-input v-model=\"form.postName\" placeholder=\"请输入岗位名称\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"岗位编码\" prop=\"postCode\">\r\n               <el-input v-model=\"form.postCode\" placeholder=\"请输入编码名称\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"岗位顺序\" prop=\"postSort\">\r\n               <el-input-number v-model=\"form.postSort\" controls-position=\"right\" :min=\"0\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"岗位状态\" prop=\"status\">\r\n               <el-radio-group v-model=\"form.status\">\r\n                  <el-radio\r\n                     v-for=\"dict in sys_normal_disable\"\r\n                     :key=\"dict.value\"\r\n                     :label=\"dict.value\"\r\n                  >{{ dict.label }}</el-radio>\r\n               </el-radio-group>\r\n            </el-form-item>\r\n            <el-form-item label=\"备注\" prop=\"remark\">\r\n               <el-input v-model=\"form.remark\" type=\"textarea\" placeholder=\"请输入内容\" />\r\n            </el-form-item>\r\n         </el-form>\r\n         <template #footer>\r\n            <div class=\"dialog-footer\">\r\n               <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n               <el-button @click=\"cancel\">取 消</el-button>\r\n            </div>\r\n         </template>\r\n      </el-dialog>\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Post\">\r\nimport { listPost, addPost, delPost, getPost, updatePost } from \"@/api/system/post\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_normal_disable } = proxy.useDict(\"sys_normal_disable\");\r\n\r\nconst postList = ref([]);\r\nconst open = ref(false);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst ids = ref([]);\r\nconst single = ref(true);\r\nconst multiple = ref(true);\r\nconst total = ref(0);\r\nconst title = ref(\"\");\r\n\r\nconst data = reactive({\r\n  form: {},\r\n  queryParams: {\r\n    pageNum: 1,\r\n    pageSize: 10,\r\n    postCode: undefined,\r\n    postName: undefined,\r\n    status: undefined\r\n  },\r\n  rules: {\r\n    postName: [{ required: true, message: \"岗位名称不能为空\", trigger: \"blur\" }],\r\n    postCode: [{ required: true, message: \"岗位编码不能为空\", trigger: \"blur\" }],\r\n    postSort: [{ required: true, message: \"岗位顺序不能为空\", trigger: \"blur\" }],\r\n  }\r\n});\r\n\r\nconst { queryParams, form, rules } = toRefs(data);\r\n\r\n/** 查询岗位列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  listPost(queryParams.value).then(response => {\r\n    postList.value = response.rows;\r\n    total.value = response.total;\r\n    loading.value = false;\r\n  });\r\n}\r\n/** 取消按钮 */\r\nfunction cancel() {\r\n  open.value = false;\r\n  reset();\r\n}\r\n/** 表单重置 */\r\nfunction reset() {\r\n  form.value = {\r\n    postId: undefined,\r\n    postCode: undefined,\r\n    postName: undefined,\r\n    postSort: 0,\r\n    status: \"1\",\r\n    remark: undefined\r\n  };\r\n  proxy.resetForm(\"postRef\");\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.value.pageNum = 1;\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\n/** 多选框选中数据 */\r\nfunction handleSelectionChange(selection) {\r\n  ids.value = selection.map(item => item.postId);\r\n  single.value = selection.length != 1;\r\n  multiple.value = !selection.length;\r\n}\r\n/** 新增按钮操作 */\r\nfunction handleAdd() {\r\n  reset();\r\n  open.value = true;\r\n  title.value = \"添加岗位\";\r\n}\r\n/** 修改按钮操作 */\r\nfunction handleUpdate(row) {\r\n  reset();\r\n  const postId = row.postId || ids.value;\r\n  getPost(postId).then(response => {\r\n    form.value = response.data;\r\n    open.value = true;\r\n    title.value = \"修改岗位\";\r\n  });\r\n}\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n  proxy.$refs[\"postRef\"].validate(valid => {\r\n    if (valid) {\r\n      if (form.value.postId != undefined) {\r\n        updatePost(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"修改成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      } else {\r\n        addPost(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"新增成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      }\r\n    }\r\n  });\r\n}\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  const postIds = row.postId || ids.value;\r\n  proxy.$modal.confirm('是否确认删除岗位编号为\"' + postIds + '\"的数据项？').then(function() {\r\n    return delPost(postIds);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n  }).catch(() => {});\r\n}\r\n/** 导出按钮操作 */\r\nfunction handleExport() {\r\n  proxy.download(\"system/post/export\", {\r\n    ...queryParams.value\r\n  }, `post_${new Date().getTime()}.xlsx`);\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/role/authUser.vue",
    "content": "\r\n<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" v-show=\"showSearch\" :inline=\"true\">\r\n         <el-form-item label=\"用户名称\" prop=\"userName\">\r\n            <el-input\r\n               v-model=\"queryParams.userName\"\r\n               placeholder=\"请输入用户名称\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"手机号码\" prop=\"phonenumber\">\r\n            <el-input\r\n               v-model=\"queryParams.phonenumber\"\r\n               placeholder=\"请输入手机号码\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"primary\"\r\n               plain\r\n               icon=\"Plus\"\r\n               @click=\"openSelectUser\"\r\n               v-hasPermi=\"['system:role:add']\"\r\n            >添加用户</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"CircleClose\"\r\n               :disabled=\"multiple\"\r\n               @click=\"cancelAuthUserAll\"\r\n               v-hasPermi=\"['system:role:remove']\"\r\n            >批量取消授权</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button \r\n               type=\"warning\" \r\n               plain \r\n               icon=\"Close\"\r\n               @click=\"handleClose\"\r\n            >关闭</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n\r\n      <el-table v-loading=\"loading\" :data=\"userList\" @selection-change=\"handleSelectionChange\">\r\n         <el-table-column type=\"selection\" width=\"55\" align=\"center\" />\r\n         <el-table-column label=\"用户名称\" prop=\"userName\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"用户昵称\" prop=\"nickName\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"邮箱\" prop=\"email\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"手机\" prop=\"phonenumber\" :show-overflow-tooltip=\"true\" />\r\n         <el-table-column label=\"状态\" align=\"center\" prop=\"status\">\r\n            <template #default=\"scope\">\r\n               <dict-tag :options=\"sys_normal_disable\" :value=\"scope.row.status\" />\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"180\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.createTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"操作\" align=\"center\" class-name=\"small-padding fixed-width\">\r\n            <template #default=\"scope\">\r\n               <el-button link type=\"primary\" icon=\"CircleClose\" @click=\"cancelAuthUser(scope.row)\" v-hasPermi=\"['system:role:remove']\">取消授权</el-button>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <pagination\r\n         v-show=\"total > 0\"\r\n         :total=\"total\"\r\n         v-model:page=\"queryParams.pageNum\"\r\n         v-model:limit=\"queryParams.pageSize\"\r\n         @pagination=\"getList\"\r\n      />\r\n      <select-user ref=\"selectRef\" :roleId=\"queryParams.roleId\" @ok=\"handleQuery\" />\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"AuthUser\">\r\nimport selectUser from \"./selectUser\";\r\nimport { allocatedUserList, authUserCancel, authUserCancelAll } from \"@/api/system/role\";\r\n\r\nconst route = useRoute();\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_normal_disable } = proxy.useDict(\"sys_normal_disable\");\r\n\r\nconst userList = ref([]);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst multiple = ref(true);\r\nconst total = ref(0);\r\nconst userIds = ref([]);\r\n\r\nconst queryParams = reactive({\r\n  pageNum: 1,\r\n  pageSize: 10,\r\n  roleId: route.params.roleId,\r\n  userName: undefined,\r\n  phonenumber: undefined,\r\n});\r\n\r\n/** 查询授权用户列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  allocatedUserList(queryParams).then(response => {\r\n    userList.value = response.rows;\r\n    total.value = response.total;\r\n    loading.value = false;\r\n  });\r\n}\r\n// 返回按钮\r\nfunction handleClose() {\r\n  const obj = { path: \"/system/role\" };\r\n  proxy.$tab.closeOpenPage(obj);\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.pageNum = 1;\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\n// 多选框选中数据\r\nfunction handleSelectionChange(selection) {\r\n  userIds.value = selection.map(item => item.userId);\r\n  multiple.value = !selection.length;\r\n}\r\n/** 打开授权用户表弹窗 */\r\nfunction openSelectUser() {\r\n  proxy.$refs[\"selectRef\"].show();\r\n}\r\n/** 取消授权按钮操作 */\r\nfunction cancelAuthUser(row) {\r\n  proxy.$modal.confirm('确认要取消该用户\"' + row.userName + '\"角色吗？').then(function () {\r\n    return authUserCancel({ userId: row.userId, roleId: queryParams.roleId });\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"取消授权成功\");\r\n  }).catch(() => {});\r\n}\r\n/** 批量取消授权按钮操作 */\r\nfunction cancelAuthUserAll(row) {\r\n  const roleId = queryParams.roleId;\r\n  const uIds = userIds.value.join(\",\");\r\n  proxy.$modal.confirm(\"是否取消选中用户授权数据项?\").then(function () {\r\n    return authUserCancelAll({ roleId: roleId, userIds: uIds });\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"取消授权成功\");\r\n  }).catch(() => {});\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/role/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" v-show=\"showSearch\" :inline=\"true\" label-width=\"68px\">\r\n         <el-form-item label=\"角色名称\" prop=\"roleName\">\r\n            <el-input\r\n               v-model=\"queryParams.roleName\"\r\n               placeholder=\"请输入角色名称\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"权限字符\" prop=\"roleKey\">\r\n            <el-input\r\n               v-model=\"queryParams.roleKey\"\r\n               placeholder=\"请输入权限字符\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"状态\" prop=\"status\">\r\n            <el-select\r\n               v-model=\"queryParams.status\"\r\n               placeholder=\"角色状态\"\r\n               clearable\r\n               style=\"width: 240px\"\r\n            >\r\n               <el-option\r\n                  v-for=\"dict in sys_normal_disable\"\r\n                  :key=\"dict.value\"\r\n                  :label=\"dict.label\"\r\n                  :value=\"dict.value\"\r\n               />\r\n            </el-select>\r\n         </el-form-item>\r\n         <el-form-item label=\"创建时间\" style=\"width: 308px\">\r\n            <el-date-picker\r\n               v-model=\"dateRange\"\r\n               value-format=\"YYYY-MM-DD\"\r\n               type=\"daterange\"\r\n               range-separator=\"-\"\r\n               start-placeholder=\"开始日期\"\r\n               end-placeholder=\"结束日期\"\r\n            ></el-date-picker>\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n      <el-row :gutter=\"10\" class=\"mb8\">\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"primary\"\r\n               plain\r\n               icon=\"Plus\"\r\n               @click=\"handleAdd\"\r\n               v-hasPermi=\"['system:role:add']\"\r\n            >新增</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"success\"\r\n               plain\r\n               icon=\"Edit\"\r\n               :disabled=\"single\"\r\n               @click=\"handleUpdate\"\r\n               v-hasPermi=\"['system:role:edit']\"\r\n            >修改</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"danger\"\r\n               plain\r\n               icon=\"Delete\"\r\n               :disabled=\"multiple\"\r\n               @click=\"handleDelete\"\r\n               v-hasPermi=\"['system:role:remove']\"\r\n            >删除</el-button>\r\n         </el-col>\r\n         <el-col :span=\"1.5\">\r\n            <el-button\r\n               type=\"warning\"\r\n               plain\r\n               icon=\"Download\"\r\n               @click=\"handleExport\"\r\n               v-hasPermi=\"['system:role:export']\"\r\n            >导出</el-button>\r\n         </el-col>\r\n         <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n      </el-row>\r\n\r\n      <!-- 表格数据 -->\r\n      <el-table v-loading=\"loading\" :data=\"roleList\" @selection-change=\"handleSelectionChange\">\r\n         <el-table-column type=\"selection\" width=\"55\" align=\"center\" />\r\n         <el-table-column label=\"角色编号\" prop=\"roleId\" width=\"120\" />\r\n         <el-table-column label=\"角色名称\" prop=\"roleName\" :show-overflow-tooltip=\"true\" width=\"150\" />\r\n         <el-table-column label=\"权限字符\" prop=\"roleKey\" :show-overflow-tooltip=\"true\" width=\"150\" />\r\n         <el-table-column label=\"显示顺序\" prop=\"roleSort\" width=\"100\" />\r\n         <el-table-column label=\"状态\" align=\"center\" width=\"100\">\r\n            <template #default=\"scope\">\r\n               <el-switch\r\n                  v-model=\"scope.row.status\"\r\n                  active-value=\"1\"\r\n                  inactive-value=\"0\"\r\n                  @change=\"handleStatusChange(scope.row)\"\r\n               ></el-switch>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.createTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column label=\"操作\" align=\"center\" class-name=\"small-padding fixed-width\">\r\n            <template #default=\"scope\">\r\n              <el-tooltip content=\"修改\" placement=\"top\" v-if=\"scope.row.roleId !== 1\">\r\n                <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['system:role:edit']\"></el-button>\r\n              </el-tooltip>\r\n              <el-tooltip content=\"删除\" placement=\"top\" v-if=\"scope.row.roleId !== 1\">\r\n                <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['system:role:remove']\"></el-button>\r\n              </el-tooltip>\r\n              <el-tooltip content=\"数据权限\" placement=\"top\" v-if=\"scope.row.roleId !== 1\">\r\n                <el-button link type=\"primary\" icon=\"CircleCheck\" @click=\"handleDataScope(scope.row)\" v-hasPermi=\"['system:role:edit']\"></el-button>\r\n              </el-tooltip>\r\n              <el-tooltip content=\"分配用户\" placement=\"top\" v-if=\"scope.row.roleId !== 1\">\r\n                <el-button link type=\"primary\" icon=\"User\" @click=\"handleAuthUser(scope.row)\" v-hasPermi=\"['system:role:edit']\"></el-button>\r\n              </el-tooltip>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <pagination\r\n         v-show=\"total > 0\"\r\n         :total=\"total\"\r\n         v-model:page=\"queryParams.pageNum\"\r\n         v-model:limit=\"queryParams.pageSize\"\r\n         @pagination=\"getList\"\r\n      />\r\n\r\n      <!-- 添加或修改角色配置对话框 -->\r\n      <el-dialog :title=\"title\" v-model=\"open\" width=\"500px\" append-to-body>\r\n         <el-form ref=\"roleRef\" :model=\"form\" :rules=\"rules\" label-width=\"100px\">\r\n            <el-form-item label=\"角色名称\" prop=\"roleName\">\r\n               <el-input v-model=\"form.roleName\" placeholder=\"请输入角色名称\" />\r\n            </el-form-item>\r\n            <el-form-item prop=\"roleKey\">\r\n               <template #label>\r\n                  <span>\r\n                     <el-tooltip content=\"控制器中定义的权限字符，如：@RequireRole('admin')\" placement=\"top\">\r\n                        <el-icon><question-filled /></el-icon>\r\n                     </el-tooltip>\r\n                     权限字符\r\n                  </span>\r\n               </template>\r\n               <el-input v-model=\"form.roleKey\" placeholder=\"请输入权限字符\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"角色顺序\" prop=\"roleSort\">\r\n               <el-input-number v-model=\"form.roleSort\" controls-position=\"right\" :min=\"0\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"状态\">\r\n               <el-radio-group v-model=\"form.status\">\r\n                  <el-radio\r\n                     v-for=\"dict in sys_normal_disable\"\r\n                     :key=\"dict.value\"\r\n                     :label=\"dict.value\"\r\n                  >{{ dict.label }}</el-radio>\r\n               </el-radio-group>\r\n            </el-form-item>\r\n            <el-form-item label=\"菜单权限\">\r\n               <el-checkbox v-model=\"menuExpand\" @change=\"handleCheckedTreeExpand($event, 'menu')\">展开/折叠</el-checkbox>\r\n               <el-checkbox v-model=\"menuNodeAll\" @change=\"handleCheckedTreeNodeAll($event, 'menu')\">全选/全不选</el-checkbox>\r\n               <el-checkbox v-model=\"form.menuCheckStrictly\" @change=\"handleCheckedTreeConnect($event, 'menu')\">父子联动</el-checkbox>\r\n               <el-tree\r\n                  class=\"tree-border\"\r\n                  :data=\"menuOptions\"\r\n                  show-checkbox\r\n                  ref=\"menuRef\"\r\n                  node-key=\"id\"\r\n                  :check-strictly=\"!form.menuCheckStrictly\"\r\n                  empty-text=\"加载中，请稍候\"\r\n                  :props=\"{ label: 'label', children: 'children' }\"\r\n               ></el-tree>\r\n            </el-form-item>\r\n            <el-form-item label=\"备注\">\r\n               <el-input v-model=\"form.remark\" type=\"textarea\" placeholder=\"请输入内容\"></el-input>\r\n            </el-form-item>\r\n         </el-form>\r\n         <template #footer>\r\n            <div class=\"dialog-footer\">\r\n               <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n               <el-button @click=\"cancel\">取 消</el-button>\r\n            </div>\r\n         </template>\r\n      </el-dialog>\r\n\r\n      <!-- 分配角色数据权限对话框 -->\r\n      <el-dialog :title=\"title\" v-model=\"openDataScope\" width=\"500px\" append-to-body>\r\n         <el-form :model=\"form\" label-width=\"80px\">\r\n            <el-form-item label=\"角色名称\">\r\n               <el-input v-model=\"form.roleName\" :disabled=\"true\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"权限字符\">\r\n               <el-input v-model=\"form.roleKey\" :disabled=\"true\" />\r\n            </el-form-item>\r\n            <el-form-item label=\"权限范围\">\r\n               <el-select v-model=\"form.dataScope\" @change=\"dataScopeSelectChange\">\r\n                  <el-option\r\n                     v-for=\"item in dataScopeOptions\"\r\n                     :key=\"item.value\"\r\n                     :label=\"item.label\"\r\n                     :value=\"item.value\"\r\n                  ></el-option>\r\n               </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"数据权限\" v-show=\"form.dataScope == 2\">\r\n               <el-checkbox v-model=\"deptExpand\" @change=\"handleCheckedTreeExpand($event, 'dept')\">展开/折叠</el-checkbox>\r\n               <el-checkbox v-model=\"deptNodeAll\" @change=\"handleCheckedTreeNodeAll($event, 'dept')\">全选/全不选</el-checkbox>\r\n               <el-checkbox v-model=\"form.deptCheckStrictly\" @change=\"handleCheckedTreeConnect($event, 'dept')\">父子联动</el-checkbox>\r\n               <el-tree\r\n                  class=\"tree-border\"\r\n                  :data=\"deptOptions\"\r\n                  show-checkbox\r\n                  default-expand-all\r\n                  ref=\"deptRef\"\r\n                  node-key=\"id\"\r\n                  :check-strictly=\"!form.deptCheckStrictly\"\r\n                  empty-text=\"加载中，请稍候\"\r\n                  :props=\"{ label: 'label', children: 'children' }\"\r\n               ></el-tree>\r\n            </el-form-item>\r\n         </el-form>\r\n         <template #footer>\r\n            <div class=\"dialog-footer\">\r\n               <el-button type=\"primary\" @click=\"submitDataScope\">确 定</el-button>\r\n               <el-button @click=\"cancelDataScope\">取 消</el-button>\r\n            </div>\r\n         </template>\r\n      </el-dialog>\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Role\">\r\nimport { addRole, changeRoleStatus, dataScope, delRole, getRole, listRole, updateRole, deptTreeSelect } from \"@/api/system/role\";\r\nimport { roleMenuTreeselect, treeselect as menuTreeselect } from \"@/api/system/menu\";\r\n\r\nconst router = useRouter();\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_normal_disable } = proxy.useDict(\"sys_normal_disable\");\r\n\r\nconst roleList = ref([]);\r\nconst open = ref(false);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst ids = ref([]);\r\nconst single = ref(true);\r\nconst multiple = ref(true);\r\nconst total = ref(0);\r\nconst title = ref(\"\");\r\nconst dateRange = ref([]);\r\nconst menuOptions = ref([]);\r\nconst menuExpand = ref(false);\r\nconst menuNodeAll = ref(false);\r\nconst deptExpand = ref(true);\r\nconst deptNodeAll = ref(false);\r\nconst deptOptions = ref([]);\r\nconst openDataScope = ref(false);\r\nconst menuRef = ref(null);\r\nconst deptRef = ref(null);\r\n\r\n/** 数据范围选项*/\r\nconst dataScopeOptions = ref([\r\n  { value: \"1\", label: \"全部数据权限\" },\r\n  { value: \"2\", label: \"自定数据权限\" },\r\n  { value: \"3\", label: \"本部门数据权限\" },\r\n  { value: \"4\", label: \"本部门及以下数据权限\" },\r\n  { value: \"5\", label: \"仅本人数据权限\" }\r\n]);\r\n\r\nconst data = reactive({\r\n  form: {},\r\n  queryParams: {\r\n    pageNum: 1,\r\n    pageSize: 10,\r\n    roleName: undefined,\r\n    roleKey: undefined,\r\n    status: undefined\r\n  },\r\n  rules: {\r\n    roleName: [{ required: true, message: \"角色名称不能为空\", trigger: \"blur\" }],\r\n    roleKey: [{ required: true, message: \"权限字符不能为空\", trigger: \"blur\" }],\r\n    roleSort: [{ required: true, message: \"角色顺序不能为空\", trigger: \"blur\" }]\r\n  },\r\n});\r\n\r\nconst { queryParams, form, rules } = toRefs(data);\r\n\r\n/** 查询角色列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  listRole(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {\r\n    roleList.value = response.rows;\r\n    total.value = response.total;\r\n    loading.value = false;\r\n  });\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.value.pageNum = 1;\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  dateRange.value = [];\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  const roleIds = row.roleId || ids.value;\r\n  proxy.$modal.confirm('是否确认删除角色编号为\"' + roleIds + '\"的数据项?').then(function () {\r\n    return delRole(roleIds);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n  }).catch(() => {});\r\n}\r\n/** 导出按钮操作 */\r\nfunction handleExport() {\r\n  proxy.download(\"system/role/export\", {\r\n    ...queryParams.value,\r\n  }, `role_${new Date().getTime()}.xlsx`);\r\n}\r\n/** 多选框选中数据 */\r\nfunction handleSelectionChange(selection) {\r\n  ids.value = selection.map(item => item.roleId);\r\n  single.value = selection.length != 1;\r\n  multiple.value = !selection.length;\r\n}\r\n/** 角色状态修改 */\r\nfunction handleStatusChange(row) {\r\n  let text = row.status === \"1\" ? \"启用\" : \"停用\";\r\n  proxy.$modal.confirm('确认要\"' + text + '\"\"' + row.roleName + '\"角色吗?').then(function () {\r\n    return changeRoleStatus(row.roleId, row.status);\r\n  }).then(() => {\r\n    proxy.$modal.msgSuccess(text + \"成功\");\r\n  }).catch(function () {\r\n    row.status = row.status === \"0\" ? \"1\" : \"0\";\r\n  });\r\n}\r\n/** 更多操作 */\r\nfunction handleCommand(command, row) {\r\n  switch (command) {\r\n    case \"handleDataScope\":\r\n      handleDataScope(row);\r\n      break;\r\n    case \"handleAuthUser\":\r\n      handleAuthUser(row);\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n}\r\n/** 分配用户 */\r\nfunction handleAuthUser(row) {\r\n  router.push(\"/system/role-auth/user/\" + row.roleId);\r\n}\r\n/** 查询菜单树结构 */\r\nfunction getMenuTreeselect() {\r\n  menuTreeselect().then(response => {\r\n    menuOptions.value = response.data;\r\n  });\r\n}\r\n/** 所有部门节点数据 */\r\nfunction getDeptAllCheckedKeys() {\r\n  // 目前被选中的部门节点\r\n  let checkedKeys = deptRef.value.getCheckedKeys();\r\n  // 半选中的部门节点\r\n  let halfCheckedKeys = deptRef.value.getHalfCheckedKeys();\r\n  checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);\r\n  return checkedKeys;\r\n}\r\n/** 重置新增的表单以及其他数据  */\r\nfunction reset() {\r\n  if (menuRef.value != undefined) {\r\n    menuRef.value.setCheckedKeys([]);\r\n  }\r\n  menuExpand.value = false;\r\n  menuNodeAll.value = false;\r\n  deptExpand.value = true;\r\n  deptNodeAll.value = false;\r\n  form.value = {\r\n    roleId: undefined,\r\n    roleName: undefined,\r\n    roleKey: undefined,\r\n    roleSort: 0,\r\n    status: \"1\",\r\n    menuIds: [],\r\n    deptIds: [],\r\n    menuCheckStrictly: true,\r\n    deptCheckStrictly: true,\r\n    remark: undefined\r\n  };\r\n  proxy.resetForm(\"roleRef\");\r\n}\r\n/** 添加角色 */\r\nfunction handleAdd() {\r\n  reset();\r\n  getMenuTreeselect();\r\n  open.value = true;\r\n  title.value = \"添加角色\";\r\n}\r\n/** 修改角色 */\r\nfunction handleUpdate(row) {\r\n  reset();\r\n  const roleId = row.roleId || ids.value;\r\n  const roleMenu = getRoleMenuTreeselect(roleId);\r\n  getRole(roleId).then(response => {\r\n    form.value = response.data;\r\n    form.value.roleSort = Number(form.value.roleSort);\r\n    open.value = true;\r\n    nextTick(() => {\r\n      roleMenu.then((res) => {\r\n        let checkedKeys = res.checkedKeys;\r\n        checkedKeys.forEach((v) => {\r\n          nextTick(() => {\r\n            menuRef.value.setChecked(v, true, false);\r\n          });\r\n        });\r\n      });\r\n    });\r\n    title.value = \"修改角色\";\r\n  });\r\n}\r\n/** 根据角色ID查询菜单树结构 */\r\nfunction getRoleMenuTreeselect(roleId) {\r\n  return roleMenuTreeselect(roleId).then(response => {\r\n    menuOptions.value = response.menus;\r\n    return response;\r\n  });\r\n}\r\n/** 根据角色ID查询部门树结构 */\r\nfunction getDeptTree(roleId) {\r\n  return deptTreeSelect(roleId).then(response => {\r\n    deptOptions.value = response.depts;\r\n    return response;\r\n  });\r\n}\r\n/** 树权限（展开/折叠）*/\r\nfunction handleCheckedTreeExpand(value, type) {\r\n  if (type == \"menu\") {\r\n    let treeList = menuOptions.value;\r\n    for (let i = 0; i < treeList.length; i++) {\r\n      menuRef.value.store.nodesMap[treeList[i].id].expanded = value;\r\n    }\r\n  } else if (type == \"dept\") {\r\n    let treeList = deptOptions.value;\r\n    for (let i = 0; i < treeList.length; i++) {\r\n      deptRef.value.store.nodesMap[treeList[i].id].expanded = value;\r\n    }\r\n  }\r\n}\r\n/** 树权限（全选/全不选） */\r\nfunction handleCheckedTreeNodeAll(value, type) {\r\n  if (type == \"menu\") {\r\n    menuRef.value.setCheckedNodes(value ? menuOptions.value : []);\r\n  } else if (type == \"dept\") {\r\n    deptRef.value.setCheckedNodes(value ? deptOptions.value : []);\r\n  }\r\n}\r\n/** 树权限（父子联动） */\r\nfunction handleCheckedTreeConnect(value, type) {\r\n  if (type == \"menu\") {\r\n    form.value.menuCheckStrictly = value ? true : false;\r\n  } else if (type == \"dept\") {\r\n    form.value.deptCheckStrictly = value ? true : false;\r\n  }\r\n}\r\n/** 所有菜单节点数据 */\r\nfunction getMenuAllCheckedKeys() {\r\n  // 目前被选中的菜单节点\r\n  let checkedKeys = menuRef.value.getCheckedKeys();\r\n  // 半选中的菜单节点\r\n  let halfCheckedKeys = menuRef.value.getHalfCheckedKeys();\r\n  checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);\r\n  return checkedKeys;\r\n}\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n  proxy.$refs[\"roleRef\"].validate(valid => {\r\n    if (valid) {\r\n      if (form.value.roleId != undefined) {\r\n        form.value.menuIds = getMenuAllCheckedKeys();\r\n        updateRole(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"修改成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      } else {\r\n        form.value.menuIds = getMenuAllCheckedKeys();\r\n        addRole(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"新增成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      }\r\n    }\r\n  });\r\n}\r\n/** 取消按钮 */\r\nfunction cancel() {\r\n  open.value = false;\r\n  reset();\r\n}\r\n/** 选择角色权限范围触发 */\r\nfunction dataScopeSelectChange(value) {\r\n  if (value !== \"2\") {\r\n    deptRef.value.setCheckedKeys([]);\r\n  }\r\n}\r\n/** 分配数据权限操作 */\r\nfunction handleDataScope(row) {\r\n  reset();\r\n  const deptTreeSelect = getDeptTree(row.roleId);\r\n  getRole(row.roleId).then(response => {\r\n    form.value = response.data;\r\n    openDataScope.value = true;\r\n    nextTick(() => {\r\n      deptTreeSelect.then(res => {\r\n        nextTick(() => {\r\n          if (deptRef.value) {\r\n            deptRef.value.setCheckedKeys(res.checkedKeys);\r\n          }\r\n        });\r\n      });\r\n    });\r\n    title.value = \"分配数据权限\";\r\n  });\r\n}\r\n/** 提交按钮（数据权限） */\r\nfunction submitDataScope() {\r\n  if (form.value.roleId != undefined) {\r\n    form.value.deptIds = getDeptAllCheckedKeys();\r\n    dataScope(form.value).then(response => {\r\n      proxy.$modal.msgSuccess(\"修改成功\");\r\n      openDataScope.value = false;\r\n      getList();\r\n    });\r\n  }\r\n}\r\n/** 取消按钮（数据权限）*/\r\nfunction cancelDataScope() {\r\n  openDataScope.value = false;\r\n  reset();\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/role/selectUser.vue",
    "content": "<template>\r\n   <!-- 授权用户 -->\r\n   <el-dialog title=\"选择用户\" v-model=\"visible\" width=\"800px\" top=\"5vh\" append-to-body>\r\n      <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\">\r\n         <el-form-item label=\"用户名称\" prop=\"userName\">\r\n            <el-input\r\n               v-model=\"queryParams.userName\"\r\n               placeholder=\"请输入用户名称\"\r\n               clearable\r\n               style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item label=\"手机号码\" prop=\"phonenumber\">\r\n            <el-input\r\n               v-model=\"queryParams.phonenumber\"\r\n               placeholder=\"请输入手机号码\"\r\n               clearable\r\n               style=\"width: 200px\"\r\n               @keyup.enter=\"handleQuery\"\r\n            />\r\n         </el-form-item>\r\n         <el-form-item>\r\n            <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n            <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n         </el-form-item>\r\n      </el-form>\r\n      <el-row>\r\n         <el-table @row-click=\"clickRow\" ref=\"refTable\" :data=\"userList\" @selection-change=\"handleSelectionChange\" height=\"260px\">\r\n            <el-table-column type=\"selection\" width=\"55\"></el-table-column>\r\n            <el-table-column label=\"用户名称\" prop=\"userName\" :show-overflow-tooltip=\"true\" />\r\n            <el-table-column label=\"用户昵称\" prop=\"nickName\" :show-overflow-tooltip=\"true\" />\r\n            <el-table-column label=\"邮箱\" prop=\"email\" :show-overflow-tooltip=\"true\" />\r\n            <el-table-column label=\"手机\" prop=\"phonenumber\" :show-overflow-tooltip=\"true\" />\r\n            <el-table-column label=\"状态\" align=\"center\" prop=\"status\">\r\n               <template #default=\"scope\">\r\n                  <dict-tag :options=\"sys_normal_disable\" :value=\"scope.row.status\" />\r\n               </template>\r\n            </el-table-column>\r\n            <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"180\">\r\n               <template #default=\"scope\">\r\n                  <span>{{ parseTime(scope.row.createTime) }}</span>\r\n               </template>\r\n            </el-table-column>\r\n         </el-table>\r\n         <pagination\r\n            v-show=\"total > 0\"\r\n            :total=\"total\"\r\n            v-model:page=\"queryParams.pageNum\"\r\n            v-model:limit=\"queryParams.pageSize\"\r\n            @pagination=\"getList\"\r\n         />\r\n      </el-row>\r\n      <template #footer>\r\n         <div class=\"dialog-footer\">\r\n            <el-button type=\"primary\" @click=\"handleSelectUser\">确 定</el-button>\r\n            <el-button @click=\"visible = false\">取 消</el-button>\r\n         </div>\r\n      </template>\r\n   </el-dialog>\r\n</template>\r\n\r\n<script setup name=\"SelectUser\">\r\nimport { authUserSelectAll, unallocatedUserList } from \"@/api/system/role\";\r\n\r\nconst props = defineProps({\r\n  roleId: {\r\n    type: [Number, String]\r\n  }\r\n});\r\n\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_normal_disable } = proxy.useDict(\"sys_normal_disable\");\r\n\r\nconst userList = ref([]);\r\nconst visible = ref(false);\r\nconst total = ref(0);\r\nconst userIds = ref([]);\r\n\r\nconst queryParams = reactive({\r\n  pageNum: 1,\r\n  pageSize: 10,\r\n  roleId: undefined,\r\n  userName: undefined,\r\n  phonenumber: undefined\r\n});\r\n\r\n// 显示弹框\r\nfunction show() {\r\n  queryParams.roleId = props.roleId;\r\n  getList();\r\n  visible.value = true;\r\n}\r\n/**选择行 */\r\nfunction clickRow(row) {\r\n  proxy.$refs[\"refTable\"].toggleRowSelection(row);\r\n}\r\n// 多选框选中数据\r\nfunction handleSelectionChange(selection) {\r\n  userIds.value = selection.map(item => item.userId);\r\n}\r\n// 查询表数据\r\nfunction getList() {\r\n  unallocatedUserList(queryParams).then(res => {\r\n    userList.value = res.rows;\r\n    total.value = res.total;\r\n  });\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.pageNum = 1;\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\nconst emit = defineEmits([\"ok\"]);\r\n/** 选择授权用户操作 */\r\nfunction handleSelectUser() {\r\n  const roleId = queryParams.roleId;\r\n  const uIds = userIds.value.join(\",\");\r\n  if (uIds == \"\") {\r\n    proxy.$modal.msgError(\"请选择要分配的用户\");\r\n    return;\r\n  }\r\n  authUserSelectAll({ roleId: roleId, userIds: uIds }).then(res => {\r\n    proxy.$modal.msgSuccess(res.msg);\r\n    if (res.code === 200) {\r\n      visible.value = false;\r\n      emit(\"ok\");\r\n    }\r\n  });\r\n}\r\n\r\ndefineExpose({\r\n  show,\r\n});\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/user/authRole.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <h4 class=\"form-header h4\">基本信息</h4>\r\n      <el-form :model=\"form\" label-width=\"80px\">\r\n         <el-row>\r\n            <el-col :span=\"8\" :offset=\"2\">\r\n               <el-form-item label=\"用户昵称\" prop=\"nickName\">\r\n                  <el-input v-model=\"form.nickName\" disabled />\r\n               </el-form-item>\r\n            </el-col>\r\n            <el-col :span=\"8\" :offset=\"2\">\r\n               <el-form-item label=\"登录账号\" prop=\"userName\">\r\n                  <el-input v-model=\"form.userName\" disabled />\r\n               </el-form-item>\r\n            </el-col>\r\n         </el-row>\r\n      </el-form>\r\n\r\n      <h4 class=\"form-header h4\">角色信息</h4>\r\n      <el-table v-loading=\"loading\" :row-key=\"getRowKey\" @row-click=\"clickRow\" ref=\"roleRef\"\r\n         @selection-change=\"handleSelectionChange\" :data=\"roles.slice((pageNum - 1) * pageSize, pageNum * pageSize)\">\r\n         <el-table-column label=\"序号\" width=\"55\" type=\"index\" align=\"center\">\r\n            <template #default=\"scope\">\r\n               <span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span>\r\n            </template>\r\n         </el-table-column>\r\n         <el-table-column type=\"selection\" :reserve-selection=\"true\" width=\"55\"></el-table-column>\r\n         <el-table-column label=\"角色编号\" align=\"center\" prop=\"roleId\" />\r\n         <el-table-column label=\"角色名称\" align=\"center\" prop=\"roleName\" />\r\n         <el-table-column label=\"权限字符\" align=\"center\" prop=\"roleKey\" />\r\n         <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"180\">\r\n            <template #default=\"scope\">\r\n               <span>{{ parseTime(scope.row.createTime) }}</span>\r\n            </template>\r\n         </el-table-column>\r\n      </el-table>\r\n\r\n      <pagination v-show=\"total > 0\" :total=\"total\" v-model:page=\"pageNum\" v-model:limit=\"pageSize\" />\r\n\r\n      <el-form label-width=\"100px\">\r\n         <div style=\"text-align: center;margin-left:-120px;margin-top:30px;\">\r\n            <el-button type=\"primary\" @click=\"submitForm()\">提交</el-button>\r\n            <el-button @click=\"close()\">返回</el-button>\r\n         </div>\r\n      </el-form>\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"AuthRole\">\r\nimport { getAuthRole, updateAuthRole } from \"@/api/system/user\";\r\nimport { nextTick } from \"vue\";\r\n\r\nconst route = useRoute();\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst loading = ref(true);\r\nconst total = ref(0);\r\nconst pageNum = ref(1);\r\nconst pageSize = ref(10);\r\nconst roleIds = ref([]);\r\nconst roles = ref([]);\r\nconst form = ref({\r\n   nickName: undefined,\r\n   userName: undefined,\r\n   userId: undefined\r\n});\r\n\r\n/** 单击选中行数据 */\r\nfunction clickRow(row) {\r\n   proxy.$refs[\"roleRef\"].toggleRowSelection(row);\r\n};\r\n/** 多选框选中数据 */\r\nfunction handleSelectionChange(selection) {\r\n   roleIds.value = selection.map(item => item.roleId);\r\n};\r\n/** 保存选中的数据编号 */\r\nfunction getRowKey(row) {\r\n   return row.roleId;\r\n};\r\n/** 关闭按钮 */\r\nfunction close() {\r\n   const obj = { path: \"/system/user\" };\r\n   proxy.$tab.closeOpenPage(obj);\r\n};\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n   const userId = form.value.userId;\r\n   const rIds = roleIds.value.join(\",\");\r\n   updateAuthRole({ userId: userId, roleIds: rIds }).then(response => {\r\n      proxy.$modal.msgSuccess(\"授权成功\");\r\n      close();\r\n   });\r\n};\r\n\r\n(() => {\r\n   const userId = route.params && route.params.userId;\r\n   if (userId) {\r\n      loading.value = true;\r\n      getAuthRole(userId).then(response => {\r\n         form.value = response.user;\r\n         roles.value = response.roles;\r\n         total.value = roles.value.length;\r\n         nextTick(() => { \r\n            roles.value.forEach(row => {\r\n               if (row.flag) {\r\n                  proxy.$refs[\"roleRef\"].toggleRowSelection(row);\r\n               }\r\n            });\r\n         })\r\n         loading.value = false;\r\n      });\r\n   }\r\n})()\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/user/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-row :gutter=\"20\">\r\n         <!--部门数据-->\r\n         <el-col :span=\"4\" :xs=\"24\">\r\n            <div class=\"head-container\">\r\n               <el-input\r\n                  v-model=\"deptName\"\r\n                  placeholder=\"请输入部门名称\"\r\n                  clearable\r\n                  prefix-icon=\"Search\"\r\n                  style=\"margin-bottom: 20px\"\r\n               />\r\n            </div>\r\n            <div class=\"head-container\">\r\n               <el-tree\r\n                  :data=\"deptOptions\"\r\n                  :props=\"{ label: 'label', children: 'children' }\"\r\n                  :expand-on-click-node=\"false\"\r\n                  :filter-node-method=\"filterNode\"\r\n                  ref=\"deptTreeRef\"\r\n                  node-key=\"id\"\r\n                  highlight-current\r\n                  default-expand-all\r\n                  @node-click=\"handleNodeClick\"\r\n               />\r\n            </div>\r\n         </el-col>\r\n         <!--用户数据-->\r\n         <el-col :span=\"20\" :xs=\"24\">\r\n            <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\" label-width=\"68px\">\r\n               <el-form-item label=\"用户名称\" prop=\"userName\">\r\n                  <el-input\r\n                     v-model=\"queryParams.userName\"\r\n                     placeholder=\"请输入用户名称\"\r\n                     clearable\r\n                     style=\"width: 240px\"\r\n                     @keyup.enter=\"handleQuery\"\r\n                  />\r\n               </el-form-item>\r\n               <el-form-item label=\"手机号码\" prop=\"phonenumber\">\r\n                  <el-input\r\n                     v-model=\"queryParams.phonenumber\"\r\n                     placeholder=\"请输入手机号码\"\r\n                     clearable\r\n                     style=\"width: 240px\"\r\n                     @keyup.enter=\"handleQuery\"\r\n                  />\r\n               </el-form-item>\r\n               <el-form-item label=\"状态\" prop=\"status\">\r\n                  <el-select\r\n                     v-model=\"queryParams.status\"\r\n                     placeholder=\"用户状态\"\r\n                     clearable\r\n                     style=\"width: 240px\"\r\n                  >\r\n                     <el-option\r\n                        v-for=\"dict in sys_normal_disable\"\r\n                        :key=\"dict.value\"\r\n                        :label=\"dict.label\"\r\n                        :value=\"dict.value\"\r\n                     />\r\n                  </el-select>\r\n               </el-form-item>\r\n               <el-form-item label=\"创建时间\" style=\"width: 308px;\">\r\n                  <el-date-picker\r\n                     v-model=\"dateRange\"\r\n                     value-format=\"YYYY-MM-DD\"\r\n                     type=\"daterange\"\r\n                     range-separator=\"-\"\r\n                     start-placeholder=\"开始日期\"\r\n                     end-placeholder=\"结束日期\"\r\n                  ></el-date-picker>\r\n               </el-form-item>\r\n               <el-form-item>\r\n                  <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n                  <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n               </el-form-item>\r\n            </el-form>\r\n\r\n            <el-row :gutter=\"10\" class=\"mb8\">\r\n               <el-col :span=\"1.5\">\r\n                  <el-button\r\n                     type=\"primary\"\r\n                     plain\r\n                     icon=\"Plus\"\r\n                     @click=\"handleAdd\"\r\n                     v-hasPermi=\"['system:user:add']\"\r\n                  >新增</el-button>\r\n               </el-col>\r\n               <el-col :span=\"1.5\">\r\n                  <el-button\r\n                     type=\"success\"\r\n                     plain\r\n                     icon=\"Edit\"\r\n                     :disabled=\"single\"\r\n                     @click=\"handleUpdate\"\r\n                     v-hasPermi=\"['system:user:edit']\"\r\n                  >修改</el-button>\r\n               </el-col>\r\n               <el-col :span=\"1.5\">\r\n                  <el-button\r\n                     type=\"danger\"\r\n                     plain\r\n                     icon=\"Delete\"\r\n                     :disabled=\"multiple\"\r\n                     @click=\"handleDelete\"\r\n                     v-hasPermi=\"['system:user:remove']\"\r\n                  >删除</el-button>\r\n               </el-col>\r\n               <el-col :span=\"1.5\">\r\n                  <el-button\r\n                     type=\"warning\"\r\n                     plain\r\n                     icon=\"Download\"\r\n                     @click=\"handleExport\"\r\n                     v-hasPermi=\"['system:user:export']\"\r\n                  >导出</el-button>\r\n               </el-col>\r\n               <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\" :columns=\"columns\"></right-toolbar>\r\n            </el-row>\r\n\r\n            <el-table v-loading=\"loading\" :data=\"userList\" @selection-change=\"handleSelectionChange\">\r\n               <el-table-column type=\"selection\" width=\"50\" align=\"center\" />\r\n               <el-table-column label=\"用户编号\" align=\"center\" key=\"userId\" prop=\"userId\" v-if=\"columns[0].visible\" />\r\n               <el-table-column label=\"用户名称\" align=\"center\" key=\"userName\" prop=\"userName\" v-if=\"columns[1].visible\" :show-overflow-tooltip=\"true\" />\r\n               <el-table-column label=\"用户昵称\" align=\"center\" key=\"nickName\" prop=\"nickName\" v-if=\"columns[2].visible\" :show-overflow-tooltip=\"true\" />\r\n               <el-table-column label=\"部门\" align=\"center\" key=\"deptName\" prop=\"dept.deptName\" v-if=\"columns[3].visible\" :show-overflow-tooltip=\"true\" />\r\n               <el-table-column label=\"手机号码\" align=\"center\" key=\"phonenumber\" prop=\"phonenumber\" v-if=\"columns[4].visible\" width=\"120\" />\r\n               <el-table-column label=\"状态\" align=\"center\" key=\"status\" v-if=\"columns[5].visible\">\r\n                  <template #default=\"scope\">\r\n                     <el-switch\r\n                        v-model=\"scope.row.status\"\r\n                        active-value=\"1\"\r\n                        inactive-value=\"0\"\r\n                        @change=\"handleStatusChange(scope.row)\"\r\n                     ></el-switch>\r\n                  </template>\r\n               </el-table-column>\r\n               <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" v-if=\"columns[6].visible\" width=\"160\">\r\n                  <template #default=\"scope\">\r\n                     <span>{{ parseTime(scope.row.createTime) }}</span>\r\n                  </template>\r\n               </el-table-column>\r\n               <el-table-column label=\"操作\" align=\"center\" width=\"150\" class-name=\"small-padding fixed-width\">\r\n                  <template #default=\"scope\">\r\n                     <el-tooltip content=\"修改\" placement=\"top\" v-if=\"scope.row.userId !== 1\">\r\n                        <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['system:user:edit']\"></el-button>\r\n                     </el-tooltip>\r\n                     <el-tooltip content=\"删除\" placement=\"top\" v-if=\"scope.row.userId !== 1\">\r\n                        <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['system:user:remove']\"></el-button>\r\n                     </el-tooltip>\r\n                     <el-tooltip content=\"重置密码\" placement=\"top\" v-if=\"scope.row.userId !== 1\">\r\n                         <el-button link type=\"primary\" icon=\"Key\" @click=\"handleResetPwd(scope.row)\" v-hasPermi=\"['system:user:resetPwd']\"></el-button>\r\n                     </el-tooltip>\r\n                     <el-tooltip content=\"分配角色\" placement=\"top\" v-if=\"scope.row.userId !== 1\">\r\n                        <el-button link type=\"primary\" icon=\"CircleCheck\" @click=\"handleAuthRole(scope.row)\" v-hasPermi=\"['system:user:edit']\"></el-button>\r\n                     </el-tooltip>\r\n                  </template>\r\n               </el-table-column>\r\n            </el-table>\r\n            <pagination\r\n               v-show=\"total > 0\"\r\n               :total=\"total\"\r\n               v-model:page=\"queryParams.pageNum\"\r\n               v-model:limit=\"queryParams.pageSize\"\r\n               @pagination=\"getList\"\r\n            />\r\n         </el-col>\r\n      </el-row>\r\n\r\n      <!-- 添加或修改用户配置对话框 -->\r\n      <el-dialog :title=\"title\" v-model=\"open\" width=\"600px\" append-to-body>\r\n         <el-form :model=\"form\" :rules=\"rules\" ref=\"userRef\" label-width=\"80px\">\r\n            <el-row>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"用户昵称\" prop=\"nickName\">\r\n                     <el-input v-model=\"form.nickName\" placeholder=\"请输入用户昵称\" maxlength=\"30\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"归属部门\" prop=\"deptId\">\r\n                     <el-tree-select\r\n                        v-model=\"form.deptId\"\r\n                        :data=\"deptOptions\"\r\n                        :props=\"{ value: 'id', label: 'label', children: 'children' }\"\r\n                        value-key=\"id\"\r\n                        placeholder=\"请选择归属部门\"\r\n                        check-strictly\r\n                     />\r\n                  </el-form-item>\r\n               </el-col>\r\n            </el-row>\r\n            <el-row>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"手机号码\" prop=\"phonenumber\">\r\n                     <el-input v-model=\"form.phonenumber\" placeholder=\"请输入手机号码\" maxlength=\"11\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"邮箱\" prop=\"email\">\r\n                     <el-input v-model=\"form.email\" placeholder=\"请输入邮箱\" maxlength=\"50\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n            </el-row>\r\n            <el-row>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item v-if=\"form.userId == undefined\" label=\"用户名称\" prop=\"userName\">\r\n                     <el-input v-model=\"form.userName\" placeholder=\"请输入用户名称\" maxlength=\"30\" />\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item v-if=\"form.userId == undefined\" label=\"用户密码\" prop=\"password\">\r\n                     <el-input v-model=\"form.password\" placeholder=\"请输入用户密码\" type=\"password\" maxlength=\"20\" show-password />\r\n                  </el-form-item>\r\n               </el-col>\r\n            </el-row>\r\n            <el-row>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"用户性别\">\r\n                     <el-select v-model=\"form.sex\" placeholder=\"请选择\">\r\n                        <el-option\r\n                           v-for=\"dict in sys_user_sex\"\r\n                           :key=\"dict.value\"\r\n                           :label=\"dict.label\"\r\n                           :value=\"dict.value\"\r\n                        ></el-option>\r\n                     </el-select>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"状态\">\r\n                     <el-radio-group v-model=\"form.status\">\r\n                        <el-radio\r\n                           v-for=\"dict in sys_normal_disable\"\r\n                           :key=\"dict.value\"\r\n                           :label=\"dict.value\"\r\n                        >{{ dict.label }}</el-radio>\r\n                     </el-radio-group>\r\n                  </el-form-item>\r\n               </el-col>\r\n            </el-row>\r\n            <el-row>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"岗位\">\r\n                     <el-select v-model=\"form.postIds\" multiple placeholder=\"请选择\" clear>\r\n                        <el-option\r\n                           v-for=\"item in postOptions\"\r\n                           :key=\"item.postId\"\r\n                           :label=\"item.postName\"\r\n                           :value=\"item.postId\"\r\n                           :disabled=\"item.status == 0\"\r\n                        ></el-option>\r\n                     </el-select>\r\n                  </el-form-item>\r\n               </el-col>\r\n               <el-col :span=\"12\">\r\n                  <el-form-item label=\"角色\">\r\n                     <el-select v-model=\"form.roleIds\" multiple placeholder=\"请选择\" clear>\r\n                        <el-option\r\n                           v-for=\"item in roleOptions\"\r\n                           :key=\"item.roleId\"\r\n                           :label=\"item.roleName\"\r\n                           :value=\"item.roleId\"\r\n                           :disabled=\"item.status == 0\"\r\n                        ></el-option>\r\n                     </el-select>\r\n                  </el-form-item>\r\n               </el-col>\r\n            </el-row>\r\n            <el-row>\r\n               <el-col :span=\"24\">\r\n                  <el-form-item label=\"备注\">\r\n                     <el-input v-model=\"form.remark\" type=\"textarea\" placeholder=\"请输入内容\"></el-input>\r\n                  </el-form-item>\r\n               </el-col>\r\n            </el-row>\r\n         </el-form>\r\n         <template #footer>\r\n            <div class=\"dialog-footer\">\r\n               <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n               <el-button @click=\"cancel\">取 消</el-button>\r\n            </div>\r\n         </template>\r\n      </el-dialog>\r\n\r\n    \r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"User\">\r\nimport { getToken } from \"@/utils/auth\";\r\nimport { changeUserStatus, listUser, resetUserPwd, delUser, getUser, updateUser, addUser, deptTreeSelect } from \"@/api/system/user\";\r\n\r\nconst router = useRouter();\r\nconst { proxy } = getCurrentInstance();\r\nconst { sys_normal_disable, sys_user_sex } = proxy.useDict(\"sys_normal_disable\", \"sys_user_sex\");\r\n\r\nconst userList = ref([]);\r\nconst open = ref(false);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst ids = ref([]);\r\nconst single = ref(true);\r\nconst multiple = ref(true);\r\nconst total = ref(0);\r\nconst title = ref(\"\");\r\nconst dateRange = ref([]);\r\nconst deptName = ref(\"\");\r\nconst deptOptions = ref(undefined);\r\nconst initPassword = ref(undefined);\r\nconst postOptions = ref([]);\r\nconst roleOptions = ref([]);\r\n\r\n// 列显隐信息\r\nconst columns = ref([\r\n  { key: 0, label: `用户编号`, visible: true },\r\n  { key: 1, label: `用户名称`, visible: true },\r\n  { key: 2, label: `用户昵称`, visible: true },\r\n  { key: 3, label: `部门`, visible: true },\r\n  { key: 4, label: `手机号码`, visible: true },\r\n  { key: 5, label: `状态`, visible: true },\r\n  { key: 6, label: `创建时间`, visible: true }\r\n]);\r\n\r\nconst data = reactive({\r\n  form: {},\r\n  queryParams: {\r\n    pageNum: 1,\r\n    pageSize: 10,\r\n    userName: undefined,\r\n    phonenumber: undefined,\r\n    status: undefined,\r\n    deptId: undefined\r\n  },\r\n  rules: {\r\n    userName: [{ required: true, message: \"用户名称不能为空\", trigger: \"blur\" }, { min: 2, max: 20, message: \"用户名称长度必须介于 2 和 20 之间\", trigger: \"blur\" }],\r\n    nickName: [{ required: true, message: \"用户昵称不能为空\", trigger: \"blur\" }],\r\n    password: [{ required: true, message: \"用户密码不能为空\", trigger: \"blur\" }, { min: 5, max: 20, message: \"用户密码长度必须介于 6 和 20 之间\", trigger: \"blur\" }],\r\n    email: [{ type: \"email\", message: \"请输入正确的邮箱地址\", trigger: [\"blur\", \"change\"] }],\r\n    phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\\d{8}$/, message: \"请输入正确的手机号码\", trigger: \"blur\" }]\r\n  }\r\n});\r\n\r\nconst { queryParams, form, rules } = toRefs(data);\r\n\r\n/** 通过条件过滤节点  */\r\nconst filterNode = (value, data) => {\r\n  if (!value) return true;\r\n  return data.label.indexOf(value) !== -1;\r\n};\r\n/** 根据名称筛选部门树 */\r\nwatch(deptName, val => {\r\n  proxy.$refs[\"deptTreeRef\"].filter(val);\r\n});\r\n/** 查询部门下拉树结构 */\r\nfunction getDeptTree() {\r\n  deptTreeSelect().then(response => {\r\n    deptOptions.value = response.data;\r\n  });\r\n};\r\n/** 查询用户列表 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  listUser(proxy.addDateRange(queryParams.value, dateRange.value)).then(res => {\r\n    loading.value = false;\r\n    userList.value = res.rows;\r\n    total.value = res.total;\r\n  });\r\n};\r\n/** 节点单击事件 */\r\nfunction handleNodeClick(data) {\r\n  queryParams.value.deptId = data.id;\r\n  handleQuery();\r\n};\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.value.pageNum = 1;\r\n  getList();\r\n};\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  dateRange.value = [];\r\n  proxy.resetForm(\"queryRef\");\r\n  queryParams.value.deptId = undefined;\r\n  proxy.$refs.deptTreeRef.setCurrentKey(null);\r\n  handleQuery();\r\n};\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  const userIds = row.userId || ids.value;\r\n  proxy.$modal.confirm('是否确认删除用户编号为\"' + userIds + '\"的数据项？').then(function () {\r\n    return delUser(userIds);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n  }).catch(() => {});\r\n};\r\n/** 导出按钮操作 */\r\nfunction handleExport() {\r\n  proxy.download(\"system/user/export\", {\r\n    ...queryParams.value,\r\n  },`user_${new Date().getTime()}.xlsx`);\r\n};\r\n/** 用户状态修改  */\r\nfunction handleStatusChange(row) {\r\n  let text = row.status === \"1\" ? \"启用\" : \"停用\";\r\n  proxy.$modal.confirm('确认要\"' + text + '\"\"' + row.userName + '\"用户吗?').then(function () {\r\n    return changeUserStatus(row.userId, row.status);\r\n  }).then(() => {\r\n    proxy.$modal.msgSuccess(text + \"成功\");\r\n  }).catch(function () {\r\n    row.status = row.status === \"0\" ? \"1\" : \"0\";\r\n  });\r\n};\r\n/** 更多操作 */\r\nfunction handleCommand(command, row) {\r\n  switch (command) {\r\n    case \"handleResetPwd\":\r\n      handleResetPwd(row);\r\n      break;\r\n    case \"handleAuthRole\":\r\n      handleAuthRole(row);\r\n      break;\r\n    default:\r\n      break;\r\n  }\r\n};\r\n/** 跳转角色分配 */\r\nfunction handleAuthRole(row) {\r\n  const userId = row.userId;\r\n  router.push(\"/system/user-auth/role/\" + userId);\r\n};\r\n/** 重置密码按钮操作 */\r\nfunction handleResetPwd(row) {\r\n  proxy.$prompt('请输入\"' + row.userName + '\"的新密码', \"提示\", {\r\n    confirmButtonText: \"确定\",\r\n    cancelButtonText: \"取消\",\r\n    closeOnClickModal: false,\r\n    inputPattern: /^.{5,20}$/,\r\n    inputErrorMessage: \"用户密码长度必须介于 5 和 20 之间\",\r\n  }).then(({ value }) => {\r\n    resetUserPwd(row.userId, value).then(response => {\r\n      proxy.$modal.msgSuccess(\"修改成功，新密码是：\" + value);\r\n    });\r\n  }).catch(() => {});\r\n};\r\n/** 选择条数  */\r\nfunction handleSelectionChange(selection) {\r\n  ids.value = selection.map(item => item.userId);\r\n  single.value = selection.length != 1;\r\n  multiple.value = !selection.length;\r\n};\r\n\r\n/** 下载模板操作 */\r\nfunction importTemplate() {\r\n  proxy.download(\"system/user/importTemplate\", {\r\n  }, `user_template_${new Date().getTime()}.xlsx`);\r\n};\r\n/**文件上传中处理 */\r\nconst handleFileUploadProgress = (event, file, fileList) => {\r\n  upload.isUploading = true;\r\n};\r\n/** 文件上传成功处理 */\r\nconst handleFileSuccess = (response, file, fileList) => {\r\n  upload.open = false;\r\n  upload.isUploading = false;\r\n  proxy.$refs[\"uploadRef\"].handleRemove(file);\r\n  proxy.$alert(\"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>\" + response.msg + \"</div>\", \"导入结果\", { dangerouslyUseHTMLString: true });\r\n  getList();\r\n};\r\n/** 提交上传文件 */\r\nfunction submitFileForm() {\r\n  proxy.$refs[\"uploadRef\"].submit();\r\n};\r\n/** 重置操作表单 */\r\nfunction reset() {\r\n  form.value = {\r\n    userId: undefined,\r\n    deptId: undefined,\r\n    userName: undefined,\r\n    nickName: undefined,\r\n    password: undefined,\r\n    phonenumber: undefined,\r\n    email: undefined,\r\n    sex: undefined,\r\n    status: \"1\",\r\n    remark: undefined,\r\n    postIds: [],\r\n    roleIds: []\r\n  };\r\n  proxy.resetForm(\"userRef\");\r\n};\r\n/** 取消按钮 */\r\nfunction cancel() {\r\n  open.value = false;\r\n  reset();\r\n};\r\n/** 新增按钮操作 */\r\nfunction handleAdd() {\r\n  reset();\r\n  getUser().then(response => {\r\n    postOptions.value = response.posts;\r\n    roleOptions.value = response.roles;\r\n    open.value = true;\r\n    title.value = \"添加用户\";\r\n    form.value.password = initPassword.value;\r\n  });\r\n};\r\n/** 修改按钮操作 */\r\nfunction handleUpdate(row) {\r\n  reset();\r\n  const userId = row.userId || ids.value;\r\n  getUser(userId).then(response => {\r\n    form.value = response.data;\r\n    postOptions.value = response.posts;\r\n    roleOptions.value = response.roles;\r\n    form.value.postIds = response.postIds;\r\n    form.value.roleIds = response.roleIds;\r\n    open.value = true;\r\n    title.value = \"修改用户\";\r\n    form.password = \"\";\r\n  });\r\n};\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n  proxy.$refs[\"userRef\"].validate(valid => {\r\n    if (valid) {\r\n      if (form.value.userId != undefined) {\r\n        updateUser(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"修改成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      } else {\r\n        addUser(form.value).then(response => {\r\n          proxy.$modal.msgSuccess(\"新增成功\");\r\n          open.value = false;\r\n          getList();\r\n        });\r\n      }\r\n    }\r\n  });\r\n};\r\n\r\ngetDeptTree();\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/user/profile/index.vue",
    "content": "<template>\r\n   <div class=\"app-container\">\r\n      <el-row :gutter=\"20\">\r\n         <el-col :span=\"6\" :xs=\"24\">\r\n            <el-card class=\"box-card\">\r\n               <template v-slot:header>\r\n                 <div class=\"clearfix\">\r\n                   <span>个人信息</span>\r\n                 </div>\r\n               </template>\r\n               <div>\r\n                  <div class=\"text-center\">\r\n                     <userAvatar />\r\n                  </div>\r\n                  <ul class=\"list-group list-group-striped\">\r\n                     <li class=\"list-group-item\">\r\n                        <svg-icon icon-class=\"user\" />用户名称\r\n                        <div class=\"pull-right\">{{ state.user.userName }}</div>\r\n                     </li>\r\n                     <li class=\"list-group-item\">\r\n                        <svg-icon icon-class=\"phone\" />手机号码\r\n                        <div class=\"pull-right\">{{ state.user.phonenumber }}</div>\r\n                     </li>\r\n                     <li class=\"list-group-item\">\r\n                        <svg-icon icon-class=\"email\" />用户邮箱\r\n                        <div class=\"pull-right\">{{ state.user.email }}</div>\r\n                     </li>\r\n                     <li class=\"list-group-item\">\r\n                        <svg-icon icon-class=\"tree\" />所属部门\r\n                        <div class=\"pull-right\" v-if=\"state.user.dept\">{{ state.user.dept.deptName }} / {{ state.postGroup }}</div>\r\n                     </li>\r\n                     <li class=\"list-group-item\">\r\n                        <svg-icon icon-class=\"peoples\" />所属角色\r\n                        <div class=\"pull-right\">{{ state.roleGroup }}</div>\r\n                     </li>\r\n                     <li class=\"list-group-item\">\r\n                        <svg-icon icon-class=\"date\" />创建日期\r\n                        <div class=\"pull-right\">{{ state.user.createTime }}</div>\r\n                     </li>\r\n                  </ul>\r\n               </div>\r\n            </el-card>\r\n         </el-col>\r\n         <el-col :span=\"18\" :xs=\"24\">\r\n            <el-card>\r\n               <template v-slot:header>\r\n                 <div class=\"clearfix\">\r\n                   <span>基本资料</span>\r\n                 </div>\r\n               </template>\r\n               <el-tabs v-model=\"activeTab\">\r\n                  <el-tab-pane label=\"基本资料\" name=\"userinfo\">\r\n                     <userInfo :user=\"state.user\" />\r\n                  </el-tab-pane>\r\n                  <el-tab-pane label=\"修改密码\" name=\"resetPwd\">\r\n                     <resetPwd />\r\n                  </el-tab-pane>\r\n               </el-tabs>\r\n            </el-card>\r\n         </el-col>\r\n      </el-row>\r\n   </div>\r\n</template>\r\n\r\n<script setup name=\"Profile\">\r\nimport userAvatar from \"./userAvatar\";\r\nimport userInfo from \"./userInfo\";\r\nimport resetPwd from \"./resetPwd\";\r\nimport { getUserProfile } from \"@/api/system/user\";\r\n\r\nconst activeTab = ref(\"userinfo\");\r\nconst state = reactive({\r\n  user: {},\r\n  roleGroup: {},\r\n  postGroup: {}\r\n});\r\n\r\nfunction getUser() {\r\n  getUserProfile().then(response => {\r\n    state.user = response.data;\r\n    state.roleGroup = response.roleGroup;\r\n    state.postGroup = response.postGroup;\r\n  });\r\n};\r\n\r\ngetUser();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/user/profile/resetPwd.vue",
    "content": "<template>\r\n   <el-form ref=\"pwdRef\" :model=\"user\" :rules=\"rules\" label-width=\"80px\">\r\n      <el-form-item label=\"旧密码\" prop=\"oldPassword\">\r\n         <el-input v-model=\"user.oldPassword\" placeholder=\"请输入旧密码\" type=\"password\" show-password />\r\n      </el-form-item>\r\n      <el-form-item label=\"新密码\" prop=\"newPassword\">\r\n         <el-input v-model=\"user.newPassword\" placeholder=\"请输入新密码\" type=\"password\" show-password />\r\n      </el-form-item>\r\n      <el-form-item label=\"确认密码\" prop=\"confirmPassword\">\r\n         <el-input v-model=\"user.confirmPassword\" placeholder=\"请确认新密码\" type=\"password\" show-password/>\r\n      </el-form-item>\r\n      <el-form-item>\r\n      <el-button type=\"primary\" @click=\"submit\">保存</el-button>\r\n      <el-button type=\"danger\" @click=\"close\">关闭</el-button>\r\n      </el-form-item>\r\n   </el-form>\r\n</template>\r\n\r\n<script setup>\r\nimport { updateUserPwd } from \"@/api/system/user\";\r\n\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst user = reactive({\r\n  oldPassword: undefined,\r\n  newPassword: undefined,\r\n  confirmPassword: undefined\r\n});\r\n\r\nconst equalToPassword = (rule, value, callback) => {\r\n  if (user.newPassword !== value) {\r\n    callback(new Error(\"两次输入的密码不一致\"));\r\n  } else {\r\n    callback();\r\n  }\r\n};\r\nconst rules = ref({\r\n  oldPassword: [{ required: true, message: \"旧密码不能为空\", trigger: \"blur\" }],\r\n  newPassword: [{ required: true, message: \"新密码不能为空\", trigger: \"blur\" }, { min: 6, max: 20, message: \"长度在 6 到 20 个字符\", trigger: \"blur\" }],\r\n  confirmPassword: [{ required: true, message: \"确认密码不能为空\", trigger: \"blur\" }, { required: true, validator: equalToPassword, trigger: \"blur\" }]\r\n});\r\n\r\n/** 提交按钮 */\r\nfunction submit() {\r\n  proxy.$refs.pwdRef.validate(valid => {\r\n    if (valid) {\r\n      updateUserPwd(user.oldPassword, user.newPassword).then(response => {\r\n        proxy.$modal.msgSuccess(\"修改成功\");\r\n      });\r\n    }\r\n  });\r\n};\r\n/** 关闭按钮 */\r\nfunction close() {\r\n  proxy.$tab.closePage();\r\n};\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/system/user/profile/userAvatar.vue",
    "content": "<template>\r\n  <div class=\"user-info-head\" @click=\"editCropper()\">\r\n    <img :src=\"options.img\" title=\"点击上传头像\" class=\"img-circle img-lg\" />\r\n    <el-dialog :title=\"title\" v-model=\"open\" width=\"800px\" append-to-body @opened=\"modalOpened\" @close=\"closeDialog\">\r\n      <el-row>\r\n        <el-col :xs=\"24\" :md=\"12\" :style=\"{ height: '350px' }\">\r\n          <vue-cropper\r\n            ref=\"cropper\"\r\n            :img=\"options.img\"\r\n            :info=\"true\"\r\n            :autoCrop=\"options.autoCrop\"\r\n            :autoCropWidth=\"options.autoCropWidth\"\r\n            :autoCropHeight=\"options.autoCropHeight\"\r\n            :fixedBox=\"options.fixedBox\"\r\n            :outputType=\"options.outputType\"\r\n            @realTime=\"realTime\"\r\n            v-if=\"visible\"\r\n          />\r\n        </el-col>\r\n        <el-col :xs=\"24\" :md=\"12\" :style=\"{ height: '350px' }\">\r\n          <div class=\"avatar-upload-preview\">\r\n            <img :src=\"options.previews.url\" :style=\"options.previews.img\" />\r\n          </div>\r\n        </el-col>\r\n      </el-row>\r\n      <br />\r\n      <el-row>\r\n        <el-col :lg=\"2\" :md=\"2\">\r\n          <el-upload\r\n            action=\"#\"\r\n            :http-request=\"requestUpload\"\r\n            :show-file-list=\"false\"\r\n            :before-upload=\"beforeUpload\"\r\n          >\r\n            <el-button>\r\n              选择\r\n              <el-icon class=\"el-icon--right\"><Upload /></el-icon>\r\n            </el-button>\r\n          </el-upload>\r\n        </el-col>\r\n        <el-col :lg=\"{ span: 1, offset: 2 }\" :md=\"2\">\r\n          <el-button icon=\"Plus\" @click=\"changeScale(1)\"></el-button>\r\n        </el-col>\r\n        <el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n          <el-button icon=\"Minus\" @click=\"changeScale(-1)\"></el-button>\r\n        </el-col>\r\n        <el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n          <el-button icon=\"RefreshLeft\" @click=\"rotateLeft()\"></el-button>\r\n        </el-col>\r\n        <el-col :lg=\"{ span: 1, offset: 1 }\" :md=\"2\">\r\n          <el-button icon=\"RefreshRight\" @click=\"rotateRight()\"></el-button>\r\n        </el-col>\r\n        <el-col :lg=\"{ span: 2, offset: 6 }\" :md=\"2\">\r\n          <el-button type=\"primary\" @click=\"uploadImg()\">提 交</el-button>\r\n        </el-col>\r\n      </el-row>\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script setup>\r\nimport \"vue-cropper/dist/index.css\";\r\nimport { VueCropper } from \"vue-cropper\";\r\nimport { uploadAvatar } from \"@/api/system/user\";\r\nimport useUserStore from \"@/store/modules/user\";\r\n\r\nconst userStore = useUserStore();\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst open = ref(false);\r\nconst visible = ref(false);\r\nconst title = ref(\"修改头像\");\r\n\r\n//图片裁剪数据\r\nconst options = reactive({\r\n  img: userStore.avatar,     // 裁剪图片的地址\r\n  autoCrop: true,            // 是否默认生成截图框\r\n  autoCropWidth: 200,        // 默认生成截图框宽度\r\n  autoCropHeight: 200,       // 默认生成截图框高度\r\n  fixedBox: true,            // 固定截图框大小 不允许改变\r\n  outputType: \"png\",         // 默认生成截图为PNG格式\r\n  filename: 'avatar',        // 文件名称\r\n  previews: {}               //预览数据\r\n});\r\n\r\n/** 编辑头像 */\r\nfunction editCropper() {\r\n  open.value = true;\r\n}\r\n/** 打开弹出层结束时的回调 */\r\nfunction modalOpened() {\r\n  visible.value = true;\r\n}\r\n/** 覆盖默认上传行为 */\r\nfunction requestUpload() {}\r\n/** 向左旋转 */\r\nfunction rotateLeft() {\r\n  proxy.$refs.cropper.rotateLeft();\r\n}\r\n/** 向右旋转 */\r\nfunction rotateRight() {\r\n  proxy.$refs.cropper.rotateRight();\r\n}\r\n/** 图片缩放 */\r\nfunction changeScale(num) {\r\n  num = num || 1;\r\n  proxy.$refs.cropper.changeScale(num);\r\n}\r\n/** 上传预处理 */\r\nfunction beforeUpload(file) {\r\n  if (file.type.indexOf(\"image/\") == -1) {\r\n    proxy.$modal.msgError(\"文件格式错误，请上传图片类型,如：JPG，PNG后缀的文件。\");\r\n  } else {\r\n    const reader = new FileReader();\r\n    reader.readAsDataURL(file);\r\n    reader.onload = () => {\r\n      options.img = reader.result;\r\n      options.filename = file.name;\r\n    };\r\n  }\r\n}\r\n/** 上传图片 */\r\nfunction uploadImg() {\r\n  proxy.$refs.cropper.getCropBlob(data => {\r\n    let formData = new FormData();\r\n    formData.append(\"avatarfile\", data, options.filename);\r\n    uploadAvatar(formData).then(response => {\r\n      open.value = false;\r\n      options.img = import.meta.env.VITE_APP_BASE_API + response.imgUrl;\r\n      userStore.avatar = options.img;\r\n      proxy.$modal.msgSuccess(\"修改成功\");\r\n      visible.value = false;\r\n    });\r\n  });\r\n}\r\n/** 实时预览 */\r\nfunction realTime(data) {\r\n  options.previews = data;\r\n}\r\n/** 关闭窗口 */\r\nfunction closeDialog() {\r\n  options.img = userStore.avatar;\r\n  options.visible = false;\r\n}\r\n</script>\r\n\r\n<style lang='scss' scoped>\r\n.user-info-head {\r\n  position: relative;\r\n  display: inline-block;\r\n  height: 120px;\r\n}\r\n\r\n.user-info-head:hover:after {\r\n  content: \"+\";\r\n  position: absolute;\r\n  left: 0;\r\n  right: 0;\r\n  top: 0;\r\n  bottom: 0;\r\n  color: #eee;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  font-size: 24px;\r\n  font-style: normal;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  cursor: pointer;\r\n  line-height: 110px;\r\n  border-radius: 50%;\r\n}\r\n</style>"
  },
  {
    "path": "front/src/views/system/user/profile/userInfo.vue",
    "content": "<template>\r\n   <el-form ref=\"userRef\" :model=\"form\" :rules=\"rules\" label-width=\"80px\">\r\n      <el-form-item label=\"用户昵称\" prop=\"nickName\">\r\n         <el-input v-model=\"form.nickName\" maxlength=\"30\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"手机号码\" prop=\"phonenumber\">\r\n         <el-input v-model=\"form.phonenumber\" maxlength=\"11\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"邮箱\" prop=\"email\">\r\n         <el-input v-model=\"form.email\" maxlength=\"50\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"性别\">\r\n         <el-radio-group v-model=\"form.sex\">\r\n            <el-radio label=\"0\">男</el-radio>\r\n            <el-radio label=\"1\">女</el-radio>\r\n         </el-radio-group>\r\n      </el-form-item>\r\n      <el-form-item>\r\n      <el-button type=\"primary\" @click=\"submit\">保存</el-button>\r\n      <el-button type=\"danger\" @click=\"close\">关闭</el-button>\r\n      </el-form-item>\r\n   </el-form>\r\n</template>\r\n\r\n<script setup>\r\nimport { updateUserProfile } from \"@/api/system/user\";\r\n\r\nconst props = defineProps({\r\n  user: {\r\n    type: Object\r\n  }\r\n});\r\n\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst form = ref({});\r\nconst rules = ref({\r\n  nickName: [{ required: true, message: \"用户昵称不能为空\", trigger: \"blur\" }],\r\n  email: [{ required: true, message: \"邮箱地址不能为空\", trigger: \"blur\" }, { type: \"email\", message: \"请输入正确的邮箱地址\", trigger: [\"blur\", \"change\"] }],\r\n  phonenumber: [{ required: true, message: \"手机号码不能为空\", trigger: \"blur\" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\\d{8}$/, message: \"请输入正确的手机号码\", trigger: \"blur\" }],\r\n});\r\n\r\n/** 提交按钮 */\r\nfunction submit() {\r\n  proxy.$refs.userRef.validate(valid => {\r\n    if (valid) {\r\n      updateUserProfile(form.value).then(response => {\r\n        proxy.$modal.msgSuccess(\"修改成功\");\r\n        props.user.phonenumber = form.value.phonenumber;\r\n        props.user.email = form.value.email;\r\n      });\r\n    }\r\n  });\r\n};\r\n\r\n/** 关闭按钮 */\r\nfunction close() {\r\n  proxy.$tab.closePage();\r\n};\r\n\r\n// 回显当前登录用户信息\r\nwatch(() => props.user, user => {\r\n  if (user) {\r\n    form.value = { nickName: user.nickName, phonenumber: user.phonenumber, email: user.email, sex: user.sex };\r\n  }\r\n},{ immediate: true });\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/tool/gen/basicInfoForm.vue",
    "content": "<template>\r\n  <el-form ref=\"basicInfoForm\" :model=\"info\" :rules=\"rules\" label-width=\"150px\">\r\n    <el-row>\r\n      <el-col :span=\"12\">\r\n        <el-form-item label=\"表名称\" prop=\"tableName\">\r\n          <el-input placeholder=\"请输入仓库名称\" v-model=\"info.tableName\" />\r\n        </el-form-item>\r\n      </el-col>\r\n      <el-col :span=\"12\">\r\n        <el-form-item label=\"表描述\" prop=\"tableComment\">\r\n          <el-input placeholder=\"请输入\" v-model=\"info.tableComment\" />\r\n        </el-form-item>\r\n      </el-col>\r\n      <el-col :span=\"12\">\r\n        <el-form-item label=\"实体类名称\" prop=\"className\">\r\n          <el-input placeholder=\"请输入\" v-model=\"info.className\" />\r\n        </el-form-item>\r\n      </el-col>\r\n      <el-col :span=\"12\">\r\n        <el-form-item label=\"作者\" prop=\"functionAuthor\">\r\n          <el-input placeholder=\"请输入\" v-model=\"info.functionAuthor\" />\r\n        </el-form-item>\r\n      </el-col>\r\n      <el-col :span=\"24\">\r\n        <el-form-item label=\"备注\" prop=\"remark\">\r\n          <el-input type=\"textarea\" :rows=\"3\" v-model=\"info.remark\"></el-input>\r\n        </el-form-item>\r\n      </el-col>\r\n    </el-row>\r\n  </el-form>\r\n</template>\r\n\r\n<script setup>\r\ndefineProps({\r\n  info: {\r\n    type: Object,\r\n    default: null\r\n  }\r\n});\r\n\r\n// 表单校验\r\nconst rules = ref({\r\n  tableName: [{ required: true, message: \"请输入表名称\", trigger: \"blur\" }],\r\n  tableComment: [{ required: true, message: \"请输入表描述\", trigger: \"blur\" }],\r\n  className: [{ required: true, message: \"请输入实体类名称\", trigger: \"blur\" }],\r\n  functionAuthor: [{ required: true, message: \"请输入作者\", trigger: \"blur\" }]\r\n});\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/tool/gen/editTable.vue",
    "content": "<template>\r\n  <el-card>\r\n    <el-tabs v-model=\"activeName\">\r\n      <el-tab-pane label=\"基本信息\" name=\"basic\">\r\n        <basic-info-form ref=\"basicInfo\" :info=\"info\" />\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"字段信息\" name=\"columnInfo\">\r\n        <el-table ref=\"dragTable\" :data=\"columns\" row-key=\"columnId\" :max-height=\"tableHeight\">\r\n          <el-table-column label=\"序号\" type=\"index\" min-width=\"5%\"/>\r\n          <el-table-column\r\n            label=\"字段列名\"\r\n            prop=\"columnName\"\r\n            min-width=\"10%\"\r\n            :show-overflow-tooltip=\"true\"\r\n          />\r\n          <el-table-column label=\"字段描述\" min-width=\"10%\">\r\n            <template #default=\"scope\">\r\n              <el-input v-model=\"scope.row.columnComment\"></el-input>\r\n            </template>\r\n          </el-table-column>\r\n          <el-table-column\r\n            label=\"物理类型\"\r\n            prop=\"columnType\"\r\n            min-width=\"10%\"\r\n            :show-overflow-tooltip=\"true\"\r\n          />\r\n          <el-table-column label=\"Java类型\" min-width=\"11%\">\r\n            <template #default=\"scope\">\r\n              <el-select v-model=\"scope.row.javaType\">\r\n                <el-option label=\"Long\" value=\"Long\" />\r\n                <el-option label=\"String\" value=\"String\" />\r\n                <el-option label=\"Integer\" value=\"Integer\" />\r\n                <el-option label=\"Double\" value=\"Double\" />\r\n                <el-option label=\"BigDecimal\" value=\"BigDecimal\" />\r\n                <el-option label=\"Date\" value=\"Date\" />\r\n                <el-option label=\"Boolean\" value=\"Boolean\" />\r\n              </el-select>\r\n            </template>\r\n          </el-table-column>\r\n          <el-table-column label=\"java属性\" min-width=\"10%\">\r\n            <template #default=\"scope\">\r\n              <el-input v-model=\"scope.row.javaField\"></el-input>\r\n            </template>\r\n          </el-table-column>\r\n\r\n          <el-table-column label=\"插入\" min-width=\"5%\">\r\n            <template #default=\"scope\">\r\n              <el-checkbox true-label=\"1\" false-label=\"0\" v-model=\"scope.row.isInsert\"></el-checkbox>\r\n            </template>\r\n          </el-table-column>\r\n          <el-table-column label=\"编辑\" min-width=\"5%\">\r\n            <template #default=\"scope\">\r\n              <el-checkbox true-label=\"1\" false-label=\"0\" v-model=\"scope.row.isEdit\"></el-checkbox>\r\n            </template>\r\n          </el-table-column>\r\n          <el-table-column label=\"列表\" min-width=\"5%\">\r\n            <template #default=\"scope\">\r\n              <el-checkbox true-label=\"1\" false-label=\"0\" v-model=\"scope.row.isList\"></el-checkbox>\r\n            </template>\r\n          </el-table-column>\r\n          <el-table-column label=\"查询\" min-width=\"5%\">\r\n            <template #default=\"scope\">\r\n              <el-checkbox true-label=\"1\" false-label=\"0\" v-model=\"scope.row.isQuery\"></el-checkbox>\r\n            </template>\r\n          </el-table-column>\r\n          <el-table-column label=\"查询方式\" min-width=\"10%\">\r\n            <template #default=\"scope\">\r\n              <el-select v-model=\"scope.row.queryType\">\r\n                <el-option label=\"=\" value=\"EQ\" />\r\n                <el-option label=\"!=\" value=\"NE\" />\r\n                <el-option label=\">\" value=\"GT\" />\r\n                <el-option label=\">=\" value=\"GTE\" />\r\n                <el-option label=\"<\" value=\"LT\" />\r\n                <el-option label=\"<=\" value=\"LTE\" />\r\n                <el-option label=\"LIKE\" value=\"LIKE\" />\r\n                <el-option label=\"BETWEEN\" value=\"BETWEEN\" />\r\n              </el-select>\r\n            </template>\r\n          </el-table-column>\r\n          <el-table-column label=\"必填\" min-width=\"5%\">\r\n            <template #default=\"scope\">\r\n              <el-checkbox true-label=\"1\" false-label=\"0\" v-model=\"scope.row.isRequired\"></el-checkbox>\r\n            </template>\r\n          </el-table-column>\r\n          <el-table-column label=\"显示类型\" min-width=\"12%\">\r\n            <template #default=\"scope\">\r\n              <el-select v-model=\"scope.row.htmlType\">\r\n                <el-option label=\"文本框\" value=\"input\" />\r\n                <el-option label=\"文本域\" value=\"textarea\" />\r\n                <el-option label=\"下拉框\" value=\"select\" />\r\n                <el-option label=\"单选框\" value=\"radio\" />\r\n                <el-option label=\"复选框\" value=\"checkbox\" />\r\n                <el-option label=\"日期控件\" value=\"datetime\" />\r\n                <el-option label=\"图片上传\" value=\"imageUpload\" />\r\n                <el-option label=\"文件上传\" value=\"fileUpload\" />\r\n                <el-option label=\"富文本控件\" value=\"editor\" />\r\n              </el-select>\r\n            </template>\r\n          </el-table-column>\r\n          <el-table-column label=\"字典类型\" min-width=\"12%\">\r\n            <template #default=\"scope\">\r\n              <el-select v-model=\"scope.row.dictType\" clearable filterable placeholder=\"请选择\">\r\n                <el-option\r\n                  v-for=\"dict in dictOptions\"\r\n                  :key=\"dict.dictType\"\r\n                  :label=\"dict.dictName\"\r\n                  :value=\"dict.dictType\">\r\n                  <span style=\"float: left\">{{ dict.dictName }}</span>\r\n                  <span style=\"float: right; color: #8492a6; font-size: 13px\">{{ dict.dictType }}</span>\r\n              </el-option>\r\n              </el-select>\r\n            </template>\r\n          </el-table-column>\r\n        </el-table>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"生成信息\" name=\"genInfo\">\r\n        <gen-info-form ref=\"genInfo\" :info=\"info\" :tables=\"tables\" />\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n    <el-form label-width=\"100px\">\r\n      <div style=\"text-align: center;margin-left:-100px;margin-top:10px;\">\r\n        <el-button type=\"primary\" @click=\"submitForm()\">提交</el-button>\r\n        <el-button @click=\"close()\">返回</el-button>\r\n      </div>\r\n    </el-form>\r\n  </el-card>\r\n</template>\r\n\r\n<script setup name=\"GenEdit\">\r\nimport { getGenTable, updateGenTable } from \"@/api/tool/gen\";\r\nimport { optionselect as getDictOptionselect } from \"@/api/system/dict/type\";\r\nimport basicInfoForm from \"./basicInfoForm\";\r\nimport genInfoForm from \"./genInfoForm\";\r\n\r\nconst route = useRoute();\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst activeName = ref(\"columnInfo\");\r\nconst tableHeight = ref(document.documentElement.scrollHeight - 245 + \"px\");\r\nconst tables = ref([]);\r\nconst columns = ref([]);\r\nconst dictOptions = ref([]);\r\nconst info = ref({});\r\n\r\n/** 提交按钮 */\r\nfunction submitForm() {\r\n  const basicForm = proxy.$refs.basicInfo.$refs.basicInfoForm;\r\n  const genForm = proxy.$refs.genInfo.$refs.genInfoForm;\r\n  Promise.all([basicForm, genForm].map(getFormPromise)).then(res => {\r\n    const validateResult = res.every(item => !!item);\r\n    if (validateResult) {\r\n      const genTable = Object.assign({}, info.value);\r\n      genTable.columns = columns.value;\r\n      genTable.params = {\r\n        treeCode: info.value.treeCode,\r\n        treeName: info.value.treeName,\r\n        treeParentCode: info.value.treeParentCode,\r\n        parentMenuId: info.value.parentMenuId\r\n      };\r\n      updateGenTable(genTable).then(res => {\r\n        proxy.$modal.msgSuccess(res.msg);\r\n        if (res.code === 200) {\r\n          close();\r\n        }\r\n      });\r\n    } else {\r\n      proxy.$modal.msgError(\"表单校验未通过，请重新检查提交内容\");\r\n    }\r\n  });\r\n}\r\nfunction getFormPromise(form) {\r\n  return new Promise(resolve => {\r\n    form.validate(res => {\r\n      resolve(res);\r\n    });\r\n  });\r\n}\r\nfunction close() {\r\n  const obj = { path: \"/tool/gen\", query: { t: Date.now(), pageNum: route.query.pageNum } };\r\n  proxy.$tab.closeOpenPage(obj);\r\n}\r\n\r\n(() => {\r\n  const tableId = route.params && route.params.tableId;\r\n  if (tableId) {\r\n    // 获取表详细信息\r\n    getGenTable(tableId).then(res => {\r\n      columns.value = res.data.rows;\r\n      info.value = res.data.info;\r\n    \r\n      tables.value = res.data.tables;\r\n    });\r\n    /** 查询字典下拉列表 */\r\n    getDictOptionselect().then(response => {\r\n      dictOptions.value = response.data;\r\n    });\r\n  }\r\n})();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/tool/gen/excuteSql.vue",
    "content": "<template>\r\n  <el-dialog title=\"执行sql\" v-model=\"visible\" width=\"800px\" top=\"5vh\" append-to-body>\r\n    <el-input type=\"textarea\" :rows=\"10\" placeholder=\"请输入执行的sql\" v-model=\"content\"></el-input>\r\n    <template #footer>\r\n      <div class=\"dialog-footer\">\r\n        <el-button type=\"primary\" @click=\"submit\" v-hasRole=\"['admin']\">确 定</el-button>\r\n        <el-button @click=\"visible = false\">取 消</el-button>\r\n      </div>\r\n    </template>\r\n  </el-dialog>\r\n</template>\r\n\r\n<script setup>\r\nimport { excuteSql } from \"@/api/tool/gen\";\r\n\r\nconst visible = ref(false);\r\nconst content = ref(\"\");\r\nconst { proxy } = getCurrentInstance();\r\nconst emit = defineEmits([\"ok\"]);\r\n\r\n/** 显示弹框 */\r\nfunction show() {\r\n  visible.value = true;\r\n}\r\n\r\n/** 确定按钮操作 */\r\nfunction submit() {\r\n  if (content.value === \"\") {\r\n    proxy.$modal.msgError(\"请输入执行的语句\");\r\n    return;\r\n  }\r\n  excuteSql({ sql: content.value }).then(res => {\r\n    proxy.$modal.msgSuccess(res.msg);\r\n    if (res.code === 200) {\r\n      visible.value = false;\r\n      content.value = \"\"\r\n      emit(\"ok\");\r\n    }\r\n  });\r\n}\r\n\r\ndefineExpose({\r\n  show,\r\n});\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/tool/gen/genInfoForm.vue",
    "content": "<template>\r\n  <el-form ref=\"genInfoForm\" :model=\"info\" :rules=\"rules\" label-width=\"150px\">\r\n    <el-row>\r\n      <el-col :span=\"12\">\r\n        <el-form-item prop=\"tplCategory\">\r\n          <template #label>生成模板</template>\r\n          <el-select v-model=\"info.tplCategory\" @change=\"tplSelectChange\">\r\n            <el-option label=\"单表（增删改查）\" value=\"crud\" />\r\n          </el-select>\r\n        </el-form-item>\r\n      </el-col>\r\n\r\n      <el-col :span=\"12\">\r\n        <el-form-item prop=\"tplWebType\">\r\n          <template #label>前端类型</template>\r\n          <el-select v-model=\"info.tplWebType\">\r\n            <el-option label=\"Vue3 Element Plus 模版\" value=\"element-plus\" />\r\n          </el-select>\r\n        </el-form-item>\r\n      </el-col>\r\n\r\n      <el-col :span=\"12\">\r\n        <el-form-item prop=\"packageName\">\r\n          <template #label>\r\n            生成模块路径\r\n            <el-tooltip content=\"生成在哪个模块下，例如 admin\" placement=\"top\">\r\n              <el-icon><question-filled /></el-icon>\r\n            </el-tooltip>\r\n          </template>\r\n          <el-input v-model=\"info.packageName\" />\r\n        </el-form-item>\r\n      </el-col>\r\n\r\n      <el-col :span=\"12\">\r\n        <el-form-item prop=\"moduleName\">\r\n          <template #label>\r\n            子系统名\r\n            <el-tooltip content=\"模块里面的子文件夹，例如 system\" placement=\"top\">\r\n              <el-icon><question-filled /></el-icon>\r\n            </el-tooltip>\r\n          </template> \r\n          <el-input v-model=\"info.moduleName\" />\r\n        </el-form-item>\r\n      </el-col>\r\n\r\n      <el-col :span=\"12\">\r\n        <el-form-item prop=\"businessName\">\r\n          <template #label>\r\n            生成业务名\r\n            <el-tooltip content=\"可理解为功能英文名，例如 user\" placement=\"top\">\r\n              <el-icon><question-filled /></el-icon>\r\n            </el-tooltip>\r\n          </template>\r\n          <el-input v-model=\"info.businessName\" />\r\n        </el-form-item>\r\n      </el-col>\r\n\r\n      <el-col :span=\"12\">\r\n        <el-form-item prop=\"functionName\">\r\n          <template #label>\r\n            生成功能名\r\n            <el-tooltip content=\"用作注释描述以及文档生成，例如 用户\" placement=\"top\">\r\n              <el-icon><question-filled /></el-icon>\r\n            </el-tooltip>\r\n          </template>\r\n          <el-input v-model=\"info.functionName\" />\r\n        </el-form-item>\r\n      </el-col>\r\n\r\n      <el-col :span=\"12\">\r\n        <el-form-item prop=\"genType\">\r\n          <template #label>\r\n            生成代码方式\r\n            <el-tooltip content=\"默认为zip压缩包下载\" placement=\"top\">\r\n              <el-icon><question-filled /></el-icon>\r\n            </el-tooltip>\r\n          </template>\r\n          <el-radio v-model=\"info.genType\" label=\"0\">zip压缩包</el-radio>\r\n        </el-form-item>\r\n      </el-col>\r\n\r\n      <el-col :span=\"12\">\r\n        <el-form-item>\r\n          <template #label>\r\n            上级菜单\r\n            <el-tooltip content=\"分配到指定菜单下，例如 系统管理\" placement=\"top\">\r\n              <el-icon><question-filled /></el-icon>\r\n            </el-tooltip>\r\n          </template>\r\n         <template v-if=\"info.parentMenuId!=undefined && menuOptions?.length\">\r\n          <tree-select v-model:value=\"info.parentMenuId\" :show-count=\"true\" :options=\"menuOptions\"\r\n            :objMap=\"{ value: 'menuId', label: 'menuName', children: 'children' }\" placeholder=\"请选择系统菜单\" />\r\n         </template>\r\n        </el-form-item>\r\n      </el-col>\r\n\r\n      <el-col :span=\"24\" v-if=\"info.genType == '1'\">\r\n        <el-form-item prop=\"genPath\">\r\n          <template #label>\r\n            自定义路径\r\n            <el-tooltip content=\"填写磁盘绝对路径，若不填写，则生成到当前Web项目下\" placement=\"top\">\r\n              <el-icon><question-filled /></el-icon>\r\n            </el-tooltip>\r\n          </template>\r\n          <el-input v-model=\"info.genPath\">\r\n            <template #append>\r\n              <el-dropdown>\r\n                <el-button type=\"primary\">\r\n                  最近路径快速选择\r\n                  <i class=\"el-icon-arrow-down el-icon--right\"></i>\r\n                </el-button>\r\n                <template #dropdown>\r\n                  <el-dropdown-menu>\r\n                    <el-dropdown-item @click=\"info.genPath = '/'\">恢复默认的生成基础路径</el-dropdown-item>\r\n                  </el-dropdown-menu>\r\n                </template>\r\n              </el-dropdown>\r\n            </template>\r\n          </el-input>\r\n        </el-form-item>\r\n      </el-col>\r\n    </el-row>\r\n\r\n    <template v-if=\"info.tplCategory == 'tree'\">\r\n      <h4 class=\"form-header\">其他信息</h4>\r\n      <el-row v-show=\"info.tplCategory == 'tree'\">\r\n        <el-col :span=\"12\">\r\n          <el-form-item>\r\n            <template #label>\r\n              树编码字段\r\n              <el-tooltip content=\"树显示的编码字段名， 如：dept_id\" placement=\"top\">\r\n                <el-icon><question-filled /></el-icon>\r\n              </el-tooltip>\r\n            </template>\r\n            <el-select v-model=\"info.treeCode\" placeholder=\"请选择\">\r\n              <el-option v-for=\"(column, index) in info.columns\" :key=\"index\"\r\n                :label=\"column.columnName + '：' + column.columnComment\" :value=\"column.columnName\"></el-option>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-col>\r\n        <el-col :span=\"12\">\r\n          <el-form-item>\r\n            <template #label>\r\n              树父编码字段\r\n              <el-tooltip content=\"树显示的父编码字段名， 如：parent_Id\" placement=\"top\">\r\n                <el-icon><question-filled /></el-icon>\r\n              </el-tooltip>\r\n            </template>\r\n            <el-select v-model=\"info.treeParentCode\" placeholder=\"请选择\">\r\n              <el-option v-for=\"(column, index) in info.columns\" :key=\"index\"\r\n                :label=\"column.columnName + '：' + column.columnComment\" :value=\"column.columnName\"></el-option>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-col>\r\n        <el-col :span=\"12\">\r\n          <el-form-item>\r\n            <template #label>\r\n              树名称字段\r\n              <el-tooltip content=\"树节点的显示名称字段名， 如：dept_name\" placement=\"top\">\r\n                <el-icon><question-filled /></el-icon>\r\n              </el-tooltip>\r\n            </template>\r\n            <el-select v-model=\"info.treeName\" placeholder=\"请选择\">\r\n              <el-option v-for=\"(column, index) in info.columns\" :key=\"index\"\r\n                :label=\"column.columnName + '：' + column.columnComment\" :value=\"column.columnName\"></el-option>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-col>\r\n      </el-row>\r\n    </template>\r\n\r\n    <template v-if=\"info.tplCategory == 'sub'\">\r\n      <h4 class=\"form-header\">关联信息</h4>\r\n      <el-row>\r\n        <el-col :span=\"12\">\r\n          <el-form-item>\r\n            <template #label>\r\n              关联子表的表名\r\n              <el-tooltip content=\"关联子表的表名， 如：sys_user\" placement=\"top\">\r\n                <el-icon><question-filled /></el-icon>\r\n              </el-tooltip>\r\n            </template>\r\n            <el-select v-model=\"info.subTableName\" placeholder=\"请选择\" @change=\"subSelectChange\">\r\n              <el-option v-for=\"(table, index) in tables\" :key=\"index\"\r\n                :label=\"table.tableName + '：' + table.tableComment\" :value=\"table.tableName\"></el-option>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-col>\r\n        <el-col :span=\"12\">\r\n          <el-form-item>\r\n            <template #label>\r\n              子表关联的外键名\r\n              <el-tooltip content=\"子表关联的外键名， 如：user_id\" placement=\"top\">\r\n                <el-icon><question-filled /></el-icon>\r\n              </el-tooltip>\r\n            </template>\r\n            <el-select v-model=\"info.subTableFkName\" placeholder=\"请选择\">\r\n              <el-option v-for=\"(column, index) in subColumns\" :key=\"index\"\r\n                :label=\"column.columnName + '：' + column.columnComment\" :value=\"column.columnName\"></el-option>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-col>\r\n      </el-row>\r\n    </template>\r\n\r\n  </el-form>\r\n</template>\r\n\r\n<script setup>\r\nimport { listMenu } from \"@/api/system/menu\";\r\nconst subColumns = ref([]);\r\nconst menuOptions = ref([]);\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst props = defineProps({\r\n  info: {\r\n    type: Object,\r\n    default: null\r\n  },\r\n  tables: {\r\n    type: Array,\r\n    default: null\r\n  }\r\n});\r\n\r\n// 表单校验\r\nconst rules = ref({\r\n  tplCategory: [{ required: true, message: \"请选择生成模板\", trigger: \"blur\" }],\r\n  packageName: [{ required: true, message: \"请输入生成包路径\", trigger: \"blur\" }],\r\n  moduleName: [{ required: true, message: \"请输入生成模块名\", trigger: \"blur\" }],\r\n  businessName: [{ required: true, message: \"请输入生成业务名\", trigger: \"blur\" }],\r\n  functionName: [{ required: true, message: \"请输入生成功能名\", trigger: \"blur\" }]\r\n});\r\nfunction subSelectChange(value) {\r\n  props.info.subTableFkName = \"\";\r\n}\r\nfunction tplSelectChange(value) {\r\n  if (value !== \"sub\") {\r\n    props.info.subTableName = \"\";\r\n    props.info.subTableFkName = \"\";\r\n  }\r\n}\r\nfunction setSubTableColumns(value) {\r\n  for (var item in props.tables) {\r\n    const name = props.tables[item].tableName;\r\n    if (value === name) {\r\n      subColumns.value = props.tables[item].columns;\r\n      break;\r\n    }\r\n  }\r\n}\r\n/** 查询菜单下拉树结构 */\r\nfunction getMenuTreeselect() {\r\n  listMenu().then(response => {\r\n    let menus = proxy.handleTree(response.data, \"menuId\")\r\n    menus.unshift({menuId:0,menuName:\"顶级目录\"})\r\n    menuOptions.value = menus;\r\n  });\r\n}\r\n\r\nwatch(() => props.info.subTableName, val => {\r\n  setSubTableColumns(val);\r\n});\r\n\r\nwatch(() => props.info.tplWebType, val => {\r\n  if (val === '') {\r\n    props.info.tplWebType = \"element-plus\";\r\n  }\r\n});\r\n\r\ngetMenuTreeselect();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/tool/gen/importTable.vue",
    "content": "<template>\r\n  <!-- 导入表 -->\r\n  <el-dialog title=\"导入表\" v-model=\"visible\" width=\"800px\" top=\"5vh\" append-to-body>\r\n    <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\">\r\n      <el-form-item label=\"表名称\" prop=\"tableName\">\r\n        <el-input\r\n          v-model=\"queryParams.tableName\"\r\n          placeholder=\"请输入表名称\"\r\n          clearable\r\n          @keyup.enter=\"handleQuery\"\r\n        />\r\n      </el-form-item>\r\n      <el-form-item label=\"表描述\" prop=\"tableComment\">\r\n        <el-input\r\n          v-model=\"queryParams.tableComment\"\r\n          placeholder=\"请输入表描述\"\r\n          clearable\r\n          @keyup.enter=\"handleQuery\"\r\n        />\r\n      </el-form-item>\r\n      <el-form-item>\r\n        <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n        <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n      </el-form-item>\r\n    </el-form>\r\n    <el-row>\r\n      <el-table @row-click=\"clickRow\" ref=\"table\" :data=\"dbTableList\" @selection-change=\"handleSelectionChange\" height=\"400px\">\r\n        <el-table-column type=\"selection\" width=\"55\"></el-table-column>\r\n        <el-table-column prop=\"tableName\" label=\"表名称\" :show-overflow-tooltip=\"true\"></el-table-column>\r\n        <el-table-column prop=\"tableComment\" label=\"表描述\" :show-overflow-tooltip=\"true\"></el-table-column>\r\n        <el-table-column prop=\"createTime\" label=\"创建时间\"></el-table-column>\r\n        <el-table-column prop=\"updateTime\" label=\"更新时间\"></el-table-column>\r\n      </el-table>\r\n      <pagination\r\n        v-show=\"total>0\"\r\n        :total=\"total\"\r\n        v-model:page=\"queryParams.pageNum\"\r\n        v-model:limit=\"queryParams.pageSize\"\r\n        @pagination=\"getList\"\r\n      />\r\n    </el-row>\r\n    <template #footer>\r\n      <div class=\"dialog-footer\">\r\n        <el-button type=\"primary\" @click=\"handleImportTable\">确 定</el-button>\r\n        <el-button @click=\"visible = false\">取 消</el-button>\r\n      </div>\r\n    </template>\r\n  </el-dialog>\r\n</template>\r\n\r\n<script setup>\r\nimport { listDbTable, importTable } from \"@/api/tool/gen\";\r\n\r\nconst total = ref(0);\r\nconst visible = ref(false);\r\nconst tables = ref([]);\r\nconst dbTableList = ref([]);\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst queryParams = reactive({\r\n  pageNum: 1,\r\n  pageSize: 10,\r\n  tableName: undefined,\r\n  tableComment: undefined\r\n});\r\n\r\nconst emit = defineEmits([\"ok\"]);\r\n\r\n/** 查询参数列表 */\r\nfunction show() {\r\n  getList();\r\n  visible.value = true;\r\n}\r\n/** 单击选择行 */\r\nfunction clickRow(row) {\r\n  proxy.$refs.table.toggleRowSelection(row);\r\n}\r\n/** 多选框选中数据 */\r\nfunction handleSelectionChange(selection) {\r\n  tables.value = selection.map(item => item.tableName);\r\n}\r\n/** 查询表数据 */\r\nfunction getList() {\r\n  listDbTable(queryParams).then(res => {\r\n    dbTableList.value = res.rows;\r\n    total.value = res.total;\r\n  });\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.pageNum = 1;\r\n  getList();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\n/** 导入按钮操作 */\r\nfunction handleImportTable() {\r\n  const tableNames = tables.value.join(\",\");\r\n  if (tableNames == \"\") {\r\n    proxy.$modal.msgError(\"请选择要导入的表\");\r\n    return;\r\n  }\r\n  importTable({ tables: tableNames }).then(res => {\r\n    proxy.$modal.msgSuccess(res.msg);\r\n    if (res.code === 200) {\r\n      visible.value = false;\r\n      emit(\"ok\");\r\n    }\r\n  });\r\n}\r\n\r\ndefineExpose({\r\n  show,\r\n});\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/tool/gen/index.vue",
    "content": "<template>\r\n  <div class=\"app-container\">\r\n    <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\">\r\n      <el-form-item label=\"表名称\" prop=\"tableName\">\r\n        <el-input\r\n          v-model=\"queryParams.tableName\"\r\n          placeholder=\"请输入表名称\"\r\n          clearable\r\n          style=\"width: 200px\"\r\n          @keyup.enter=\"handleQuery\"\r\n        />\r\n      </el-form-item>\r\n      <el-form-item label=\"表描述\" prop=\"tableComment\">\r\n        <el-input\r\n          v-model=\"queryParams.tableComment\"\r\n          placeholder=\"请输入表描述\"\r\n          clearable\r\n          style=\"width: 200px\"\r\n          @keyup.enter=\"handleQuery\"\r\n        />\r\n      </el-form-item>\r\n      <el-form-item label=\"创建时间\" style=\"width: 308px\">\r\n        <el-date-picker\r\n          v-model=\"dateRange\"\r\n          value-format=\"YYYY-MM-DD\"\r\n          type=\"daterange\"\r\n          range-separator=\"-\"\r\n          start-placeholder=\"开始日期\"\r\n          end-placeholder=\"结束日期\"\r\n        ></el-date-picker>\r\n      </el-form-item>\r\n      <el-form-item>\r\n        <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\r\n        <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\r\n      </el-form-item>\r\n    </el-form>\r\n\r\n    <el-row :gutter=\"10\" class=\"mb8\">\r\n      <el-col :span=\"1.5\">\r\n        <el-button\r\n          type=\"primary\"\r\n          plain\r\n          icon=\"Download\"\r\n          @click=\"handleGenTable\"\r\n          v-hasPermi=\"['tool:gen:code']\"\r\n        >生成</el-button>\r\n      </el-col>\r\n      <el-col :span=\"1.5\">\r\n        <el-button\r\n          type=\"primary\"\r\n          plain\r\n          icon=\"caret-right\"\r\n          @click=\"openExcuteSql\"\r\n          v-hasRole=\"['admin']\"\r\n        >执行sql</el-button>\r\n      </el-col>\r\n      <el-col :span=\"1.5\">\r\n        <el-button\r\n          type=\"info\"\r\n          plain\r\n          icon=\"Upload\"\r\n          @click=\"openImportTable\"\r\n          v-hasPermi=\"['tool:gen:import']\"\r\n        >导入</el-button>\r\n      </el-col>\r\n      <el-col :span=\"1.5\">\r\n        <el-button\r\n          type=\"success\"\r\n          plain\r\n          icon=\"Edit\"\r\n          :disabled=\"single\"\r\n          @click=\"handleEditTable\"\r\n          v-hasPermi=\"['tool:gen:edit']\"\r\n        >修改</el-button>\r\n      </el-col>\r\n      <el-col :span=\"1.5\">\r\n        <el-button\r\n          type=\"danger\"\r\n          plain\r\n          icon=\"Delete\"\r\n          :disabled=\"multiple\"\r\n          @click=\"handleDelete\"\r\n          v-hasPermi=\"['tool:gen:remove']\"\r\n        >删除</el-button>\r\n      </el-col>\r\n      <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\r\n    </el-row>\r\n\r\n    <el-table v-loading=\"loading\" :data=\"tableList\" @selection-change=\"handleSelectionChange\">\r\n      <el-table-column type=\"selection\" align=\"center\" width=\"55\"></el-table-column>\r\n      <el-table-column label=\"序号\" type=\"index\" width=\"50\" align=\"center\">\r\n        <template #default=\"scope\">\r\n          <span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span>\r\n        </template>\r\n      </el-table-column>\r\n      <el-table-column\r\n        label=\"表名称\"\r\n        align=\"center\"\r\n        prop=\"tableName\"\r\n        :show-overflow-tooltip=\"true\"\r\n      />\r\n      <el-table-column\r\n        label=\"表描述\"\r\n        align=\"center\"\r\n        prop=\"tableComment\"\r\n        :show-overflow-tooltip=\"true\"\r\n      />\r\n      <el-table-column\r\n        label=\"实体\"\r\n        align=\"center\"\r\n        prop=\"className\"\r\n        :show-overflow-tooltip=\"true\"\r\n      />\r\n      <el-table-column label=\"创建时间\" align=\"center\" prop=\"createTime\" width=\"160\" />\r\n      <el-table-column label=\"更新时间\" align=\"center\" prop=\"updateTime\" width=\"160\" />\r\n      <el-table-column label=\"操作\" align=\"center\" width=\"330\" class-name=\"small-padding fixed-width\">\r\n        <template #default=\"scope\">\r\n          <el-tooltip content=\"预览\" placement=\"top\">\r\n            <el-button link type=\"primary\" icon=\"View\" @click=\"handlePreview(scope.row)\" v-hasPermi=\"['tool:gen:preview']\"></el-button>\r\n          </el-tooltip>\r\n          <el-tooltip content=\"编辑\" placement=\"top\">\r\n            <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleEditTable(scope.row)\" v-hasPermi=\"['tool:gen:edit']\"></el-button>\r\n          </el-tooltip>\r\n          <el-tooltip content=\"删除\" placement=\"top\">\r\n            <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['tool:gen:remove']\"></el-button>\r\n          </el-tooltip>\r\n          <el-tooltip content=\"同步\" placement=\"top\">\r\n            <el-button link type=\"primary\" icon=\"Refresh\" @click=\"handleSynchDb(scope.row)\" v-hasPermi=\"['tool:gen:edit']\"></el-button>\r\n          </el-tooltip>\r\n          <el-tooltip content=\"生成代码\" placement=\"top\">\r\n            <el-button link type=\"primary\" icon=\"Download\" @click=\"handleGenTable(scope.row)\" v-hasPermi=\"['tool:gen:code']\"></el-button>\r\n          </el-tooltip>\r\n        </template>\r\n      </el-table-column>\r\n    </el-table>\r\n    <pagination\r\n      v-show=\"total>0\"\r\n      :total=\"total\"\r\n      v-model:page=\"queryParams.pageNum\"\r\n      v-model:limit=\"queryParams.pageSize\"\r\n      @pagination=\"getList\"\r\n    />\r\n    <!-- 预览界面 -->\r\n    <el-dialog :title=\"preview.title\" v-model=\"preview.open\" width=\"80%\" top=\"5vh\" append-to-body class=\"scrollbar\">\r\n      <template v-if=\"preview.data\">\r\n        <el-tabs v-model=\"preview.activeName\">\r\n        <el-tab-pane\r\n          v-for=\"(value, key) in preview.data\"\r\n          :label=\"key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))\"\r\n          :name=\"key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))\"\r\n          :key=\"key\"\r\n        >\r\n          <el-link :underline=\"false\" icon=\"DocumentCopy\" v-copyText=\"value\" v-copyText:callback=\"copyTextSuccess\" style=\"float:right\">&nbsp;复制</el-link>\r\n          <pre><code class=\"hljs\" v-html=\"highlightedCode(value, key)\"></code></pre>\r\n        </el-tab-pane>\r\n      </el-tabs>\r\n      </template>\r\n      \r\n    </el-dialog>\r\n    <excuteSql ref=\"excuteRef\" @ok=\"handleQuery\"></excuteSql>\r\n    <import-table ref=\"importRef\" @ok=\"handleQuery\" />\r\n  </div>\r\n</template>\r\n\r\n<script setup name=\"Gen\">\r\nimport { listTable, previewTable, delTable, genCode, synchDb } from \"@/api/tool/gen\";\r\nimport router from \"@/router\";\r\nimport importTable from \"./importTable\";\r\nimport excuteSql from \"./excuteSql.vue\";\r\nimport hljs from 'highlight.js';\r\nimport \"highlight.js/styles/atom-one-light.min.css\"\r\nimport javascript from \"highlight.js/lib/languages/javascript\"\r\nimport typescript from \"highlight.js/lib/languages/typescript\"\r\nimport sql from \"highlight.js/lib/languages/sql\"\r\nimport html from \"highlight.js/lib/languages/xml\"\r\nimport vue from \"highlight.js/lib/languages/xml\"\r\nhljs.registerLanguage(\"javascript\", javascript);\r\nhljs.registerLanguage(\"typescript\", typescript);\r\nhljs.registerLanguage(\"sql\", sql);\r\nhljs.registerLanguage(\"html\", html);\r\nhljs.registerLanguage(\"vue\", vue);\r\n\r\nconst route = useRoute();\r\nconst { proxy } = getCurrentInstance();\r\n\r\nconst tableList = ref([]);\r\nconst loading = ref(true);\r\nconst showSearch = ref(true);\r\nconst ids = ref([]);\r\nconst single = ref(true);\r\nconst multiple = ref(true);\r\nconst total = ref(0);\r\nconst tableNames = ref([]);\r\nconst dateRange = ref([]);\r\nconst uniqueId = ref(\"\");\r\n\r\nconst data = reactive({\r\n  queryParams: {\r\n    pageNum: 1,\r\n    pageSize: 10,\r\n    tableName: undefined,\r\n    tableComment: undefined\r\n  },\r\n  preview: {\r\n    open: false,\r\n    title: \"代码预览\",\r\n    data: null,\r\n    activeName: \"service.ts\"\r\n  }\r\n});\r\n\r\nconst { queryParams, preview } = toRefs(data);\r\n\r\nonActivated(() => {\r\n  const time = route.query.t;\r\n  if (time != null && time != uniqueId.value) {\r\n    uniqueId.value = time;\r\n    queryParams.value.pageNum = Number(route.query.pageNum);\r\n    dateRange.value = [];\r\n    proxy.resetForm(\"queryForm\");\r\n    getList();\r\n  }\r\n})\r\n/** 高亮显示 */\r\nfunction highlightedCode(code, key) {\r\n  const vmName = key.substring(key.lastIndexOf(\"/\") + 1, key.indexOf(\".vm\"));\r\n  let language = vmName.substring(vmName.indexOf(\".\") + 1, vmName.length);\r\n  const result = hljs.highlight(language, code || \"\", true);\r\n  return result.value || '&nbsp;';\r\n}\r\n/** 查询表集合 */\r\nfunction getList() {\r\n  loading.value = true;\r\n  listTable(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {\r\n    tableList.value = response.rows;\r\n    total.value = response.total;\r\n    loading.value = false;\r\n  });\r\n}\r\n/** 搜索按钮操作 */\r\nfunction handleQuery() {\r\n  queryParams.value.pageNum = 1;\r\n  getList();\r\n}\r\n/** 生成代码操作 */\r\nfunction handleGenTable(row) {\r\n  const tbNames = row.tableName || tableNames.value;\r\n  if (tbNames == \"\") {\r\n    proxy.$modal.msgError(\"请选择要生成的数据\");\r\n    return;\r\n  }\r\n  proxy.$download.zip(\"/tool/gen/batchGenCode?tables=\" + tbNames, \"carole.zip\");\r\n /*  if (row.genType === \"1\") {\r\n    genCode(row.tableName).then(response => {\r\n      proxy.$modal.msgSuccess(\"成功生成到自定义路径：\" + row.genPath);\r\n    });\r\n  } else {\r\n    proxy.$download.zip(\"/tool/gen/batchGenCode?tables=\" + tbNames, \"carole.zip\");\r\n  } */\r\n}\r\n/** 同步数据库操作 */\r\nfunction handleSynchDb(row) {\r\n  const tableName = row.tableName;\r\n  proxy.$modal.confirm('确认要强制同步\"' + tableName + '\"表结构吗？').then(function () {\r\n    return synchDb(tableName);\r\n  }).then(() => {\r\n    proxy.$modal.msgSuccess(\"同步成功\");\r\n  }).catch(() => {});\r\n}\r\n/** 打开导入表弹窗 */\r\nfunction openImportTable() {\r\n  proxy.$refs[\"importRef\"].show();\r\n}\r\n/** 打开执行sql弹窗 */\r\nfunction openExcuteSql() {\r\n  proxy.$refs[\"excuteRef\"].show();\r\n}\r\n/** 重置按钮操作 */\r\nfunction resetQuery() {\r\n  dateRange.value = [];\r\n  proxy.resetForm(\"queryRef\");\r\n  handleQuery();\r\n}\r\n/** 预览按钮 */\r\nfunction handlePreview(row) {\r\n  preview.value.data = null\r\n  previewTable(row.tableId).then(response => {\r\n    preview.value.data = response.data;\r\n    preview.value.open = true;\r\n    preview.value.activeName = \"service.ts\";\r\n    nextTick(()=>{\r\n      document.querySelector(\".el-dialog__body\").scrollTop=0\r\n    })\r\n\r\n  });\r\n}\r\n/** 复制代码成功 */\r\nfunction copyTextSuccess() {\r\n  proxy.$modal.msgSuccess(\"复制成功\");\r\n}\r\n// 多选框选中数据\r\nfunction handleSelectionChange(selection) {\r\n  ids.value = selection.map(item => item.tableId);\r\n  tableNames.value = selection.map(item => item.tableName);\r\n  single.value = selection.length != 1;\r\n  multiple.value = !selection.length;\r\n}\r\n/** 修改按钮操作 */\r\nfunction handleEditTable(row) {\r\n  const tableId = row.tableId || ids.value[0];\r\n  router.push({ path: \"/tool/gen-edit/index/\" + tableId, query: { pageNum: queryParams.value.pageNum } });\r\n}\r\n/** 删除按钮操作 */\r\nfunction handleDelete(row) {\r\n  const tableIds = row.tableId || ids.value;\r\n  proxy.$modal.confirm('是否确认删除表编号为\"' + tableIds + '\"的数据项？').then(function () {\r\n    return delTable(tableIds);\r\n  }).then(() => {\r\n    getList();\r\n    proxy.$modal.msgSuccess(\"删除成功\");\r\n  }).catch(() => {});\r\n}\r\n\r\ngetList();\r\n</script>\r\n"
  },
  {
    "path": "front/src/views/tool/swagger/index.vue",
    "content": "<template>\r\n   <i-frame v-model:src=\"url\"></i-frame>\r\n</template>\r\n\r\n<script setup>\r\nimport iFrame from '@/components/iFrame'\r\n\r\nconst url = ref(import.meta.env.VITE_APP_BASE_API + \"/api\")\r\n</script>\r\n"
  },
  {
    "path": "front/vite/plugins/auto-import.js",
    "content": "import autoImport from 'unplugin-auto-import/vite'\r\n\r\nexport default function createAutoImport() {\r\n    return autoImport({\r\n        imports: [\r\n            'vue',\r\n            'vue-router',\r\n            'pinia'\r\n        ],\r\n        dts: false\r\n    })\r\n}\r\n"
  },
  {
    "path": "front/vite/plugins/compression.js",
    "content": "import compression from 'vite-plugin-compression'\r\n\r\nexport default function createCompression(env) {\r\n    const { VITE_BUILD_COMPRESS } = env\r\n    const plugin = []\r\n    if (VITE_BUILD_COMPRESS) {\r\n        const compressList = VITE_BUILD_COMPRESS.split(',')\r\n        if (compressList.includes('gzip')) {\r\n            // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件\r\n            plugin.push(\r\n                compression({\r\n                    ext: '.gz',\r\n                    deleteOriginFile: false\r\n                })\r\n            )\r\n        }\r\n        if (compressList.includes('brotli')) {\r\n            plugin.push(\r\n                compression({\r\n                    ext: '.br',\r\n                    algorithm: 'brotliCompress',\r\n                    deleteOriginFile: false\r\n                })\r\n            )\r\n        }\r\n    }\r\n    return plugin\r\n}\r\n"
  },
  {
    "path": "front/vite/plugins/index.js",
    "content": "import vue from '@vitejs/plugin-vue'\r\n\r\nimport createAutoImport from './auto-import'\r\nimport createSvgIcon from './svg-icon'\r\nimport createCompression from './compression'\r\nimport createSetupExtend from './setup-extend'\r\n\r\nexport default function createVitePlugins(viteEnv, isBuild = false) {\r\n    const vitePlugins = [vue()]\r\n    vitePlugins.push(createAutoImport())\r\n\tvitePlugins.push(createSetupExtend())\r\n    vitePlugins.push(createSvgIcon(isBuild))\r\n\tisBuild && vitePlugins.push(...createCompression(viteEnv))\r\n    return vitePlugins\r\n}\r\n"
  },
  {
    "path": "front/vite/plugins/setup-extend.js",
    "content": "import setupExtend from 'unplugin-vue-setup-extend-plus/vite'\r\n\r\nexport default function createSetupExtend() {\r\n    return setupExtend({})\r\n}\r\n"
  },
  {
    "path": "front/vite/plugins/svg-icon.js",
    "content": "import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'\r\nimport path from 'path'\r\n\r\nexport default function createSvgIcon(isBuild) {\r\n    return createSvgIconsPlugin({\r\n\t\ticonDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')],\r\n        symbolId: 'icon-[dir]-[name]',\r\n        svgoOptions: isBuild\r\n    })\r\n}\r\n"
  },
  {
    "path": "front/vite.config.js",
    "content": "import { defineConfig, loadEnv } from 'vite'\r\nimport path from 'path'\r\nimport createVitePlugins from './vite/plugins'\r\n\r\n// https://vitejs.dev/config/\r\nexport default defineConfig(({ mode, command }) => {\r\n  const env = loadEnv(mode, process.cwd())\r\n  const { VITE_APP_ENV } = env\r\n  return {\r\n    // 部署生产环境和开发环境下的URL。\r\n    // 默认情况下，vite 会假设你的应用是被部署在一个域名的根路径上\r\n    // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上，你就需要用这个选项指定这个子路径。例如，如果你的应用被部署在 https://www.ruoyi.vip/admin/，则设置 baseUrl 为 /admin/。\r\n    base: VITE_APP_ENV === 'production' ? '/' : '/',\r\n    plugins: createVitePlugins(env, command === 'build'),\r\n    resolve: {\r\n      // https://cn.vitejs.dev/config/#resolve-alias\r\n      alias: {\r\n        // 设置路径\r\n        '~': path.resolve(__dirname, './'),\r\n        // 设置别名\r\n        '@': path.resolve(__dirname, './src')\r\n      },\r\n      // https://cn.vitejs.dev/config/#resolve-extensions\r\n      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']\r\n    },\r\n    // // vite 相关配置\r\n    server: {\r\n      port: 3001,\r\n      host: true,\r\n      open: true,\r\n      proxy: {\r\n        // https://cn.vitejs.dev/config/#server-proxy\r\n        '/dev': {\r\n          target: 'http://localhost:3000/v1',\r\n          changeOrigin: true,\r\n          rewrite: (p) => p.replace(/^\\/dev/, '')\r\n        }\r\n      }\r\n    },\r\n    //fix:error:stdin>:7356:1: warning: \"@charset\" must be the first rule in the file\r\n    css: {\r\n      postcss: {\r\n        plugins: [\r\n          {\r\n            postcssPlugin: 'internal:charset-removal',\r\n            AtRule: {\r\n              charset: (atRule) => {\r\n                if (atRule.name === 'charset') {\r\n                  atRule.remove();\r\n                }\r\n              }\r\n            }\r\n          }\r\n        ]\r\n      }\r\n    }\r\n  }\r\n})\r\n"
  },
  {
    "path": "front/vite.config.js.timestamp-1718102364365-ed912c0771327.mjs",
    "content": "// vite.config.js\nimport { defineConfig, loadEnv } from \"file:///F:/carole-admin/front/node_modules/vite/dist/node/index.js\";\nimport path2 from \"path\";\n\n// vite/plugins/index.js\nimport vue from \"file:///F:/carole-admin/front/node_modules/@vitejs/plugin-vue/dist/index.mjs\";\n\n// vite/plugins/auto-import.js\nimport autoImport from \"file:///F:/carole-admin/front/node_modules/unplugin-auto-import/dist/vite.js\";\nfunction createAutoImport() {\n  return autoImport({\n    imports: [\n      \"vue\",\n      \"vue-router\",\n      \"pinia\"\n    ],\n    dts: false\n  });\n}\n\n// vite/plugins/svg-icon.js\nimport { createSvgIconsPlugin } from \"file:///F:/carole-admin/front/node_modules/vite-plugin-svg-icons/dist/index.mjs\";\nimport path from \"path\";\nfunction createSvgIcon(isBuild) {\n  return createSvgIconsPlugin({\n    iconDirs: [path.resolve(process.cwd(), \"src/assets/icons/svg\")],\n    symbolId: \"icon-[dir]-[name]\",\n    svgoOptions: isBuild\n  });\n}\n\n// vite/plugins/compression.js\nimport compression from \"file:///F:/carole-admin/front/node_modules/vite-plugin-compression/dist/index.mjs\";\nfunction createCompression(env) {\n  const { VITE_BUILD_COMPRESS } = env;\n  const plugin = [];\n  if (VITE_BUILD_COMPRESS) {\n    const compressList = VITE_BUILD_COMPRESS.split(\",\");\n    if (compressList.includes(\"gzip\")) {\n      plugin.push(\n        compression({\n          ext: \".gz\",\n          deleteOriginFile: false\n        })\n      );\n    }\n    if (compressList.includes(\"brotli\")) {\n      plugin.push(\n        compression({\n          ext: \".br\",\n          algorithm: \"brotliCompress\",\n          deleteOriginFile: false\n        })\n      );\n    }\n  }\n  return plugin;\n}\n\n// vite/plugins/setup-extend.js\nimport setupExtend from \"file:///F:/carole-admin/front/node_modules/unplugin-vue-setup-extend-plus/dist/vite.js\";\nfunction createSetupExtend() {\n  return setupExtend({});\n}\n\n// vite/plugins/index.js\nfunction createVitePlugins(viteEnv, isBuild = false) {\n  const vitePlugins = [vue()];\n  vitePlugins.push(createAutoImport());\n  vitePlugins.push(createSetupExtend());\n  vitePlugins.push(createSvgIcon(isBuild));\n  isBuild && vitePlugins.push(...createCompression(viteEnv));\n  return vitePlugins;\n}\n\n// vite.config.js\nvar __vite_injected_original_dirname = \"F:\\\\carole-admin\\\\front\";\nvar vite_config_default = defineConfig(({ mode, command }) => {\n  const env = loadEnv(mode, process.cwd());\n  const { VITE_APP_ENV } = env;\n  return {\n    // 部署生产环境和开发环境下的URL。\n    // 默认情况下，vite 会假设你的应用是被部署在一个域名的根路径上\n    // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上，你就需要用这个选项指定这个子路径。例如，如果你的应用被部署在 https://www.ruoyi.vip/admin/，则设置 baseUrl 为 /admin/。\n    base: VITE_APP_ENV === \"production\" ? \"/\" : \"/\",\n    plugins: createVitePlugins(env, command === \"build\"),\n    resolve: {\n      // https://cn.vitejs.dev/config/#resolve-alias\n      alias: {\n        // 设置路径\n        \"~\": path2.resolve(__vite_injected_original_dirname, \"./\"),\n        // 设置别名\n        \"@\": path2.resolve(__vite_injected_original_dirname, \"./src\")\n      },\n      // https://cn.vitejs.dev/config/#resolve-extensions\n      extensions: [\".mjs\", \".js\", \".ts\", \".jsx\", \".tsx\", \".json\", \".vue\"]\n    },\n    // // vite 相关配置\n    server: {\n      port: 3001,\n      host: true,\n      open: true,\n      proxy: {\n        // https://cn.vitejs.dev/config/#server-proxy\n        \"/dev\": {\n          target: \"http://localhost:3000/v1\",\n          changeOrigin: true,\n          rewrite: (p) => p.replace(/^\\/dev/, \"\")\n        }\n      }\n    },\n    //fix:error:stdin>:7356:1: warning: \"@charset\" must be the first rule in the file\n    css: {\n      postcss: {\n        plugins: [\n          {\n            postcssPlugin: \"internal:charset-removal\",\n            AtRule: {\n              charset: (atRule) => {\n                if (atRule.name === \"charset\") {\n                  atRule.remove();\n                }\n              }\n            }\n          }\n        ]\n      }\n    }\n  };\n});\nexport {\n  vite_config_default as default\n};\n//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcuanMiLCAidml0ZS9wbHVnaW5zL2luZGV4LmpzIiwgInZpdGUvcGx1Z2lucy9hdXRvLWltcG9ydC5qcyIsICJ2aXRlL3BsdWdpbnMvc3ZnLWljb24uanMiLCAidml0ZS9wbHVnaW5zL2NvbXByZXNzaW9uLmpzIiwgInZpdGUvcGx1Z2lucy9zZXR1cC1leHRlbmQuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJGOlxcXFxjYXJvbGUtYWRtaW5cXFxcZnJvbnRcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkY6XFxcXGNhcm9sZS1hZG1pblxcXFxmcm9udFxcXFx2aXRlLmNvbmZpZy5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRjovY2Fyb2xlLWFkbWluL2Zyb250L3ZpdGUuY29uZmlnLmpzXCI7aW1wb3J0IHsgZGVmaW5lQ29uZmlnLCBsb2FkRW52IH0gZnJvbSAndml0ZSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGNyZWF0ZVZpdGVQbHVnaW5zIGZyb20gJy4vdml0ZS9wbHVnaW5zJ1xyXG5cclxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cclxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKCh7IG1vZGUsIGNvbW1hbmQgfSkgPT4ge1xyXG4gIGNvbnN0IGVudiA9IGxvYWRFbnYobW9kZSwgcHJvY2Vzcy5jd2QoKSlcclxuICBjb25zdCB7IFZJVEVfQVBQX0VOViB9ID0gZW52XHJcbiAgcmV0dXJuIHtcclxuICAgIC8vIFx1OTBFOFx1N0Y3Mlx1NzUxRlx1NEVBN1x1NzNBRlx1NTg4M1x1NTQ4Q1x1NUYwMFx1NTNEMVx1NzNBRlx1NTg4M1x1NEUwQlx1NzY4NFVSTFx1MzAwMlxyXG4gICAgLy8gXHU5RUQ4XHU4QkE0XHU2MEM1XHU1MUI1XHU0RTBCXHVGRjBDdml0ZSBcdTRGMUFcdTUwNDdcdThCQkVcdTRGNjBcdTc2ODRcdTVFOTRcdTc1MjhcdTY2MkZcdTg4QUJcdTkwRThcdTdGNzJcdTU3MjhcdTRFMDBcdTRFMkFcdTU3REZcdTU0MERcdTc2ODRcdTY4MzlcdThERUZcdTVGODRcdTRFMEFcclxuICAgIC8vIFx1NEY4Qlx1NTk4MiBodHRwczovL3d3dy5ydW95aS52aXAvXHUzMDAyXHU1OTgyXHU2NzlDXHU1RTk0XHU3NTI4XHU4OEFCXHU5MEU4XHU3RjcyXHU1NzI4XHU0RTAwXHU0RTJBXHU1QjUwXHU4REVGXHU1Rjg0XHU0RTBBXHVGRjBDXHU0RjYwXHU1QzMxXHU5NzAwXHU4OTgxXHU3NTI4XHU4RkQ5XHU0RTJBXHU5MDA5XHU5ODc5XHU2MzA3XHU1QjlBXHU4RkQ5XHU0RTJBXHU1QjUwXHU4REVGXHU1Rjg0XHUzMDAyXHU0RjhCXHU1OTgyXHVGRjBDXHU1OTgyXHU2NzlDXHU0RjYwXHU3Njg0XHU1RTk0XHU3NTI4XHU4OEFCXHU5MEU4XHU3RjcyXHU1NzI4IGh0dHBzOi8vd3d3LnJ1b3lpLnZpcC9hZG1pbi9cdUZGMENcdTUyMTlcdThCQkVcdTdGNkUgYmFzZVVybCBcdTRFM0EgL2FkbWluL1x1MzAwMlxyXG4gICAgYmFzZTogVklURV9BUFBfRU5WID09PSAncHJvZHVjdGlvbicgPyAnLycgOiAnLycsXHJcbiAgICBwbHVnaW5zOiBjcmVhdGVWaXRlUGx1Z2lucyhlbnYsIGNvbW1hbmQgPT09ICdidWlsZCcpLFxyXG4gICAgcmVzb2x2ZToge1xyXG4gICAgICAvLyBodHRwczovL2NuLnZpdGVqcy5kZXYvY29uZmlnLyNyZXNvbHZlLWFsaWFzXHJcbiAgICAgIGFsaWFzOiB7XHJcbiAgICAgICAgLy8gXHU4QkJFXHU3RjZFXHU4REVGXHU1Rjg0XHJcbiAgICAgICAgJ34nOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi8nKSxcclxuICAgICAgICAvLyBcdThCQkVcdTdGNkVcdTUyMkJcdTU0MERcclxuICAgICAgICAnQCc6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYycpXHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIGh0dHBzOi8vY24udml0ZWpzLmRldi9jb25maWcvI3Jlc29sdmUtZXh0ZW5zaW9uc1xyXG4gICAgICBleHRlbnNpb25zOiBbJy5tanMnLCAnLmpzJywgJy50cycsICcuanN4JywgJy50c3gnLCAnLmpzb24nLCAnLnZ1ZSddXHJcbiAgICB9LFxyXG4gICAgLy8gLy8gdml0ZSBcdTc2RjhcdTUxNzNcdTkxNERcdTdGNkVcclxuICAgIHNlcnZlcjoge1xyXG4gICAgICBwb3J0OiAzMDAxLFxyXG4gICAgICBob3N0OiB0cnVlLFxyXG4gICAgICBvcGVuOiB0cnVlLFxyXG4gICAgICBwcm94eToge1xyXG4gICAgICAgIC8vIGh0dHBzOi8vY24udml0ZWpzLmRldi9jb25maWcvI3NlcnZlci1wcm94eVxyXG4gICAgICAgICcvZGV2Jzoge1xyXG4gICAgICAgICAgdGFyZ2V0OiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL3YxJyxcclxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcclxuICAgICAgICAgIHJld3JpdGU6IChwKSA9PiBwLnJlcGxhY2UoL15cXC9kZXYvLCAnJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvL2ZpeDplcnJvcjpzdGRpbj46NzM1NjoxOiB3YXJuaW5nOiBcIkBjaGFyc2V0XCIgbXVzdCBiZSB0aGUgZmlyc3QgcnVsZSBpbiB0aGUgZmlsZVxyXG4gICAgY3NzOiB7XHJcbiAgICAgIHBvc3Rjc3M6IHtcclxuICAgICAgICBwbHVnaW5zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHBvc3Rjc3NQbHVnaW46ICdpbnRlcm5hbDpjaGFyc2V0LXJlbW92YWwnLFxyXG4gICAgICAgICAgICBBdFJ1bGU6IHtcclxuICAgICAgICAgICAgICBjaGFyc2V0OiAoYXRSdWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXRSdWxlLm5hbWUgPT09ICdjaGFyc2V0Jykge1xyXG4gICAgICAgICAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59KVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkY6XFxcXGNhcm9sZS1hZG1pblxcXFxmcm9udFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkY6XFxcXGNhcm9sZS1hZG1pblxcXFxmcm9udFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcaW5kZXguanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Y6L2Nhcm9sZS1hZG1pbi9mcm9udC92aXRlL3BsdWdpbnMvaW5kZXguanNcIjtpbXBvcnQgdnVlIGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZSdcclxuXHJcbmltcG9ydCBjcmVhdGVBdXRvSW1wb3J0IGZyb20gJy4vYXV0by1pbXBvcnQnXHJcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4vc3ZnLWljb24nXHJcbmltcG9ydCBjcmVhdGVDb21wcmVzc2lvbiBmcm9tICcuL2NvbXByZXNzaW9uJ1xyXG5pbXBvcnQgY3JlYXRlU2V0dXBFeHRlbmQgZnJvbSAnLi9zZXR1cC1leHRlbmQnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVWaXRlUGx1Z2lucyh2aXRlRW52LCBpc0J1aWxkID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHZpdGVQbHVnaW5zID0gW3Z1ZSgpXVxyXG4gICAgdml0ZVBsdWdpbnMucHVzaChjcmVhdGVBdXRvSW1wb3J0KCkpXHJcblx0dml0ZVBsdWdpbnMucHVzaChjcmVhdGVTZXR1cEV4dGVuZCgpKVxyXG4gICAgdml0ZVBsdWdpbnMucHVzaChjcmVhdGVTdmdJY29uKGlzQnVpbGQpKVxyXG5cdGlzQnVpbGQgJiYgdml0ZVBsdWdpbnMucHVzaCguLi5jcmVhdGVDb21wcmVzc2lvbih2aXRlRW52KSlcclxuICAgIHJldHVybiB2aXRlUGx1Z2luc1xyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRjpcXFxcY2Fyb2xlLWFkbWluXFxcXGZyb250XFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRjpcXFxcY2Fyb2xlLWFkbWluXFxcXGZyb250XFxcXHZpdGVcXFxccGx1Z2luc1xcXFxhdXRvLWltcG9ydC5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRjovY2Fyb2xlLWFkbWluL2Zyb250L3ZpdGUvcGx1Z2lucy9hdXRvLWltcG9ydC5qc1wiO2ltcG9ydCBhdXRvSW1wb3J0IGZyb20gJ3VucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGUnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVBdXRvSW1wb3J0KCkge1xyXG4gICAgcmV0dXJuIGF1dG9JbXBvcnQoe1xyXG4gICAgICAgIGltcG9ydHM6IFtcclxuICAgICAgICAgICAgJ3Z1ZScsXHJcbiAgICAgICAgICAgICd2dWUtcm91dGVyJyxcclxuICAgICAgICAgICAgJ3BpbmlhJ1xyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZHRzOiBmYWxzZVxyXG4gICAgfSlcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkY6XFxcXGNhcm9sZS1hZG1pblxcXFxmcm9udFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkY6XFxcXGNhcm9sZS1hZG1pblxcXFxmcm9udFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcc3ZnLWljb24uanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Y6L2Nhcm9sZS1hZG1pbi9mcm9udC92aXRlL3BsdWdpbnMvc3ZnLWljb24uanNcIjtpbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gJ3ZpdGUtcGx1Z2luLXN2Zy1pY29ucydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24oaXNCdWlsZCkge1xyXG4gICAgcmV0dXJuIGNyZWF0ZVN2Z0ljb25zUGx1Z2luKHtcclxuXHRcdGljb25EaXJzOiBbcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvYXNzZXRzL2ljb25zL3N2ZycpXSxcclxuICAgICAgICBzeW1ib2xJZDogJ2ljb24tW2Rpcl0tW25hbWVdJyxcclxuICAgICAgICBzdmdvT3B0aW9uczogaXNCdWlsZFxyXG4gICAgfSlcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkY6XFxcXGNhcm9sZS1hZG1pblxcXFxmcm9udFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkY6XFxcXGNhcm9sZS1hZG1pblxcXFxmcm9udFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcY29tcHJlc3Npb24uanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0Y6L2Nhcm9sZS1hZG1pbi9mcm9udC92aXRlL3BsdWdpbnMvY29tcHJlc3Npb24uanNcIjtpbXBvcnQgY29tcHJlc3Npb24gZnJvbSAndml0ZS1wbHVnaW4tY29tcHJlc3Npb24nXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDb21wcmVzc2lvbihlbnYpIHtcclxuICAgIGNvbnN0IHsgVklURV9CVUlMRF9DT01QUkVTUyB9ID0gZW52XHJcbiAgICBjb25zdCBwbHVnaW4gPSBbXVxyXG4gICAgaWYgKFZJVEVfQlVJTERfQ09NUFJFU1MpIHtcclxuICAgICAgICBjb25zdCBjb21wcmVzc0xpc3QgPSBWSVRFX0JVSUxEX0NPTVBSRVNTLnNwbGl0KCcsJylcclxuICAgICAgICBpZiAoY29tcHJlc3NMaXN0LmluY2x1ZGVzKCdnemlwJykpIHtcclxuICAgICAgICAgICAgLy8gaHR0cDovL2RvYy5ydW95aS52aXAvcnVveWktdnVlL290aGVyL2ZhcS5odG1sI1x1NEY3Rlx1NzUyOGd6aXBcdTg5RTNcdTUzOEJcdTdGMjlcdTk3NTlcdTYwMDFcdTY1ODdcdTRFRjZcclxuICAgICAgICAgICAgcGx1Z2luLnB1c2goXHJcbiAgICAgICAgICAgICAgICBjb21wcmVzc2lvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgZXh0OiAnLmd6JyxcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVPcmlnaW5GaWxlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29tcHJlc3NMaXN0LmluY2x1ZGVzKCdicm90bGknKSkge1xyXG4gICAgICAgICAgICBwbHVnaW4ucHVzaChcclxuICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uKHtcclxuICAgICAgICAgICAgICAgICAgICBleHQ6ICcuYnInLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsZ29yaXRobTogJ2Jyb3RsaUNvbXByZXNzJyxcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVPcmlnaW5GaWxlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwbHVnaW5cclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkY6XFxcXGNhcm9sZS1hZG1pblxcXFxmcm9udFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkY6XFxcXGNhcm9sZS1hZG1pblxcXFxmcm9udFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcc2V0dXAtZXh0ZW5kLmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9GOi9jYXJvbGUtYWRtaW4vZnJvbnQvdml0ZS9wbHVnaW5zL3NldHVwLWV4dGVuZC5qc1wiO2ltcG9ydCBzZXR1cEV4dGVuZCBmcm9tICd1bnBsdWdpbi12dWUtc2V0dXAtZXh0ZW5kLXBsdXMvdml0ZSdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNldHVwRXh0ZW5kKCkge1xyXG4gICAgcmV0dXJuIHNldHVwRXh0ZW5kKHt9KVxyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBdVAsU0FBUyxjQUFjLGVBQWU7QUFDN1IsT0FBT0EsV0FBVTs7O0FDRHFRLE9BQU8sU0FBUzs7O0FDQUosT0FBTyxnQkFBZ0I7QUFFMVMsU0FBUixtQkFBb0M7QUFDdkMsU0FBTyxXQUFXO0FBQUEsSUFDZCxTQUFTO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSjtBQUFBLElBQ0EsS0FBSztBQUFBLEVBQ1QsQ0FBQztBQUNMOzs7QUNYNFIsU0FBUyw0QkFBNEI7QUFDalUsT0FBTyxVQUFVO0FBRUYsU0FBUixjQUErQixTQUFTO0FBQzNDLFNBQU8scUJBQXFCO0FBQUEsSUFDOUIsVUFBVSxDQUFDLEtBQUssUUFBUSxRQUFRLElBQUksR0FBRyxzQkFBc0IsQ0FBQztBQUFBLElBQ3hELFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNqQixDQUFDO0FBQ0w7OztBQ1RrUyxPQUFPLGlCQUFpQjtBQUUzUyxTQUFSLGtCQUFtQyxLQUFLO0FBQzNDLFFBQU0sRUFBRSxvQkFBb0IsSUFBSTtBQUNoQyxRQUFNLFNBQVMsQ0FBQztBQUNoQixNQUFJLHFCQUFxQjtBQUNyQixVQUFNLGVBQWUsb0JBQW9CLE1BQU0sR0FBRztBQUNsRCxRQUFJLGFBQWEsU0FBUyxNQUFNLEdBQUc7QUFFL0IsYUFBTztBQUFBLFFBQ0gsWUFBWTtBQUFBLFVBQ1IsS0FBSztBQUFBLFVBQ0wsa0JBQWtCO0FBQUEsUUFDdEIsQ0FBQztBQUFBLE1BQ0w7QUFBQSxJQUNKO0FBQ0EsUUFBSSxhQUFhLFNBQVMsUUFBUSxHQUFHO0FBQ2pDLGFBQU87QUFBQSxRQUNILFlBQVk7QUFBQSxVQUNSLEtBQUs7QUFBQSxVQUNMLFdBQVc7QUFBQSxVQUNYLGtCQUFrQjtBQUFBLFFBQ3RCLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxTQUFPO0FBQ1g7OztBQzNCb1MsT0FBTyxpQkFBaUI7QUFFN1MsU0FBUixvQkFBcUM7QUFDeEMsU0FBTyxZQUFZLENBQUMsQ0FBQztBQUN6Qjs7O0FKR2UsU0FBUixrQkFBbUMsU0FBUyxVQUFVLE9BQU87QUFDaEUsUUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDO0FBQzFCLGNBQVksS0FBSyxpQkFBaUIsQ0FBQztBQUN0QyxjQUFZLEtBQUssa0JBQWtCLENBQUM7QUFDakMsY0FBWSxLQUFLLGNBQWMsT0FBTyxDQUFDO0FBQzFDLGFBQVcsWUFBWSxLQUFLLEdBQUcsa0JBQWtCLE9BQU8sQ0FBQztBQUN0RCxTQUFPO0FBQ1g7OztBRGRBLElBQU0sbUNBQW1DO0FBS3pDLElBQU8sc0JBQVEsYUFBYSxDQUFDLEVBQUUsTUFBTSxRQUFRLE1BQU07QUFDakQsUUFBTSxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQUksQ0FBQztBQUN2QyxRQUFNLEVBQUUsYUFBYSxJQUFJO0FBQ3pCLFNBQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlMLE1BQU0saUJBQWlCLGVBQWUsTUFBTTtBQUFBLElBQzVDLFNBQVMsa0JBQWtCLEtBQUssWUFBWSxPQUFPO0FBQUEsSUFDbkQsU0FBUztBQUFBO0FBQUEsTUFFUCxPQUFPO0FBQUE7QUFBQSxRQUVMLEtBQUtDLE1BQUssUUFBUSxrQ0FBVyxJQUFJO0FBQUE7QUFBQSxRQUVqQyxLQUFLQSxNQUFLLFFBQVEsa0NBQVcsT0FBTztBQUFBLE1BQ3RDO0FBQUE7QUFBQSxNQUVBLFlBQVksQ0FBQyxRQUFRLE9BQU8sT0FBTyxRQUFRLFFBQVEsU0FBUyxNQUFNO0FBQUEsSUFDcEU7QUFBQTtBQUFBLElBRUEsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBO0FBQUEsUUFFTCxRQUFRO0FBQUEsVUFDTixRQUFRO0FBQUEsVUFDUixjQUFjO0FBQUEsVUFDZCxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsVUFBVSxFQUFFO0FBQUEsUUFDeEM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBO0FBQUEsSUFFQSxLQUFLO0FBQUEsTUFDSCxTQUFTO0FBQUEsUUFDUCxTQUFTO0FBQUEsVUFDUDtBQUFBLFlBQ0UsZUFBZTtBQUFBLFlBQ2YsUUFBUTtBQUFBLGNBQ04sU0FBUyxDQUFDLFdBQVc7QUFDbkIsb0JBQUksT0FBTyxTQUFTLFdBQVc7QUFDN0IseUJBQU8sT0FBTztBQUFBLGdCQUNoQjtBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogWyJwYXRoIiwgInBhdGgiXQp9Cg==\n"
  },
  {
    "path": "server/.eslintignore",
    "content": "prisma-client"
  },
  {
    "path": "server/.eslintrc.js",
    "content": "module.exports = {\r\n  parser: '@typescript-eslint/parser',\r\n  parserOptions: {\r\n    project: 'tsconfig.json',\r\n    tsconfigRootDir: __dirname,\r\n    sourceType: 'module',\r\n  },\r\n  plugins: ['@typescript-eslint/eslint-plugin'],\r\n  extends: [\r\n    'plugin:@typescript-eslint/recommended',\r\n    'plugin:prettier/recommended',\r\n  ],\r\n  root: true,\r\n  env: {\r\n    node: true,\r\n    jest: true,\r\n  },\r\n  ignorePatterns: ['.eslintrc.js'],\r\n  rules: {\r\n    '@typescript-eslint/interface-name-prefix': 'off',  // 关闭接口名称前缀规则\r\n    '@typescript-eslint/explicit-function-return-type': 'off',  // 关闭显式函数返回类型规则\r\n    '@typescript-eslint/explicit-module-boundary-types': 'off',  // 关闭显式模块边界类型规则\r\n    '@typescript-eslint/no-explicit-any': 'off',  // 允许使用 any 类型\r\n    '@typescript-eslint/no-var-requires': 'off',  // 允许使用 require\r\n    '@typescript-eslint/no-empty-function': 'off',  // 允许空函数\r\n    '@typescript-eslint/ban-types': 'off',  // 关闭禁止特定类型的规则\r\n    'prettier/prettier': ['error', { endOfLine: 'auto' }],  // 确保 Prettier 使用自动行尾格式\r\n    'prefer-const': 'off',\r\n    '@typescript-eslint/no-unused-vars': 'off',\r\n    '@typescript-eslint/ban-ts-comment': 'off',\r\n    'quotes': ['0'] //忽略单双引号\r\n  },\r\n  overrides: [\r\n    {\r\n      files: ['src/common/middleware/auth/auth.middleware.ts'],\r\n      rules: {\r\n        '@typescript-eslint/ban-ts-comment': 'off', // 在特定文件中关闭该规则\r\n      },\r\n    },\r\n  ],\r\n};\r\n"
  },
  {
    "path": "server/.prettierrc",
    "content": "{\r\n  \"singleQuote\": true,\r\n  \"trailingComma\": \"all\"\r\n}"
  },
  {
    "path": "server/nest-cli.json",
    "content": "{\r\n  \"$schema\": \"https://json.schemastore.org/nest-cli\",\r\n  \"collection\": \"@nestjs/schematics\",\r\n  \"sourceRoot\": \"src\",\r\n  \"compilerOptions\": {\r\n    \"deleteOutDir\": true,\r\n    \"assets\": [\r\n      { \"include\": \".env\", \"watchAssets\": true },\r\n      { \"include\": \"common/service/gen/gen-template\", \"watchAssets\": true },\r\n      { \"include\": \"common/prisma-client\", \"watchAssets\": true },\r\n      { \"include\": \"**/*.json\", \"watchAssets\": true }\r\n    ]\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/package.json",
    "content": "{\r\n  \"name\": \"carole-admin\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"carole-admin后台框架\",\r\n  \"author\": \"carole\",\r\n  \"private\": true,\r\n  \"license\": \"UNLICENSED\",\r\n  \"prisma\": {\r\n    \"schema\": \"./src/prisma/\"\r\n  },\r\n  \"scripts\": {\r\n    \"build\": \"nest build\",\r\n    \"format\": \"prettier --write \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\r\n    \"start\": \"nest start\",\r\n    \"start:dev\": \"nest start --watch\",\r\n    \"start:debug\": \"nest start --debug --watch\",\r\n    \"start:prod\": \"node dist/main\",\r\n    \"lint\": \"eslint \\\"{src,apps,libs,test}/**/*.ts\\\" --fix\",\r\n    \"test\": \"jest\",\r\n    \"test:watch\": \"jest --watch\",\r\n    \"test:cov\": \"jest --coverage\",\r\n    \"test:debug\": \"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand\",\r\n    \"test:e2e\": \"jest --config ./test/jest-e2e.json\"\r\n  },\r\n  \"dependencies\": {\r\n    \"@nestjs/common\": \"^10.0.0\",\r\n    \"@nestjs/core\": \"^10.0.0\",\r\n    \"@nestjs/platform-express\": \"^10.0.0\",\r\n    \"@nestjs/schedule\": \"^4.0.2\",\r\n    \"@nestjs/swagger\": \"^7.3.1\",\r\n    \"@nestjs/throttler\": \"^5.1.2\",\r\n    \"@prisma/client\": \"^5.15.0\",\r\n    \"archiver\": \"^7.0.1\",\r\n    \"axios\": \"^1.6.8\",\r\n    \"bowser\": \"^2.11.0\",\r\n    \"class-transformer\": \"^0.5.1\",\r\n    \"class-validator\": \"^0.14.1\",\r\n    \"crypto-js\": \"^4.2.0\",\r\n    \"dayjs\": \"^1.11.11\",\r\n    \"dotenv\": \"^16.4.5\",\r\n    \"generic-pool\": \"^3.9.0\",\r\n    \"ioredis\": \"^5.4.1\",\r\n    \"jsonwebtoken\": \"^9.0.2\",\r\n    \"kolorist\": \"^1.8.0\",\r\n    \"lib-qqwry\": \"^1.3.4\",\r\n    \"lodash\": \"^4.17.21\",\r\n    \"module-alias\": \"^2.2.3\",\r\n    \"multer\": \"^1.4.5-lts.1\",\r\n    \"mysql2\": \"^3.9.7\",\r\n    \"nestjs-throttler-storage-redis\": \"^0.4.4\",\r\n    \"node-xlsx\": \"^0.24.0\",\r\n    \"nodemailer\": \"^6.9.13\",\r\n    \"redis\": \"^4.6.13\",\r\n    \"reflect-metadata\": \"^0.2.0\",\r\n    \"rxjs\": \"^7.8.1\",\r\n    \"svg-captcha\": \"^1.4.0\",\r\n    \"swagger-ui-express\": \"^5.0.0\",\r\n    \"systeminformation\": \"^5.22.7\",\r\n    \"velocityjs\": \"^2.0.6\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"@nestjs/cli\": \"^10.0.0\",\r\n    \"@nestjs/schematics\": \"^10.0.0\",\r\n    \"@nestjs/testing\": \"^10.0.0\",\r\n    \"@types/crypto-js\": \"^4.2.2\",\r\n    \"@types/express\": \"^4.17.17\",\r\n    \"@types/jest\": \"^29.5.2\",\r\n    \"@types/jsonwebtoken\": \"^9.0.6\",\r\n    \"@types/lodash\": \"^4.17.0\",\r\n    \"@types/multer\": \"^1.4.11\",\r\n    \"@types/node\": \"^20.12.12\",\r\n    \"@types/nodemailer\": \"^6.4.15\",\r\n    \"@types/redis\": \"^4.0.11\",\r\n    \"@types/supertest\": \"^6.0.0\",\r\n    \"@types/systeminformation\": \"^3.54.1\",\r\n    \"@typescript-eslint/eslint-plugin\": \"^6.0.0\",\r\n    \"@typescript-eslint/parser\": \"^6.0.0\",\r\n    \"eslint\": \"^8.42.0\",\r\n    \"eslint-config-prettier\": \"^9.0.0\",\r\n    \"eslint-plugin-prettier\": \"^5.0.0\",\r\n    \"jest\": \"^29.5.0\",\r\n    \"prettier\": \"^3.0.0\",\r\n    \"prisma\": \"^5.15.0\",\r\n    \"source-map-support\": \"^0.5.21\",\r\n    \"supertest\": \"^6.3.3\",\r\n    \"ts-jest\": \"^29.1.0\",\r\n    \"ts-loader\": \"^9.4.3\",\r\n    \"ts-node\": \"^10.9.1\",\r\n    \"tsconfig-paths\": \"^4.2.0\",\r\n    \"typescript\": \"^5.3.2\"\r\n  },\r\n  \"jest\": {\r\n    \"moduleFileExtensions\": [\r\n      \"js\",\r\n      \"json\",\r\n      \"ts\"\r\n    ],\r\n    \"rootDir\": \"src\",\r\n    \"testRegex\": \".*\\\\.spec\\\\.ts$\",\r\n    \"transform\": {\r\n      \"^.+\\\\.(t|j)s$\": \"ts-jest\"\r\n    },\r\n    \"collectCoverageFrom\": [\r\n      \"**/*.(t|j)s\"\r\n    ],\r\n    \"coverageDirectory\": \"../coverage\",\r\n    \"testEnvironment\": \"node\"\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/admin.module.ts",
    "content": "import { Module } from '@nestjs/common';\r\nimport { CaptchaController } from '@/admin/common/captcha/captcha.controller';\r\nimport { UploadController } from './common/upload/upload.controller';\r\nimport { AuthController } from './system/auth/auth.controller';\r\nimport { SysUserController } from './system/user/sys-user.controller';\r\nimport { SysDeptController } from './system/dept/sys-dept.controller';\r\nimport { SysConfigController } from './system/config/sys-config.controller';\r\nimport { DictDataController } from './system/dict-data/dict-data.controller';\r\nimport { DictTypeController } from './system/dict-type/dict-type.controller';\r\nimport { SysMenuController } from './system/menu/sys-menu.controller';\r\nimport { SysPostController } from './system/post/sys-post.controller';\r\nimport { SysRoleController } from './system/role/sys-role.controller';\r\nimport { GenController } from './gen/gen.controller';\r\nimport { DeptService } from './system/dept/service/sys-dept.service';\r\nimport { MenuService } from './system/menu/service/sys-menu.service';\r\nimport { ConfigService } from './system/config/service/sys-config.service';\r\nimport { LogininforService } from './system/logininfor/service/sys-logininfor.service';\r\nimport { NoticeService } from './system/notice/service/sys-notice.service';\r\nimport { PostService } from './system/post/service/sys-post.service';\r\nimport { RoleService } from './system/role/service/sys-role.service';\r\nimport { GenService } from '@/common/service/gen/gen.service';\r\nimport { SysDictTypeService } from './system/dict-type/service/sys-dict-type.service';\r\nimport { SysDictDataService } from './system/dict-data/service/sys-dict-data.service';\r\nimport { UserService } from './system/user/service/sys-user.service';\r\nimport { SysNoticeController } from './system/notice/sys-notice.controller';\r\nimport { SysLogininforController } from './system/logininfor/sys-logininfor.controller';\r\nimport { monitorController } from './system/monitor/monitor.controller';\r\n@Module({\r\n  imports: [],\r\n  controllers: [\r\n    CaptchaController,\r\n    UploadController,\r\n    AuthController,\r\n    SysDeptController,\r\n    SysConfigController,\r\n    DictDataController,\r\n    DictTypeController,\r\n    SysMenuController,\r\n    SysPostController,\r\n    SysRoleController,\r\n    GenController,\r\n    SysUserController,\r\n    SysNoticeController,\r\n    SysLogininforController,\r\n    monitorController,\r\n  ],\r\n  providers: [\r\n    DeptService,\r\n    MenuService,\r\n    ConfigService,\r\n    LogininforService,\r\n    MenuService,\r\n    NoticeService,\r\n    PostService,\r\n    RoleService,\r\n    GenService,\r\n    SysDictDataService,\r\n    SysDictTypeService,\r\n    UserService,\r\n    LogininforService,\r\n  ],\r\n})\r\nexport class AdminModule {}\r\n"
  },
  {
    "path": "server/src/admin/common/captcha/captcha.controller.ts",
    "content": "import { Controller, Get } from '@nestjs/common';\r\nimport { createMath, createText } from '@/common/utils/captcha';\r\nimport { Config } from '@/config';\r\nimport { redisUtils } from '@/common/utils/redisUtils';\r\nimport Result from '@/common/result/Result';\r\nimport { Constants } from '@/common/constant/Constants';\r\nimport { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';\r\nimport CaptchaImageVo from './vo/CaptchaImageVo';\r\nimport { randomUUID } from 'crypto';\r\nimport { Throttle } from '@nestjs/throttler';\r\n@ApiTags('验证码模块')\r\n@Controller('/captchaImage')\r\nexport class CaptchaController {\r\n  /*\r\n   * 生成验证码\r\n   * */\r\n  @Get()\r\n  @ApiOperation({\r\n    summary: '获取验证码',\r\n  })\r\n  @ApiOkResponse({\r\n    type: CaptchaImageVo,\r\n  })\r\n  @Throttle({\r\n    default: {\r\n      limit: 8,\r\n      ttl: 1000 * 60,\r\n    },\r\n  })\r\n  async getCaptchaImage() {\r\n    const map = {\r\n      math: createMath,\r\n      text: createText,\r\n    };\r\n    //根据配置的是math还是text自动调用方法生成数据\r\n    const captchaInfo = map[Config.captcha.mode]();\r\n    //是否开启验证码\r\n    const enable = await redisUtils.get(\r\n      Constants.SYS_CONFIG_KEY + 'sys.account.captchaEnabled',\r\n    );\r\n    const captchaEnabled: boolean = enable == '' ? true : enable === 'true';\r\n    const data = {\r\n      captchaEnabled,\r\n      img: captchaInfo.data,\r\n      uuid: randomUUID(),\r\n    };\r\n    try {\r\n      await redisUtils.set(\r\n        Constants.CAPTCHA_CODE_KEY + data.uuid,\r\n        captchaInfo.text.toLowerCase(),\r\n        Config.captcha.expiresIn,\r\n      );\r\n      return data;\r\n    } catch (err) {\r\n      return Result.Error('生成验证码错误，请重试');\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/common/captcha/vo/CaptchaImageVo.ts",
    "content": "import { ApiProperty } from '@nestjs/swagger';\r\n\r\nclass Data {\r\n  @ApiProperty({\r\n    example: true,\r\n    description: '验证码是否启用',\r\n  })\r\n  'captchaEnabled': boolean;\r\n  @ApiProperty({\r\n    example: '<svg>.....</svg>',\r\n    description: '接口图片svg格式',\r\n  })\r\n  'img': string;\r\n  @ApiProperty({\r\n    example: '14196d31-2bdf-4a42-b34c-eb771556e10e',\r\n    description: '接口uuid，验证需要',\r\n  })\r\n  'uuid': string;\r\n}\r\n\r\nexport default class CaptchaImageVo {\r\n  @ApiProperty({\r\n    example: 200,\r\n    description: '响应code',\r\n  })\r\n  code: number;\r\n  @ApiProperty({\r\n    example: true,\r\n    description: '请求是否成功处理',\r\n  })\r\n  'success': boolean;\r\n  @ApiProperty({\r\n    example: 'successful',\r\n    description: '接口备注信息',\r\n  })\r\n  'msg': string;\r\n  @ApiProperty({\r\n    type: Data,\r\n    description: '返回数据',\r\n  })\r\n  'data': Data;\r\n  @ApiProperty({\r\n    example: '2024-04-28 22:32:35',\r\n    description: '处理时间',\r\n  })\r\n  'time': string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/common/upload/config/uploadConfig.ts",
    "content": "import { createFolder, nowDate } from '@/common/utils';\r\nimport * as path from 'path';\r\nimport * as multer from 'multer';\r\n\r\nimport { randomUUID } from 'crypto';\r\nimport { Config } from '@/config';\r\nimport { Constants } from '@/common/constant/Constants';\r\nlet saveDir = Config.upload.path;\r\nconst avatarDir = path.join(saveDir, 'avatar');\r\nsaveDir = path.join(saveDir, 'files');\r\nfunction createStorage(dir = saveDir) {\r\n  return multer.diskStorage({\r\n    destination: function (req, file, cb) {\r\n      createFolder(path.join(dir, nowDate()));\r\n      // 接收到文件后输出的保存路径（若不存在则需要创建）\r\n      cb(null, path.join(dir, nowDate()));\r\n    },\r\n    filename: function (req, file, cb) {\r\n      // 将保存文件名设置为  uuid + 文件原始名\r\n      cb(\r\n        null,\r\n        +new Date() +\r\n          randomUUID().replaceAll('-', '') +\r\n          (path.extname(file.originalname) || '.jpg'),\r\n      );\r\n    },\r\n  });\r\n}\r\n\r\ncreateFolder(saveDir);\r\ncreateFolder(avatarDir);\r\nexport const uploadFileConfig = {\r\n  storage: createStorage(saveDir),\r\n  limits: Config.upload.config.file,\r\n  fileFilter: function (_req, file, cb) {\r\n    checkFileType(file, cb);\r\n  },\r\n};\r\n\r\nexport const uploadAvatarConfig = {\r\n  storage: createStorage(avatarDir),\r\n  limits: Config.upload.config.img,\r\n  fileFilter: function (_req, file, cb) {\r\n    checkImgFileType(file, cb);\r\n  },\r\n};\r\nfunction checkImgFileType(file, cb) {\r\n  const filetypes = ['jpeg', 'jpg', 'png', 'gif'];\r\n  const mimetypes = [\r\n    'image/png',\r\n    'image/jpeg',\r\n    'image/jpg',\r\n    'image/webp',\r\n    'image/gif',\r\n  ];\r\n  const extname = filetypes.includes(\r\n    file.originalname.split('.').pop().toLowerCase(),\r\n  );\r\n  const mimetype = mimetypes.includes(file.mimetype);\r\n  if (mimetype && extname) {\r\n    return cb(null, true);\r\n  } else {\r\n    const err = new multer.MulterError(\r\n      <\r\n        | 'LIMIT_PART_COUNT'\r\n        | 'LIMIT_FILE_SIZE'\r\n        | 'LIMIT_FILE_COUNT'\r\n        | 'LIMIT_FIELD_KEY'\r\n        | 'LIMIT_FIELD_VALUE'\r\n        | 'LIMIT_FIELD_COUNT'\r\n        | 'LIMIT_UNEXPECTED_FILE'\r\n      >'TypeError',\r\n    );\r\n    err.message = '只允许上传图片类型！';\r\n    cb(err, false);\r\n  }\r\n}\r\n\r\nfunction checkFileType(file, cb) {\r\n  const fileTypes = [\r\n    // 图片\r\n    'gif',\r\n    'jpg',\r\n    'jpeg',\r\n    'png',\r\n    // word excel powerpoint\r\n    'doc',\r\n    'docx',\r\n    'csv',\r\n    'text/csv',\r\n    'xls',\r\n    'xlsx',\r\n    'ppt',\r\n    'pptx',\r\n    'txt',\r\n    // 压缩文件\r\n    'rar',\r\n    'zip',\r\n    'gz',\r\n    // 视频格式\r\n    'mp4',\r\n    'avi',\r\n    // pdf\r\n    'pdf',\r\n  ];\r\n  const mimeTypes = [\r\n    'image/gif',\r\n    'image/jpeg',\r\n    'image/jpeg',\r\n    'image/png',\r\n    'application/msword',\r\n    'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n    'application/vnd.ms-excel',\r\n    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n    'application/vnd.ms-powerpoint',\r\n    'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n    'text/plain',\r\n    'application/vnd.rar',\r\n    'application/zip',\r\n    'application/gzip',\r\n    'video/mp4',\r\n    'video/x-msvideo',\r\n    'application/pdf',\r\n    'application/x-zip-compressed',\r\n  ];\r\n  const extname = fileTypes.includes(\r\n    file.originalname.split('.').pop().toLowerCase(),\r\n  );\r\n  const mimetype = mimeTypes.some((v) => file.mimetype.includes(v));\r\n  if (mimetype && extname) {\r\n    return cb(null, true);\r\n  } else {\r\n    const err = new multer.MulterError(\r\n      <\r\n        | 'LIMIT_PART_COUNT'\r\n        | 'LIMIT_FILE_SIZE'\r\n        | 'LIMIT_FILE_COUNT'\r\n        | 'LIMIT_FIELD_KEY'\r\n        | 'LIMIT_FIELD_VALUE'\r\n        | 'LIMIT_FIELD_COUNT'\r\n        | 'LIMIT_UNEXPECTED_FILE'\r\n      >'error',\r\n    );\r\n    err.message = '不允许上传的文件！';\r\n    cb(err, false);\r\n  }\r\n}\r\n\r\nexport function getFilePath(file: Express.Multer.File) {\r\n  const configPath = Config.upload.path.replace(/\\\\+/g, '/');\r\n  const uploadPath = file.path.replace(/\\\\+/g, '/');\r\n  return Constants.FILE_PREFIX + uploadPath.replace(configPath, '');\r\n}\r\n"
  },
  {
    "path": "server/src/admin/common/upload/dto/upload.dto.ts",
    "content": "import { ApiProperty } from '@nestjs/swagger';\r\n\r\nexport class UploadFileDto {\r\n  @ApiProperty({\r\n    example: '文件',\r\n    description: '上传文件',\r\n  })\r\n  file: Express.Multer.File;\r\n}\r\n\r\nexport class UploadFilesDto {\r\n  @ApiProperty({\r\n    example: ['文件'],\r\n    description: '上传多个文件',\r\n  })\r\n  files: Express.Multer.File[];\r\n}\r\n"
  },
  {
    "path": "server/src/admin/common/upload/upload.controller.ts",
    "content": "import {\r\n  Controller,\r\n  Post,\r\n  UploadedFile,\r\n  UploadedFiles,\r\n  UseInterceptors,\r\n} from '@nestjs/common';\r\nimport { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express';\r\nimport Result from '@/common/result/Result';\r\nimport {\r\n  getFilePath,\r\n  uploadFileConfig,\r\n} from '@/admin/common/upload/config/uploadConfig';\r\nimport {\r\n  ApiBearerAuth,\r\n  ApiBody,\r\n  ApiConsumes,\r\n  ApiOkResponse,\r\n  ApiOperation,\r\n  ApiTags,\r\n} from '@nestjs/swagger';\r\nimport { uploadMultiple, uploadSingle } from './vo/upload';\r\nimport {\r\n  UploadFileDto,\r\n  UploadFilesDto,\r\n} from '@/admin/common/upload/dto/upload.dto';\r\n\r\n@ApiBearerAuth()\r\n@ApiTags('文件上传模块')\r\n@Controller()\r\nexport class UploadController {\r\n  @Post('/common/upload')\r\n  @ApiOperation({\r\n    summary: '上传单个文件',\r\n    description: '上传单个文件',\r\n  })\r\n  @ApiConsumes('multipart/form-data')\r\n  @ApiBody({\r\n    type: UploadFileDto,\r\n  })\r\n  @ApiOkResponse({\r\n    schema: {\r\n      example: uploadSingle,\r\n    },\r\n  })\r\n  @UseInterceptors(FileInterceptor('file', uploadFileConfig))\r\n  async uploadFile(@UploadedFile() file: Express.Multer.File) {\r\n    if (!file) {\r\n      return Result.BadRequest('请选择要上传的文件！');\r\n    }\r\n    const data = {\r\n      fileName: file.filename,\r\n      newFileName: file.filename,\r\n      originalFilename: file.originalname,\r\n      url: getFilePath(file),\r\n      size: file.size,\r\n    };\r\n    return { ...Result.ok(), ...data };\r\n  }\r\n\r\n  @Post('/common/uploads')\r\n  @ApiOperation({\r\n    summary: '上传多文件',\r\n    description: '上传多文件',\r\n  })\r\n  @ApiConsumes('multipart/form-data')\r\n  @ApiBody({\r\n    type: UploadFilesDto,\r\n  })\r\n  @ApiOkResponse({\r\n    schema: {\r\n      example: uploadMultiple,\r\n    },\r\n  })\r\n  @UseInterceptors(FilesInterceptor('files', 10, uploadFileConfig))\r\n  async uploadFiles(@UploadedFiles() files: Express.Multer.File[]) {\r\n    if (!files?.length) {\r\n      return Result.BadRequest('请选择要上传的文件！');\r\n    }\r\n    const data = [];\r\n    files.forEach((file) => {\r\n      data.push({\r\n        fileName: file.filename,\r\n        newFileName: file.filename,\r\n        originalFilename: file.originalname,\r\n        url: getFilePath(file),\r\n        size: file.size,\r\n      });\r\n    });\r\n    return Result.ok(data);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/common/upload/vo/upload.ts",
    "content": "export const uploadSingle = {\r\n  code: 200,\r\n  success: true,\r\n  msg: 'successful',\r\n  data: null,\r\n  time: '2024-04-29 08:11:08',\r\n  fileName: '17143494685302ec06156db9f4170b4635131b49356d6.png',\r\n  newFileName: '17143494685302ec06156db9f4170b4635131b49356d6.png',\r\n  originalFilename: 'thumb-1920-1314539.png',\r\n  url: '/upload/files/2024-04-29/17143494685302ec06156db9f4170b4635131b49356d6.png',\r\n  size: 951415,\r\n};\r\n\r\nexport const uploadMultiple = {\r\n  code: 200,\r\n  success: true,\r\n  msg: 'successful',\r\n  data: [\r\n    {\r\n      fileName: '171434954750637f85940e0b245269c8a025b202b5555.png',\r\n      newFileName: '171434954750637f85940e0b245269c8a025b202b5555.png',\r\n      originalFilename: 'thumb-1920-1314539.png',\r\n      url: '/upload/files/2024-04-29/171434954750637f85940e0b245269c8a025b202b5555.png',\r\n      size: 951415,\r\n    },\r\n    {\r\n      fileName: '171434954751607c13706343443afa642532dae87a02d.jpeg',\r\n      newFileName: '171434954751607c13706343443afa642532dae87a02d.jpeg',\r\n      originalFilename: 'cropped-3840-2160-1328138.jpeg',\r\n      url: '/upload/files/2024-04-29/171434954751607c13706343443afa642532dae87a02d.jpeg',\r\n      size: 2563084,\r\n    },\r\n  ],\r\n  time: '2024-04-29 08:12:27',\r\n};\r\n"
  },
  {
    "path": "server/src/admin/gen/dto/exucteSqlDto.ts",
    "content": "import { ApiProperty } from '@nestjs/swagger';\r\nimport { IsNotEmpty, IsString } from 'class-validator';\r\nexport class excuteSqlDto {\r\n  @ApiProperty({ description: '执行的sql' })\r\n  @IsNotEmpty({ message: 'sql语句不能为空！' })\r\n  @IsString({ message: '类型不正确！' })\r\n  sql: string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/gen/dto/queryDatabaseDto.ts",
    "content": "import { queryDomain } from '@/common/domain/queryDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\n\r\nexport class queryDataBaseDto extends queryDomain {\r\n  @ApiProperty({ description: '表名称' })\r\n  tableName: string | null;\r\n  @ApiProperty({ description: '表描述' })\r\n  tableComment: string | null;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/gen/dto/queryGenTableDto.ts",
    "content": "import { queryDomain } from '@/common/domain/queryDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { IsOptional } from 'class-validator';\r\n\r\nexport class queryGenTableDto extends queryDomain {\r\n  @ApiProperty({ description: '表名称',required:false })\r\n  @IsOptional()\r\n  tableName: string | null;\r\n  @ApiProperty({ description: '表描述',required:false })\r\n  @IsOptional()\r\n  tableComment: string | null;\r\n  @IsOptional()\r\n  params: {\r\n    beginTime: string | null;\r\n    endTime: string | null;\r\n  };\r\n}\r\n"
  },
  {
    "path": "server/src/admin/gen/gen.controller.ts",
    "content": "import {\r\n  Body,\r\n  Controller,\r\n  Delete,\r\n  Get,\r\n  Param,\r\n  ParseArrayPipe,\r\n  ParseIntPipe,\r\n  Post,\r\n  Put,\r\n  Query,\r\n  Res,\r\n} from '@nestjs/common';\r\nimport { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\r\nimport Result from '@/common/result/Result';\r\nimport { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';\r\nimport { queryGenTableDto } from './dto/queryGenTableDto';\r\nimport { GenService } from '@/common/service/gen/gen.service';\r\nimport { queryDataBaseDto } from './dto/queryDatabaseDto';\r\nimport { isNumber } from 'class-validator';\r\nimport { Response } from 'express';\r\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\r\nimport { RequireRole } from '@/common/decorator/require-role.decorator';\r\nimport { excuteSqlDto } from './dto/exucteSqlDto';\r\n@ApiTags('代码生成')\r\n@ApiBearerAuth()\r\n@Controller('tool/gen')\r\nexport class GenController {\r\n  constructor(private genService: GenService) {}\r\n\r\n  @ApiOperation({ summary: '查询生成表数据' })\r\n  @RequirePermission('tool:gen:query')\r\n  @Get('/list')\r\n  async listTable(@Query() q: queryGenTableDto) {\r\n    return Result.TableData(await this.genService.listTable(q));\r\n  }\r\n  @ApiOperation({ summary: '查询db数据库列表' })\r\n  @RequirePermission('tool:gen:query')\r\n  @Get('/db/list')\r\n  async listDbTable(@Query() q: queryDataBaseDto) {\r\n    return Result.TableData(await this.genService.listDbTable(q));\r\n  }\r\n\r\n  @ApiOperation({ summary: '生成代码 返回压缩包' })\r\n  @RequirePermission('tool:gen:code')\r\n  @Get('/batchGenCode')\r\n  genCode(\r\n    @Query('tables', ParseArrayPipe) tables: string[],\r\n    @Res() res: Response,\r\n  ) {\r\n    if (!tables.length || tables.some((v) => typeof v != 'string')) {\r\n      return Result.BadRequest('参数错误！');\r\n    }\r\n    this.genService.genCode(tables, res);\r\n  }\r\n  @ApiOperation({ summary: '修改代码生成信息' })\r\n  @RequirePermission('tool:gen:edit')\r\n  @Put()\r\n  async updateGenTable(@Body() info) {\r\n    await this.genService.updateGenTable(info);\r\n    return Result.ok();\r\n  }\r\n  @ApiOperation({ summary: '导入表' })\r\n  @RequirePermission('tool:gen:import')\r\n  @Post('/importTable')\r\n  async importTable(@Query('tables', ParseArrayPipe) tables: string[]) {\r\n    await this.genService.importTable(tables);\r\n    return Result.ok();\r\n  }\r\n\r\n  @ApiOperation({ summary: '执行sql' })\r\n  @RequireRole('admin')\r\n  @Post('/excute')\r\n  async excuteSql(@Body() excute: excuteSqlDto) {\r\n    try {\r\n      await this.genService.excute(excute.sql);\r\n      return Result.ok(null, '执行成功！');\r\n    } catch (error) {\r\n      console.log(error);\r\n      return Result.BadRequest('sql执行失败：' + error.message);\r\n    }\r\n  }\r\n\r\n  @ApiOperation({ summary: '预览生成代码' })\r\n  @RequirePermission('tool:gen:preview')\r\n  @Get('/preview/:tableId')\r\n  async previewTable(@Param('tableId', ParseIntPipe) tableId: number) {\r\n    return Result.ok(await this.genService.previewTable(tableId));\r\n  }\r\n\r\n  @ApiOperation({ summary: '生成代码（自定义路径）' })\r\n  @RequirePermission('tool:gen:code')\r\n  @Get('/genCode/:tableNames')\r\n  // 无用接口\r\n  // async genCodeByPath(@Param('tableNames', ParseArrayPipe) tableNames: string[]) { }\r\n  async genCodeByPath() {\r\n    return Result.ok();\r\n  }\r\n\r\n  @ApiOperation({ summary: '同步数据库' })\r\n  @RequirePermission('tool:gen:edit')\r\n  @Get('synchDb/:tableName')\r\n  async synchDb(@Param('tableName') tableName: string) {\r\n    await this.genService.synchDb(tableName);\r\n    return Result.ok('操作成功');\r\n  }\r\n  @ApiOperation({ summary: '查询表详细信息' })\r\n  @RequirePermission('tool:gen:edit')\r\n  @Get('/:id')\r\n  async getGenTable(@Param('id') id: string) {\r\n    const info = isNumber(+id)\r\n      ? await this.genService.getTableInfoById(+id)\r\n      : await this.genService.getTableInfoByTableName(id);\r\n    if (!info) return Result.ok(null);\r\n    const data = {\r\n      info,\r\n      rows: info.columns,\r\n      tables: [info],\r\n    };\r\n    return Result.ok(data);\r\n  }\r\n\r\n  @ApiOperation({ summary: '删除表数据' })\r\n  @RequirePermission('tool:gen:remove')\r\n  @Delete('/:ids')\r\n  async delTable(@Param('ids', ParseIntArrayPipe) ids: number[]) {\r\n    await this.genService.delTable(ids);\r\n    return Result.ok();\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/auth/auth.controller.ts",
    "content": "import { Body, Controller, Get, Headers, Post, Req } from '@nestjs/common';\r\nimport { LoginBody } from '@/admin/system/auth/dto/LoginBody';\r\nimport { AuthService } from '@/common/service/auth/auth.service';\r\nimport Result from '@/common/result/Result';\r\nimport { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';\r\nimport { Constants } from '@/common/constant/Constants';\r\nimport { redisUtils } from '@/common/utils/redisUtils';\r\nimport { Throttle } from '@nestjs/throttler';\r\n\r\n@ApiTags('Auth')\r\n@Controller()\r\nexport class AuthController {\r\n  constructor(private authService: AuthService) {}\r\n  @Throttle({\r\n    default: {\r\n      limit: 8,\r\n      ttl: 1000 * 60 * 60,\r\n    },\r\n  })\r\n  @Post('/login')\r\n  @ApiOperation({ summary: '登录' })\r\n  async login(@Body() loginBody: LoginBody, @Req() req) {\r\n    const token = await this.authService.login(loginBody, req);\r\n    return {\r\n      ...Result.ok(),\r\n      token,\r\n    };\r\n  }\r\n\r\n  @ApiOperation({ summary: '退出登录' })\r\n  @Throttle({\r\n    default: {\r\n      limit: 8,\r\n      ttl: 1000 * 60 * 60,\r\n    },\r\n  })\r\n  @Post('/logout')\r\n  async logout(@Headers('authorization') token: string) {\r\n    try {\r\n      await redisUtils.del(Constants.LOGIN_TOKEN_KEY + token.slice(7));\r\n    } catch (error) {\r\n    } finally {\r\n      return Result.ok();\r\n    }\r\n  }\r\n\r\n  @ApiOperation({ summary: '获取用户信息，包括权限和角色' })\r\n  @ApiBearerAuth()\r\n  @Get('/getInfo')\r\n  async getInfo(@Req() req) {\r\n    const user = await this.authService.getUserInfo(req.userId);\r\n    return {\r\n      ...Result.ok(),\r\n      user,\r\n      roles: user.roles,\r\n      permissions: user.permissions,\r\n    };\r\n  }\r\n\r\n  @ApiOperation({ summary: '获取用户能访问的路由' })\r\n  @ApiBearerAuth()\r\n  @Get('/getRouters')\r\n  async getRouters(@Req() req) {\r\n    return Result.ok(await this.authService.getRouters(req.userId));\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/auth/dto/LoginBody.ts",
    "content": "import { ApiProperty } from '@nestjs/swagger';\r\nimport { IsNotEmpty, IsOptional, IsString, MinLength } from 'class-validator';\r\n\r\nexport class LoginBody {\r\n  @ApiProperty({description: '用户名'})\r\n  @IsNotEmpty({ message: '用户名不能为空！' })\r\n  @MinLength(4, { message: '用户名格式不正确' })\r\n  @IsString()\r\n  username: string;\r\n  @ApiProperty({description: '密码'})\r\n  @IsNotEmpty({ message: '密码不能为空！' })\r\n  @MinLength(5, { message: '密码格式不正确' })\r\n  @IsString()\r\n  password: string;\r\n  @ApiProperty({description: '验证码', required:false})\r\n  @IsString()\r\n  @IsOptional()\r\n  code?: string;\r\n  @IsString()\r\n  @IsOptional()\r\n  @ApiProperty({description: '验证码uuid', required:false})\r\n  uuid?: string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/config/dto/index.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport { IsNotEmpty, IsNumber, IsString, IsOptional } from 'class-validator';\r\nimport { queryDomain } from '@/common/domain/queryDomain';\r\n/**@description 查询参数配置Dto */\r\nexport class QuerySysConfigDto extends queryDomain {\r\n  @ApiProperty({ description: '参数主键',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  configId: number | null;\r\n  @ApiProperty({ description: '参数名称',required:false })\r\n  @IsOptional()\r\n  configName: string | null;\r\n  @ApiProperty({ description: '参数键名',required:false })\r\n  @IsOptional()\r\n  configKey: string | null;\r\n  @ApiProperty({ description: '参数键值',required:false })\r\n  @IsOptional()\r\n  configValue: string | null;\r\n  @ApiProperty({ description: '系统内置',required:false })\r\n  @IsOptional()\r\n  configType: string | null;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  createBy: string | null;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  updateBy: string | null;\r\n}\r\n/**@description 创建参数配置Dto */\r\nexport class CreateSysConfigDto extends BaseDomain {\r\n  @ApiProperty({ description: '参数名称' })\r\n  @IsNotEmpty({ message: '参数名称不能为空' })\r\n  @IsString()\r\n  configName: string;\r\n  @ApiProperty({ description: '参数键名' })\r\n  @IsNotEmpty({ message: '参数键名不能为空' })\r\n  @IsString()\r\n  configKey: string;\r\n  @ApiProperty({ description: '参数键值' })\r\n  @IsNotEmpty({ message: '参数键值不能为空' })\r\n  @IsString()\r\n  configValue: string;\r\n  @ApiProperty({ description: '系统内置',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  configType?: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n}\r\n/**@description 更新参数配置Dto */\r\nexport class UpdateSysConfigDto extends BaseDomain {\r\n  @ApiProperty({ description: '参数主键' })\r\n  @IsNotEmpty({ message: '参数主键不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  configId: number;\r\n  @ApiProperty({ description: '参数名称' })\r\n  @IsNotEmpty({ message: '参数名称不能为空' })\r\n  @IsString()\r\n  configName: string;\r\n  @ApiProperty({ description: '参数键名' })\r\n  @IsNotEmpty({ message: '参数键名不能为空' })\r\n  @IsString()\r\n  configKey: string;\r\n  @ApiProperty({ description: '参数键值' })\r\n  @IsNotEmpty({ message: '参数键值不能为空' })\r\n  @IsString()\r\n  configValue: string;\r\n  @ApiProperty({ description: '系统内置',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  configType?: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/config/service/sys-config.service.ts",
    "content": "import { Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { Response } from 'express';\r\nimport { exportTable } from '@/common/utils';\r\nimport {\r\n  QuerySysConfigDto,\r\n  CreateSysConfigDto,\r\n  UpdateSysConfigDto,\r\n} from '../dto/index';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isNotEmpty } from 'class-validator';\r\nimport { redisUtils } from '@/common/utils/redisUtils';\r\nimport { Constants } from '@/common/constant/Constants';\r\n@Injectable()\r\nexport class ConfigService {\r\n  constructor(private prisma: PrismaService) {\r\n    this.initSysConfigData();\r\n  }\r\n\r\n  /**@desc 初始化系统配置到redis缓存 */\r\n  async initSysConfigData() {\r\n    const configData = await this.prisma.sysConfig.findMany({\r\n      select: {\r\n        configKey: true,\r\n        configValue: true,\r\n      },\r\n    });\r\n    for (const item of configData) {\r\n      await redisUtils.set(\r\n        Constants.SYS_CONFIG_KEY + item.configKey,\r\n        item.configValue,\r\n      );\r\n    }\r\n    console.log('系统配置信息初始化完成！');\r\n  }\r\n  /**@description 查询参数配置所有 */\r\n  async selectConfigAll() {\r\n    return this.prisma.sysConfig.findMany();\r\n  }\r\n  /**@description 分页查询参数配置列表 */\r\n  async selectConfigList(q: QuerySysConfigDto) {\r\n    const queryCondition: Prisma.SysConfigWhereInput = {};\r\n    if (isNotEmpty(q['configId'])) {\r\n      queryCondition.configId = {\r\n        equals: q.configId,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['configName'])) {\r\n      queryCondition.configName = {\r\n        contains: q.configName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['configKey'])) {\r\n      queryCondition.configKey = {\r\n        contains: q.configKey,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['configValue'])) {\r\n      queryCondition.configValue = {\r\n        equals: q.configValue,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['configType'])) {\r\n      queryCondition.configType = {\r\n        equals: q.configType,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['createBy'])) {\r\n      queryCondition.createBy = {\r\n        equals: q.createBy,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginCreateTime) &&\r\n      isNotEmpty(q.params.endCreateTime)\r\n    ) {\r\n      queryCondition.createTime = {\r\n        lte: q.params.endCreateTime,\r\n        gte: q.params.beginCreateTime,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['updateBy'])) {\r\n      queryCondition.updateBy = {\r\n        equals: q.updateBy,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginUpdateTime) &&\r\n      isNotEmpty(q.params.endUpdateTime)\r\n    ) {\r\n      queryCondition.updateTime = {\r\n        lte: q.params.endUpdateTime,\r\n        gte: q.params.beginUpdateTime,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.sysConfig.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n      }),\r\n      total: await this.prisma.sysConfig.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n  /**@description 查询参数配置详情 */\r\n  async selectConfigByConfigId(configId: number) {\r\n    return this.prisma.sysConfig.findUnique({\r\n      where: {\r\n        configId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 新增参数配置 */\r\n  async addConfig(sysConfig: CreateSysConfigDto) {\r\n    //删除掉空值\r\n    for (const key in sysConfig) {\r\n      !isNotEmpty(sysConfig[key]) && delete sysConfig[key];\r\n    }\r\n    const d = await this.prisma.sysConfig.create({\r\n      data: sysConfig,\r\n    });\r\n    await redisUtils.set(\r\n      Constants.SYS_CONFIG_KEY + sysConfig.configKey,\r\n      sysConfig.configValue,\r\n    );\r\n    return d;\r\n  }\r\n  /**@description 修改参数配置 */\r\n  async updateConfig(sysConfig: UpdateSysConfigDto) {\r\n    //删除掉空值\r\n    for (const key in sysConfig) {\r\n      !isNotEmpty(sysConfig[key]) && delete sysConfig[key];\r\n    }\r\n    await this.prisma.sysConfig.update({\r\n      where: {\r\n        configId: sysConfig.configId,\r\n      },\r\n      data: sysConfig,\r\n    });\r\n    await redisUtils.set(\r\n      Constants.SYS_CONFIG_KEY + sysConfig.configKey,\r\n      sysConfig.configValue,\r\n    );\r\n    return true;\r\n  }\r\n  /**@description 批量删除参数配置 */\r\n  async deleteConfigByConfigIds(configIds: number[]) {\r\n    const r = await this.prisma.sysConfig.deleteMany({\r\n      where: {\r\n        configId: {\r\n          in: configIds,\r\n        },\r\n      },\r\n    });\r\n    await this.initSysConfigData();\r\n    return r;\r\n  }\r\n  /**@description 单个删除参数配置 */\r\n  async deleteConfigByConfigId(configId: number) {\r\n    const r = this.prisma.sysConfig.delete({\r\n      where: {\r\n        configId,\r\n      },\r\n    });\r\n    await this.initSysConfigData();\r\n    return r;\r\n  }\r\n  /**@description 导出参数配置所有数据为xlsx */\r\n  async exportConfig(res: Response) {\r\n    const title = [\r\n      '参数主键',\r\n      '参数名称',\r\n      '参数键名',\r\n      '参数键值',\r\n      '系统内置',\r\n      '创建者',\r\n      '创建时间',\r\n      '更新者',\r\n      '更新时间',\r\n      '备注',\r\n    ];\r\n    const data = (await this.prisma.sysConfig.findMany()).map((v) =>\r\n      Object.values(v),\r\n    );\r\n    data.unshift(title);\r\n    exportTable(data, res);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/config/sys-config.controller.ts",
    "content": "import {\n  Body,\n  Controller,\n  Delete,\n  Get,\n  Logger,\n  Param,\n  ParseIntPipe,\n  Post,\n  Put,\n  Query,\n  Req,\n  Res,\n} from '@nestjs/common';\nimport { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\nimport Result from '@/common/result/Result';\nimport {\n  ApiBearerAuth,\n  ApiBody,\n  ApiOperation,\n  ApiQuery,\n  ApiResponse,\n  ApiTags,\n} from '@nestjs/swagger';\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\nimport { nowDateTime, readJsonFile } from '@/common/utils';\nimport { ConfigService } from './service/sys-config.service';\nimport {\n  QuerySysConfigDto,\n  CreateSysConfigDto,\n  UpdateSysConfigDto,\n} from './dto/index';\nimport { Response } from 'express';\nimport { SysConfig } from '@prismaClient';\nimport { TableDataInfo } from '@/common/domain/TableDataInfo';\nimport { RequireRole } from '@/common/decorator/require-role.decorator';\nimport { join } from 'path';\nimport { writeFileSync } from 'fs';\nimport { Config } from '@/config';\n@ApiTags('参数配置')\n@ApiBearerAuth()\n@Controller('system/config')\nexport class SysConfigController {\n  constructor(private configService: ConfigService) { }\n  @ApiOperation({ summary: '获取配置文件列表' })\n  @Get(\"/getFileKeys\")\n  @RequirePermission(\"system:serverconfig:menu\")\n  getConfigFileKeys() {\n    let map = structuredClone(Config.ConfigFileMap)\n    for (let key in map) {\n      delete map[key].filePath\n    }\n    return Result.ok(map);\n  }\n  @ApiOperation({ summary: '根据key获取配置信息' })\n  @Get(\"/getConfigInfo\")\n @RequirePermission(\"system:serverconfig:menu\")\n  getConfigInfo(@Query(\"key\") key: string) {\n    if (key && Config.ConfigFileMap[key]) {\n      return Result.ok(readJsonFile(Config.ConfigFileMap[key].filePath))\n    } else {\n    }\n  }\n  @ApiOperation({ summary: '更新配置信息' })\n  @Post(\"serverConfig\")\n  @RequirePermission(\"system:serverconfig:menu\")\n  changeServerConfig(@Body() data, @Query(\"key\") key: string) {\n    if (key in Config.ConfigFileMap) {\n      if (typeof data != \"string\") {\n        data = JSON.stringify(data, null, 2)\n      }\n      try {\n        JSON.parse(data);\n      } catch (error) {\n        Logger.error(\"修改配置文件异常：\", error?.message);\n        return Result.Error(\"json格式有误！\");\n      }\n      writeFileSync(Config.ConfigFileMap[key].filePath, data);\n      Logger.log(\"修改配置文件成功：\", key);\n      return Result.ok(\"修改成功！\");\n    } else {\n      return Result.Error(\"key不存在！\");\n    }\n\n  }\n  @ApiOperation({ summary: '查询参数配置列表' })\n  @ApiResponse({ type: TableDataInfo<SysConfig> })\n  @RequirePermission('system:config:query')\n  @Get('/list')\n  async listConfig(\n    @Query() q: QuerySysConfigDto,\n  ): Promise<TableDataInfo<SysConfig>> {\n    return Result.TableData(await this.configService.selectConfigList(q));\n  }\n  @ApiOperation({ summary: '导出参数配置xlsx文件' })\n  @RequirePermission('system:config:export')\n  @Get('/export')\n  async export(@Res() res: Response): Promise<void> {\n    return this.configService.exportConfig(res);\n  }\n  @ApiOperation({ summary: '查询参数配置详细' })\n  @ApiResponse({ type: Result<SysConfig> })\n  @RequirePermission('system:config:query')\n  @Get('/:configId')\n  async getConfig(\n    @Param('configId', ParseIntPipe) configId: number,\n  ): Promise<Result<SysConfig>> {\n    return Result.ok(await this.configService.selectConfigByConfigId(configId));\n  }\n  @ApiOperation({ summary: '新增参数配置' })\n  @ApiResponse({ type: Result<SysConfig> })\n  @ApiBody({ type: CreateSysConfigDto })\n  @RequirePermission('system:config:add')\n  @Post('/')\n  async addConfig(\n    @Body() sysConfig: CreateSysConfigDto,\n    @Req() req,\n  ): Promise<Result<SysConfig>> {\n    sysConfig = {\n      ...sysConfig,\n      createTime: nowDateTime(),\n      updateTime: nowDateTime(),\n      createBy: req.user?.userName,\n      updateBy: req.user?.userName,\n    };\n    return Result.ok(await this.configService.addConfig(sysConfig));\n  }\n  @ApiOperation({ summary: '修改参数配置' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysConfigDto })\n  @RequirePermission('system:config:edit')\n  @Put('/')\n  async updateConfig(\n    @Body() sysConfig: UpdateSysConfigDto,\n    @Req() req,\n  ): Promise<Result<any>> {\n    sysConfig = {\n      ...sysConfig,\n      updateTime: nowDateTime(),\n      updateBy: req.user?.userName,\n    };\n    await this.configService.updateConfig(sysConfig);\n    return Result.ok('修改成功！');\n  }\n  @ApiOperation({ summary: '删除参数配置' })\n  @ApiResponse({ type: Result<any> })\n  @RequirePermission('system:config:remove')\n  @Delete('/:ids')\n  async delConfig(\n    @Param('ids', ParseIntArrayPipe) configIds: number[],\n  ): Promise<Result<any>> {\n    const { count } =\n      await this.configService.deleteConfigByConfigIds(configIds);\n    return Result.toAjax(count);\n  }\n}\n"
  },
  {
    "path": "server/src/admin/system/dept/dto/index.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport { IsNotEmpty, IsNumber, IsString, IsOptional } from 'class-validator';\r\nimport { queryDomain } from '@/common/domain/queryDomain';\r\n/**@description 查询部门管理Dto */\r\nexport class QuerySysDeptDto extends queryDomain {\r\n  @ApiProperty({ description: '部门id',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  deptId: number | null;\r\n  @ApiProperty({ description: '父部门',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  parentId: number | null;\r\n  @ApiProperty({ description: '祖级列表',required:false })\r\n  @IsOptional()\r\n  ancestors: string | null;\r\n  @ApiProperty({ description: '部门名称',required:false })\r\n  @IsOptional()\r\n  deptName: string | null;\r\n  @ApiProperty({ description: '显示顺序',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  orderNum: number | null;\r\n  @ApiProperty({ description: '负责人',required:false })\r\n  @IsOptional()\r\n  leader: string | null;\r\n  @ApiProperty({ description: '联系电话',required:false })\r\n  @IsOptional()\r\n  phone: string | null;\r\n  @ApiProperty({ description: '邮箱',required:false })\r\n  @IsOptional()\r\n  email: string | null;\r\n  @ApiProperty({ description: '部门状态（0停用,1正常）',required:false })\r\n  @IsOptional()\r\n  status: string | null;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  createBy: string | null;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  updateBy: string | null;\r\n}\r\n/**@description 创建部门管理Dto */\r\nexport class CreateSysDeptDto extends BaseDomain {\r\n  @ApiProperty({ description: '父部门' })\r\n  @IsNotEmpty({ message: '父部门不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  parentId: number;\r\n  @ApiProperty({ description: '祖级列表',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  ancestors?: string;\r\n  @ApiProperty({ description: '部门名称' })\r\n  @IsNotEmpty({ message: '部门名称不能为空' })\r\n  @IsString()\r\n  deptName: string;\r\n  @ApiProperty({ description: '显示顺序' })\r\n  @IsNotEmpty({ message: '显示顺序不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  orderNum: number;\r\n  @ApiProperty({ description: '负责人',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  leader?: string;\r\n  @ApiProperty({ description: '联系电话',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  phone?: string;\r\n  @ApiProperty({ description: '邮箱',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  email?: string;\r\n  @ApiProperty({ description: '部门状态（0停用,1正常）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  status?: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n}\r\n/**@description 更新部门管理Dto */\r\nexport class UpdateSysDeptDto extends BaseDomain {\r\n  @ApiProperty({ description: '部门id' })\r\n  @IsNotEmpty({ message: '部门id不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  deptId: number;\r\n  @ApiProperty({ description: '祖级列表',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  ancestors?: string;\r\n  @ApiProperty({ description: '部门名称' })\r\n  @IsNotEmpty({ message: '部门名称不能为空' })\r\n  @IsString()\r\n  deptName: string;\r\n  @ApiProperty({ description: '显示顺序' })\r\n  @IsNotEmpty({ message: '显示顺序不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  orderNum: number;\r\n  @ApiProperty({ description: '负责人',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  leader?: string;\r\n  @ApiProperty({ description: '联系电话',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  phone?: string;\r\n  @ApiProperty({ description: '邮箱',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  email?: string;\r\n  @ApiProperty({ description: '部门状态（0停用,1正常）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  status?: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dept/service/sys-dept.service.ts",
    "content": "import { Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { Response } from 'express';\r\nimport { exportTable, tree } from '@/common/utils';\r\nimport {\r\n  QuerySysDeptDto,\r\n  CreateSysDeptDto,\r\n  UpdateSysDeptDto,\r\n} from '../dto/index';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isNotEmpty } from 'class-validator';\r\nimport * as assert from 'assert';\r\n@Injectable()\r\nexport class DeptService {\r\n  constructor(private prisma: PrismaService) {}\r\n  /**@description 分页查询部门管理列表 */\r\n  async selectDeptList(q: QuerySysDeptDto) {\r\n    const queryCondition: Prisma.SysDeptWhereInput = {};\r\n    if (isNotEmpty(q['deptId'])) {\r\n      queryCondition.deptId = {\r\n        equals: q.deptId,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['parentId'])) {\r\n      queryCondition.parentId = {\r\n        equals: q.parentId,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['ancestors'])) {\r\n      queryCondition.ancestors = {\r\n        equals: q.ancestors,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['deptName'])) {\r\n      queryCondition.deptName = {\r\n        contains: q.deptName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['orderNum'])) {\r\n      queryCondition.orderNum = {\r\n        equals: q.orderNum,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['leader'])) {\r\n      queryCondition.leader = {\r\n        equals: q.leader,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['phone'])) {\r\n      queryCondition.phone = {\r\n        equals: q.phone,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['email'])) {\r\n      queryCondition.email = {\r\n        equals: q.email,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['status'])) {\r\n      queryCondition.status = {\r\n        equals: q.status,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['createBy'])) {\r\n      queryCondition.createBy = {\r\n        equals: q.createBy,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginCreateTime) &&\r\n      isNotEmpty(q.params.endCreateTime)\r\n    ) {\r\n      queryCondition.createTime = {\r\n        lte: q.params.endCreateTime,\r\n        gte: q.params.beginCreateTime,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['updateBy'])) {\r\n      queryCondition.updateBy = {\r\n        equals: q.updateBy,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginUpdateTime) &&\r\n      isNotEmpty(q.params.endUpdateTime)\r\n    ) {\r\n      queryCondition.updateTime = {\r\n        lte: q.params.endUpdateTime,\r\n        gte: q.params.beginUpdateTime,\r\n      };\r\n    }\r\n    return await this.prisma.sysDept.findMany({\r\n      where: queryCondition,\r\n    });\r\n  }\r\n  /**@description 分页查询部门管理列表 */\r\n  async listDeptExcludeChild(deptId: number) {\r\n    return this.prisma.sysDept.findMany({\r\n      where: {\r\n        deptId: {\r\n          not: deptId,\r\n        },\r\n      },\r\n      orderBy: {\r\n        orderNum: 'asc',\r\n      },\r\n    });\r\n  }\r\n\r\n  /**@description 查询部门管理详情 */\r\n  async selectDeptByDeptId(deptId: number) {\r\n    return this.prisma.sysDept.findUnique({\r\n      where: {\r\n        deptId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 新增部门管理 */\r\n  async addDept(sysDept: CreateSysDeptDto) {\r\n    //删除掉空值\r\n    for (const key in sysDept) {\r\n      !isNotEmpty(sysDept[key]) && delete sysDept[key];\r\n    }\r\n    return await this.prisma.sysDept.create({\r\n      data: sysDept,\r\n    });\r\n  }\r\n  /**@description 修改部门管理 */\r\n  async updateDept(sysDept: UpdateSysDeptDto) {\r\n    //删除掉空值\r\n    for (const key in sysDept) {\r\n      !isNotEmpty(sysDept[key]) && delete sysDept[key];\r\n    }\r\n    return await this.prisma.sysDept.update({\r\n      where: {\r\n        deptId: sysDept.deptId,\r\n      },\r\n      data: sysDept,\r\n    });\r\n  }\r\n  /**@description 批量删除部门管理 */\r\n  async deleteDeptByDeptIds(deptIds: number[]) {\r\n    const dept = await this.prisma.sysDept.findFirst({\r\n      where: {\r\n        parentId: {\r\n          in: deptIds,\r\n        },\r\n      },\r\n    });\r\n    assert(!dept, '存在子部门,不允许删除!');\r\n    const dept1 = await this.prisma.sysRoleDept.findFirst({\r\n      where: { deptId: { in: deptIds } },\r\n    });\r\n    assert(!dept1, '部门已分配,不允许删除!');\r\n    const dept2 = await this.prisma.sysUser.findFirst({\r\n      where: { deptId: { in: deptIds } },\r\n    });\r\n    assert(!dept2, '部门已分配,不允许删除!');\r\n    return this.prisma.sysDept.deleteMany({\r\n      where: {\r\n        deptId: {\r\n          in: deptIds,\r\n        },\r\n      },\r\n    });\r\n  }\r\n  /**@description 单个删除部门管理 */\r\n  async deleteDeptByDeptId(deptId: number) {\r\n    const dept = await this.prisma.sysDept.findFirst({\r\n      where: {\r\n        parentId: deptId,\r\n      },\r\n    });\r\n    assert(!dept, '存在子部门,不允许删除!');\r\n    const dept1 = await this.prisma.sysRoleDept.findFirst({\r\n      where: { deptId },\r\n    });\r\n    assert(!dept1, '部门已分配,不允许删除!');\r\n    const dept2 = await this.prisma.sysUser.findFirst({ where: { deptId } });\r\n    assert(!dept2, '部门已分配,不允许删除!');\r\n    return this.prisma.sysDept.deleteMany({\r\n      where: {\r\n        deptId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 导出部门管理所有数据为xlsx */\r\n  async exportDept(res: Response) {\r\n    const title = [\r\n      '部门id',\r\n      '父部门',\r\n      '祖级列表',\r\n      '部门名称',\r\n      '显示顺序',\r\n      '负责人',\r\n      '联系电话',\r\n      '邮箱',\r\n      '部门状态（0停用,1正常）',\r\n      '删除标志（0删除,1存在 ）',\r\n      '创建者',\r\n      '创建时间',\r\n      '更新者',\r\n      '更新时间',\r\n    ];\r\n    const data = (await this.prisma.sysDept.findMany()).map((v) =>\r\n      Object.values(v),\r\n    );\r\n    data.unshift(title);\r\n    exportTable(data, res);\r\n  }\r\n\r\n  async getDeptTree() {\r\n    return tree(\r\n      (await this.prisma.sysDept.findMany()).map((v) => ({\r\n        id: v.deptId,\r\n        pid: v.parentId,\r\n        label: v.deptName,\r\n      })),\r\n    );\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dept/sys-dept.controller.ts",
    "content": "import {\n  Body,\n  Controller,\n  Delete,\n  Get,\n  Param,\n  ParseIntPipe,\n  Post,\n  Put,\n  Query,\n  Req,\n  Res,\n} from '@nestjs/common';\nimport { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\nimport Result from '@/common/result/Result';\nimport {\n  ApiBearerAuth,\n  ApiBody,\n  ApiOperation,\n  ApiQuery,\n  ApiResponse,\n  ApiTags,\n} from '@nestjs/swagger';\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\nimport { nowDateTime } from '@/common/utils';\nimport { DeptService } from './service/sys-dept.service';\nimport {\n  QuerySysDeptDto,\n  CreateSysDeptDto,\n  UpdateSysDeptDto,\n} from './dto/index';\nimport { Response } from 'express';\nimport { SysDept } from '@prismaClient';\n@ApiBearerAuth()\n@ApiTags('部门管理')\n@Controller('system/dept')\nexport class SysDeptController {\n  constructor(private deptService: DeptService) {}\n  @ApiOperation({ summary: '查询部门管理列表' })\n  @ApiResponse({ type: Result<SysDept[]> })\n  @RequirePermission('system:dept:query')\n  @Get('/list')\n  async listDept(@Query() q: QuerySysDeptDto): Promise<Result<SysDept[]>> {\n    return Result.ok(await this.deptService.selectDeptList(q));\n  }\n\n  @ApiOperation({ summary: '查询部门列表（排除节点）' })\n  @ApiResponse({ type: Result<SysDept[]> })\n  @RequirePermission('system:dept:query')\n  @Get('list/exclude/:deptId')\n  async listDeptExcludeChild(\n    @Param('deptId', ParseIntPipe) deptId: number,\n  ): Promise<Result<SysDept[]>> {\n    return Result.ok(await this.deptService.listDeptExcludeChild(deptId));\n  }\n  @ApiOperation({ summary: '导出部门管理xlsx文件' })\n  @RequirePermission('system:dept:export')\n  @Get('/export')\n  async export(@Res() res: Response): Promise<void> {\n    return this.deptService.exportDept(res);\n  }\n  @ApiOperation({ summary: '查询部门管理详细' })\n  @ApiResponse({ type: Result<SysDept> })\n  @RequirePermission('system:dept:query')\n  @Get('/:deptId')\n  async getDept(\n    @Param('deptId', ParseIntPipe) deptId: number,\n  ): Promise<Result<SysDept>> {\n    return Result.ok(await this.deptService.selectDeptByDeptId(deptId));\n  }\n  @ApiOperation({ summary: '新增部门管理' })\n  @ApiResponse({ type: Result<SysDept> })\n  @ApiBody({ type: CreateSysDeptDto })\n  @RequirePermission('system:dept:add')\n  @Post('/')\n  async addDept(\n    @Body() sysDept: CreateSysDeptDto,\n    @Req() req,\n  ): Promise<Result<SysDept>> {\n    sysDept = {\n      ...sysDept,\n      createTime: nowDateTime(),\n      updateTime: nowDateTime(),\n      createBy: req.user?.userName,\n      updateBy: req.user?.userName,\n    };\n    return Result.ok(await this.deptService.addDept(sysDept));\n  }\n  @ApiOperation({ summary: '修改部门管理' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysDeptDto })\n  @RequirePermission('system:dept:edit')\n  @Put('/')\n  async updateDept(\n    @Body() sysDept: UpdateSysDeptDto,\n    @Req() req,\n  ): Promise<Result<any>> {\n    sysDept = {\n      ...sysDept,\n      updateTime: nowDateTime(),\n      updateBy: req.user?.userName,\n    };\n    await this.deptService.updateDept(sysDept);\n    return Result.ok('修改成功！');\n  }\n  @ApiOperation({ summary: '删除部门管理' })\n  @ApiResponse({ type: Result<any> })\n  @RequirePermission('system:dept:remove')\n  @Delete('/:ids')\n  async delDept(\n    @Param('ids', ParseIntArrayPipe) deptIds: number[],\n  ): Promise<Result<any>> {\n    const { count } = await this.deptService.deleteDeptByDeptIds(deptIds);\n    return Result.toAjax(count);\n  }\n}\n"
  },
  {
    "path": "server/src/admin/system/dict-data/dict-data.controller.ts",
    "content": "import { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Post,\r\n  Put,\r\n  Delete,\r\n  Query,\r\n  Body,\r\n  Param,\r\n  ParseIntPipe,\r\n  Inject,\r\n  Req,\r\n  Res,\r\n} from '@nestjs/common';\r\nimport { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';\r\nimport { queryDictDataDto } from './dto/queryDictDataDto';\r\nimport { SysDictDataService } from './service/sys-dict-data.service';\r\nimport Result from '@/common/result/Result';\r\nimport { CreateDictDataDto } from './dto/createDictDataDto';\r\nimport { nowDateTime } from '@/common/utils';\r\nimport { updateDictDataDto } from './dto/updateDictDataDto';\r\nimport { Response } from 'express';\r\n\r\n@ApiTags('字典数据')\r\n@ApiBearerAuth()\r\n@Controller('/system/dict/data')\r\nexport class DictDataController {\r\n  @Inject()\r\n  dictDataService: SysDictDataService;\r\n  @ApiOperation({ summary: '查询字典数据列表' })\r\n  @Get('list')\r\n  async listData(@Query() q: queryDictDataDto) {\r\n    return Result.TableData(await this.dictDataService.selectDictDataList(q));\r\n  }\r\n  @ApiOperation({ summary: '导出xlsx文件' })\r\n  @Get('export')\r\n  async export(@Res() res: Response) {\r\n    this.dictDataService.exportDictData(res);\r\n  }\r\n  @Get('/type/:type')\r\n  @ApiOperation({ summary: '根据字典类型查询字典数据信息' })\r\n  async getDicts(@Param('type') type: string) {\r\n    if (!type) return Result.Validation('请传入字典类型');\r\n    return Result.ok(\r\n      (await this.dictDataService.selectDictDataByDictType(type)) || [],\r\n    );\r\n  }\r\n  @Get(':id')\r\n  @ApiOperation({ summary: '查询字典数据详细' })\r\n  async getData(@Param('id', ParseIntPipe) id: number) {\r\n    return Result.ok(await this.dictDataService.selectDictDataDetail(id));\r\n  }\r\n\r\n  @ApiOperation({ summary: '新增字典数据' })\r\n  @Post()\r\n  async addData(@Body() dictData: CreateDictDataDto, @Req() req) {\r\n    dictData.createTime = nowDateTime();\r\n    dictData.updateTime = nowDateTime();\r\n    dictData.createBy = req.user.userName;\r\n    dictData.updateBy = req.user.userName;\r\n    await this.dictDataService.addDictData(dictData);\r\n    return Result.ok('新增成功！');\r\n  }\r\n\r\n  @ApiOperation({ summary: '修改字典数据' })\r\n  @Put()\r\n  async updateData(@Body() dictData: updateDictDataDto, @Req() req) {\r\n    dictData.updateTime = nowDateTime();\r\n    dictData.updateBy = req.user.userName;\r\n    await this.dictDataService.updateDictData(dictData);\r\n    return Result.ok('修改成功！');\r\n  }\r\n  @ApiOperation({ summary: '删除字典数据' })\r\n  @Delete(':dictCodes')\r\n  async delData(@Param('dictCodes', ParseIntArrayPipe) dictCodes: number[]) {\r\n    const { count } = await this.dictDataService.deleteDictData(dictCodes);\r\n    return Result.toAjax(count);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dict-data/dto/createDictDataDto.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport { IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator';\r\n\r\nexport class CreateDictDataDto extends BaseDomain {\r\n  @ApiProperty({ description: '字典类型' })\r\n  @IsNotEmpty({ message: '字典类型不能为空' })\r\n  @IsString()\r\n  dictType: string;\r\n  @ApiProperty({ description: '数据标签' })\r\n  @IsNotEmpty({ message: '数据标签不能为空' })\r\n  @IsString()\r\n  dictLabel: string;\r\n  @ApiProperty({ description: '数据键值' })\r\n  @IsNotEmpty({ message: '数据键值不能为空' })\r\n  @IsString()\r\n  dictValue?: string;\r\n  @ApiProperty({ description: '样式属性',required:false })\r\n  @IsOptional()\r\n  cssClass?: string;\r\n  @ApiProperty({ description: '回显样式',required:false })\r\n  @IsOptional()\r\n  listClass?: string;\r\n  @ApiProperty({ description: '显示排序' })\r\n  @IsNotEmpty({ message: '排序值不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  dictSort: number;\r\n  @ApiProperty({ description: '字典状态（0停用，1正常）',required:false })\r\n  @IsOptional()\r\n  status?: string = '1';\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dict-data/dto/queryDictDataDto.ts",
    "content": "import { queryDomain } from '@/common/domain/queryDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { IsOptional, IsString } from 'class-validator';\r\n\r\nexport class queryDictDataDto extends queryDomain {\r\n  @ApiProperty({ description: '字典标签',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  dictLabel?: string | null;\r\n  @ApiProperty({ description: '字典名称',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  dictType?: string | null;\r\n  @ApiProperty({ description: '数据状态',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  status?: string | null;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dict-data/dto/updateDictDataDto.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport { IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator';\r\n\r\nexport class updateDictDataDto extends BaseDomain {\r\n  @IsNotEmpty({ message: '字典数据id不能为空！' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  dictCode: number;\r\n  @ApiProperty({ description: '字典类型' })\r\n  @IsNotEmpty({ message: '字典类型不能为空' })\r\n  @IsString()\r\n  dictType: string;\r\n  @ApiProperty({ description: '数据标签' })\r\n  @IsNotEmpty({ message: '数据标签不能为空' })\r\n  @IsString()\r\n  dictLabel: string;\r\n  @ApiProperty({ description: '数据键值' })\r\n  @IsNotEmpty({ message: '数据键值不能为空' })\r\n  @IsString()\r\n  dictValue?: string;\r\n  @ApiProperty({ description: '样式属性',required:false })\r\n  @IsOptional()\r\n  cssClass?: string;\r\n  @ApiProperty({ description: '回显样式',required:false })\r\n  @IsOptional()\r\n  listClass?: string;\r\n  @ApiProperty({ description: '显示排序' })\r\n  @IsNotEmpty({ message: '排序值不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  dictSort: number;\r\n  @ApiProperty({ description: '字典状态（0停用，1正常）',required:false })\r\n  @IsOptional()\r\n  status?: string = '1';\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dict-data/service/sys-dict-data.service.ts",
    "content": "import { Injectable, OnModuleInit } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { groupBy } from 'lodash';\r\nimport { redisUtils } from '@/common/utils/redisUtils';\r\nimport { Constants } from '@/common/constant/Constants';\r\nimport { queryDictDataDto } from '@/admin/system/dict-data/dto/queryDictDataDto';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isNotEmpty } from 'class-validator';\r\nimport { CreateDictDataDto } from '@/admin/system/dict-data/dto/createDictDataDto';\r\nimport { updateDictDataDto } from '@/admin/system/dict-data/dto/updateDictDataDto';\r\nimport { exportTable } from '@/common/utils';\r\nimport { Response } from 'express';\r\n\r\n@Injectable()\r\nexport class SysDictDataService implements OnModuleInit {\r\n  constructor(private prisma: PrismaService) {}\r\n  onModuleInit() {\r\n    this.initSysDictData();\r\n  }\r\n  //初始化字典数据\r\n  async initSysDictData() {\r\n    const dictData = groupBy(\r\n      await this.prisma.sysDictData.findMany(),\r\n      'dictType',\r\n    );\r\n    for (const dictKey in dictData) {\r\n      await redisUtils.set(\r\n        Constants.SYS_DICT_KEY + dictKey,\r\n        JSON.stringify(dictData[dictKey], null, 2),\r\n      );\r\n    }\r\n    console.log('字典信息初始化完毕！');\r\n  }\r\n\r\n  //根据字典类型更新redis字典数据\r\n  async updateCache(dictType: string) {\r\n    const dictDatas = await this.prisma.sysDictData.findMany({\r\n      where: {\r\n        dictType,\r\n      },\r\n    });\r\n    return await redisUtils.set(\r\n      Constants.SYS_DICT_KEY + dictType,\r\n      JSON.stringify(dictDatas, null, 2),\r\n    );\r\n  }\r\n\r\n  //查询字典数据列表\r\n  async selectDictDataList(q: queryDictDataDto) {\r\n    const queryCondition: Prisma.SysDictDataWhereInput = {};\r\n    if (isNotEmpty(q.dictType)) {\r\n      queryCondition.dictType = {\r\n        equals: q.dictType,\r\n      };\r\n    }\r\n    if (isNotEmpty(q.dictLabel)) {\r\n      queryCondition.dictLabel = {\r\n        contains: q.dictLabel,\r\n      };\r\n    }\r\n    if (isNotEmpty(q.status)) {\r\n      queryCondition.status = {\r\n        equals: q.status,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.sysDictData.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n        orderBy: {\r\n          dictSort: 'asc',\r\n        },\r\n      }),\r\n      total: await this.prisma.sysDictData.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n  //查询所有数据\r\n  async selectAllDictData() {\r\n    return await this.prisma.sysDictData.findMany();\r\n  }\r\n\r\n  //查询字典数据详细\r\n  async selectDictDataDetail(dictCode: number) {\r\n    return this.prisma.sysDictData.findUnique({\r\n      where: {\r\n        dictCode: dictCode,\r\n      },\r\n    });\r\n  }\r\n\r\n  //根据字典类型查询字典数据信息\r\n  async selectDictDataByDictType(dictType: string) {\r\n    return JSON.parse(\r\n      (await redisUtils.get(Constants.SYS_DICT_KEY + dictType)) || null,\r\n    );\r\n  }\r\n\r\n  //新增字典数据\r\n  async addDictData(dictData: CreateDictDataDto) {\r\n    const res = await this.prisma.sysDictData.create({\r\n      data: dictData,\r\n    });\r\n    await this.updateCache(dictData.dictType);\r\n    return res;\r\n  }\r\n\r\n  //修改字典数据\r\n  async updateDictData(dictData: updateDictDataDto) {\r\n    const res = await this.prisma.sysDictData.update({\r\n      where: {\r\n        dictCode: dictData.dictCode,\r\n      },\r\n      data: dictData,\r\n    });\r\n    await this.updateCache(dictData.dictType);\r\n    return res;\r\n  }\r\n  //删除字典数据\r\n  async deleteDictData(dictCodes: number[]) {\r\n    const dictType = (\r\n      await this.prisma.sysDictData.findFirst({\r\n        select: {\r\n          dictType: true,\r\n        },\r\n        where: {\r\n          dictCode: dictCodes[0],\r\n        },\r\n      })\r\n    ).dictType;\r\n    const res = await this.prisma.sysDictData.deleteMany({\r\n      where: {\r\n        dictCode: {\r\n          in: dictCodes,\r\n        },\r\n      },\r\n    });\r\n    await this.updateCache(dictType);\r\n    return res;\r\n  }\r\n\r\n  //导出xlsx文件\r\n  async exportDictData(res: Response) {\r\n    const title = [\r\n      '字典编码',\r\n      '字典排序',\r\n      '字典标签',\r\n      '字典键值',\r\n      '字典类型',\r\n      '样式属性',\r\n      '表格回显样式',\r\n      '是否默认',\r\n      '状态',\r\n      '创建者',\r\n      '创建时间',\r\n      '更新者',\r\n      '更新时间',\r\n      '备注',\r\n    ];\r\n    const data = (await this.prisma.sysDictData.findMany()).map((v) =>\r\n      Object.values(v),\r\n    );\r\n    data.unshift(title);\r\n    exportTable(data, res);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dict-type/dict-type.controller.ts",
    "content": "import { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\r\nimport {\r\n  Controller,\r\n  Get,\r\n  Req,\r\n  Post,\r\n  Put,\r\n  Delete,\r\n  Query,\r\n  Body,\r\n  Param,\r\n  ParseIntPipe,\r\n  Inject,\r\n  Res,\r\n} from '@nestjs/common';\r\nimport { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';\r\nimport { queryDictTypeDto } from './dto/queryDictTypeDto';\r\nimport Result from '@/common/result/Result';\r\nimport { SysDictTypeService } from './service/sys-dict-type.service';\r\nimport { CreateDictTypeDto } from './dto/createDictTypeDto';\r\nimport { updateDictTypeDto } from './dto/updateDictTypeDto';\r\nimport { nowDateTime } from '@/common/utils';\r\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\r\nimport { Response } from 'express';\r\n\r\n@ApiTags('字典类型')\r\n@ApiBearerAuth()\r\n@Controller('/system/dict/type')\r\nexport class DictTypeController {\r\n  @Inject()\r\n  private readonly dictTypeService: SysDictTypeService;\r\n  @ApiOperation({ summary: '查询字典类型列表' })\r\n  @RequirePermission('system:dict:query')\r\n  @Get('list')\r\n  async listType(@Query() q: queryDictTypeDto) {\r\n    return Result.TableData(await this.dictTypeService.selectDictTypeList(q));\r\n  }\r\n\r\n  @ApiOperation({ summary: '获取字典选择框列表' })\r\n  @Get('optionselect')\r\n  async optionselect() {\r\n    return Result.ok(await this.dictTypeService.selectAllDictType());\r\n  }\r\n\r\n  @ApiOperation({ summary: '导出xlsx文件' })\r\n  @Get('export')\r\n  async export(@Res() res: Response) {\r\n    this.dictTypeService.exportDictType(res);\r\n  }\r\n  @Get(':id')\r\n  @ApiOperation({ summary: '查询字典类型详细' })\r\n  async getType(@Param('id', ParseIntPipe) id: number) {\r\n    return Result.ok(await this.dictTypeService.selectDictTypeDetail(id));\r\n  }\r\n\r\n  @ApiOperation({ summary: '新增字典类型' })\r\n  @Post()\r\n  async addType(@Body() dictType: CreateDictTypeDto, @Req() req) {\r\n    dictType = {\r\n      ...dictType,\r\n      createTime: nowDateTime(),\r\n      updateTime: nowDateTime(),\r\n      createBy: req.user?.userName,\r\n      updateBy: req.user?.userName,\r\n    };\r\n    await this.dictTypeService.addDictType(dictType);\r\n    return Result.ok('新增成功！');\r\n  }\r\n\r\n  @ApiOperation({ summary: '修改字典类型' })\r\n  @Put()\r\n  async updateType(@Body() dictType: updateDictTypeDto, @Req() req) {\r\n    dictType = {\r\n      ...dictType,\r\n      updateTime: nowDateTime(),\r\n      updateBy: req.user?.userName,\r\n    };\r\n    await this.dictTypeService.updateDictType(dictType);\r\n    // 更新后刷新缓存\r\n    await this.dictTypeService.refreshDictCache();\r\n    return Result.ok('修改成功！');\r\n  }\r\n\r\n  @ApiOperation({ summary: '刷新字典缓存' })\r\n  @Delete('refreshCache')\r\n  async refreshCache() {\r\n    await this.dictTypeService.refreshDictCache();\r\n    return Result.ok();\r\n  }\r\n\r\n  @ApiOperation({ summary: '删除字典类型' })\r\n  @Delete('/:ids')\r\n  async delType(@Param('ids', ParseIntArrayPipe) ids: number[]) {\r\n    const { count } = await this.dictTypeService.deleteDictType(ids);\r\n    return Result.toAjax(count);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dict-type/dto/createDictTypeDto.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { IsNotEmpty, IsOptional, IsString } from 'class-validator';\r\n\r\nexport class CreateDictTypeDto extends BaseDomain {\r\n  @ApiProperty({ description: '字典名称' })\r\n  @IsNotEmpty({ message: '字典名称不能为空' })\r\n  @IsString()\r\n  dictName: string;\r\n  @ApiProperty({ description: '字典类型' })\r\n  @IsNotEmpty({ message: '字典类型不能为空' })\r\n  @IsString()\r\n  dictType: string;\r\n  @ApiProperty({ description: '字典状态（0停用，1正常）',required:false })\r\n  @IsOptional()\r\n  status?: string = '1';\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dict-type/dto/queryDictTypeDto.ts",
    "content": "import { queryDomain } from '@/common/domain/queryDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { IsOptional, IsString } from 'class-validator';\r\n\r\nexport class queryDictTypeDto extends queryDomain {\r\n  @ApiProperty({ description: '字典名称',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  dictName?: string | null;\r\n  @ApiProperty({ description: '字典类型',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  dictType?: string | null;\r\n  @ApiProperty({ description: '字典状态',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  status?: string | null;\r\n  @ApiProperty({ description: '附加参数',required:false })\r\n  @IsOptional()\r\n  params: {\r\n    beginTime: string | null;\r\n    endTime: string | null;\r\n  };\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dict-type/dto/updateDictTypeDto.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator';\r\n\r\nexport class updateDictTypeDto extends BaseDomain {\r\n  @ApiProperty({ description: '字典Id' })\r\n  @IsNotEmpty({ message: '字典Id不能为空' })\r\n  @IsNumber()\r\n  dictId: number;\r\n  @ApiProperty({ description: '字典名称' })\r\n  @IsNotEmpty({ message: '字典名称不能为空' })\r\n  @IsString()\r\n  dictName: string;\r\n  @ApiProperty({ description: '字典类型' })\r\n  @IsNotEmpty({ message: '字典类型不能为空' })\r\n  @IsString()\r\n  dictType: string;\r\n  @ApiProperty({ description: '字典状态（0停用，1正常）',required:false })\r\n  @IsOptional()\r\n  status?: string = '1';\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/dict-type/service/sys-dict-type.service.ts",
    "content": "import { Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { queryDictTypeDto } from '@/admin/system/dict-type/dto/queryDictTypeDto';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isNotEmpty } from 'class-validator';\r\nimport { CreateDictTypeDto } from '@/admin/system/dict-type/dto/createDictTypeDto';\r\nimport { updateDictTypeDto } from '@/admin/system/dict-type/dto/updateDictTypeDto';\r\nimport { SysDictDataService } from '../../dict-data/service/sys-dict-data.service';\r\nimport { ValidationException } from '@/common/exception/ValidationException';\r\nimport { Response } from 'express';\r\nimport { exportTable } from '@/common/utils';\r\nimport { redisUtils } from '@/common/utils/redisUtils';\r\nimport { Constants } from '@/common/constant/Constants';\r\n\r\n@Injectable()\r\nexport class SysDictTypeService {\r\n  constructor(\r\n    private prisma: PrismaService,\r\n    private dictDataService: SysDictDataService,\r\n  ) {}\r\n  //查询字典类型列表\r\n  async selectDictTypeList(q: queryDictTypeDto) {\r\n    const queryCondition: Prisma.SysDictTypeWhereInput = {};\r\n    if (isNotEmpty(q.dictType)) {\r\n      queryCondition.dictType = {\r\n        contains: q.dictType,\r\n      };\r\n    }\r\n    if (isNotEmpty(q.dictName)) {\r\n      queryCondition.dictName = {\r\n        contains: q.dictName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q.status)) {\r\n      queryCondition.status = {\r\n        equals: q.status,\r\n      };\r\n    }\r\n    if (isNotEmpty(q.params?.beginTime) && isNotEmpty(q.params?.endTime)) {\r\n      queryCondition.createTime = {\r\n        gte: q.params.beginTime,\r\n        lte: q.params.endTime,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.sysDictType.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n      }),\r\n      total: await this.prisma.sysDictType.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n\r\n  //查询所有数据\r\n  async selectAllDictType() {\r\n    return this.prisma.sysDictType.findMany();\r\n  }\r\n\r\n  //查询字典类型详细\r\n  async selectDictTypeDetail(dictId: number) {\r\n    return await this.prisma.sysDictType.findUnique({\r\n      where: {\r\n        dictId,\r\n      },\r\n    });\r\n  }\r\n\r\n  //新增字典类型\r\n  async addDictType(dictType: CreateDictTypeDto) {\r\n    const res = await this.prisma.sysDictType.create({\r\n      data: dictType,\r\n    });\r\n    await redisUtils.set(\r\n      Constants.SYS_DICT_KEY + dictType.dictType,\r\n      JSON.stringify([], null, 2),\r\n    );\r\n    return res;\r\n  }\r\n  //修改字典类型\r\n  async updateDictType(dictType: updateDictTypeDto) {\r\n    const old = await this.prisma.sysDictType.findUnique({\r\n      where: {\r\n        dictId: dictType.dictId,\r\n      },\r\n      include: {\r\n        dictDatas: true,\r\n      },\r\n    });\r\n    if (!old) return { count: 0 };\r\n    return this.prisma.$transaction(async (db) => {\r\n      //如果修改了dictType我们需要同步修改dictDatas中的dictType\r\n      if (old.dictType !== dictType.dictType) {\r\n        await db.sysDictData.updateMany({\r\n          where: {\r\n            dictType: old.dictType,\r\n          },\r\n          data: {\r\n            dictType: dictType.dictType,\r\n          },\r\n        });\r\n      }\r\n      const res = await db.sysDictType.update({\r\n        where: {\r\n          dictId: dictType.dictId,\r\n        },\r\n        data: dictType,\r\n      });\r\n      await this.dictDataService.updateCache(dictType.dictType);\r\n      return res;\r\n    });\r\n  }\r\n\r\n  //删除字典类型\r\n  async deleteDictType(dictIds: number[]) {\r\n    const dictTypes = new Set<string>();\r\n    for (const id of dictIds) {\r\n      const r = await this.prisma.sysDictType.findUnique({\r\n        where: {\r\n          dictId: id,\r\n        },\r\n        include: {\r\n          dictDatas: true,\r\n        },\r\n      });\r\n      //如果当前字典类型里面存有子数据，不能删除\r\n      if (r?.dictDatas?.length) {\r\n        throw new ValidationException('当前字典类型下有子数据，不能删除');\r\n      }\r\n      dictTypes.add(Constants.SYS_DICT_KEY + r.dictType);\r\n    }\r\n    const res = await this.prisma.sysDictType.deleteMany({\r\n      where: {\r\n        dictId: {\r\n          in: dictIds,\r\n        },\r\n      },\r\n    });\r\n    for (const k of dictTypes) {\r\n      await redisUtils.del(k);\r\n    }\r\n    return res;\r\n  }\r\n\r\n  //刷新字典缓存\r\n  async refreshDictCache() {\r\n    return await this.dictDataService.initSysDictData();\r\n  }\r\n\r\n  //导出字典类型为xlsx\r\n  async exportDictType(res: Response) {\r\n    const title = [\r\n      '字典主键',\r\n      '字典名称',\r\n      '字典类型',\r\n      '状态',\r\n      '创建者',\r\n      '创建时间',\r\n      '更新者',\r\n      '更新时间',\r\n      '备注',\r\n    ];\r\n    const data = (await this.prisma.sysDictType.findMany()).map((v) =>\r\n      Object.values(v),\r\n    );\r\n    data.unshift(title);\r\n    exportTable(data, res);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/logininfor/dto/index.ts",
    "content": "import { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport { IsNotEmpty, IsNumber, IsString, IsOptional } from 'class-validator';\r\nimport { queryDomain } from '@/common/domain/queryDomain';\r\n/**@description 查询登录日志Dto */\r\nexport class QuerySysLogininforDto extends queryDomain {\r\n  @ApiProperty({ description: '用户账号',required:false })\r\n  @IsOptional()\r\n  userName: string | null;\r\n  @ApiProperty({ description: '登录IP地址',required:false })\r\n  @IsOptional()\r\n  ipaddr: string | null;\r\n  @ApiProperty({ description: '登录地点',required:false })\r\n  @IsOptional()\r\n  loginLocation: string | null;\r\n  @ApiProperty({ description: '浏览器类型',required:false })\r\n  @IsOptional()\r\n  browser: string | null;\r\n  @ApiProperty({ description: '操作系统',required:false })\r\n  @IsOptional()\r\n  os: string | null;\r\n  @ApiProperty({ description: '登录状态（0失败,1成功）',required:false })\r\n  @IsOptional()\r\n  status: string | null;\r\n  @ApiProperty({ description: '提示消息',required:false })\r\n  @IsOptional()\r\n  msg: string | null;\r\n  @ApiProperty({ description: '登录时间排序 descending|ascending',required:false })\r\n  @IsOptional()\r\n  isAsc: string | null;\r\n}\r\n/**@description 创建登录日志Dto */\r\nexport class CreateSysLogininforDto {\r\n  @ApiProperty({ description: '用户账号',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  userName?: string;\r\n  @ApiProperty({ description: '登录IP地址',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  ipaddr?: string;\r\n  @ApiProperty({ description: '登录地点',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  loginLocation?: string;\r\n  @ApiProperty({ description: '浏览器类型',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  browser?: string;\r\n  @ApiProperty({ description: '操作系统',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  os?: string;\r\n  @ApiProperty({ description: '登录状态（0失败,1成功）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  status?: string;\r\n  @ApiProperty({ description: '提示消息',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  msg?: string;\r\n  @ApiProperty({ description: '访问时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  loginTime?: string;\r\n}\r\n/**@description 更新登录日志Dto */\r\nexport class UpdateSysLogininforDto {\r\n  @ApiProperty({ description: '访问ID' })\r\n  @IsNotEmpty({ message: '访问ID不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  infoId: number;\r\n  @ApiProperty({ description: '用户账号',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  userName?: string;\r\n  @ApiProperty({ description: '登录IP地址',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  ipaddr?: string;\r\n  @ApiProperty({ description: '登录地点',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  loginLocation?: string;\r\n  @ApiProperty({ description: '浏览器类型',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  browser?: string;\r\n  @ApiProperty({ description: '操作系统',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  os?: string;\r\n  @ApiProperty({ description: '登录状态（0失败,1成功）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  status?: string;\r\n  @ApiProperty({ description: '提示消息',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  msg?: string;\r\n  @ApiProperty({ description: '访问时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  loginTime?: string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/logininfor/service/sys-logininfor.service.ts",
    "content": "import { Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { Response } from 'express';\r\nimport { exportTable } from '@/common/utils';\r\nimport {\r\n  QuerySysLogininforDto,\r\n  CreateSysLogininforDto,\r\n  UpdateSysLogininforDto,\r\n} from '../dto/index';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isNotEmpty } from 'class-validator';\r\n@Injectable()\r\nexport class LogininforService {\r\n  constructor(private prisma: PrismaService) {}\r\n  /**@description 查询登录日志所有 */\r\n  async selectLogininforAll() {\r\n    return this.prisma.sysLogininfor.findMany();\r\n  }\r\n  /**@description 分页查询登录日志列表 */\r\n  async selectLogininforList(q: QuerySysLogininforDto) {\r\n    const queryCondition: Prisma.SysLogininforWhereInput = {};\r\n    const order: 'asc' | 'desc' = q.isAsc === 'ascending' ? 'asc' : 'desc';\r\n    if (isNotEmpty(q['userName'])) {\r\n      queryCondition.userName = {\r\n        contains: q.userName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['ipaddr'])) {\r\n      queryCondition.ipaddr = {\r\n        contains: q.ipaddr,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['loginLocation'])) {\r\n      queryCondition.loginLocation = {\r\n        equals: q.loginLocation,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['browser'])) {\r\n      queryCondition.browser = {\r\n        equals: q.browser,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['os'])) {\r\n      queryCondition.os = {\r\n        equals: q.os,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['status'])) {\r\n      queryCondition.status = {\r\n        equals: q.status,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['msg'])) {\r\n      queryCondition.msg = {\r\n        equals: q.msg,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginLoginTime) &&\r\n      isNotEmpty(q.params.endLoginTime)\r\n    ) {\r\n      queryCondition.loginTime = {\r\n        lte: q.params.endLoginTime,\r\n        gte: q.params.beginLoginTime,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.sysLogininfor.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        orderBy: {\r\n          loginTime: order,\r\n        },\r\n        where: queryCondition,\r\n      }),\r\n      total: await this.prisma.sysLogininfor.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n  /**@description 查询登录日志详情 */\r\n  async selectLogininforByInfoId(infoId: number) {\r\n    return this.prisma.sysLogininfor.findUnique({\r\n      where: {\r\n        infoId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 新增登录日志 */\r\n  async addLogininfor(sysLogininfor: CreateSysLogininforDto) {\r\n    //删除掉空值\r\n    for (const key in sysLogininfor) {\r\n      !isNotEmpty(sysLogininfor[key]) && delete sysLogininfor[key];\r\n    }\r\n    return await this.prisma.sysLogininfor.create({\r\n      data: sysLogininfor,\r\n    });\r\n  }\r\n  /**@description 修改登录日志 */\r\n  async updateLogininfor(sysLogininfor: UpdateSysLogininforDto) {\r\n    //删除掉空值\r\n    for (const key in sysLogininfor) {\r\n      !isNotEmpty(sysLogininfor[key]) && delete sysLogininfor[key];\r\n    }\r\n    return await this.prisma.sysLogininfor.update({\r\n      where: {\r\n        infoId: sysLogininfor.infoId,\r\n      },\r\n      data: sysLogininfor,\r\n    });\r\n  }\r\n  /** @description 清空所有 */\r\n  async clear() {\r\n    return this.prisma.sysLogininfor.deleteMany();\r\n  }\r\n  /**@description 批量删除登录日志 */\r\n  async deleteLogininforByInfoIds(infoIds: number[]) {\r\n    return this.prisma.sysLogininfor.deleteMany({\r\n      where: {\r\n        infoId: {\r\n          in: infoIds,\r\n        },\r\n      },\r\n    });\r\n  }\r\n  /**@description 单个删除登录日志 */\r\n  async deleteLogininforByInfoId(infoId: number) {\r\n    return this.prisma.sysLogininfor.delete({\r\n      where: {\r\n        infoId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 导出登录日志所有数据为xlsx */\r\n  async exportLogininfor(res: Response) {\r\n    const title = [\r\n      '访问ID',\r\n      '用户账号',\r\n      '登录IP地址',\r\n      '登录地点',\r\n      '浏览器类型',\r\n      '操作系统',\r\n      '登录状态（0失败,1成功）',\r\n      '提示消息',\r\n      '访问时间',\r\n    ];\r\n    const data = (await this.prisma.sysLogininfor.findMany()).map((v) =>\r\n      Object.values(v),\r\n    );\r\n    data.unshift(title);\r\n    exportTable(data, res);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/logininfor/sys-logininfor.controller.ts",
    "content": "import {\n  Body,\n  Controller,\n  Delete,\n  Get,\n  Param,\n  ParseIntPipe,\n  Post,\n  Put,\n  Query,\n  Res,\n} from '@nestjs/common';\nimport { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\nimport Result from '@/common/result/Result';\nimport {\n  ApiBearerAuth,\n  ApiBody,\n  ApiOperation,\n  ApiQuery,\n  ApiResponse,\n  ApiTags,\n} from '@nestjs/swagger';\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\nimport { LogininforService } from './service/sys-logininfor.service';\nimport {\n  QuerySysLogininforDto,\n  CreateSysLogininforDto,\n  UpdateSysLogininforDto,\n} from './dto/index';\nimport { Response } from 'express';\nimport { SysLogininfor } from '@prismaClient';\nimport { TableDataInfo } from '@/common/domain/TableDataInfo';\n@ApiTags('登录日志')\n@ApiBearerAuth()\n@Controller('monitor/logininfor')\nexport class SysLogininforController {\n  constructor(private logininforService: LogininforService) {}\n  @ApiOperation({ summary: '查询登录日志列表' })\n  @ApiResponse({ type: TableDataInfo<SysLogininfor> })\n  @RequirePermission('monitor:logininfor:query')\n  @Get('/list')\n  async listLogininfor(\n    @Query() q: QuerySysLogininforDto,\n  ): Promise<TableDataInfo<SysLogininfor>> {\n    return Result.TableData(\n      await this.logininforService.selectLogininforList(q),\n    );\n  }\n  @ApiOperation({ summary: '清空登录日志' })\n  @Delete('/clean')\n  async clearInfo(): Promise<Result<null>> {\n    await this.logininforService.clear();\n    return Result.ok();\n  }\n  @ApiOperation({ summary: '导出登录日志xlsx文件' })\n  @RequirePermission('monitor:logininfor:export')\n  @Get('/export')\n  async export(@Res() res: Response): Promise<void> {\n    return this.logininforService.exportLogininfor(res);\n  }\n  @ApiOperation({ summary: '查询登录日志详细' })\n  @ApiResponse({ type: Result<SysLogininfor> })\n  @RequirePermission('monitor:logininfor:query')\n  @Get('/:infoId')\n  async getLogininfor(\n    @Param('infoId', ParseIntPipe) infoId: number,\n  ): Promise<Result<SysLogininfor>> {\n    return Result.ok(\n      await this.logininforService.selectLogininforByInfoId(infoId),\n    );\n  }\n  @ApiOperation({ summary: '新增登录日志' })\n  @ApiResponse({ type: Result<SysLogininfor> })\n  @ApiBody({ type: CreateSysLogininforDto })\n  @RequirePermission('monitor:logininfor:add')\n  @Post('/')\n  async addLogininfor(\n    @Body() sysLogininfor: CreateSysLogininforDto,\n  ): Promise<Result<SysLogininfor>> {\n    return Result.ok(await this.logininforService.addLogininfor(sysLogininfor));\n  }\n  @ApiOperation({ summary: '修改登录日志' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysLogininforDto })\n  @RequirePermission('monitor:logininfor:edit')\n  @Put('/')\n  async updateLogininfor(\n    @Body() sysLogininfor: UpdateSysLogininforDto,\n  ): Promise<Result<any>> {\n    await this.logininforService.updateLogininfor(sysLogininfor);\n    return Result.ok('修改成功！');\n  }\n  @ApiOperation({ summary: '删除登录日志' })\n  @ApiResponse({ type: Result<any> })\n  @RequirePermission('monitor:logininfor:remove')\n  @Delete('/:ids')\n  async delLogininfor(\n    @Param('ids', ParseIntArrayPipe) infoIds: number[],\n  ): Promise<Result<any>> {\n    const { count } =\n      await this.logininforService.deleteLogininforByInfoIds(infoIds);\n    return Result.toAjax(count);\n  }\n}\n"
  },
  {
    "path": "server/src/admin/system/menu/dto/index.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport { IsNotEmpty, IsNumber, IsString, IsOptional } from 'class-validator';\r\nimport { queryDomain } from '@/common/domain/queryDomain';\r\n/**@description 查询菜单管理Dto */\r\nexport class QuerySysMenuDto extends queryDomain {\r\n  @ApiProperty({ description: '菜单名称',required:false })\r\n  @IsOptional()\r\n  menuName: string | null;\r\n  @ApiProperty({ description: '显示顺序',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  orderNum: number | null;\r\n  @ApiProperty({ description: '路由地址',required:false })\r\n  @IsOptional()\r\n  path: string | null;\r\n  @ApiProperty({ description: '组件路径',required:false })\r\n  @IsOptional()\r\n  component: string | null;\r\n  @ApiProperty({ description: '路由参数',required:false })\r\n  @IsOptional()\r\n  query: string | null;\r\n  @ApiProperty({ description: '是否为外链（0否 1是）',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  isFrame: number | null;\r\n  @ApiProperty({ description: '是否缓存（0不缓存 1缓存）',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  isCache: number | null;\r\n  @ApiProperty({ description: '菜单类型（M目录 C菜单 F按钮）',required:false })\r\n  @IsOptional()\r\n  menuType: string | null;\r\n  @ApiProperty({ description: '菜单状态（0隐藏 1显示）',required:false })\r\n  @IsOptional()\r\n  visible: string | null;\r\n  @ApiProperty({ description: '菜单状态（0停用 1正常）',required:false })\r\n  @IsOptional()\r\n  status: string | null;\r\n  @ApiProperty({ description: '权限标识',required:false })\r\n  @IsOptional()\r\n  perms: string | null;\r\n  @ApiProperty({ description: '菜单图标',required:false })\r\n  @IsOptional()\r\n  icon: string | null;\r\n}\r\n/**@description 创建菜单管理Dto */\r\nexport class CreateSysMenuDto extends BaseDomain {\r\n  @ApiProperty({ description: '菜单名称' })\r\n  @IsNotEmpty({ message: '菜单名称不能为空' })\r\n  @IsString()\r\n  menuName: string;\r\n  @ApiProperty({ description: '父菜单ID',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  parentId?: number;\r\n  @ApiProperty({ description: '显示顺序' })\r\n  @IsNotEmpty({ message: '显示顺序不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  orderNum: number;\r\n  @ApiProperty({ description: '路由地址' })\r\n  @IsNotEmpty({ message: '路由地址不能为空' })\r\n  @IsString()\r\n  path: string;\r\n  @ApiProperty({ description: '组件路径',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  component?: string;\r\n  @ApiProperty({ description: '路由参数',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  query?: string;\r\n  @ApiProperty({ description: '是否为外链（0否 1是）',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  isFrame?: number;\r\n  @ApiProperty({ description: '是否缓存（0不缓存 1缓存）',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  isCache?: number;\r\n  @ApiProperty({ description: '菜单类型（M目录 C菜单 F按钮）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  menuType?: string;\r\n  @ApiProperty({ description: '菜单状态（0隐藏 1显示）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  visible?: string;\r\n  @ApiProperty({ description: '菜单状态（0停用 1正常）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  status?: string;\r\n  @ApiProperty({ description: '权限标识',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  perms?: string;\r\n  @ApiProperty({ description: '菜单图标',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  icon?: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n}\r\n/**@description 更新菜单管理Dto */\r\nexport class UpdateSysMenuDto extends BaseDomain {\r\n  @ApiProperty({ description: '菜单ID' })\r\n  @IsNotEmpty({ message: '菜单ID不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  menuId: number;\r\n  @ApiProperty({ description: '菜单名称' })\r\n  @IsNotEmpty({ message: '菜单名称不能为空' })\r\n  @IsString()\r\n  menuName: string;\r\n  @ApiProperty({ description: '父菜单ID',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  parentId?: number;\r\n  @ApiProperty({ description: '显示顺序' })\r\n  @IsNotEmpty({ message: '显示顺序不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  orderNum: number;\r\n  @ApiProperty({ description: '路由地址' })\r\n  @IsNotEmpty({ message: '路由地址不能为空' })\r\n  @IsString()\r\n  path: string;\r\n  @ApiProperty({ description: '组件路径',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  component?: string;\r\n  @ApiProperty({ description: '路由参数',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  query?: string;\r\n  @ApiProperty({ description: '是否为外链（0否 1是）',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  isFrame?: number;\r\n  @ApiProperty({ description: '是否缓存（0不缓存 1缓存）',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  isCache?: number;\r\n  @ApiProperty({ description: '菜单类型（M目录 C菜单 F按钮）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  menuType?: string;\r\n  @ApiProperty({ description: '菜单状态（0隐藏 1显示）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  visible?: string;\r\n  @ApiProperty({ description: '菜单状态（0停用 1正常）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  status?: string;\r\n  @ApiProperty({ description: '权限标识',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  perms?: string;\r\n  @ApiProperty({ description: '菜单图标',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  icon?: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/menu/dto/queryMenuDto.ts",
    "content": "import { ApiProperty } from '@nestjs/swagger';\r\n\r\nexport class queryMenuDto {\r\n  @ApiProperty({ description: '菜单名称' })\r\n  menuName: string | null;\r\n  @ApiProperty({ description: '菜单状态' })\r\n  status: string | null;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/menu/service/sys-menu.service.ts",
    "content": "import { Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { Response } from 'express';\r\nimport { exportTable, tree } from '@/common/utils';\r\nimport {\r\n  QuerySysMenuDto,\r\n  CreateSysMenuDto,\r\n  UpdateSysMenuDto,\r\n} from '../dto/index';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isNotEmpty } from 'class-validator';\r\nimport * as assert from 'assert';\r\n@Injectable()\r\nexport class MenuService {\r\n  constructor(private prisma: PrismaService) {}\r\n  /**@description 查询菜单管理所有 */\r\n  async selectMenuAll() {\r\n    return this.prisma.sysMenu.findMany();\r\n  }\r\n  /**@description 查询菜单管理列表 */\r\n  async selectMenuList(q: QuerySysMenuDto) {\r\n    const queryCondition: Prisma.SysMenuWhereInput = {};\r\n    if (isNotEmpty(q['menuName'])) {\r\n      queryCondition.menuName = {\r\n        contains: q.menuName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['orderNum'])) {\r\n      queryCondition.orderNum = {\r\n        equals: q.orderNum,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['path'])) {\r\n      queryCondition.path = {\r\n        equals: q.path,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['component'])) {\r\n      queryCondition.component = {\r\n        equals: q.component,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['query'])) {\r\n      queryCondition.query = {\r\n        equals: q.query,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['isFrame'])) {\r\n      queryCondition.isFrame = {\r\n        equals: q.isFrame,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['isCache'])) {\r\n      queryCondition.isCache = {\r\n        equals: q.isCache,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['menuType'])) {\r\n      queryCondition.menuType = {\r\n        equals: q.menuType,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['visible'])) {\r\n      queryCondition.visible = {\r\n        equals: q.visible,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['status'])) {\r\n      queryCondition.status = {\r\n        equals: q.status,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['perms'])) {\r\n      queryCondition.perms = {\r\n        equals: q.perms,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['icon'])) {\r\n      queryCondition.icon = {\r\n        equals: q.icon,\r\n      };\r\n    }\r\n    return this.prisma.sysMenu.findMany({\r\n      where: queryCondition,\r\n      orderBy: {\r\n        orderNum: 'asc',\r\n      },\r\n    });\r\n  }\r\n  /**@description 查询菜单管理详情 */\r\n  async selectMenuByMenuId(menuId: number) {\r\n    return this.prisma.sysMenu.findUnique({\r\n      where: {\r\n        menuId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 新增菜单管理 */\r\n  async addMenu(sysMenu: CreateSysMenuDto) {\r\n    //删除掉空值\r\n    for (const key in sysMenu) {\r\n      !isNotEmpty(sysMenu[key]) && delete sysMenu[key];\r\n    }\r\n    return await this.prisma.sysMenu.create({\r\n      data: sysMenu,\r\n    });\r\n  }\r\n  /**@description 修改菜单管理 */\r\n  async updateMenu(sysMenu: UpdateSysMenuDto) {\r\n    //删除掉空值\r\n    for (const key in sysMenu) {\r\n      !isNotEmpty(sysMenu[key]) && delete sysMenu[key];\r\n    }\r\n    return await this.prisma.sysMenu.update({\r\n      where: {\r\n        menuId: sysMenu.menuId,\r\n      },\r\n      data: sysMenu,\r\n    });\r\n  }\r\n  /**@description 批量删除菜单管理 */\r\n  async deleteMenuByMenuIds(menuIds: number[]) {\r\n    const menu = await this.prisma.sysMenu.findFirst({\r\n      where: {\r\n        parentId: {\r\n          in: menuIds,\r\n        },\r\n        menuType: {\r\n          in: ['M', 'C'],\r\n        },\r\n      },\r\n    });\r\n    assert(!menu, '存在子菜单,不允许删除!');\r\n    const menu1 = await this.prisma.sysRoleMenu.findFirst({\r\n      where: { menuId: { in: menuIds } },\r\n    });\r\n    assert(!menu1, '菜单已被分配,不允许删除!');\r\n    return this.prisma.sysMenu.deleteMany({\r\n      where: {\r\n        OR: [\r\n          {\r\n            menuId: { in: menuIds },\r\n          },\r\n          {\r\n            menuType: 'F',\r\n            parentId: { in: menuIds },\r\n          },\r\n        ],\r\n      },\r\n    });\r\n  }\r\n\r\n  /**@description 单个删除菜单管理 */\r\n  async deleteMenuByMenuId(menuId: number) {\r\n    const menu = await this.prisma.sysMenu.findFirst({\r\n      where: {\r\n        parentId: menuId,\r\n        menuType: {\r\n          in: ['M', 'C'],\r\n        },\r\n      },\r\n    });\r\n    assert(!menu, '存在子菜单,不允许删除!');\r\n    const menu1 = await this.prisma.sysRoleMenu.findFirst({\r\n      where: { menuId },\r\n    });\r\n    assert(!menu1, '菜单已被分配,不允许删除!');\r\n    return this.prisma.sysMenu.deleteMany({\r\n      where: {\r\n        OR: [\r\n          {\r\n            menuId,\r\n          },\r\n          {\r\n            menuType: 'F',\r\n            parentId: menuId,\r\n          },\r\n        ],\r\n      },\r\n    });\r\n  }\r\n  /**@description 导出菜单管理所有数据为xlsx */\r\n  async exportMenu(res: Response) {\r\n    const title = [\r\n      '菜单ID',\r\n      '菜单名称',\r\n      '父菜单ID',\r\n      '显示顺序',\r\n      '路由地址',\r\n      '组件路径',\r\n      '路由参数',\r\n      '是否为外链（0否 1是）',\r\n      '是否缓存（0不缓存 1缓存）',\r\n      '菜单类型（M目录 C菜单 F按钮）',\r\n      '菜单状态（0隐藏 1显示）',\r\n      '菜单状态（0停用 1正常）',\r\n      '权限标识',\r\n      '菜单图标',\r\n      '创建者',\r\n      '创建时间',\r\n      '更新者',\r\n      '更新时间',\r\n      '备注',\r\n    ];\r\n    const data = (await this.prisma.sysMenu.findMany()).map((v) =>\r\n      Object.values(v),\r\n    );\r\n    data.unshift(title);\r\n    exportTable(data, res);\r\n  }\r\n\r\n  async selectMenuTree() {\r\n    const menus = tree(\r\n      (await this.prisma.sysMenu.findMany()).map((v) => ({\r\n        id: v.menuId,\r\n        label: v.menuName,\r\n        pid: v.parentId,\r\n      })),\r\n    );\r\n    return menus;\r\n  }\r\n\r\n  async roleMenuTreeselect(roleId: number) {\r\n    const menus = await this.selectMenuTree();\r\n    const checkedKeys = (\r\n      await this.prisma.sysRoleMenu.findMany({ where: { roleId } })\r\n    ).map((v) => v.menuId);\r\n    return { menus, checkedKeys };\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/menu/sys-menu.controller.ts",
    "content": "import {\n  Body,\n  Controller,\n  Delete,\n  Get,\n  Param,\n  ParseIntPipe,\n  Post,\n  Put,\n  Query,\n  Req,\n  Res,\n} from '@nestjs/common';\nimport { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\nimport Result from '@/common/result/Result';\nimport {\n  ApiBearerAuth,\n  ApiBody,\n  ApiOperation,\n  ApiQuery,\n  ApiResponse,\n  ApiTags,\n} from '@nestjs/swagger';\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\nimport { nowDateTime } from '@/common/utils';\nimport { MenuService } from './service/sys-menu.service';\nimport {\n  QuerySysMenuDto,\n  CreateSysMenuDto,\n  UpdateSysMenuDto,\n} from './dto/index';\nimport { Response } from 'express';\nimport { SysMenu } from '@prismaClient';\n@ApiTags('菜单管理')\n@ApiBearerAuth()\n@Controller('system/menu')\nexport class SysMenuController {\n  constructor(private menuService: MenuService) {}\n\n  @ApiOperation({ summary: '获取树形菜单选项' })\n  @RequirePermission('system:menu:query')\n  @Get('/treeselect')\n  async listMenuTree() {\n    return Result.ok(await this.menuService.selectMenuTree());\n  }\n  @ApiOperation({ summary: '获取树形菜单选项' })\n  @RequirePermission('system:menu:edit')\n  @Get('/roleMenuTreeselect/:menuId')\n  async roleMenuTreeselect(@Param('menuId', ParseIntPipe) menuId: number) {\n    return {\n      ...Result.ok(),\n      ...(await this.menuService.roleMenuTreeselect(menuId)),\n    };\n  }\n\n  @ApiOperation({ summary: '查询菜单管理列表' })\n  @ApiResponse({ type: Result<SysMenu[]> })\n  @RequirePermission('system:menu:query')\n  @Get('/list')\n  async listMenu(@Query() q: QuerySysMenuDto): Promise<Result<SysMenu[]>> {\n    return Result.ok(await this.menuService.selectMenuList(q));\n  }\n  @ApiOperation({ summary: '导出菜单管理xlsx文件' })\n  @RequirePermission('system:menu:export')\n  @Get('/export')\n  async export(@Res() res: Response): Promise<void> {\n    return this.menuService.exportMenu(res);\n  }\n  @ApiOperation({ summary: '查询菜单管理详细' })\n  @ApiResponse({ type: Result<SysMenu> })\n  @RequirePermission('system:menu:query')\n  @Get('/:menuId')\n  async getMenu(\n    @Param('menuId', ParseIntPipe) menuId: number,\n  ): Promise<Result<SysMenu>> {\n    return Result.ok(await this.menuService.selectMenuByMenuId(menuId));\n  }\n  @ApiOperation({ summary: '新增菜单管理' })\n  @ApiResponse({ type: Result<SysMenu> })\n  @ApiBody({ type: CreateSysMenuDto })\n  @RequirePermission('system:menu:add')\n  @Post('/')\n  async addMenu(\n    @Body() sysMenu: CreateSysMenuDto,\n    @Req() req,\n  ): Promise<Result<SysMenu>> {\n    sysMenu = {\n      ...sysMenu,\n      createTime: nowDateTime(),\n      updateTime: nowDateTime(),\n      createBy: req.user?.userName,\n      updateBy: req.user?.userName,\n    };\n    return Result.ok(await this.menuService.addMenu(sysMenu));\n  }\n  @ApiOperation({ summary: '修改菜单管理' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysMenuDto })\n  @RequirePermission('system:menu:edit')\n  @Put('/')\n  async updateMenu(\n    @Body() sysMenu: UpdateSysMenuDto,\n    @Req() req,\n  ): Promise<Result<any>> {\n    sysMenu = {\n      ...sysMenu,\n      updateTime: nowDateTime(),\n      updateBy: req.user?.userName,\n    };\n    await this.menuService.updateMenu(sysMenu);\n    return Result.ok('修改成功！');\n  }\n  @ApiOperation({ summary: '删除菜单管理' })\n  @ApiResponse({ type: Result<any> })\n  @RequirePermission('system:menu:remove')\n  @Delete('/:ids')\n  async delMenu(\n    @Param('ids', ParseIntArrayPipe) menuIds: number[],\n  ): Promise<Result<any>> {\n    const { count } = await this.menuService.deleteMenuByMenuIds(menuIds);\n    return Result.toAjax(count);\n  }\n}\n"
  },
  {
    "path": "server/src/admin/system/monitor/monitor.controller.ts",
    "content": "import { Constants } from '@/common/constant/Constants';\r\nimport Result from '@/common/result/Result';\r\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\r\nimport { redisUtils } from '@/common/utils/redisUtils';\r\nimport { getServerInfo } from '@/common/utils/systemInfo';\r\nimport {\r\n  Controller,\r\n  Delete,\r\n  Get,\r\n  Param,\r\n  ParseArrayPipe,\r\n  Query,\r\n} from '@nestjs/common';\r\nimport { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';\r\nimport { Throttle } from '@nestjs/throttler';\r\n@ApiTags('系统监控')\r\n@ApiBearerAuth()\r\n@Controller('/monitor')\r\nexport class monitorController {\r\n  constructor() {}\r\n  @ApiOperation({ summary: '获取redis信息' })\r\n  @Throttle({\r\n    default: {\r\n      limit: 10,\r\n      ttl: 1000 * 60,\r\n    },\r\n  })\r\n  @Get('/cache')\r\n  async getCacheInfo() {\r\n    return Result.ok(await redisUtils.getRedisInfo());\r\n  }\r\n  @ApiOperation({ summary: '获取服务器信息' })\r\n  @Throttle({\r\n    default: {\r\n      limit: 10,\r\n      ttl: 1000 * 60,\r\n    },\r\n  })\r\n  @Get('/server')\r\n  async getInfo() {\r\n    return Result.ok(await getServerInfo());\r\n  }\r\n\r\n  @ApiOperation({ summary: '获取在线用户信息' })\r\n  @Throttle({\r\n    default: {\r\n      limit: 20,\r\n      ttl: 1000 * 60,\r\n    },\r\n  })\r\n  @RequirePermission('monitor:online:query')\r\n  @Get('/online/list')\r\n  async getOnlineList(@Query() { ipaddr = '', userName = '' }) {\r\n    const tokens = await redisUtils.scanStream(Constants.LOGIN_TOKEN_KEY + '*');\r\n    if (!tokens.length) {\r\n      return Result.TableData({\r\n        rows: [],\r\n        total: 0,\r\n      });\r\n    }\r\n    let userList = (await redisUtils.mget(tokens)).map((v) => JSON.parse(v));\r\n    userList = userList.filter(\r\n      (v) => v.loginLocation.includes(ipaddr) && v.userName.includes(userName),\r\n    );\r\n    userList.sort((a, b) => +new Date(b.loginTime) - +new Date(a.loginTime));\r\n    return Result.TableData({\r\n      rows: userList,\r\n      total: userList.length,\r\n    });\r\n  }\r\n\r\n  @ApiOperation({ summary: '强退用户' })\r\n  @Throttle({\r\n    default: {\r\n      limit: 20,\r\n      ttl: 1000 * 60,\r\n    },\r\n  })\r\n  @RequirePermission('monitor:online:batchLogout')\r\n  @Delete('/online/:tokenId')\r\n  async forceLogout(@Param('tokenId', ParseArrayPipe) tokenIds: string[]) {\r\n    for (const tokenId of tokenIds) {\r\n      const user = JSON.parse(\r\n        (await redisUtils.get(Constants.LOGIN_TOKEN_KEY + tokenId)) || null,\r\n      );\r\n      if (user) {\r\n        //不可强退超级管理员\r\n        if (user.userId === 1) return Result.Error('不可强退超级管理员！');\r\n        await redisUtils.del(Constants.LOGIN_TOKEN_KEY + tokenId);\r\n      }\r\n    }\r\n    return Result.ok('操作成功！');\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/notice/dto/index.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport { IsNotEmpty, IsNumber, IsString, IsOptional } from 'class-validator';\r\nimport { queryDomain } from '@/common/domain/queryDomain';\r\n/**@description 查询通知公告表Dto */\r\nexport class QuerySysNoticeDto extends queryDomain {\r\n  @ApiProperty({ description: '公告标题',required:false })\r\n  @IsOptional()\r\n  noticeTitle: string | null;\r\n  @ApiProperty({ description: '公告类型（1通知 2公告）',required:false })\r\n  @IsOptional()\r\n  noticeType: string | null;\r\n  @ApiProperty({ description: '公告状态（0关闭 1正常）',required:false })\r\n  @IsOptional()\r\n  status: string | null;\r\n}\r\n/**@description 创建通知公告表Dto */\r\nexport class CreateSysNoticeDto extends BaseDomain {\r\n  @ApiProperty({ description: '公告标题' })\r\n  @IsNotEmpty({ message: '公告标题不能为空' })\r\n  @IsString()\r\n  noticeTitle: string;\r\n  @ApiProperty({ description: '公告类型（1通知 2公告）' })\r\n  @IsNotEmpty({ message: '公告类型（1通知 2公告）不能为空' })\r\n  @IsString()\r\n  noticeType: string;\r\n  @ApiProperty({ description: '公告内容',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  noticeContent?: string;\r\n  @ApiProperty({ description: '公告状态（0关闭 1正常）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  status?: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n}\r\n/**@description 更新通知公告表Dto */\r\nexport class UpdateSysNoticeDto extends BaseDomain {\r\n  @ApiProperty({ description: '公告ID' })\r\n  @IsNotEmpty({ message: '公告ID不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  noticeId: number;\r\n  @ApiProperty({ description: '公告标题' })\r\n  @IsNotEmpty({ message: '公告标题不能为空' })\r\n  @IsString()\r\n  noticeTitle: string;\r\n  @ApiProperty({ description: '公告类型（1通知 2公告）' })\r\n  @IsNotEmpty({ message: '公告类型（1通知 2公告）不能为空' })\r\n  @IsString()\r\n  noticeType: string;\r\n  @ApiProperty({ description: '公告内容',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  noticeContent?: string;\r\n  @ApiProperty({ description: '公告状态（0关闭 1正常）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  status?: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/notice/service/sys-notice.service.ts",
    "content": "import { Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { Response } from 'express';\r\nimport { exportTable } from '@/common/utils';\r\nimport {\r\n  QuerySysNoticeDto,\r\n  CreateSysNoticeDto,\r\n  UpdateSysNoticeDto,\r\n} from '../dto/index';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isNotEmpty } from 'class-validator';\r\n@Injectable()\r\nexport class NoticeService {\r\n  constructor(private prisma: PrismaService) {}\r\n  /**@description 查询通知公告表所有 */\r\n  async selectNoticeAll() {\r\n    return this.prisma.sysNotice.findMany();\r\n  }\r\n  /**@description 分页查询通知公告表列表 */\r\n  async selectNoticeList(q: QuerySysNoticeDto) {\r\n    const queryCondition: Prisma.SysNoticeWhereInput = {};\r\n    if (isNotEmpty(q['noticeTitle'])) {\r\n      queryCondition.noticeTitle = {\r\n        equals: q.noticeTitle,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['noticeType'])) {\r\n      queryCondition.noticeType = {\r\n        equals: q.noticeType,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['status'])) {\r\n      queryCondition.status = {\r\n        equals: q.status,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.sysNotice.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n      }),\r\n      total: await this.prisma.sysNotice.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n  /**@description 查询通知公告表详情 */\r\n  async selectNoticeByNoticeId(noticeId: number) {\r\n    return this.prisma.sysNotice.findUnique({\r\n      where: {\r\n        noticeId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 新增通知公告表 */\r\n  async addNotice(sysNotice: CreateSysNoticeDto) {\r\n    //删除掉空值\r\n    for (const key in sysNotice) {\r\n      !isNotEmpty(sysNotice[key]) && delete sysNotice[key];\r\n    }\r\n    return await this.prisma.sysNotice.create({\r\n      data: sysNotice,\r\n    });\r\n  }\r\n  /**@description 修改通知公告表 */\r\n  async updateNotice(sysNotice: UpdateSysNoticeDto) {\r\n    //删除掉空值\r\n    for (const key in sysNotice) {\r\n      !isNotEmpty(sysNotice[key]) && delete sysNotice[key];\r\n    }\r\n    return await this.prisma.sysNotice.update({\r\n      where: {\r\n        noticeId: sysNotice.noticeId,\r\n      },\r\n      data: sysNotice,\r\n    });\r\n  }\r\n  /**@description 批量删除通知公告表 */\r\n  async deleteNoticeByNoticeIds(noticeIds: number[]) {\r\n    return this.prisma.sysNotice.deleteMany({\r\n      where: {\r\n        noticeId: {\r\n          in: noticeIds,\r\n        },\r\n      },\r\n    });\r\n  }\r\n  /**@description 单个删除通知公告表 */\r\n  async deleteNoticeByNoticeId(noticeId: number) {\r\n    return this.prisma.sysNotice.delete({\r\n      where: {\r\n        noticeId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 导出通知公告表所有数据为xlsx */\r\n  async exportNotice(res: Response) {\r\n    const title = [\r\n      '公告ID',\r\n      '公告标题',\r\n      '公告类型（1通知 2公告）',\r\n      '公告内容',\r\n      '公告状态（0关闭 1正常）',\r\n      '创建者',\r\n      '创建时间',\r\n      '更新者',\r\n      '更新时间',\r\n      '备注',\r\n    ];\r\n    const data = (await this.prisma.sysNotice.findMany()).map((v) =>\r\n      Object.values(v),\r\n    );\r\n    data.unshift(title);\r\n    exportTable(data, res);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/notice/sys-notice.controller.ts",
    "content": "import {\n  Body,\n  Controller,\n  Delete,\n  Get,\n  Param,\n  ParseIntPipe,\n  Post,\n  Put,\n  Query,\n  Req,\n  Res,\n} from '@nestjs/common';\nimport { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\nimport Result from '@/common/result/Result';\nimport {\n  ApiBearerAuth,\n  ApiBody,\n  ApiOperation,\n  ApiQuery,\n  ApiResponse,\n  ApiTags,\n} from '@nestjs/swagger';\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\nimport { nowDateTime } from '@/common/utils';\nimport { NoticeService } from './service/sys-notice.service';\nimport {\n  QuerySysNoticeDto,\n  CreateSysNoticeDto,\n  UpdateSysNoticeDto,\n} from './dto/index';\nimport { Response } from 'express';\nimport { SysNotice } from '@prismaClient';\nimport { TableDataInfo } from '@/common/domain/TableDataInfo';\n@ApiTags('通知公告表')\n@ApiBearerAuth()\n@Controller('system/notice')\nexport class SysNoticeController {\n  constructor(private noticeService: NoticeService) {}\n  @ApiOperation({ summary: '查询通知公告表列表' })\n  @ApiResponse({ type: TableDataInfo<SysNotice> })\n  @RequirePermission('system:notice:query')\n  @Get('/list')\n  async listNotice(\n    @Query() q: QuerySysNoticeDto,\n  ): Promise<TableDataInfo<SysNotice>> {\n    return Result.TableData(await this.noticeService.selectNoticeList(q));\n  }\n  @ApiOperation({ summary: '导出通知公告表xlsx文件' })\n  @RequirePermission('system:notice:export')\n  @Get('/export')\n  async export(@Res() res: Response): Promise<void> {\n    return this.noticeService.exportNotice(res);\n  }\n  @ApiOperation({ summary: '查询通知公告表详细' })\n  @ApiResponse({ type: Result<SysNotice> })\n  @RequirePermission('system:notice:query')\n  @Get('/:noticeId')\n  async getNotice(\n    @Param('noticeId', ParseIntPipe) noticeId: number,\n  ): Promise<Result<SysNotice>> {\n    return Result.ok(await this.noticeService.selectNoticeByNoticeId(noticeId));\n  }\n  @ApiOperation({ summary: '新增通知公告表' })\n  @ApiResponse({ type: Result<SysNotice> })\n  @ApiBody({ type: CreateSysNoticeDto })\n  @RequirePermission('system:notice:add')\n  @Post('/')\n  async addNotice(\n    @Body() sysNotice: CreateSysNoticeDto,\n    @Req() req,\n  ): Promise<Result<SysNotice>> {\n    sysNotice = {\n      ...sysNotice,\n      createTime: nowDateTime(),\n      updateTime: nowDateTime(),\n      createBy: req.user?.userName,\n      updateBy: req.user?.userName,\n    };\n    return Result.ok(await this.noticeService.addNotice(sysNotice));\n  }\n  @ApiOperation({ summary: '修改通知公告表' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysNoticeDto })\n  @RequirePermission('system:notice:edit')\n  @Put('/')\n  async updateNotice(\n    @Body() sysNotice: UpdateSysNoticeDto,\n    @Req() req,\n  ): Promise<Result<any>> {\n    sysNotice = {\n      ...sysNotice,\n      updateTime: nowDateTime(),\n      updateBy: req.user?.userName,\n    };\n    await this.noticeService.updateNotice(sysNotice);\n    return Result.ok('修改成功！');\n  }\n  @ApiOperation({ summary: '删除通知公告表' })\n  @ApiResponse({ type: Result<any> })\n  @RequirePermission('system:notice:remove')\n  @Delete('/:ids')\n  async delNotice(\n    @Param('ids', ParseIntArrayPipe) noticeIds: number[],\n  ): Promise<Result<any>> {\n    const { count } =\n      await this.noticeService.deleteNoticeByNoticeIds(noticeIds);\n    return Result.toAjax(count);\n  }\n}\n"
  },
  {
    "path": "server/src/admin/system/post/dto/index.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport { IsNotEmpty, IsNumber, IsString, IsOptional } from 'class-validator';\r\nimport { queryDomain } from '@/common/domain/queryDomain';\r\n/**@description 查询岗位信息表Dto */\r\nexport class QuerySysPostDto extends queryDomain {\r\n  @ApiProperty({ description: '岗位编码',required:false })\r\n  @IsOptional()\r\n  postCode: string | null;\r\n  @ApiProperty({ description: '岗位名称',required:false })\r\n  @IsOptional()\r\n  postName: string | null;\r\n  @ApiProperty({ description: '显示顺序',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  postSort: number | null;\r\n  @ApiProperty({ description: '状态（0停用 1正常）',required:false })\r\n  @IsOptional()\r\n  status: string | null;\r\n}\r\n/**@description 创建岗位信息表Dto */\r\nexport class CreateSysPostDto extends BaseDomain {\r\n  @ApiProperty({ description: '岗位编码' })\r\n  @IsNotEmpty({ message: '岗位编码不能为空' })\r\n  @IsString()\r\n  postCode: string;\r\n  @ApiProperty({ description: '岗位名称' })\r\n  @IsNotEmpty({ message: '岗位名称不能为空' })\r\n  @IsString()\r\n  postName: string;\r\n  @ApiProperty({ description: '显示顺序' })\r\n  @IsNotEmpty({ message: '显示顺序不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  postSort: number;\r\n  @ApiProperty({ description: '状态（0停用 1正常）' })\r\n  @IsNotEmpty({ message: '状态（0停用 1正常）不能为空' })\r\n  @IsString()\r\n  status: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n}\r\n/**@description 更新岗位信息表Dto */\r\nexport class UpdateSysPostDto extends BaseDomain {\r\n  @ApiProperty({ description: '岗位ID' })\r\n  @IsNotEmpty({ message: '岗位ID不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  postId: number;\r\n  @ApiProperty({ description: '岗位编码' })\r\n  @IsNotEmpty({ message: '岗位编码不能为空' })\r\n  @IsString()\r\n  postCode: string;\r\n  @ApiProperty({ description: '岗位名称' })\r\n  @IsNotEmpty({ message: '岗位名称不能为空' })\r\n  @IsString()\r\n  postName: string;\r\n  @ApiProperty({ description: '显示顺序' })\r\n  @IsNotEmpty({ message: '显示顺序不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  postSort: number;\r\n  @ApiProperty({ description: '状态（0停用 1正常）' })\r\n  @IsNotEmpty({ message: '状态（0停用 1正常）不能为空' })\r\n  @IsString()\r\n  status: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/post/service/sys-post.service.ts",
    "content": "import { Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { Response } from 'express';\r\nimport { exportTable } from '@/common/utils';\r\nimport {\r\n  QuerySysPostDto,\r\n  CreateSysPostDto,\r\n  UpdateSysPostDto,\r\n} from '../dto/index';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isNotEmpty } from 'class-validator';\r\nimport * as assert from 'assert';\r\n@Injectable()\r\nexport class PostService {\r\n  constructor(private prisma: PrismaService) {}\r\n  /**@description 查询岗位信息表所有 */\r\n  async selectPostAll() {\r\n    return this.prisma.sysPost.findMany();\r\n  }\r\n  /**@description 分页查询岗位信息表列表 */\r\n  async selectPostList(q: QuerySysPostDto) {\r\n    const queryCondition: Prisma.SysPostWhereInput = {};\r\n    if (isNotEmpty(q['postCode'])) {\r\n      queryCondition.postCode = {\r\n        equals: q.postCode,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['postName'])) {\r\n      queryCondition.postName = {\r\n        contains: q.postName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['postSort'])) {\r\n      queryCondition.postSort = {\r\n        equals: q.postSort,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['status'])) {\r\n      queryCondition.status = {\r\n        equals: q.status,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginCreateTime) &&\r\n      isNotEmpty(q.params.endCreateTime)\r\n    ) {\r\n      queryCondition.createTime = {\r\n        lte: q.params.endCreateTime,\r\n        gte: q.params.beginCreateTime,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginUpdateTime) &&\r\n      isNotEmpty(q.params.endUpdateTime)\r\n    ) {\r\n      queryCondition.updateTime = {\r\n        lte: q.params.endUpdateTime,\r\n        gte: q.params.beginUpdateTime,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.sysPost.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n      }),\r\n      total: await this.prisma.sysPost.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n  /**@description 查询岗位信息表详情 */\r\n  async selectPostByPostId(postId: number) {\r\n    return this.prisma.sysPost.findUnique({\r\n      where: {\r\n        postId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 新增岗位信息表 */\r\n  async addPost(sysPost: CreateSysPostDto) {\r\n    //删除掉空值\r\n    for (const key in sysPost) {\r\n      !isNotEmpty(sysPost[key]) && delete sysPost[key];\r\n    }\r\n    return await this.prisma.sysPost.create({\r\n      data: sysPost,\r\n    });\r\n  }\r\n  /**@description 修改岗位信息表 */\r\n  async updatePost(sysPost: UpdateSysPostDto) {\r\n    //删除掉空值\r\n    for (const key in sysPost) {\r\n      !isNotEmpty(sysPost[key]) && delete sysPost[key];\r\n    }\r\n    return await this.prisma.sysPost.update({\r\n      where: {\r\n        postId: sysPost.postId,\r\n      },\r\n      data: sysPost,\r\n    });\r\n  }\r\n  /**@description 批量删除岗位信息表 */\r\n  async deletePostByPostIds(postIds: number[]) {\r\n    const post = await this.prisma.sysUserPost.findFirst({\r\n      where: {\r\n        postId: {\r\n          in: postIds,\r\n        },\r\n      },\r\n    });\r\n    assert(!post, '岗位已被分配,不允许删除!');\r\n    return this.prisma.sysPost.deleteMany({\r\n      where: {\r\n        postId: {\r\n          in: postIds,\r\n        },\r\n      },\r\n    });\r\n  }\r\n  /**@description 单个删除岗位信息表 */\r\n  async deletePostByPostId(postId: number) {\r\n    const post = await this.prisma.sysUserPost.findFirst({\r\n      where: {\r\n        postId,\r\n      },\r\n    });\r\n    assert(!post, '岗位已被分配,不允许删除!');\r\n    return this.prisma.sysPost.delete({\r\n      where: {\r\n        postId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 导出岗位信息表所有数据为xlsx */\r\n  async exportPost(res: Response) {\r\n    const title = [\r\n      '岗位ID',\r\n      '岗位编码',\r\n      '岗位名称',\r\n      '显示顺序',\r\n      '状态（0停用 1正常）',\r\n      '创建者',\r\n      '创建时间',\r\n      '更新者',\r\n      '更新时间',\r\n      '备注',\r\n    ];\r\n    const data = (await this.prisma.sysPost.findMany()).map((v) =>\r\n      Object.values(v),\r\n    );\r\n    data.unshift(title);\r\n    exportTable(data, res);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/post/sys-post.controller.ts",
    "content": "import {\n  Body,\n  Controller,\n  Delete,\n  Get,\n  Param,\n  ParseIntPipe,\n  Post,\n  Put,\n  Query,\n  Req,\n  Res,\n} from '@nestjs/common';\nimport { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\nimport Result from '@/common/result/Result';\nimport {\n  ApiBearerAuth,\n  ApiBody,\n  ApiOperation,\n  ApiQuery,\n  ApiResponse,\n  ApiTags,\n} from '@nestjs/swagger';\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\nimport { nowDateTime } from '@/common/utils';\nimport { PostService } from './service/sys-post.service';\nimport {\n  QuerySysPostDto,\n  CreateSysPostDto,\n  UpdateSysPostDto,\n} from './dto/index';\nimport { Response } from 'express';\nimport { SysPost } from '@prismaClient';\nimport { TableDataInfo } from '@/common/domain/TableDataInfo';\n@ApiTags('岗位信息表')\n@ApiBearerAuth()\n@Controller('system/post')\nexport class SysPostController {\n  constructor(private postService: PostService) {}\n  @ApiOperation({ summary: '查询岗位信息表列表' })\n  @ApiResponse({ type: TableDataInfo<SysPost> })\n  @RequirePermission('system:post:query')\n  @Get('/list')\n  async listPost(@Query() q: QuerySysPostDto): Promise<TableDataInfo<SysPost>> {\n    return Result.TableData(await this.postService.selectPostList(q));\n  }\n  @ApiOperation({ summary: '导出岗位信息表xlsx文件' })\n  @RequirePermission('system:post:export')\n  @Get('/export')\n  async export(@Res() res: Response): Promise<void> {\n    return this.postService.exportPost(res);\n  }\n  @ApiOperation({ summary: '查询岗位信息表详细' })\n  @ApiResponse({ type: Result<SysPost> })\n  @RequirePermission('system:post:query')\n  @Get('/:postId')\n  async getPost(\n    @Param('postId', ParseIntPipe) postId: number,\n  ): Promise<Result<SysPost>> {\n    return Result.ok(await this.postService.selectPostByPostId(postId));\n  }\n  @ApiOperation({ summary: '新增岗位信息表' })\n  @ApiResponse({ type: Result<SysPost> })\n  @ApiBody({ type: CreateSysPostDto })\n  @RequirePermission('system:post:add')\n  @Post('/')\n  async addPost(\n    @Body() sysPost: CreateSysPostDto,\n    @Req() req,\n  ): Promise<Result<SysPost>> {\n    sysPost = {\n      ...sysPost,\n      createTime: nowDateTime(),\n      updateTime: nowDateTime(),\n      createBy: req.user?.userName,\n      updateBy: req.user?.userName,\n    };\n    return Result.ok(await this.postService.addPost(sysPost));\n  }\n  @ApiOperation({ summary: '修改岗位信息表' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysPostDto })\n  @RequirePermission('system:post:edit')\n  @Put('/')\n  async updatePost(\n    @Body() sysPost: UpdateSysPostDto,\n    @Req() req,\n  ): Promise<Result<any>> {\n    sysPost = {\n      ...sysPost,\n      updateTime: nowDateTime(),\n      updateBy: req.user?.userName,\n    };\n    await this.postService.updatePost(sysPost);\n    return Result.ok('修改成功！');\n  }\n  @ApiOperation({ summary: '删除岗位信息表' })\n  @ApiResponse({ type: Result<any> })\n  @RequirePermission('system:post:remove')\n  @Delete('/:ids')\n  async delPost(\n    @Param('ids', ParseIntArrayPipe) postIds: number[],\n  ): Promise<Result<any>> {\n    const { count } = await this.postService.deletePostByPostIds(postIds);\n    return Result.toAjax(count);\n  }\n}\n"
  },
  {
    "path": "server/src/admin/system/role/dto/index.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport {\r\n  IsNotEmpty,\r\n  IsNumber,\r\n  IsString,\r\n  IsOptional,\r\n  IsArray,\r\n} from 'class-validator';\r\nimport { queryDomain } from '@/common/domain/queryDomain';\r\n/**@description 查询角色管理Dto */\r\nexport class QuerySysRoleDto extends queryDomain {\r\n  @ApiProperty({ description: '角色名称',required:false })\r\n  @IsOptional()\r\n  roleName: string | null;\r\n  @ApiProperty({ description: '角色权限字符串',required:false })\r\n  @IsOptional()\r\n  roleKey: string | null;\r\n  @ApiProperty({ description: '显示顺序',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  roleSort: number | null;\r\n  @ApiProperty({\r\n    description:\r\n      '数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限 5：仅个人权限）',\r\n required:false })\r\n  @IsOptional()\r\n  dataScope: string | null;\r\n  @ApiProperty({ description: '菜单树选择项是否关联显示',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  menuCheckStrictly: number | null;\r\n  @ApiProperty({ description: '部门树选择项是否关联显示',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  deptCheckStrictly: number | null;\r\n  @ApiProperty({ description: '角色状态（0停用 1正常）',required:false })\r\n  @IsOptional()\r\n  status: string | null;\r\n}\r\n/**@description 创建角色管理Dto */\r\nexport class CreateSysRoleDto extends BaseDomain {\r\n  @ApiProperty({ description: '角色名称' })\r\n  @IsNotEmpty({ message: '角色名称不能为空' })\r\n  @IsString()\r\n  roleName: string;\r\n  @ApiProperty({ description: '角色权限字符串' })\r\n  @IsNotEmpty({ message: '角色权限字符串不能为空' })\r\n  @IsString()\r\n  roleKey: string;\r\n  @ApiProperty({ description: '显示顺序' })\r\n  @IsNotEmpty({ message: '显示顺序不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  roleSort: number;\r\n  @ApiProperty({\r\n    description:\r\n      '数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）',\r\n required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  dataScope?: string;\r\n  @ApiProperty({ description: '菜单树选择项是否关联显示',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  menuCheckStrictly?: number;\r\n  @ApiProperty({ description: '部门树选择项是否关联显示',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  deptCheckStrictly?: number;\r\n  @ApiProperty({ description: '角色状态（0停用 1正常）' })\r\n  @IsNotEmpty({ message: '角色状态（0停用 1正常）不能为空' })\r\n  @IsString()\r\n  status: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n  @ApiProperty({ description: '菜单权限' })\r\n  @IsArray()\r\n  menuIds: number[];\r\n}\r\n/**@description 更新角色管理Dto */\r\nexport class UpdateSysRoleDto extends BaseDomain {\r\n  @ApiProperty({ description: '角色ID' })\r\n  @IsNotEmpty({ message: '角色ID不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  roleId: number;\r\n  @ApiProperty({ description: '角色名称' })\r\n  @IsNotEmpty({ message: '角色名称不能为空' })\r\n  @IsString()\r\n  roleName: string;\r\n  @ApiProperty({ description: '角色权限字符串' })\r\n  @IsNotEmpty({ message: '角色权限字符串不能为空' })\r\n  @IsString()\r\n  roleKey: string;\r\n  @ApiProperty({ description: '显示顺序' })\r\n  @IsNotEmpty({ message: '显示顺序不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  roleSort: number;\r\n  @ApiProperty({\r\n    description:\r\n      '数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）',\r\n required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  dataScope?: string;\r\n  @ApiProperty({ description: '菜单树选择项是否关联显示',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  menuCheckStrictly?: number;\r\n  @ApiProperty({ description: '部门树选择项是否关联显示',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  deptCheckStrictly?: number;\r\n  @ApiProperty({ description: '角色状态（0停用 1正常）' })\r\n  @IsNotEmpty({ message: '角色状态（0停用 1正常）不能为空' })\r\n  @IsString()\r\n  status: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n  @ApiProperty({ description: '菜单权限',required:false })\r\n  @IsOptional()\r\n  @IsArray()\r\n  menuIds: number[];\r\n  @ApiProperty({ description: '部门权限',required:false })\r\n  @IsOptional()\r\n  @IsArray()\r\n  deptIds: number[];\r\n}\r\n\r\n/**@description 更新角色状态管理Dto */\r\nexport class UpdateSysRoleStatusDto {\r\n  @ApiProperty({ description: '角色ID' })\r\n  @IsNotEmpty({ message: '角色ID不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  roleId?: number;\r\n  @ApiProperty({ description: '角色状态（0停用 1正常）' })\r\n  @IsNotEmpty({ message: '角色状态（0停用 1正常）不能为空' })\r\n  @IsString()\r\n  status: string;\r\n}\r\n\r\n/**@description 查询授权角色用户管理Dto */\r\nexport class QueryAllocatedListDto extends queryDomain {\r\n  @IsNotEmpty({ message: '角色ID不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  roleId: number;\r\n  @IsOptional()\r\n  userName?: string;\r\n  @IsOptional()\r\n  phoneNumber?: string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/role/service/sys-role.service.ts",
    "content": "import { Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { Response } from 'express';\r\nimport { exportTable } from '@/common/utils';\r\nimport {\r\n  QuerySysRoleDto,\r\n  CreateSysRoleDto,\r\n  UpdateSysRoleDto,\r\n  UpdateSysRoleStatusDto,\r\n  QueryAllocatedListDto,\r\n} from '../dto/index';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isArray, isNotEmpty } from 'class-validator';\r\nimport * as assert from 'assert';\r\nimport { AuthService } from '@/common/service/auth/auth.service';\r\n@Injectable()\r\nexport class RoleService {\r\n  constructor(\r\n    private prisma: PrismaService,\r\n    private authService: AuthService,\r\n  ) {}\r\n  /**@description 查询角色管理所有 */\r\n  async selectRoleAll() {\r\n    return this.prisma.sysRole.findMany();\r\n  }\r\n  /**@description 分页查询角色管理列表 */\r\n  async selectRoleList(q: QuerySysRoleDto) {\r\n    const queryCondition: Prisma.SysRoleWhereInput = {};\r\n    if (isNotEmpty(q['roleName'])) {\r\n      queryCondition.roleName = {\r\n        contains: q.roleName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['roleKey'])) {\r\n      queryCondition.roleKey = {\r\n        contains: q.roleKey,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['roleSort'])) {\r\n      queryCondition.roleSort = {\r\n        equals: q.roleSort,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['dataScope'])) {\r\n      queryCondition.dataScope = {\r\n        equals: q.dataScope,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['menuCheckStrictly'])) {\r\n      queryCondition.menuCheckStrictly = {\r\n        equals: q.menuCheckStrictly,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['deptCheckStrictly'])) {\r\n      queryCondition.deptCheckStrictly = {\r\n        equals: q.deptCheckStrictly,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['status'])) {\r\n      queryCondition.status = {\r\n        equals: q.status,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginCreateTime) &&\r\n      isNotEmpty(q.params.endCreateTime)\r\n    ) {\r\n      queryCondition.createTime = {\r\n        lte: q.params.endCreateTime,\r\n        gte: q.params.beginCreateTime,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginUpdateTime) &&\r\n      isNotEmpty(q.params.endUpdateTime)\r\n    ) {\r\n      queryCondition.updateTime = {\r\n        lte: q.params.endUpdateTime,\r\n        gte: q.params.beginUpdateTime,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.sysRole.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n      }),\r\n      total: await this.prisma.sysRole.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n\r\n  /**@description 分页查询属于角色的用户列表 */\r\n  async allocatedList(q: QueryAllocatedListDto) {\r\n    const queryCondition: Prisma.SysUserWhereInput = {\r\n      roles: {\r\n        some: {\r\n          roleId: q.roleId,\r\n        },\r\n      },\r\n    };\r\n    if (isNotEmpty(q.userName)) {\r\n      queryCondition.userName = {\r\n        contains: q.userName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q.phoneNumber)) {\r\n      queryCondition.phonenumber = {\r\n        contains: q.phoneNumber,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.sysUser.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n      }),\r\n      total: await this.prisma.sysUser.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n\r\n  /**@description 分页查询不属于角色的用户列表 */\r\n  async unallocatedList(q: QueryAllocatedListDto) {\r\n    const queryCondition: Prisma.SysUserWhereInput = {\r\n      roles: {\r\n        every: {\r\n          roleId: {\r\n            not: q.roleId,\r\n          },\r\n        },\r\n      },\r\n    };\r\n    if (isNotEmpty(q.userName)) {\r\n      queryCondition.userName = {\r\n        contains: q.userName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q.phoneNumber)) {\r\n      queryCondition.phonenumber = {\r\n        contains: q.phoneNumber,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.sysUser.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n      }),\r\n      total: await this.prisma.sysUser.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n\r\n  //批量添加授权用户\r\n  async addRoleUser(roleId: number, userIds: number[]) {\r\n    if (!userIds.length) return null;\r\n    await this.prisma.sysUserRole.createMany({\r\n      data: userIds.map((v) => ({\r\n        userId: v,\r\n        roleId,\r\n      })),\r\n    });\r\n    userIds.forEach((v) => this.authService.refreshUserInfo(v));\r\n    return true;\r\n  }\r\n\r\n  //批量取消授权用户\r\n  async cancelRoleUser(roleId: number, userIds: number[]) {\r\n    if (!userIds.length) return null;\r\n    await this.prisma.sysUserRole.deleteMany({\r\n      where: {\r\n        roleId,\r\n        userId: {\r\n          in: userIds,\r\n        },\r\n      },\r\n    });\r\n    userIds.forEach((v) => this.authService.refreshUserInfo(v));\r\n    return true;\r\n  }\r\n\r\n  /**@description 查询角色管理详情 */\r\n  async selectRoleByRoleId(roleId: number) {\r\n    return this.prisma.sysRole.findUnique({\r\n      where: {\r\n        roleId,\r\n      },\r\n    });\r\n  }\r\n  /**@description 新增角色管理 */\r\n  async addRole(sysRole: CreateSysRoleDto) {\r\n    //删除掉空值\r\n    for (const key in sysRole) {\r\n      !isNotEmpty(sysRole[key]) && delete sysRole[key];\r\n    }\r\n    return this.prisma.$transaction(async (db) => {\r\n      const { menuIds, ...role } = sysRole;\r\n      const addRole = await db.sysRole.create({\r\n        data: role,\r\n      });\r\n      if (isArray(menuIds) && menuIds.length) {\r\n        await db.sysRoleMenu.createMany({\r\n          data: menuIds.map((v) => ({ menuId: v, roleId: addRole.roleId })),\r\n        });\r\n      }\r\n      return addRole;\r\n    });\r\n  }\r\n  /**@description 修改角色管理 */\r\n  async updateRole(sysRole: UpdateSysRoleDto) {\r\n    //删除掉空值\r\n    for (const key in sysRole) {\r\n      !isNotEmpty(sysRole[key]) && delete sysRole[key];\r\n    }\r\n    return this.prisma.$transaction(async (db) => {\r\n      const { menuIds, ...role } = sysRole;\r\n      await db.sysRoleMenu.deleteMany({ where: { roleId: role.roleId } });\r\n      const res = await db.sysRole.update({\r\n        where: {\r\n          roleId: role.roleId,\r\n        },\r\n        data: role,\r\n      });\r\n      if (isArray(menuIds) && menuIds.length) {\r\n        await db.sysRoleMenu.createMany({\r\n          data: menuIds.map((v) => ({ menuId: v, roleId: res.roleId })),\r\n        });\r\n      }\r\n      //更新属于这个角色的用户的缓存信息\r\n      {\r\n        const userIds = [\r\n          ...new Set(\r\n            (\r\n              await db.sysUserRole.findMany({\r\n                where: { roleId: sysRole.roleId },\r\n              })\r\n            ).map((v) => v.userId),\r\n          ),\r\n        ];\r\n        userIds.forEach((userId) => {\r\n          this.authService.refreshUserInfo(userId);\r\n        });\r\n      }\r\n      return res;\r\n    });\r\n  }\r\n  /**@description 批量删除角色管理 */\r\n  async deleteRoleByRoleIds(roleIds: number[]) {\r\n    const userroles = await this.prisma.sysUserRole.findFirst({\r\n      where: {\r\n        roleId: { in: roleIds },\r\n      },\r\n    });\r\n    assert(!userroles, '角色已被分配！');\r\n    return this.prisma.$transaction(async (db) => {\r\n      await db.sysRoleDept.deleteMany({\r\n        where: {\r\n          roleId: {\r\n            in: roleIds,\r\n          },\r\n        },\r\n      });\r\n      await db.sysRoleMenu.deleteMany({\r\n        where: {\r\n          roleId: {\r\n            in: roleIds,\r\n          },\r\n        },\r\n      });\r\n      return db.sysRole.deleteMany({\r\n        where: {\r\n          roleId: {\r\n            in: roleIds,\r\n          },\r\n        },\r\n      });\r\n    });\r\n  }\r\n  /**@description 单个删除角色管理 */\r\n  async deleteRoleByRoleId(roleId: number) {\r\n    const userroles = await this.prisma.sysUserRole.findFirst({\r\n      where: {\r\n        roleId,\r\n      },\r\n    });\r\n    assert(!userroles, '角色已被分配！');\r\n    return this.prisma.$transaction(async (db) => {\r\n      await db.sysRoleDept.deleteMany({\r\n        where: {\r\n          roleId,\r\n        },\r\n      });\r\n      await db.sysRoleMenu.deleteMany({\r\n        where: {\r\n          roleId,\r\n        },\r\n      });\r\n      return db.sysRole.deleteMany({\r\n        where: {\r\n          roleId,\r\n        },\r\n      });\r\n    });\r\n  }\r\n  /**@description 导出角色管理所有数据为xlsx */\r\n  async exportRole(res: Response) {\r\n    const title = [\r\n      '角色ID',\r\n      '角色名称',\r\n      '角色权限字符串',\r\n      '显示顺序',\r\n      '数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）',\r\n      '菜单树选择项是否关联显示',\r\n      '部门树选择项是否关联显示',\r\n      '角色状态（0停用 1正常）',\r\n      '删除标志（0删除 1存在）',\r\n      '创建者',\r\n      '创建时间',\r\n      '更新者',\r\n      '更新时间',\r\n      '备注',\r\n    ];\r\n    const data = (await this.prisma.sysRole.findMany()).map((v) =>\r\n      Object.values(v),\r\n    );\r\n    data.unshift(title);\r\n    exportTable(data, res);\r\n  }\r\n  /**@description 更新角色状态 */\r\n  async updateStatus(role: UpdateSysRoleStatusDto) {\r\n    const res = await this.prisma.sysRole.update({\r\n      where: {\r\n        roleId: role.roleId,\r\n      },\r\n      data: role,\r\n    });\r\n    //更新属于这个角色的用户的缓存信息\r\n    {\r\n      const userIds = [\r\n        ...new Set(\r\n          (\r\n            await this.prisma.sysUserRole.findMany({\r\n              where: { roleId: role.roleId },\r\n            })\r\n          ).map((v) => v.userId),\r\n        ),\r\n      ];\r\n      userIds.forEach((userId) => {\r\n        this.authService.refreshUserInfo(userId);\r\n      });\r\n    }\r\n    return res;\r\n  }\r\n\r\n  /**@description 分配数据权限 */\r\n  async dataScope(sysRole: UpdateSysRoleDto) {\r\n    //删除掉空值\r\n    for (const key in sysRole) {\r\n      !isNotEmpty(sysRole[key]) && delete sysRole[key];\r\n    }\r\n    return this.prisma.$transaction(async (db) => {\r\n      const { deptIds, ...role } = sysRole;\r\n      await db.sysRoleDept.deleteMany({ where: { roleId: role.roleId } });\r\n      await db.sysRole.update({\r\n        where: {\r\n          roleId: role.roleId,\r\n        },\r\n        data: role,\r\n      });\r\n      if (isArray(deptIds) && deptIds.length) {\r\n        return await db.sysRoleDept.createMany({\r\n          data: deptIds.map((v) => ({ deptId: v, roleId: role.roleId })),\r\n        });\r\n      }\r\n    });\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/role/sys-role.controller.ts",
    "content": "import {\n  Body,\n  Controller,\n  Delete,\n  Get,\n  Param,\n  ParseIntPipe,\n  Post,\n  Put,\n  Query,\n  Req,\n  Res,\n} from '@nestjs/common';\nimport { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\nimport Result from '@/common/result/Result';\nimport {\n  ApiBearerAuth,\n  ApiBody,\n  ApiOperation,\n  ApiQuery,\n  ApiResponse,\n  ApiTags,\n} from '@nestjs/swagger';\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\nimport { nowDateTime } from '@/common/utils';\nimport { RoleService } from './service/sys-role.service';\nimport {\n  QuerySysRoleDto,\n  CreateSysRoleDto,\n  UpdateSysRoleDto,\n  UpdateSysRoleStatusDto,\n  QueryAllocatedListDto,\n} from './dto/index';\nimport { Response } from 'express';\nimport { SysRole } from '@prismaClient';\nimport { TableDataInfo } from '@/common/domain/TableDataInfo';\nimport { DeptService } from '../dept/service/sys-dept.service';\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\nimport { RequireRole } from '@/common/decorator/require-role.decorator';\n@ApiTags('角色管理')\n@ApiBearerAuth()\n@Controller('system/role')\nexport class SysRoleController {\n  constructor(\n    private roleService: RoleService,\n    private deptService: DeptService,\n    private prisma: PrismaService,\n  ) {}\n  @ApiOperation({ summary: '查询角色管理列表' })\n  @ApiResponse({ type: TableDataInfo<SysRole> })\n  @RequirePermission('system:role:query')\n  @Get('/list')\n  async listRole(@Query() q: QuerySysRoleDto): Promise<TableDataInfo<SysRole>> {\n    return Result.TableData(await this.roleService.selectRoleList(q));\n  }\n\n  @ApiOperation({ summary: '查询属于角色的用户管理列表' })\n  @RequirePermission('system:role:query')\n  @Get('/authUser/allocatedList')\n  async listAllocatedList(@Query() q: QueryAllocatedListDto) {\n    return Result.TableData(await this.roleService.allocatedList(q));\n  }\n\n  @ApiOperation({ summary: '查询不属于角色的用户管理列表' })\n  @RequirePermission('system:role:query')\n  @Get('authUser/unallocatedList')\n  async listUnallocatedList(@Query() q: QueryAllocatedListDto) {\n    return Result.TableData(await this.roleService.unallocatedList(q));\n  }\n\n  @ApiOperation({ summary: '批量添加用户到该角色' })\n  @RequirePermission('system:role:edit')\n  @Put('authUser/selectAll')\n  async addAllRoleUser(\n    @Query('roleId', ParseIntPipe) roleId: number,\n    @Query('userIds', ParseIntArrayPipe) userIds: number[],\n  ) {\n    await this.roleService.addRoleUser(roleId, userIds);\n    return Result.ok();\n  }\n\n  @ApiOperation({ summary: '批量取消用户该角色' })\n  @RequirePermission('system:role:edit')\n  @Put('authUser/cancelAll')\n  async cancelAllRoleUser(\n    @Query('roleId', ParseIntPipe) roleId: number,\n    @Query('userIds', ParseIntArrayPipe) userIds: number[],\n  ) {\n    await this.roleService.cancelRoleUser(roleId, userIds);\n    return Result.ok();\n  }\n\n  @ApiOperation({ summary: '取消单个用户该角色' })\n  @RequirePermission('system:role:edit')\n  @Put('authUser/cancel')\n  async cancelRoleUser(\n    @Body('roleId', ParseIntPipe) roleId: number,\n    @Body('userId', ParseIntPipe) userIds: number,\n  ) {\n    await this.roleService.cancelRoleUser(roleId, [userIds]);\n    return Result.ok();\n  }\n\n  @ApiOperation({ summary: '导出角色管理xlsx文件' })\n  @RequirePermission('system:role:export')\n  @Get('/export')\n  async export(@Res() res: Response): Promise<void> {\n    return this.roleService.exportRole(res);\n  }\n\n  @ApiOperation({ summary: '获取部门树' })\n  @RequirePermission('system:role:edit')\n  @Get('/deptTree/:roleId')\n  async getDeptTrees(@Param('roleId', ParseIntPipe) roleId: number) {\n    const depts = await this.deptService.getDeptTree();\n    const checkedKeys = (\n      await this.prisma.sysRoleDept.findMany({\n        where: {\n          roleId,\n        },\n      })\n    )\n      .map((v) => v.deptId)\n      .filter((v) => !hasChildren(depts, v));\n    function hasChildren(arr, id) {\n      for (const item of arr) {\n        if (item.id === id) {\n          return item.children.length > 0;\n        } else {\n          const r = hasChildren(item.children, id);\n          if (r !== null) return r;\n        }\n      }\n      return null;\n    }\n    return {\n      ...Result.ok(),\n      depts,\n      checkedKeys,\n    };\n  }\n\n  @ApiOperation({ summary: '查询角色管理详细' })\n  @ApiResponse({ type: Result<SysRole> })\n  @RequirePermission('system:role:query')\n  @Get('/:roleId')\n  async getRole(\n    @Param('roleId', ParseIntPipe) roleId: number,\n  ): Promise<Result<SysRole>> {\n    return Result.ok(await this.roleService.selectRoleByRoleId(roleId));\n  }\n  @ApiOperation({ summary: '新增角色管理' })\n  @ApiResponse({ type: Result<SysRole> })\n  @ApiBody({ type: CreateSysRoleDto })\n  @RequirePermission('system:role:add')\n  @Post('/')\n  async addRole(\n    @Body() sysRole: CreateSysRoleDto,\n    @Req() req,\n  ): Promise<Result<SysRole>> {\n    sysRole = {\n      ...sysRole,\n      dataScope: '5', //自定义权限\n      createTime: nowDateTime(),\n      updateTime: nowDateTime(),\n      createBy: req.user?.userName,\n      updateBy: req.user?.userName,\n    };\n    return Result.ok(await this.roleService.addRole(sysRole));\n  }\n  @ApiOperation({ summary: '修改角色管理' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysRoleDto })\n  @RequirePermission('system:role:edit')\n  @Put('/')\n  async updateRole(\n    @Body() sysRole: UpdateSysRoleDto,\n    @Req() req,\n  ): Promise<Result<any>> {\n    delete sysRole.dataScope;\n    sysRole = {\n      ...sysRole,\n      updateTime: nowDateTime(),\n      updateBy: req.user?.userName,\n    };\n    await this.roleService.updateRole(sysRole);\n    return Result.ok('修改成功！');\n  }\n\n  @ApiOperation({ summary: '分配用户角色' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysRoleDto })\n  @RequireRole('admin')\n  @Put('/dataScope')\n  async dataScope(\n    @Body() sysRole: UpdateSysRoleDto,\n    @Req() req,\n  ): Promise<Result<any>> {\n    sysRole = {\n      ...sysRole,\n      updateTime: nowDateTime(),\n      updateBy: req.user?.userName,\n    };\n    await this.roleService.dataScope(sysRole);\n    return Result.ok('修改成功！');\n  }\n\n  @ApiOperation({ summary: '修改角色状态' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysRoleDto })\n  @RequirePermission('system:role:edit')\n  @Put('/changeStatus')\n  async updateRoleStatus(\n    @Body() sysRole: UpdateSysRoleStatusDto,\n  ): Promise<Result<any>> {\n    await this.roleService.updateStatus(sysRole);\n    return Result.ok('修改成功！');\n  }\n\n  @ApiOperation({ summary: '删除角色管理' })\n  @ApiResponse({ type: Result<any> })\n  @RequirePermission('system:role:remove')\n  @Delete('/:ids')\n  async delRole(\n    @Param('ids', ParseIntArrayPipe) roleIds: number[],\n  ): Promise<Result<any>> {\n    const { count } = await this.roleService.deleteRoleByRoleIds(roleIds);\n    return Result.toAjax(count);\n  }\n}\n"
  },
  {
    "path": "server/src/admin/system/user/dto/index.ts",
    "content": "import { BaseDomain } from '@/common/domain/BaseDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport {\r\n  IsNotEmpty,\r\n  IsNumber,\r\n  IsString,\r\n  IsOptional,\r\n  MinLength,\r\n} from 'class-validator';\r\nimport { queryDomain } from '@/common/domain/queryDomain';\r\n/**@description 查询用户管理Dto */\r\nexport class QuerySysUserDto extends queryDomain {\r\n  @ApiProperty({ description: '部门ID',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  deptId: number | null;\r\n  @ApiProperty({ description: '用户账号',required:false })\r\n  @IsOptional()\r\n  userName: string | null;\r\n  @ApiProperty({ description: '用户昵称',required:false })\r\n  @IsOptional()\r\n  nickName: string | null;\r\n  @ApiProperty({ description: '用户类型（00系统用户）',required:false })\r\n  @IsOptional()\r\n  userType: string | null;\r\n  @ApiProperty({ description: '用户邮箱',required:false })\r\n  @IsOptional()\r\n  email: string | null;\r\n  @ApiProperty({ description: '手机号码',required:false })\r\n  @IsOptional()\r\n  phonenumber: string | null;\r\n  @ApiProperty({ description: '用户性别（0男 1女 2未知）',required:false })\r\n  @IsOptional()\r\n  sex: string | null;\r\n  @ApiProperty({ description: '头像地址',required:false })\r\n  @IsOptional()\r\n  avatar: string | null;\r\n  @ApiProperty({ description: '密码',required:false })\r\n  @IsOptional()\r\n  password: string | null;\r\n  @ApiProperty({ description: '帐号状态（0停用,1正常 ）',required:false })\r\n  @IsOptional()\r\n  status: string | null;\r\n  @ApiProperty({ description: '最后登录IP',required:false })\r\n  @IsOptional()\r\n  loginIp: string | null;\r\n}\r\n/**@description 创建用户管理Dto */\r\nexport class CreateSysUserDto extends BaseDomain {\r\n  @ApiProperty({ description: '部门ID',required:false })\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  deptId?: number;\r\n  @ApiProperty({ description: '用户账号' })\r\n  @IsNotEmpty({ message: '用户账号不能为空' })\r\n  @IsString()\r\n  userName: string;\r\n  @ApiProperty({ description: '用户昵称' })\r\n  @IsNotEmpty({ message: '用户昵称不能为空' })\r\n  @IsString()\r\n  nickName: string;\r\n  @ApiProperty({ description: '用户类型（00系统用户）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  userType?: string;\r\n  @ApiProperty({ description: '用户邮箱',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  email?: string;\r\n  @ApiProperty({ description: '手机号码',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  phonenumber?: string;\r\n  @ApiProperty({ description: '用户性别（0男 1女 2未知）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  sex?: string;\r\n  @ApiProperty({ description: '头像地址',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  avatar?: string;\r\n  @ApiProperty({ description: '密码',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  password?: string;\r\n  @ApiProperty({ description: '帐号状态（0停用,1正常 ）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  status?: string;\r\n  @ApiProperty({ description: '最后登录IP',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  loginIp?: string;\r\n  @ApiProperty({ description: '最后登录时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  loginDate?: string;\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n  @ApiProperty({ description: '角色ids',required:false })\r\n  @IsOptional()\r\n  roleIds?: number[];\r\n  @ApiProperty({ description: '部门ids',required:false })\r\n  @IsOptional()\r\n  postIds?: number[];\r\n}\r\n/**@description 更新用户管理Dto */\r\nexport class UpdateSysUserDto extends BaseDomain {\r\n  @ApiProperty({ description: '用户ID' })\r\n  @IsNotEmpty({ message: '用户ID不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  userId: number;\r\n  @ApiProperty({ description: '用户账号' })\r\n  @IsNotEmpty({ message: '用户账号不能为空' })\r\n  @IsString()\r\n  userName: string;\r\n  @ApiProperty({ description: '用户昵称' })\r\n  @IsNotEmpty({ message: '用户昵称不能为空' })\r\n  @IsString()\r\n  nickName: string;\r\n  @ApiProperty({ description: '用户类型（00系统用户）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  userType?: string;\r\n  @ApiProperty({ description: '用户邮箱',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  email?: string;\r\n  @ApiProperty({ description: '手机号码',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  phonenumber?: string;\r\n  @ApiProperty({ description: '用户性别（0男 1女 2未知）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  sex?: string;\r\n  @ApiProperty({ description: '头像地址',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  avatar?: string;\r\n  @ApiProperty({ description: '帐号状态（0停用,1正常 ）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  status?: string;\r\n  @ApiProperty({ description: '最后登录IP',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  loginIp?: string;\r\n  @ApiProperty({ description: '最后登录时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  loginDate?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  remark?: string;\r\n  @ApiProperty({ description: '角色ids',required:false })\r\n  @IsOptional()\r\n  roleIds?: number[];\r\n  @ApiProperty({ description: '部门ids',required:false })\r\n  @IsOptional()\r\n  postIds?: number[];\r\n}\r\n\r\n/**@description 更新用户状态 */\r\nexport class UpdateSysUserStatusDto extends BaseDomain {\r\n  @ApiProperty({ description: '用户ID' })\r\n  @IsNotEmpty({ message: '用户ID不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  userId?: number;\r\n  @ApiProperty({ description: '帐号状态（0停用,1正常 ）',required:false })\r\n  @IsOptional()\r\n  @IsNotEmpty({ message: '请传入状态' })\r\n  status?: string;\r\n}\r\n/**@description 重置密码 */\r\nexport class resetPasswordDto extends BaseDomain {\r\n  @ApiProperty({ description: '用户ID' })\r\n  @IsNotEmpty({ message: '用户ID不能为空' })\r\n  @Transform((v) => +v.value)\r\n  @IsNumber()\r\n  userId?: number;\r\n  @ApiProperty({ description: '密码' })\r\n  @IsNotEmpty({ message: '密码不能为空' })\r\n  @MinLength(6, { message: '密码长度不能小于6' })\r\n  @IsString()\r\n  password?: string;\r\n}\r\n\r\n/**@description 修改用户个人信息 */\r\nexport class updateProfileDto {\r\n  @ApiProperty({ description: '用户昵称' })\r\n  @IsNotEmpty({ message: '用户昵称不能为空' })\r\n  @IsString()\r\n  nickName: string;\r\n  @ApiProperty({ description: '用户邮箱' })\r\n  @IsNotEmpty({ message: '邮箱不能为空' })\r\n  @IsString()\r\n  email?: string;\r\n  @ApiProperty({ description: '手机号码' })\r\n  @IsNotEmpty({ message: '手机号码不能为空' })\r\n  @IsString()\r\n  phonenumber?: string;\r\n  @ApiProperty({ description: '用户性别（0男 1女 2未知）',required:false })\r\n  @IsOptional()\r\n  @IsString()\r\n  sex?: string;\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/user/service/sys-user.service.ts",
    "content": "import { Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { Response } from 'express';\r\nimport { exportTable } from '@/common/utils';\r\nimport {\r\n  QuerySysUserDto,\r\n  CreateSysUserDto,\r\n  UpdateSysUserDto,\r\n  resetPasswordDto,\r\n  UpdateSysUserStatusDto,\r\n  updateProfileDto,\r\n} from '../dto/index';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isNotEmpty } from 'class-validator';\r\nimport * as assert from 'assert';\r\nimport { AuthService } from '@/common/service/auth/auth.service';\r\nimport { isArray } from 'lodash';\r\nimport Result from '@/common/result/Result';\r\nimport { redisUtils } from '@/common/utils/redisUtils';\r\nimport { Constants } from '@/common/constant/Constants';\r\n@Injectable()\r\nexport class UserService {\r\n  constructor(\r\n    private prisma: PrismaService,\r\n    private authService: AuthService,\r\n  ) {}\r\n  /**@description 查询用户所有 */\r\n  async selectUserAll() {\r\n    return this.prisma.sysUser.findMany();\r\n  }\r\n  /**@description 分页查询用户列表 */\r\n  async selectUserList(q: QuerySysUserDto) {\r\n    const queryCondition: Prisma.SysUserWhereInput = {};\r\n    if (isNotEmpty(q['deptId'])) {\r\n      queryCondition.deptId = {\r\n        equals: q.deptId,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['userName'])) {\r\n      queryCondition.userName = {\r\n        contains: q.userName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['nickName'])) {\r\n      queryCondition.nickName = {\r\n        contains: q.nickName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['userType'])) {\r\n      queryCondition.userType = {\r\n        equals: q.userType,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['email'])) {\r\n      queryCondition.email = {\r\n        contains: q.email,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['phonenumber'])) {\r\n      queryCondition.phonenumber = {\r\n        contains: q.phonenumber,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['sex'])) {\r\n      queryCondition.sex = {\r\n        equals: q.sex,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['avatar'])) {\r\n      queryCondition.avatar = {\r\n        equals: q.avatar,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['password'])) {\r\n      queryCondition.password = {\r\n        equals: q.password,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['status'])) {\r\n      queryCondition.status = {\r\n        equals: q.status,\r\n      };\r\n    }\r\n    if (isNotEmpty(q['loginIp'])) {\r\n      queryCondition.loginIp = {\r\n        equals: q.loginIp,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginLoginDate) &&\r\n      isNotEmpty(q.params.endLoginDate)\r\n    ) {\r\n      queryCondition.loginDate = {\r\n        lte: q.params.endLoginDate,\r\n        gte: q.params.beginLoginDate,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginCreateTime) &&\r\n      isNotEmpty(q.params.endCreateTime)\r\n    ) {\r\n      queryCondition.createTime = {\r\n        lte: q.params.endCreateTime,\r\n        gte: q.params.beginCreateTime,\r\n      };\r\n    }\r\n    if (\r\n      isNotEmpty(q.params.beginUpdateTime) &&\r\n      isNotEmpty(q.params.endUpdateTime)\r\n    ) {\r\n      queryCondition.updateTime = {\r\n        lte: q.params.endUpdateTime,\r\n        gte: q.params.beginUpdateTime,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.sysUser.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n        include: {\r\n          dept: true,\r\n        },\r\n      }),\r\n      total: await this.prisma.sysUser.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n  /**@description 查询用户详情 */\r\n  async selectUserByUserId(userId: number) {\r\n    return this.prisma.sysUser.findUnique({\r\n      where: {\r\n        userId,\r\n      },\r\n      include: {\r\n        roles: true,\r\n        posts: true,\r\n      },\r\n    });\r\n  }\r\n  /**@description 新增用户 */\r\n  async addUser(sysUser: CreateSysUserDto) {\r\n    sysUser.password = this.authService.encrypt(sysUser.password);\r\n    const { roleIds, postIds, ...user } = sysUser;\r\n    //删除掉空值\r\n    for (const key in sysUser) {\r\n      !isNotEmpty(sysUser[key]) && delete sysUser[key];\r\n    }\r\n    return this.prisma.$transaction(async (db) => {\r\n      //更新用户信息\r\n      const addUser = await db.sysUser.create({\r\n        data: user,\r\n      });\r\n      const { userId } = addUser;\r\n      //添加用户的部门和角色\r\n      if (isArray(roleIds) && roleIds.length) {\r\n        await db.sysUserRole.createMany({\r\n          data: roleIds.map((v) => ({ userId, roleId: v })),\r\n        });\r\n      }\r\n      if (isArray(postIds) && postIds.length) {\r\n        await db.sysUserPost.createMany({\r\n          data: postIds.map((v) => ({\r\n            userId,\r\n            postId: v,\r\n          })),\r\n        });\r\n      }\r\n      return addUser;\r\n    });\r\n  }\r\n  /**@description 修改用户 */\r\n  async updateUser(sysUser: UpdateSysUserDto) {\r\n    const { roleIds, postIds, ...user } = sysUser;\r\n    //删除掉空值\r\n    for (const key in sysUser) {\r\n      !isNotEmpty(sysUser[key]) && delete sysUser[key];\r\n    }\r\n    await this.prisma.$transaction(async (db) => {\r\n      //删除用户的部门和角色\r\n      {\r\n        await db.sysUserPost.deleteMany({\r\n          where: {\r\n            userId: sysUser.userId,\r\n          },\r\n        });\r\n        await db.sysUserRole.deleteMany({\r\n          where: {\r\n            userId: sysUser.userId,\r\n          },\r\n        });\r\n      }\r\n      //添加用户的部门和角色\r\n      if (isArray(roleIds) && roleIds.length) {\r\n        await db.sysUserRole.createMany({\r\n          data: roleIds.map((v) => ({\r\n            userId: sysUser.userId,\r\n            roleId: v,\r\n          })),\r\n        });\r\n      }\r\n      if (isArray(postIds) && postIds.length) {\r\n        await db.sysUserPost.createMany({\r\n          data: postIds.map((v) => ({\r\n            userId: sysUser.userId,\r\n            postId: v,\r\n          })),\r\n        });\r\n      }\r\n      //更新用户信息\r\n      return await db.sysUser.update({\r\n        where: {\r\n          userId: sysUser.userId,\r\n        },\r\n        data: user,\r\n      });\r\n    });\r\n    //如果为禁用状态，我们把用户的token删除，禁用账户！\r\n    if (sysUser.status === '0') {\r\n      await redisUtils.del(Constants.LOGIN_TOKEN_KEY + sysUser.userId);\r\n    }\r\n    return Result.ok();\r\n  }\r\n\r\n  /**@description 修改用户密码 */\r\n  async resetPassword(sysUser: resetPasswordDto) {\r\n    sysUser.password = this.authService.encrypt(sysUser.password);\r\n    //删除掉空值\r\n    const res = await this.prisma.sysUser.update({\r\n      where: {\r\n        userId: sysUser.userId,\r\n      },\r\n      data: {\r\n        password: sysUser.password,\r\n      },\r\n    });\r\n    await redisUtils.del(Constants.LOGIN_TOKEN_KEY + sysUser.userId);\r\n    return res;\r\n  }\r\n  /**@description 修改用户状态 */\r\n  async updateStatus(sysUser: UpdateSysUserStatusDto) {\r\n    const res = await this.prisma.sysUser.update({\r\n      where: {\r\n        userId: sysUser.userId,\r\n      },\r\n      data: {\r\n        status: sysUser.status,\r\n      },\r\n    });\r\n    //如果为禁用状态，我们把用户的token删除，禁用账户！\r\n    if (sysUser.status === '0') {\r\n      await redisUtils.del(Constants.LOGIN_TOKEN_KEY + sysUser.userId);\r\n    }\r\n    return res;\r\n  }\r\n\r\n  /**@description 批量删除用户 */\r\n  async deleteUserByUserIds(userIds: number[]) {\r\n    return this.prisma.$transaction(async (db) => {\r\n      await db.sysUserPost.deleteMany({\r\n        where: {\r\n          userId: {\r\n            in: userIds,\r\n          },\r\n        },\r\n      });\r\n      await db.sysUserRole.deleteMany({\r\n        where: {\r\n          userId: {\r\n            in: userIds,\r\n          },\r\n        },\r\n      });\r\n      const res = await db.sysUser.deleteMany({\r\n        where: {\r\n          userId: {\r\n            in: userIds,\r\n          },\r\n        },\r\n      });\r\n      //清空用户的登录token\r\n      for (const id of userIds) {\r\n        await redisUtils.del(Constants.LOGIN_TOKEN_KEY + id);\r\n      }\r\n      return res;\r\n    });\r\n  }\r\n  /**@description 单个删除用户 */\r\n  async deleteUserByUserId(userId: number) {\r\n    return this.prisma.$transaction(async (db) => {\r\n      await db.sysUserPost.deleteMany({\r\n        where: {\r\n          userId,\r\n        },\r\n      });\r\n      await db.sysUserRole.deleteMany({\r\n        where: {\r\n          userId,\r\n        },\r\n      });\r\n      const res = await db.sysUser.delete({\r\n        where: {\r\n          userId,\r\n        },\r\n      });\r\n      await redisUtils.del(Constants.LOGIN_TOKEN_KEY + userId);\r\n      return res;\r\n    });\r\n  }\r\n  /**@description 导出用户所有数据为xlsx */\r\n  async exportUser(res: Response) {\r\n    const title = [\r\n      '用户ID',\r\n      '部门ID',\r\n      '用户账号',\r\n      '用户昵称',\r\n      '用户类型（00系统用户）',\r\n      '用户邮箱',\r\n      '手机号码',\r\n      '用户性别（0男 1女 2未知）',\r\n      '头像地址',\r\n      '密码',\r\n      '帐号状态（0停用,1正常 ）',\r\n      '删除标志（0删除，1可用）',\r\n      '最后登录IP',\r\n      '最后登录时间',\r\n      '创建者',\r\n      '创建时间',\r\n      '更新者',\r\n      '更新时间',\r\n      '备注',\r\n    ];\r\n    const data = (await this.selectUserAll()).map((v) => Object.values(v));\r\n    data.unshift(title);\r\n    exportTable(data, res);\r\n  }\r\n\r\n  /**\r\n   * @description 查询授权角色\r\n   */\r\n  async getAuthRole(userId: number) {\r\n    const user = await this.prisma.sysUser.findUnique({\r\n      where: {\r\n        userId,\r\n      },\r\n      include: {\r\n        dept: true,\r\n        roles: {\r\n          include: {\r\n            role: true,\r\n          },\r\n        },\r\n      },\r\n    });\r\n    return {\r\n      ...user,\r\n      roles: user.roles.map((v) => v.role),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * @description 保存授权角色\r\n   */\r\n  async updateAuthRole(userId: number, roleIds: number[]) {\r\n    await this.prisma.$transaction(async (db) => {\r\n      await db.sysUserRole.deleteMany({\r\n        where: {\r\n          userId,\r\n        },\r\n      });\r\n      await db.sysUserRole.createMany({\r\n        data: roleIds.map((roleId) => ({\r\n          userId,\r\n          roleId,\r\n        })),\r\n      });\r\n    });\r\n    return this.authService.refreshUserInfo(userId);\r\n  }\r\n\r\n  /**\r\n   * @description 查询用户个人信息\r\n   */\r\n  async getUserProfile(userId) {\r\n    const user = await this.prisma.sysUser.findUnique({\r\n      where: {\r\n        userId,\r\n      },\r\n      include: {\r\n        dept: true,\r\n        posts: {\r\n          include: {\r\n            post: true,\r\n          },\r\n        },\r\n        roles: {\r\n          include: {\r\n            role: true,\r\n          },\r\n        },\r\n      },\r\n    });\r\n    return {\r\n      ...user,\r\n      roleGroup: user.roles.map((v) => v.role.roleName).join(','),\r\n      postGroup: user.posts.map((v) => v.post.postName).join(','),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * @description 修改用户个人信息\r\n   */\r\n  async updateUserProfile(userId: number, user: updateProfileDto) {\r\n    await this.prisma.sysUser.update({\r\n      where: {\r\n        userId,\r\n      },\r\n      data: user,\r\n    });\r\n    return this.authService.refreshUserInfo(userId);\r\n  }\r\n\r\n  /** 修改头像 */\r\n  async updateAvatar(userId: number, avatar: string) {\r\n    await this.prisma.sysUser.update({\r\n      where: {\r\n        userId,\r\n      },\r\n      data: {\r\n        avatar,\r\n      },\r\n    });\r\n    return this.authService.refreshUserInfo(userId);\r\n  }\r\n\r\n  /** 修改密码 */\r\n  async updateUserPwd(\r\n    userId: number,\r\n    oldPassword: string,\r\n    newPassword: string,\r\n  ) {\r\n    assert(isNotEmpty(oldPassword) && isNotEmpty(newPassword), '请检查参数！');\r\n    assert(oldPassword.length > 5 && newPassword.length > 5, '请检查参数！');\r\n    const user = await this.prisma.sysUser.findUnique({\r\n      where: {\r\n        userId,\r\n      },\r\n    });\r\n    assert(\r\n      this.authService.encrypt(oldPassword) === user.password,\r\n      '验证失败：旧密码不正确！',\r\n    );\r\n    const res = await this.prisma.sysUser.update({\r\n      where: {\r\n        userId,\r\n      },\r\n      data: {\r\n        password: this.authService.encrypt(newPassword),\r\n      },\r\n    });\r\n    await redisUtils.del(Constants.LOGIN_TOKEN_KEY + userId);\r\n    return res;\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/admin/system/user/sys-user.controller.ts",
    "content": "import {\n  BadRequestException,\n  Body,\n  Controller,\n  Delete,\n  Get,\n  Param,\n  ParseIntPipe,\n  Post,\n  Put,\n  Query,\n  Req,\n  Res,\n  UploadedFile,\n  UseInterceptors,\n} from '@nestjs/common';\nimport { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\nimport Result from '@/common/result/Result';\nimport {\n  ApiBearerAuth,\n  ApiBody,\n  ApiOperation,\n  ApiQuery,\n  ApiResponse,\n  ApiTags,\n} from '@nestjs/swagger';\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\nimport { nowDateTime, tree } from '@/common/utils';\nimport { UserService } from './service/sys-user.service';\nimport {\n  QuerySysUserDto,\n  CreateSysUserDto,\n  UpdateSysUserDto,\n  resetPasswordDto,\n  UpdateSysUserStatusDto,\n  updateProfileDto,\n} from './dto/index';\nimport { Response } from 'express';\nimport { SysDept, SysUser } from '@prismaClient';\nimport { TableDataInfo } from '@/common/domain/TableDataInfo';\nimport { QuerySysDeptDto } from '../dept/dto';\nimport { DeptService } from '../dept/service/sys-dept.service';\nimport { RequireRole } from '@/common/decorator/require-role.decorator';\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\nimport {\n  getFilePath,\n  uploadAvatarConfig,\n} from '@/admin/common/upload/config/uploadConfig';\nimport { FileInterceptor } from '@nestjs/platform-express';\n@ApiTags('用户管理')\n@ApiBearerAuth()\n@Controller('system/user')\nexport class SysUserController {\n  constructor(\n    private userService: UserService,\n    private deptService: DeptService,\n    private prisma: PrismaService,\n  ) {}\n\n  @ApiOperation({ summary: '获取岗位和角色选择' })\n  @RequirePermission('system:user:add')\n  @Get('/')\n  async getRolePost() {\n    const roles = await this.prisma.sysRole.findMany({\n      where: { roleId: { not: 1 } },\n    });\n    const posts = await this.prisma.sysPost.findMany();\n    return {\n      ...Result.ok(),\n      roles,\n      posts,\n    };\n  }\n\n  @ApiOperation({ summary: '查询用户管理列表' })\n  @ApiResponse({ type: TableDataInfo<SysUser> })\n  @RequirePermission('system:user:query')\n  @Get('/list')\n  async listUser(@Query() q: QuerySysUserDto): Promise<TableDataInfo<SysUser>> {\n    return Result.TableData(await this.userService.selectUserList(q));\n  }\n\n  @ApiOperation({ summary: '查询部门列表' })\n  @ApiResponse({ type: Result<SysDept[]> })\n  @RequirePermission('system:dept:query')\n  @Get('/deptTree')\n  async listDept(@Query() q: QuerySysDeptDto): Promise<Result<SysDept[]>> {\n    const depts = (await this.deptService.selectDeptList(q)).map((v) => ({\n      ...v,\n      id: v.deptId,\n      label: v.deptName,\n    }));\n    return Result.ok(tree(depts, 'id', 'parentId', 0));\n  }\n  @ApiOperation({ summary: '导出用户管理xlsx文件' })\n  @RequirePermission('system:user:export')\n  @Get('/export')\n  async export(@Res() res: Response): Promise<void> {\n    return this.userService.exportUser(res);\n  }\n\n  @ApiOperation({ summary: '查询授权角色' })\n  @RequireRole('admin')\n  @Get('/authRole/:userId')\n  async getAuthRole(\n    @Param('userId', ParseIntPipe) userId: number,\n  ): Promise<any> {\n    const userInfo = await this.userService.getAuthRole(userId);\n    const roles = (\n      await this.prisma.sysRole.findMany({\n        where: {\n          roleId: {\n            not: 1,\n          },\n        },\n        orderBy: {\n          roleSort: 'asc',\n        },\n      })\n    ).map((v) => {\n      return {\n        ...v,\n        flag: userInfo.roles.find((z) => z.roleId === v.roleId),\n      };\n    });\n    return {\n      ...Result.ok(),\n      user: userInfo,\n      roles,\n    };\n  }\n\n  @ApiOperation({ summary: '保存授权角色' })\n  @RequireRole('admin')\n  @ApiResponse({ type: Result<null> })\n  @Put('/authRole')\n  async updateAuthRole(\n    @Query('userId', ParseIntPipe) userId: number,\n    @Query('roleIds', ParseIntArrayPipe) roleIds: number[],\n  ): Promise<Result<null>> {\n    await this.userService.updateAuthRole(userId, roleIds);\n    return Result.ok();\n  }\n\n  @ApiOperation({ summary: '查询用户信息' })\n  @Get('/profile')\n  async getUserProfile(@Req() req): Promise<any> {\n    const userInfo = await this.userService.getUserProfile(req.userId);\n    return {\n      ...Result.ok(userInfo),\n      roleGroup: userInfo.roleGroup,\n      postGroup: userInfo.postGroup,\n    };\n  }\n\n  @ApiOperation({ summary: '修改用户个人基础信息' })\n  @Put('/profile')\n  async updateUserProfile(\n    @Req() req,\n    @Body() user: updateProfileDto,\n  ): Promise<Result<null>> {\n    await this.userService.updateUserProfile(req.userId, user);\n    return Result.ok();\n  }\n\n  @ApiOperation({ summary: '修改个人密码' })\n  @Put('/profile/updatePwd')\n  async updateUserPwd(\n    @Req() req,\n    @Query('oldPassword') oldPassword: string,\n    @Query('newPassword') newPassword: string,\n  ): Promise<Result<null>> {\n    await this.userService.updateUserPwd(req.userId, oldPassword, newPassword);\n    return Result.ok();\n  }\n\n  /**\n   * @description 用户头像上传\n   */\n\n  @UseInterceptors(FileInterceptor('avatarfile', uploadAvatarConfig))\n  @Post('/profile/avatar')\n  async updateAvatar(@UploadedFile() file: Express.Multer.File, @Req() req) {\n    const userId = req.userId;\n    if (!file) {\n      return Result.BadRequest('请选择上传图片！');\n    }\n    const avatar = getFilePath(file);\n    await this.userService.updateAvatar(userId, avatar);\n    return {\n      ...Result.ok(),\n      imgUrl: avatar,\n    };\n  }\n\n  @ApiOperation({ summary: '查询用户管理详细' })\n  @RequirePermission('system:user:query')\n  @Get('/:userId')\n  async getUser(@Param('userId', ParseIntPipe) userId: number): Promise<any> {\n    const user = await this.userService.selectUserByUserId(userId);\n    const roles = await this.prisma.sysRole.findMany({\n      where: { roleId: { not: 1 } },\n    });\n    const posts = await this.prisma.sysPost.findMany();\n    return {\n      ...Result.ok(user),\n      roles,\n      posts,\n      roleIds: user.roles.map((v) => v.roleId),\n      postIds: user.posts.map((v) => v.postId),\n    };\n  }\n  @ApiOperation({ summary: '新增用户管理' })\n  @ApiResponse({ type: Result<SysUser> })\n  @ApiBody({ type: CreateSysUserDto })\n  @RequirePermission('system:user:add')\n  @Post('/')\n  async addUser(\n    @Body() sysUser: CreateSysUserDto,\n    @Req() req,\n  ): Promise<Result<SysUser>> {\n    sysUser = {\n      ...sysUser,\n      createTime: nowDateTime(),\n      updateTime: nowDateTime(),\n      createBy: req.user?.userName,\n      updateBy: req.user?.userName,\n    };\n    //过滤掉设置超级管理员角色\n    sysUser.roleIds = sysUser.roleIds.filter((v) => v !== 1);\n    return Result.ok(await this.userService.addUser(sysUser));\n  }\n  @ApiOperation({ summary: '修改用户管理' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysUserDto })\n  @RequirePermission('system:user:edit')\n  @Put('/')\n  async updateUser(\n    @Body() sysUser: UpdateSysUserDto,\n    @Req() req,\n  ): Promise<Result<any>> {\n    //不能修改超级管理员\n    if (sysUser.userId === 1) throw new BadRequestException('非法操作！');\n    //过滤掉设置超级管理员角色\n    sysUser.roleIds = sysUser.roleIds.filter((v) => v !== 1);\n    //当前用户不能修改自己的状态\n    if (sysUser.userId === req.userId) {\n      delete sysUser.status;\n    }\n    sysUser = {\n      ...sysUser,\n      updateTime: nowDateTime(),\n      updateBy: req.user?.userName,\n    };\n    await this.userService.updateUser(sysUser);\n    return Result.ok('修改成功！');\n  }\n  @ApiOperation({ summary: '删除用户管理' })\n  @ApiResponse({ type: Result<any> })\n  @RequirePermission('system:user:remove')\n  @Delete('/:ids')\n  async delUser(\n    @Req() req,\n    @Param('ids', ParseIntArrayPipe) userIds: number[],\n  ): Promise<Result<any>> {\n    //不能删除自己或者超级管理员的账号\n    userIds = userIds.filter((v) => v !== 1 && v != req.userId);\n    const { count } = await this.userService.deleteUserByUserIds(userIds);\n    return Result.toAjax(count);\n  }\n\n  @ApiOperation({ summary: '重置用户密码' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: resetPasswordDto })\n  @RequireRole('admin')\n  @Put('/resetPwd')\n  async resetPassword(@Body() sysUser: resetPasswordDto): Promise<Result<any>> {\n    await this.userService.resetPassword(sysUser);\n    return Result.ok('修改成功！');\n  }\n\n  @ApiOperation({ summary: '修改用户状态' })\n  @ApiResponse({ type: Result<any> })\n  @ApiBody({ type: UpdateSysUserStatusDto })\n  @RequireRole('admin')\n  @Put('/changeStatus')\n  async updateUserStatus(\n    @Body() sysUser: UpdateSysUserStatusDto,\n  ): Promise<Result<any>> {\n    await this.userService.updateStatus(sysUser);\n    return Result.ok('修改成功！');\n  }\n}\n"
  },
  {
    "path": "server/src/app.module.ts",
    "content": "import {\r\n  MiddlewareConsumer,\r\n  Module,\r\n  NestModule,\r\n  ValidationError,\r\n  ValidationPipe,\r\n} from '@nestjs/common';\r\nimport { AdminModule } from './admin/admin.module';\r\nimport { CommonModule } from './common/common.module';\r\nimport { AuthMiddleware } from './common/middleware/auth/auth.middleware';\r\nimport { AuthService } from './common/service/auth/auth.service';\r\nimport { Config } from './config';\r\nimport { PermissionGuard } from './common/guard/permission/permission.guard';\r\nimport { RoleGuard } from './common/guard/permission/role.guard';\r\nimport { APP_FILTER, APP_GUARD, APP_INTERCEPTOR, APP_PIPE } from '@nestjs/core';\r\nimport {\r\n  AssertionErrorFilter,\r\n  AuthorizationFilter,\r\n  BadRequestFilter,\r\n  ForbiddenExceptionFilter,\r\n  GlobalErrorFilter,\r\n  MulterErrFilter,\r\n  NotFoundErrFilter,\r\n  PayloadTooLargeFilter,\r\n  ThrottlerExceptionFilter,\r\n  ValidationExceptionFilter,\r\n} from '@/common/filter/global-error.filter';\r\nimport { ValidationException } from './common/exception/ValidationException';\r\nimport { ThrottlerModule } from '@nestjs/throttler';\r\nimport { ThrottlerCustomGuard } from './common/guard/throttler/throttler-custom.guard';\r\nimport { RemoveThrottleHeadersInterceptor } from './common/interceptors/remove-throttle-headers.interceptor';\r\nimport '@/common/utils/email';\r\nimport { ScheduleModule } from '@nestjs/schedule';\r\nimport { TasksService } from './schedule';\r\nimport { ThrottlerStorageRedisService } from 'nestjs-throttler-storage-redis';\r\nimport Result from './common/result/Result';\r\n@Module({\r\n  imports: [\r\n    AdminModule,\r\n    CommonModule,\r\n    ThrottlerModule.forRoot({\r\n      throttlers: [\r\n        {\r\n          name: 'default',\r\n          ttl: Config.rateLimit.ttl,\r\n          limit: Config.rateLimit.limit,\r\n        },\r\n      ],\r\n      storage:\r\n        Config.rateLimit.storage === 'redis'\r\n          ? new ThrottlerStorageRedisService({\r\n            ...Config.redis,\r\n            disconnectTimeout: 60 * 5 * 1000,\r\n          })\r\n          : null,\r\n    }),\r\n    ScheduleModule.forRoot(),\r\n  ],\r\n  controllers: [],\r\n  providers: [\r\n    TasksService,\r\n    AuthService,\r\n    PermissionGuard,\r\n    RoleGuard,\r\n    {\r\n      provide: APP_GUARD,\r\n      useClass: ThrottlerCustomGuard,\r\n    },\r\n    {\r\n      provide: APP_GUARD,\r\n      useClass: PermissionGuard,\r\n    },\r\n    {\r\n      provide: APP_GUARD,\r\n      useClass: RoleGuard,\r\n    },\r\n    {\r\n      provide: APP_FILTER,\r\n      useClass: GlobalErrorFilter,\r\n    },\r\n    {\r\n      provide: APP_FILTER,\r\n      useClass: BadRequestFilter,\r\n    },\r\n    {\r\n      provide: APP_FILTER,\r\n      useClass: ThrottlerExceptionFilter,\r\n    },\r\n    {\r\n      provide: APP_FILTER,\r\n      useClass: PayloadTooLargeFilter,\r\n    },\r\n    {\r\n      provide: APP_FILTER,\r\n      useClass: AuthorizationFilter,\r\n    },\r\n    {\r\n      provide: APP_FILTER,\r\n      useClass: ForbiddenExceptionFilter,\r\n    },\r\n    {\r\n      provide: APP_FILTER,\r\n      useClass: AssertionErrorFilter,\r\n    },\r\n    {\r\n      provide: APP_FILTER,\r\n      useClass: ValidationExceptionFilter,\r\n    },\r\n    {\r\n      provide: APP_FILTER,\r\n      useClass: MulterErrFilter,\r\n    },\r\n    {\r\n      provide: APP_FILTER,\r\n      useClass: NotFoundErrFilter,\r\n    },\r\n    {\r\n      provide: APP_PIPE,\r\n      useFactory() {\r\n        return new ValidationPipe({\r\n          whitelist: true, // 自动剔除非 DTO 类中的字段\r\n          // forbidNonWhitelisted: true, // 如果存在非 DTO 类中的字段则抛出异常\r\n          exceptionFactory: (errors: ValidationError[]) => {\r\n            const messages = errors\r\n              .map((error) => Object.values(error.constraints))\r\n              .flat();\r\n            return new ValidationException(`参数验证失败: ${messages[0]}`);\r\n            // return new ValidationException(`参数验证失败: ${messages.join(', ')}`);\r\n          },\r\n        });\r\n      },\r\n    },\r\n    {\r\n      provide: APP_INTERCEPTOR,\r\n      useClass: RemoveThrottleHeadersInterceptor,\r\n    },\r\n  ],\r\n})\r\nexport class AppModule implements NestModule {\r\n  configure(consumer: MiddlewareConsumer) {\r\n    const demo:any = (req, res, next) => {\r\n      if (Config.is_demo && req.method !== \"GET\") {\r\n        return res.send(Result.Error(\"演示模式，不允许操作\"));\r\n      }\r\n      else {\r\n        next();\r\n      }\r\n    };\r\n    const middlewares = [AuthMiddleware]\r\n    if (Config.is_demo) { \r\n      middlewares.push(demo);\r\n    }\r\n    consumer\r\n      .apply(...middlewares)\r\n      .exclude('/login', '/logout', '/captchaImage')\r\n      .forRoutes('*');\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/common.module.ts",
    "content": "import { Global, Module } from '@nestjs/common';\r\nimport { PrismaService } from './service/prisma/prisma.service';\r\nimport { AuthService } from './service/auth/auth.service';\r\nimport { GenService } from './service/gen/gen.service';\r\n@Global()\r\n@Module({\r\n  providers: [PrismaService, AuthService, GenService],\r\n  exports: [PrismaService, AuthService],\r\n  imports: [],\r\n})\r\nexport class CommonModule {}\r\n"
  },
  {
    "path": "server/src/common/constant/Constants.ts",
    "content": "/**\r\n * 通用常量信息\r\n */\r\nexport class Constants {\r\n  /**\r\n   * UTF-8 字符集\r\n   */\r\n  public static readonly UTF8: string = 'UTF-8';\r\n\r\n  /**\r\n   * GBK 字符集\r\n   */\r\n  public static readonly GBK: string = 'GBK';\r\n\r\n  /**\r\n   * http请求\r\n   */\r\n  public static readonly HTTP: string = 'http://';\r\n\r\n  /**\r\n   * https请求\r\n   */\r\n  public static readonly HTTPS: string = 'https://';\r\n\r\n  /**\r\n   * 通用成功标识\r\n   */\r\n  public static readonly SUCCESS: string = '0';\r\n\r\n  /**\r\n   * 通用失败标识\r\n   */\r\n  public static readonly FAIL: string = '1';\r\n\r\n  /**\r\n   * 登录成功\r\n   */\r\n  public static readonly LOGIN_SUCCESS: string = 'Success';\r\n\r\n  /**\r\n   * 注销\r\n   */\r\n  public static readonly LOGOUT: string = 'Logout';\r\n\r\n  /**\r\n   * 登录失败\r\n   */\r\n  public static readonly LOGIN_FAIL: string = 'Error';\r\n\r\n  /**\r\n   * 验证码 redis key\r\n   */\r\n  public static readonly CAPTCHA_CODE_KEY: string = 'captcha_codes:';\r\n\r\n  /**\r\n   * 登录用户 redis key\r\n   */\r\n  public static readonly LOGIN_TOKEN_KEY: string = 'login_tokens:';\r\n\r\n  /**\r\n   * 缓存用户信息 redis key\r\n   */\r\n  public static readonly LOGIN_CACHE_TOKEN_KEY: string = 'login_cache_tokens:';\r\n\r\n  /**\r\n   * 防重提交 redis key\r\n   */\r\n  public static readonly REPEAT_SUBMIT_KEY: string = 'repeat_submit:';\r\n\r\n  /**\r\n   * 验证码有效期（分钟）\r\n   */\r\n  public static readonly CAPTCHA_EXPIRATION: number = 2;\r\n\r\n  /**\r\n   * 令牌\r\n   */\r\n  public static readonly TOKEN: string = 'token';\r\n\r\n  /**\r\n   * 令牌前缀\r\n   */\r\n  public static readonly TOKEN_PREFIX: string = 'Bearer ';\r\n\r\n  /**\r\n   * 登录用户 key\r\n   */\r\n  public static readonly LOGIN_USER_KEY: string = 'login_user_key';\r\n\r\n  /**\r\n   * 用户ID\r\n   */\r\n  public static readonly JWT_USERID: string = 'userid';\r\n\r\n  /**\r\n   * 用户名称\r\n   */\r\n  public static readonly JWT_USERNAME: string = 'sub';\r\n\r\n  /**\r\n   * 用户头像\r\n   */\r\n  public static readonly JWT_AVATAR: string = 'avatar';\r\n\r\n  /**\r\n   * 创建时间\r\n   */\r\n  public static readonly JWT_CREATED: string = 'created';\r\n\r\n  /**\r\n   * 参数管理 cache key\r\n   */\r\n  public static readonly SYS_CONFIG_KEY: string = 'sys_config:';\r\n\r\n  /**\r\n   * 字典管理 cache key\r\n   */\r\n  public static readonly SYS_DICT_KEY: string = 'sys_dict:';\r\n\r\n  /**\r\n   * 文件访问前缀\r\n   */\r\n  public static readonly FILE_PREFIX: string = '/upload';\r\n}\r\n"
  },
  {
    "path": "server/src/common/constant/GenConstants.ts",
    "content": "/**\r\n * GenConstants类\r\n */\r\nexport class GenConstants {\r\n  /**\r\n   * 单表（增删改查）\r\n   */\r\n  static TPL_CRUD = 'crud';\r\n\r\n  /**\r\n   * 树表（增删改查）\r\n   */\r\n  static TPL_TREE = 'tree';\r\n\r\n  /**\r\n   * 主子表（增删改查）\r\n   */\r\n  static TPL_SUB = 'sub';\r\n\r\n  /**\r\n   * 树编码字段\r\n   */\r\n  static TREE_CODE = 'treeCode';\r\n\r\n  /**\r\n   * 树父编码字段\r\n   */\r\n  static TREE_PARENT_CODE = 'treeParentCode';\r\n\r\n  /**\r\n   * 树名称字段\r\n   */\r\n  static TREE_NAME = 'treeName';\r\n\r\n  /**\r\n   * 上级菜单ID字段\r\n   */\r\n  static PARENT_MENU_ID = 'parentMenuId';\r\n\r\n  /**\r\n   * 上级菜单名称字段\r\n   */\r\n  static PARENT_MENU_NAME = 'parentMenuName';\r\n\r\n  /**\r\n   * 数据库字符串类型\r\n   */\r\n  static COLUMNTYPE_STR = ['char', 'varchar', 'nvarchar', 'varchar2'];\r\n\r\n  /**\r\n   * 数据库文本类型\r\n   */\r\n  static COLUMNTYPE_TEXT = ['tinytext', 'text', 'mediumtext', 'longtext'];\r\n\r\n  /**\r\n   * 数据库时间类型\r\n   */\r\n  static COLUMNTYPE_TIME = ['datetime', 'time', 'date', 'timestamp'];\r\n\r\n  /**\r\n   * 数据库数字类型\r\n   */\r\n  static COLUMNTYPE_NUMBER = [\r\n    'tinyint',\r\n    'smallint',\r\n    'mediumint',\r\n    'int',\r\n    'number',\r\n    'integer',\r\n    'bit',\r\n    'bigint',\r\n    'float',\r\n    'double',\r\n    'decimal',\r\n  ];\r\n\r\n  /**\r\n   * 页面不需要编辑字段\r\n   */\r\n  static COLUMNNAME_NOT_EDIT = ['id', 'create_by', 'create_time', 'del_flag'];\r\n\r\n  /**\r\n   * 页面不需要显示的列表字段\r\n   */\r\n  static COLUMNNAME_NOT_LIST = [\r\n    'id',\r\n    'create_by',\r\n    'create_time',\r\n    'del_flag',\r\n    'update_by',\r\n    'update_time',\r\n  ];\r\n\r\n  /**\r\n   * 页面不需要查询字段\r\n   */\r\n  static COLUMNNAME_NOT_QUERY = [\r\n    'id',\r\n    'create_by',\r\n    'create_time',\r\n    'del_flag',\r\n    'update_by',\r\n    'update_time',\r\n    'remark',\r\n  ];\r\n\r\n  /**\r\n   * Entity基类字段\r\n   */\r\n  static BASE_ENTITY = [\r\n    'createBy',\r\n    'createTime',\r\n    'updateBy',\r\n    'updateTime',\r\n    'remark',\r\n  ];\r\n\r\n  /**\r\n   * Tree基类字段\r\n   */\r\n  static TREE_ENTITY = [\r\n    'parentName',\r\n    'parentId',\r\n    'orderNum',\r\n    'ancestors',\r\n    'children',\r\n  ];\r\n\r\n  /**\r\n   * 文本框\r\n   */\r\n  static HTML_INPUT = 'input';\r\n\r\n  /**\r\n   * 文本域\r\n   */\r\n  static HTML_TEXTAREA = 'textarea';\r\n\r\n  /**\r\n   * 下拉框\r\n   */\r\n  static HTML_SELECT = 'select';\r\n\r\n  /**\r\n   * 单选框\r\n   */\r\n  static HTML_RADIO = 'radio';\r\n\r\n  /**\r\n   * 复选框\r\n   */\r\n  static HTML_CHECKBOX = 'checkbox';\r\n\r\n  /**\r\n   * 日期控件\r\n   */\r\n  static HTML_DATETIME = 'datetime';\r\n\r\n  /**\r\n   * 图片上传控件\r\n   */\r\n  static HTML_IMAGE_UPLOAD = 'imageUpload';\r\n\r\n  /**\r\n   * 文件上传控件\r\n   */\r\n  static HTML_FILE_UPLOAD = 'fileUpload';\r\n\r\n  /**\r\n   * 富文本控件\r\n   */\r\n  static HTML_EDITOR = 'editor';\r\n\r\n  /**\r\n   * 字符串类型\r\n   */\r\n  static TYPE_STRING = 'String';\r\n\r\n  /**\r\n   * 数字\r\n   */\r\n  static TYPE_NUMBER = 'Number';\r\n\r\n  /**\r\n   * 整型\r\n   */\r\n  static TYPE_INTEGER = 'Integer';\r\n\r\n  /**\r\n   * 长整型\r\n   */\r\n  static TYPE_LONG = 'Long';\r\n\r\n  /**\r\n   * 浮点型\r\n   */\r\n  static TYPE_DOUBLE = 'Double';\r\n\r\n  /**\r\n   * 高精度计算类型\r\n   */\r\n  static TYPE_BIGDECIMAL = 'BigDecimal';\r\n\r\n  /**\r\n   * 时间类型\r\n   */\r\n  static TYPE_DATE = 'Date';\r\n\r\n  /**\r\n   * 模糊查询\r\n   */\r\n  static QUERY_LIKE = 'LIKE';\r\n\r\n  /**\r\n   * 日期区间查询\r\n   */\r\n  static QUERY_BETWEEN = 'BETWEEN';\r\n\r\n  /**\r\n   * 相等查询\r\n   */\r\n  static QUERY_EQ = 'EQ';\r\n\r\n  /**\r\n   * 需要\r\n   */\r\n  static REQUIRE = '1';\r\n}\r\n"
  },
  {
    "path": "server/src/common/constant/HttpStatus.ts",
    "content": "/**\r\n * 返回状态码\r\n */\r\nexport enum HttpStatus {\r\n  /**\r\n   * 操作成功\r\n   */\r\n  SUCCESS = 200,\r\n\r\n  /**\r\n   * 对象创建成功\r\n   */\r\n  CREATED = 201,\r\n\r\n  /**\r\n   * 请求已经被接受\r\n   */\r\n  ACCEPTED = 202,\r\n\r\n  /**\r\n   * 操作已经执行成功，但是没有返回数据\r\n   */\r\n  NO_CONTENT = 204,\r\n\r\n  /**\r\n   * 资源已被移除\r\n   */\r\n  MOVED_PERM = 301,\r\n\r\n  /**\r\n   * 重定向\r\n   */\r\n  SEE_OTHER = 303,\r\n\r\n  /**\r\n   * 资源没有被修改\r\n   */\r\n  NOT_MODIFIED = 304,\r\n\r\n  /**\r\n   * 参数列表错误（缺少，格式不匹配）\r\n   */\r\n  BAD_REQUEST = 400,\r\n\r\n  /**\r\n   * 未授权\r\n   */\r\n  UNAUTHORIZED = 401,\r\n\r\n  /**\r\n   * 访问受限，授权过期\r\n   */\r\n  FORBIDDEN = 403,\r\n\r\n  /**\r\n   * 资源，服务未找到\r\n   */\r\n  NOT_FOUND = 404,\r\n\r\n  /**\r\n   * 不允许的http方法\r\n   */\r\n  BAD_METHOD = 405,\r\n\r\n  /**\r\n   * 资源冲突，或者资源被锁\r\n   */\r\n  CONFLICT = 409,\r\n\r\n  /**\r\n   * 不支持的数据，媒体类型\r\n   */\r\n  UNSUPPORTED_TYPE = 415,\r\n\r\n  /**\r\n   * 参数验证不通过\r\n   */\r\n  Validation = 422,\r\n\r\n  /**\r\n   * 请求频繁\r\n   */\r\n  FREQUENT_REQUESTS = 429,\r\n\r\n  /**\r\n   * 系统内部错误\r\n   */\r\n  ERROR = 500,\r\n\r\n  /**\r\n   * 接口未实现\r\n   */\r\n  NOT_IMPLEMENTED = 501,\r\n}\r\n"
  },
  {
    "path": "server/src/common/decorator/require-premission.decorator.ts",
    "content": "import { SetMetadata } from '@nestjs/common';\r\n\r\nexport const RequirePermission = (permission: string) =>\r\n  SetMetadata('permission', permission);\r\n"
  },
  {
    "path": "server/src/common/decorator/require-role.decorator.ts",
    "content": "import { SetMetadata } from '@nestjs/common';\r\n\r\nexport const RequireRole = (role: string) => SetMetadata('role', role);\r\n"
  },
  {
    "path": "server/src/common/decorator/throttle-user.ts",
    "content": "import { SetMetadata } from '@nestjs/common';\r\nexport const THROTTLE_USER_KEY = 'throttleUser';\r\nexport const ThrottleUser = () => SetMetadata(THROTTLE_USER_KEY, true);\r\n"
  },
  {
    "path": "server/src/common/domain/BaseDomain.ts",
    "content": "import { ApiProperty } from '@nestjs/swagger';\r\nimport { IsOptional, IsString } from 'class-validator';\r\n\r\nexport class BaseDomain {\r\n  @ApiProperty({ description: '创建者',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  createBy?: string;\r\n  @ApiProperty({ description: '创建时间',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  createTime?: string;\r\n  @ApiProperty({ description: '更新者',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  updateBy?: string;\r\n  @ApiProperty({ description: '更新时间',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  updateTime?: string;\r\n  @ApiProperty({ description: '备注',required:false })\r\n  @IsString()\r\n  @IsOptional()\r\n  remark?: string;\r\n}\r\n"
  },
  {
    "path": "server/src/common/domain/PageDomain.ts",
    "content": "import { ApiProperty } from '@nestjs/swagger';\r\nimport { Transform } from 'class-transformer';\r\nimport { IsNumber, IsOptional } from 'class-validator';\r\n\r\nexport class PageDomain {\r\n  @ApiProperty({ description: '当前页码',required:false })\r\n  @IsNumber()\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  pageNum: number = 1;\r\n  @ApiProperty({ description: '每页的数据条目', required:false })\r\n  @IsNumber()\r\n  @IsOptional()\r\n  @Transform((v) => +v.value)\r\n  pageSize: number = 10;\r\n}\r\n"
  },
  {
    "path": "server/src/common/domain/TableDataInfo.ts",
    "content": "import { HttpStatus } from '@/common/constant/HttpStatus';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\n\r\nexport class TableDataInfo<T> {\r\n  @ApiProperty({\r\n    example: 0,\r\n    description: '总记录数',\r\n  })\r\n  total: number;\r\n\r\n  @ApiProperty({\r\n    default: null,\r\n    description: '列表数据',\r\n  })\r\n  rows: T[];\r\n\r\n  @ApiProperty({\r\n    example: 200,\r\n    description: '消息状态码',\r\n  })\r\n  code: number;\r\n\r\n  @ApiProperty({\r\n    example: '查询成功',\r\n    description: '消息内容',\r\n  })\r\n  msg: string;\r\n  constructor(rows: T[], total: number, code?: number, msg?: string) {\r\n    this.total = total;\r\n    this.rows = rows;\r\n    this.code = code || HttpStatus.SUCCESS;\r\n    this.msg = msg || '查询成功';\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/domain/queryDomain.ts",
    "content": "import { IsOptional } from 'class-validator';\r\nimport { PageDomain } from './PageDomain';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\n\r\nexport class queryDomain extends PageDomain {\r\n  @ApiProperty({ description: '查询附加参数', required: false })\r\n  @IsOptional()\r\n  params: { [key: string]: any } = {};\r\n}\r\n"
  },
  {
    "path": "server/src/common/exception/AuthorizationException.ts",
    "content": "export class AuthorizationException extends Error {\r\n  constructor(props) {\r\n    super(props);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/exception/ValidationException.ts",
    "content": "export class ValidationException extends Error {\r\n  constructor(props) {\r\n    super(props);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/filter/global-error.filter.ts",
    "content": "import * as assert from 'assert';\r\nimport {\r\n  ArgumentsHost,\r\n  BadRequestException,\r\n  Catch,\r\n  ExceptionFilter,\r\n  ForbiddenException,\r\n  NotFoundException,\r\n  PayloadTooLargeException,\r\n} from '@nestjs/common';\r\nimport { ValidationException } from '@/common/exception/ValidationException';\r\nimport Result from '@/common/result/Result';\r\nimport { Response } from 'express';\r\nimport { AuthorizationException } from '@/common/exception/AuthorizationException';\r\n\r\nimport { MulterError } from 'multer';\r\nimport { ThrottlerException } from '@nestjs/throttler';\r\n\r\n/**\r\n * @desc 参数验证不通过\r\n */\r\n@Catch(ValidationException)\r\nexport class ValidationExceptionFilter implements ExceptionFilter {\r\n  catch(exception: ValidationException, host: ArgumentsHost) {\r\n    const res = host.switchToHttp().getResponse<Response>();\r\n    res.send(Result.Validation(exception.message));\r\n  }\r\n}\r\n\r\n/**\r\n * @desc 断言不通过\r\n */\r\n@Catch(assert.AssertionError)\r\nexport class AssertionErrorFilter implements ExceptionFilter {\r\n  catch(exception: assert.AssertionError, host: ArgumentsHost) {\r\n    const res = host.switchToHttp().getResponse<Response>();\r\n    res.send(Result.Validation(exception.message));\r\n  }\r\n}\r\n\r\n/**\r\n * @desc 身份验证不通过\r\n */\r\n@Catch(AuthorizationException)\r\nexport class AuthorizationFilter implements ExceptionFilter {\r\n  catch(exception: ValidationException, host: ArgumentsHost) {\r\n    const res = host.switchToHttp().getResponse<Response>();\r\n    res.send(Result.Unauthorized(exception.message));\r\n  }\r\n}\r\n\r\n/**\r\n * @desc 权限不足\r\n */\r\n@Catch(ForbiddenException)\r\nexport class ForbiddenExceptionFilter implements ExceptionFilter {\r\n  catch(exception: ForbiddenException, host: ArgumentsHost) {\r\n    const res = host.switchToHttp().getResponse<Response>();\r\n    res.send(Result.Forbidden());\r\n  }\r\n}\r\n\r\n/**\r\n * @desc 资源路径不存在\r\n */\r\n@Catch(NotFoundException)\r\nexport class NotFoundErrFilter implements ExceptionFilter {\r\n  catch(exception: NotFoundException, host: ArgumentsHost) {\r\n    const res = host.switchToHttp().getResponse<Response>();\r\n    res.send(Result.NotFound());\r\n  }\r\n}\r\n\r\n/**\r\n * @desc 文件上传失败\r\n */\r\n@Catch(MulterError)\r\nexport class MulterErrFilter implements ExceptionFilter {\r\n  catch(exception: MulterError, host: ArgumentsHost) {\r\n    const res = host.switchToHttp().getResponse<Response>();\r\n    const errMap = {\r\n      TypeError: '不允许上传的文件类型！',\r\n      LIMIT_PART_COUNT: '部件太多',\r\n      LIMIT_FILE_SIZE: '文件大小不通过',\r\n      LIMIT_FILE_COUNT: '文件数量不通过',\r\n      LIMIT_FIELD_KEY: '字段名太长',\r\n      LIMIT_FIELD_VALUE: '字段值太长',\r\n      LIMIT_FIELD_COUNT: '字段太多',\r\n      LIMIT_UNEXPECTED_FILE: '不包含此表单字段',\r\n      MISSING_FIELD_NAME: '字段名缺失',\r\n    };\r\n    res.send(\r\n      Result.BadRequest(\r\n        '文件上传失败：' + (errMap?.[exception?.code] || exception?.message),\r\n      ),\r\n    );\r\n  }\r\n}\r\n\r\n/**\r\n * @desc 文件大小超出限制\r\n */\r\n@Catch(PayloadTooLargeException)\r\nexport class PayloadTooLargeFilter implements ExceptionFilter {\r\n  catch(exception: PayloadTooLargeException, host: ArgumentsHost) {\r\n    const res = host.switchToHttp().getResponse<Response>();\r\n    res.send(Result.BadRequest('文件大小超出限制！'));\r\n  }\r\n}\r\n\r\n/**\r\n * @desc badRquest错误处理\r\n */\r\n@Catch(BadRequestException)\r\nexport class BadRequestFilter implements ExceptionFilter {\r\n  catch(exception: BadRequestException, host: ArgumentsHost) {\r\n    const res = host.switchToHttp().getResponse<Response>();\r\n    console.log(exception);\r\n    res.send(Result.BadRequest(exception.message));\r\n  }\r\n}\r\n\r\n/**\r\n * @desc ratelimit处理\r\n */\r\n@Catch(ThrottlerException)\r\nexport class ThrottlerExceptionFilter implements ExceptionFilter {\r\n  catch(exception: ThrottlerException, host: ArgumentsHost) {\r\n    const res = host.switchToHttp().getResponse<Response>();\r\n    res.send(Result.Error('您的ip访问频繁，请稍后重试！', 429));\r\n  }\r\n}\r\n\r\n/**\r\n * @desc 全局错误处理\r\n */\r\n@Catch()\r\nexport class GlobalErrorFilter implements ExceptionFilter {\r\n  catch(exception: any, host: ArgumentsHost) {\r\n    const res = host.switchToHttp().getResponse<Response>();\r\n    console.log(exception);\r\n    res.send(Result.Error('error'));\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/guard/permission/permission.guard.ts",
    "content": "import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';\r\nimport { Observable } from 'rxjs';\r\nimport { Reflector } from '@nestjs/core';\r\nimport { AuthService } from '@/common/service/auth/auth.service';\r\n@Injectable()\r\nexport class PermissionGuard implements CanActivate {\r\n  constructor(\r\n    private reflector: Reflector,\r\n    private authService: AuthService,\r\n  ) {}\r\n  canActivate(\r\n    context: ExecutionContext,\r\n  ): boolean | Promise<boolean> | Observable<boolean> {\r\n    const req = context.switchToHttp().getRequest();\r\n    const prem = this.reflector.getAllAndOverride('permission', [\r\n      context.getClass(),\r\n      context.getHandler(),\r\n    ]);\r\n    //不需要鉴权\r\n    if (prem === undefined) return true;\r\n    //调用鉴权\r\n    return this.authService.hasPermission(prem, req.userId);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/guard/permission/role.guard.ts",
    "content": "import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';\r\nimport { Observable } from 'rxjs';\r\nimport { Reflector } from '@nestjs/core';\r\nimport { AuthService } from '@/common/service/auth/auth.service';\r\n\r\n@Injectable()\r\nexport class RoleGuard implements CanActivate {\r\n  constructor(\r\n    private authService: AuthService,\r\n    private reflector: Reflector,\r\n  ) {}\r\n  canActivate(\r\n    context: ExecutionContext,\r\n  ): boolean | Promise<boolean> | Observable<boolean> {\r\n    const req = context.switchToHttp().getRequest();\r\n    const role = this.reflector.getAllAndOverride('role', [\r\n      context.getClass(),\r\n      context.getHandler(),\r\n    ]);\r\n    //不需要鉴权\r\n    if (role === undefined) return true;\r\n    //调用鉴权\r\n    return this.authService.hasRole(role, req.userId);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/guard/throttler/throttler-custom.guard.ts",
    "content": "import { ThrottlerGuard } from '@nestjs/throttler';\r\nimport { ExecutionContext, Inject, Injectable } from '@nestjs/common';\r\nimport { Reflector } from '@nestjs/core';\r\nimport { THROTTLE_USER_KEY } from '@/common/decorator/throttle-user';\r\n\r\n@Injectable()\r\nexport class ThrottlerCustomGuard extends ThrottlerGuard {\r\n  @Inject()\r\n  protected reflector: Reflector;\r\n  protected generateKey(\r\n    context: ExecutionContext,\r\n    suffix: string,\r\n    name: string,\r\n  ): string {\r\n    const req = context.switchToHttp().getRequest();\r\n    const isThrottleUser = this.reflector.getAllAndOverride<boolean>(\r\n      THROTTLE_USER_KEY,\r\n      [context.getClass(), context.getHandler()],\r\n    );\r\n    return isThrottleUser && req.userId !== undefined\r\n      ? `rate-limit:${context.getClass().name}-${context.getHandler().name}-${name}-user-${req.userId}`\r\n      : `rate-limit:${context.getClass().name}-${context.getHandler().name}-${name}-ip-${req.ips.length ? req.ips[0] : req.ip}`;\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/interceptors/remove-throttle-headers.interceptor.ts",
    "content": "import {\r\n  CallHandler,\r\n  ExecutionContext,\r\n  Injectable,\r\n  NestInterceptor,\r\n} from '@nestjs/common';\r\nimport { Observable } from 'rxjs';\r\n@Injectable()\r\nexport class RemoveThrottleHeadersInterceptor implements NestInterceptor {\r\n  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {\r\n    const response = context.switchToHttp().getResponse();\r\n    response.removeHeader('X-RateLimit-Limit');\r\n    response.removeHeader('X-RateLimit-Remaining');\r\n    response.removeHeader('X-RateLimit-Reset');\r\n    response.removeHeader('Retry-After');\r\n    return next.handle();\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/middleware/auth/auth.middleware.ts",
    "content": "/* eslint-disable @typescript-eslint/ban-ts-comment */\r\nimport { Constants } from '@/common/constant/Constants';\r\nimport { AuthorizationException } from '@/common/exception/AuthorizationException';\r\nimport { AuthService } from '@/common/service/auth/auth.service';\r\nimport { redisUtils } from '@/common/utils/redisUtils';\r\nimport { Injectable, NestMiddleware } from '@nestjs/common';\r\nimport { Request, Response } from 'express';\r\n\r\n@Injectable()\r\nexport class AuthMiddleware implements NestMiddleware {\r\n  constructor(private authService: AuthService) {}\r\n  async use(req: Request, res: Response, next: () => void) {\r\n    let token = req.headers['authorization'];\r\n    if (!token || token.length < 20 || !token.startsWith('Bearer ')) {\r\n      throw new AuthorizationException('无效的token！');\r\n    }\r\n    token = token.slice(7);\r\n    try {\r\n      const { userId, tokenId } = (await this.authService.verifyToken(\r\n        token,\r\n      )) as { userId: number; tokenId: string };\r\n      if (!(await redisUtils.get(Constants.LOGIN_TOKEN_KEY + tokenId)))\r\n        throw new AuthorizationException('无效的token！');\r\n      const userInfo = JSON.parse(\r\n        (await redisUtils.get(Constants.LOGIN_CACHE_TOKEN_KEY + userId)) ||\r\n          null,\r\n      );\r\n      if (!userInfo) throw new AuthorizationException('无效的token！');\r\n      //@ts-ignore\r\n      req.userId = userId;\r\n      //@ts-ignore\r\n      req.token = token;\r\n      //@ts-ignore\r\n      req.user = userInfo;\r\n      next();\r\n    } catch (error) {\r\n      throw new AuthorizationException('无效的token！');\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/pipe/parse-int-array.pipe.ts",
    "content": "import { ValidationException } from '@/common/exception/ValidationException';\r\nimport { PipeTransform, Injectable } from '@nestjs/common';\r\n\r\n@Injectable()\r\nexport class ParseIntArrayPipe implements PipeTransform<string, number[]> {\r\n  transform(value: string): number[] {\r\n    // 将字符串按逗号分割成数组\r\n    const array = value\r\n      .split(',')\r\n      .filter((v) => v !== '')\r\n      .map((item) => parseInt(item.trim(), 10));\r\n    // 检查是否所有元素都成功转换为数字\r\n    if (array.some(Number.isNaN)) {\r\n      throw new ValidationException('参数不正确');\r\n    }\r\n    return array;\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/pipe/validation.pipe.ts",
    "content": "import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common';\r\nimport { plainToClass } from 'class-transformer';\r\nimport { validate } from 'class-validator';\r\nimport { ValidationException } from '@/common/exception/ValidationException';\r\n\r\n@Injectable()\r\nexport class ValidationPipe implements PipeTransform {\r\n  async transform(value: any, { metatype }: ArgumentMetadata) {\r\n    if (!metatype || !this.toValidate(metatype)) {\r\n      return value;\r\n    }\r\n    const object = plainToClass(metatype, value);\r\n    const errors = await validate(object, {});\r\n    if (errors.length > 0) {\r\n      const error = Object.values(errors[0].constraints)[0];\r\n      throw new ValidationException(error);\r\n    }\r\n    return object;\r\n  }\r\n  private toValidate(metatype: Function): boolean {\r\n    const types: Function[] = [String, Boolean, Number, Array, Object];\r\n    return !types.includes(metatype);\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/prisma-client/default.d.ts",
    "content": "export * from './index'"
  },
  {
    "path": "server/src/common/prisma-client/default.js",
    "content": "module.exports = { ...require('.') }"
  },
  {
    "path": "server/src/common/prisma-client/edge.d.ts",
    "content": "export * from './default'"
  },
  {
    "path": "server/src/common/prisma-client/edge.js",
    "content": "\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nconst {\n  PrismaClientKnownRequestError,\n  PrismaClientUnknownRequestError,\n  PrismaClientRustPanicError,\n  PrismaClientInitializationError,\n  PrismaClientValidationError,\n  NotFoundError,\n  getPrismaClient,\n  sqltag,\n  empty,\n  join,\n  raw,\n  Decimal,\n  Debug,\n  objectEnumValues,\n  makeStrictEnum,\n  Extensions,\n  warnOnce,\n  defineDmmfProperty,\n  Public,\n  getRuntime\n} = require('./runtime/edge.js')\n\n\nconst Prisma = {}\n\nexports.Prisma = Prisma\nexports.$Enums = {}\n\n/**\n * Prisma Client JS version: 5.15.0\n * Query Engine version: 12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\n */\nPrisma.prismaVersion = {\n  client: \"5.15.0\",\n  engine: \"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\"\n}\n\nPrisma.PrismaClientKnownRequestError = PrismaClientKnownRequestError;\nPrisma.PrismaClientUnknownRequestError = PrismaClientUnknownRequestError\nPrisma.PrismaClientRustPanicError = PrismaClientRustPanicError\nPrisma.PrismaClientInitializationError = PrismaClientInitializationError\nPrisma.PrismaClientValidationError = PrismaClientValidationError\nPrisma.NotFoundError = NotFoundError\nPrisma.Decimal = Decimal\n\n/**\n * Re-export of sql-template-tag\n */\nPrisma.sql = sqltag\nPrisma.empty = empty\nPrisma.join = join\nPrisma.raw = raw\nPrisma.validator = Public.validator\n\n/**\n* Extensions\n*/\nPrisma.getExtensionContext = Extensions.getExtensionContext\nPrisma.defineExtension = Extensions.defineExtension\n\n/**\n * Shorthand utilities for JSON filtering\n */\nPrisma.DbNull = objectEnumValues.instances.DbNull\nPrisma.JsonNull = objectEnumValues.instances.JsonNull\nPrisma.AnyNull = objectEnumValues.instances.AnyNull\n\nPrisma.NullTypes = {\n  DbNull: objectEnumValues.classes.DbNull,\n  JsonNull: objectEnumValues.classes.JsonNull,\n  AnyNull: objectEnumValues.classes.AnyNull\n}\n\n\n\n/**\n * Enums\n */\nexports.Prisma.TransactionIsolationLevel = makeStrictEnum({\n  ReadUncommitted: 'ReadUncommitted',\n  ReadCommitted: 'ReadCommitted',\n  RepeatableRead: 'RepeatableRead',\n  Serializable: 'Serializable'\n});\n\nexports.Prisma.GenTableScalarFieldEnum = {\n  tableId: 'tableId',\n  tableName: 'tableName',\n  tableComment: 'tableComment',\n  subTableName: 'subTableName',\n  subTableFkName: 'subTableFkName',\n  className: 'className',\n  tplCategory: 'tplCategory',\n  tplWebType: 'tplWebType',\n  packageName: 'packageName',\n  moduleName: 'moduleName',\n  businessName: 'businessName',\n  functionName: 'functionName',\n  functionAuthor: 'functionAuthor',\n  genType: 'genType',\n  genPath: 'genPath',\n  options: 'options',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.RelationLoadStrategy = {\n  query: 'query',\n  join: 'join'\n};\n\nexports.Prisma.GenTableColumnScalarFieldEnum = {\n  columnId: 'columnId',\n  tableId: 'tableId',\n  columnName: 'columnName',\n  columnComment: 'columnComment',\n  columnType: 'columnType',\n  javaType: 'javaType',\n  javaField: 'javaField',\n  isPk: 'isPk',\n  isIncrement: 'isIncrement',\n  isRequired: 'isRequired',\n  isInsert: 'isInsert',\n  isEdit: 'isEdit',\n  isList: 'isList',\n  isQuery: 'isQuery',\n  queryType: 'queryType',\n  htmlType: 'htmlType',\n  dictType: 'dictType',\n  sort: 'sort',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime'\n};\n\nexports.Prisma.SysConfigScalarFieldEnum = {\n  configId: 'configId',\n  configName: 'configName',\n  configKey: 'configKey',\n  configValue: 'configValue',\n  configType: 'configType',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysDeptScalarFieldEnum = {\n  deptId: 'deptId',\n  parentId: 'parentId',\n  ancestors: 'ancestors',\n  deptName: 'deptName',\n  orderNum: 'orderNum',\n  leader: 'leader',\n  phone: 'phone',\n  email: 'email',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime'\n};\n\nexports.Prisma.SysDictDataScalarFieldEnum = {\n  dictCode: 'dictCode',\n  dictSort: 'dictSort',\n  dictLabel: 'dictLabel',\n  dictValue: 'dictValue',\n  dictType: 'dictType',\n  cssClass: 'cssClass',\n  listClass: 'listClass',\n  isDefault: 'isDefault',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysDictTypeScalarFieldEnum = {\n  dictId: 'dictId',\n  dictName: 'dictName',\n  dictType: 'dictType',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysLogininforScalarFieldEnum = {\n  infoId: 'infoId',\n  userName: 'userName',\n  ipaddr: 'ipaddr',\n  loginLocation: 'loginLocation',\n  browser: 'browser',\n  os: 'os',\n  status: 'status',\n  msg: 'msg',\n  loginTime: 'loginTime'\n};\n\nexports.Prisma.SysMenuScalarFieldEnum = {\n  menuId: 'menuId',\n  menuName: 'menuName',\n  parentId: 'parentId',\n  orderNum: 'orderNum',\n  path: 'path',\n  component: 'component',\n  query: 'query',\n  isFrame: 'isFrame',\n  isCache: 'isCache',\n  menuType: 'menuType',\n  visible: 'visible',\n  status: 'status',\n  perms: 'perms',\n  icon: 'icon',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysNoticeScalarFieldEnum = {\n  noticeId: 'noticeId',\n  noticeTitle: 'noticeTitle',\n  noticeType: 'noticeType',\n  noticeContent: 'noticeContent',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysPostScalarFieldEnum = {\n  postId: 'postId',\n  postCode: 'postCode',\n  postName: 'postName',\n  postSort: 'postSort',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysUserPostScalarFieldEnum = {\n  userId: 'userId',\n  postId: 'postId'\n};\n\nexports.Prisma.SysRoleDeptScalarFieldEnum = {\n  roleId: 'roleId',\n  deptId: 'deptId'\n};\n\nexports.Prisma.SysRoleMenuScalarFieldEnum = {\n  roleId: 'roleId',\n  menuId: 'menuId'\n};\n\nexports.Prisma.SysUserScalarFieldEnum = {\n  userId: 'userId',\n  deptId: 'deptId',\n  userName: 'userName',\n  nickName: 'nickName',\n  userType: 'userType',\n  email: 'email',\n  phonenumber: 'phonenumber',\n  sex: 'sex',\n  avatar: 'avatar',\n  password: 'password',\n  status: 'status',\n  loginIp: 'loginIp',\n  loginDate: 'loginDate',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysRoleScalarFieldEnum = {\n  roleId: 'roleId',\n  roleName: 'roleName',\n  roleKey: 'roleKey',\n  roleSort: 'roleSort',\n  dataScope: 'dataScope',\n  menuCheckStrictly: 'menuCheckStrictly',\n  deptCheckStrictly: 'deptCheckStrictly',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysUserRoleScalarFieldEnum = {\n  userId: 'userId',\n  roleId: 'roleId'\n};\n\nexports.Prisma.SortOrder = {\n  asc: 'asc',\n  desc: 'desc'\n};\n\nexports.Prisma.NullsOrder = {\n  first: 'first',\n  last: 'last'\n};\n\n\nexports.Prisma.ModelName = {\n  GenTable: 'GenTable',\n  GenTableColumn: 'GenTableColumn',\n  SysConfig: 'SysConfig',\n  SysDept: 'SysDept',\n  SysDictData: 'SysDictData',\n  SysDictType: 'SysDictType',\n  SysLogininfor: 'SysLogininfor',\n  SysMenu: 'SysMenu',\n  SysNotice: 'SysNotice',\n  SysPost: 'SysPost',\n  SysUserPost: 'SysUserPost',\n  SysRoleDept: 'SysRoleDept',\n  SysRoleMenu: 'SysRoleMenu',\n  SysUser: 'SysUser',\n  SysRole: 'SysRole',\n  SysUserRole: 'SysUserRole'\n};\n/**\n * Create the Client\n */\nconst config = {\n  \"generator\": {\n    \"name\": \"client\",\n    \"provider\": {\n      \"fromEnvVar\": null,\n      \"value\": \"prisma-client-js\"\n    },\n    \"output\": {\n      \"value\": \"/Users/carole/project/carole-admin/server/src/common/prisma-client\",\n      \"fromEnvVar\": null\n    },\n    \"config\": {\n      \"engineType\": \"library\"\n    },\n    \"binaryTargets\": [\n      {\n        \"fromEnvVar\": null,\n        \"value\": \"darwin\",\n        \"native\": true\n      }\n    ],\n    \"previewFeatures\": [\n      \"views\",\n      \"relationJoins\",\n      \"prismaSchemaFolder\",\n      \"omitApi\"\n    ],\n    \"isCustomOutput\": true\n  },\n  \"relativeEnvPaths\": {\n    \"rootEnvPath\": null,\n    \"schemaEnvPath\": \"../../.env\"\n  },\n  \"relativePath\": \"../..\",\n  \"clientVersion\": \"5.15.0\",\n  \"engineVersion\": \"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\",\n  \"datasourceNames\": [\n    \"db\"\n  ],\n  \"activeProvider\": \"mysql\",\n  \"postinstall\": true,\n  \"inlineDatasources\": {\n    \"db\": {\n      \"url\": {\n        \"fromEnvVar\": \"DATABASE_URL\",\n        \"value\": null\n      }\n    }\n  },\n  \"inlineSchema\": \"model GenTable {\\n  tableId        Int              @id @default(autoincrement()) @map(\\\"table_id\\\") @db.UnsignedInt\\n  tableName      String?          @default(\\\"\\\") @map(\\\"table_name\\\") @db.VarChar(200)\\n  tableComment   String?          @default(\\\"\\\") @map(\\\"table_comment\\\") @db.VarChar(500)\\n  subTableName   String?          @map(\\\"sub_table_name\\\") @db.VarChar(64)\\n  subTableFkName String?          @map(\\\"sub_table_fk_name\\\") @db.VarChar(64)\\n  className      String?          @default(\\\"\\\") @map(\\\"class_name\\\") @db.VarChar(100)\\n  tplCategory    String?          @default(\\\"crud\\\") @map(\\\"tpl_category\\\") @db.VarChar(200)\\n  tplWebType     String?          @default(\\\"\\\") @map(\\\"tpl_web_type\\\") @db.VarChar(30)\\n  packageName    String?          @map(\\\"package_name\\\") @db.VarChar(100)\\n  moduleName     String?          @map(\\\"module_name\\\") @db.VarChar(30)\\n  businessName   String?          @map(\\\"business_name\\\") @db.VarChar(30)\\n  functionName   String?          @map(\\\"function_name\\\") @db.VarChar(50)\\n  functionAuthor String?          @map(\\\"function_author\\\") @db.VarChar(50)\\n  genType        String?          @default(\\\"0\\\") @map(\\\"gen_type\\\") @db.Char(1)\\n  genPath        String?          @default(\\\"/\\\") @map(\\\"gen_path\\\") @db.VarChar(200)\\n  options        String?          @map(\\\"options\\\") @db.VarChar(1000)\\n  createBy       String?          @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime     String?          @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy       String?          @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime     String?          @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark         String?          @db.VarChar(500)\\n  tableColumns   GenTableColumn[]\\n\\n  @@map(\\\"gen_table\\\")\\n}\\n\\nmodel GenTableColumn {\\n  columnId      Int       @id @default(autoincrement()) @map(\\\"column_id\\\") @db.UnsignedInt\\n  tableId       Int?      @map(\\\"table_id\\\") @db.UnsignedInt\\n  columnName    String?   @map(\\\"column_name\\\") @db.VarChar(200)\\n  columnComment String?   @map(\\\"column_comment\\\") @db.VarChar(500)\\n  columnType    String?   @map(\\\"column_type\\\") @db.VarChar(100)\\n  javaType      String?   @map(\\\"java_type\\\") @db.VarChar(500)\\n  javaField     String?   @map(\\\"java_field\\\") @db.VarChar(200)\\n  isPk          String?   @map(\\\"is_pk\\\") @db.Char(1)\\n  isIncrement   String?   @map(\\\"is_increment\\\") @db.Char(1)\\n  isRequired    String?   @map(\\\"is_required\\\") @db.Char(1)\\n  isInsert      String?   @map(\\\"is_insert\\\") @db.Char(1)\\n  isEdit        String?   @map(\\\"is_edit\\\") @db.Char(1)\\n  isList        String?   @map(\\\"is_list\\\") @db.Char(1)\\n  isQuery       String?   @map(\\\"is_query\\\") @db.Char(1)\\n  queryType     String?   @default(\\\"EQ\\\") @map(\\\"query_type\\\") @db.VarChar(200)\\n  htmlType      String?   @map(\\\"html_type\\\") @db.VarChar(200)\\n  dictType      String?   @default(\\\"\\\") @map(\\\"dict_type\\\") @db.VarChar(200)\\n  sort          Int?      @map(\\\"sort\\\")\\n  createBy      String?   @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime    String?   @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy      String?   @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime    String?   @map(\\\"update_time\\\") @db.VarChar(25)\\n  table         GenTable? @relation(fields: [tableId], references: [tableId])\\n\\n  @@index([tableId])\\n  @@map(\\\"gen_table_column\\\")\\n}\\n\\nmodel SysConfig {\\n  configId    Int     @id @default(autoincrement()) @map(\\\"config_id\\\")\\n  configName  String? @default(\\\"\\\") @map(\\\"config_name\\\") @db.VarChar(100)\\n  configKey   String? @default(\\\"\\\") @map(\\\"config_key\\\") @db.VarChar(100)\\n  configValue String? @default(\\\"\\\") @map(\\\"config_value\\\") @db.VarChar(500)\\n  configType  String? @default(\\\"N\\\") @map(\\\"config_type\\\") @db.Char(1)\\n  createBy    String? @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime  String? @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy    String? @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime  String? @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark      String? @map(\\\"remark\\\") @db.VarChar(500)\\n\\n  @@map(\\\"sys_config\\\")\\n}\\n\\nmodel SysDept {\\n  deptId     Int           @id @default(autoincrement()) @map(\\\"dept_id\\\") @db.UnsignedInt\\n  parentId   Int?          @default(0) @map(\\\"parent_id\\\") @db.UnsignedInt\\n  ancestors  String?       @default(\\\"\\\") @map(\\\"ancestors\\\") @db.VarChar(50)\\n  deptName   String?       @default(\\\"\\\") @map(\\\"dept_name\\\") @db.VarChar(30)\\n  orderNum   Int?          @default(0) @map(\\\"order_num\\\")\\n  leader     String?       @map(\\\"leader\\\") @db.VarChar(20)\\n  phone      String?       @map(\\\"phone\\\") @db.VarChar(11)\\n  email      String?       @map(\\\"email\\\") @db.VarChar(50)\\n  status     String?       @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy   String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy   String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  users      SysUser[]\\n  roles      SysRoleDept[]\\n\\n  @@map(\\\"sys_dept\\\")\\n}\\n\\nmodel SysDictData {\\n  dictCode    Int          @id @default(autoincrement()) @map(\\\"dict_code\\\") @db.UnsignedInt\\n  dictSort    Int?         @default(0) @map(\\\"dict_sort\\\")\\n  dictLabel   String?      @default(\\\"\\\") @map(\\\"dict_label\\\") @db.VarChar(100)\\n  dictValue   String?      @default(\\\"\\\") @map(\\\"dict_value\\\") @db.VarChar(100)\\n  dictType    String?      @default(\\\"\\\") @map(\\\"dict_type\\\") @db.VarChar(100)\\n  cssClass    String?      @map(\\\"css_class\\\") @db.VarChar(100)\\n  listClass   String?      @map(\\\"list_class\\\") @db.VarChar(100)\\n  isDefault   String?      @default(\\\"N\\\") @map(\\\"is_default\\\") @db.Char(1)\\n  status      String?      @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy    String?      @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime  String?      @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy    String?      @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime  String?      @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark      String?      @map(\\\"remark\\\") @db.VarChar(500)\\n  sysDictType SysDictType? @relation(fields: [dictType], references: [dictType])\\n\\n  @@index([dictType])\\n  @@map(\\\"sys_dict_data\\\")\\n}\\n\\nmodel SysDictType {\\n  dictId     Int           @id @default(autoincrement()) @map(\\\"dict_id\\\") @db.UnsignedInt\\n  dictName   String?       @default(\\\"\\\") @map(\\\"dict_name\\\") @db.VarChar(100)\\n  dictType   String?       @unique(map: \\\"dict_type\\\") @default(\\\"\\\") @map(\\\"dict_type\\\") @db.VarChar(100)\\n  status     String?       @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy   String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy   String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark     String?       @map(\\\"remark\\\") @db.VarChar(500)\\n  dictDatas  SysDictData[]\\n\\n  @@map(\\\"sys_dict_type\\\")\\n}\\n\\nmodel SysLogininfor {\\n  infoId        Int     @id @default(autoincrement()) @map(\\\"info_id\\\") @db.UnsignedInt\\n  userName      String? @default(\\\"\\\") @map(\\\"user_name\\\") @db.VarChar(50)\\n  ipaddr        String? @default(\\\"\\\") @map(\\\"ipaddr\\\") @db.VarChar(128)\\n  loginLocation String? @default(\\\"\\\") @map(\\\"login_location\\\") @db.VarChar(255)\\n  browser       String? @default(\\\"\\\") @map(\\\"browser\\\") @db.VarChar(50)\\n  os            String? @default(\\\"\\\") @map(\\\"os\\\") @db.VarChar(50)\\n  status        String? @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  msg           String? @default(\\\"\\\") @map(\\\"msg\\\") @db.VarChar(255)\\n  loginTime     String? @map(\\\"login_time\\\") @db.VarChar(25)\\n\\n  @@index([loginTime], map: \\\"idx_sys_logininfor_lt\\\")\\n  @@index([status], map: \\\"idx_sys_logininfor_s\\\")\\n  @@map(\\\"sys_logininfor\\\")\\n}\\n\\nmodel SysMenu {\\n  menuId     Int           @id @default(autoincrement()) @map(\\\"menu_id\\\") @db.UnsignedInt\\n  menuName   String        @map(\\\"menu_name\\\") @db.VarChar(50)\\n  parentId   Int?          @default(0) @map(\\\"parent_id\\\") @db.UnsignedInt\\n  orderNum   Int?          @default(0) @map(\\\"order_num\\\")\\n  path       String?       @default(\\\"\\\") @map(\\\"path\\\") @db.VarChar(200)\\n  component  String?       @map(\\\"component\\\") @db.VarChar(255)\\n  query      String?       @map(\\\"query\\\") @db.VarChar(255)\\n  isFrame    Int?          @default(0) @map(\\\"is_frame\\\")\\n  isCache    Int?          @default(1) @map(\\\"is_cache\\\")\\n  menuType   String?       @default(\\\"\\\") @map(\\\"menu_type\\\") @db.Char(1)\\n  visible    String?       @default(\\\"1\\\") @map(\\\"visible\\\") @db.Char(1)\\n  status     String?       @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  perms      String?       @map(\\\"perms\\\") @db.VarChar(100)\\n  icon       String?       @default(\\\"#\\\") @map(\\\"icon\\\") @db.VarChar(100)\\n  createBy   String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy   String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark     String?       @default(\\\"\\\") @map(\\\"remark\\\") @db.VarChar(500)\\n  roles      SysRoleMenu[]\\n\\n  @@map(\\\"sys_menu\\\")\\n}\\n\\nmodel SysNotice {\\n  noticeId      Int     @id @default(autoincrement()) @map(\\\"notice_id\\\")\\n  noticeTitle   String  @map(\\\"notice_title\\\") @db.VarChar(50)\\n  noticeType    String  @map(\\\"notice_type\\\") @db.Char(1)\\n  noticeContent String? @map(\\\"notice_content\\\") @db.MediumText\\n  status        String? @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy      String? @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime    String? @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy      String? @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime    String? @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark        String? @map(\\\"remark\\\") @db.VarChar(255)\\n\\n  @@map(\\\"sys_notice\\\")\\n}\\n\\nmodel SysPost {\\n  postId     Int           @id @default(autoincrement()) @map(\\\"post_id\\\") @db.UnsignedInt\\n  postCode   String        @map(\\\"post_code\\\") @db.VarChar(64)\\n  postName   String        @map(\\\"post_name\\\") @db.VarChar(50)\\n  postSort   Int           @map(\\\"post_sort\\\")\\n  status     String        @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy   String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy   String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark     String?       @map(\\\"remark\\\") @db.VarChar(500)\\n  users      SysUserPost[]\\n\\n  @@map(\\\"sys_post\\\")\\n}\\n\\nmodel SysUserPost {\\n  userId Int     @map(\\\"user_id\\\") @db.UnsignedInt\\n  postId Int     @map(\\\"post_id\\\") @db.UnsignedInt\\n  user   SysUser @relation(fields: [userId], references: [userId])\\n  post   SysPost @relation(fields: [postId], references: [postId])\\n\\n  @@id([userId, postId])\\n  @@index([postId])\\n  @@map(\\\"sys_user_post\\\")\\n}\\n\\nmodel SysRoleDept {\\n  roleId Int     @map(\\\"role_id\\\") @db.UnsignedInt\\n  deptId Int     @map(\\\"dept_id\\\") @db.UnsignedInt\\n  role   SysRole @relation(fields: [roleId], references: [roleId])\\n  dept   SysDept @relation(fields: [deptId], references: [deptId])\\n\\n  @@id([roleId, deptId])\\n  @@index([deptId])\\n  @@map(\\\"sys_role_dept\\\")\\n}\\n\\nmodel SysRoleMenu {\\n  roleId Int     @map(\\\"role_id\\\") @db.UnsignedInt\\n  menuId Int     @map(\\\"menu_id\\\") @db.UnsignedInt\\n  menu   SysMenu @relation(fields: [menuId], references: [menuId])\\n  role   SysRole @relation(fields: [roleId], references: [roleId])\\n\\n  @@id([roleId, menuId])\\n  @@index([menuId])\\n  @@map(\\\"sys_role_menu\\\")\\n}\\n\\nmodel SysUser {\\n  userId      Int           @id @default(autoincrement()) @map(\\\"user_id\\\") @db.UnsignedInt\\n  deptId      Int?          @map(\\\"dept_id\\\") @db.UnsignedInt\\n  userName    String        @map(\\\"user_name\\\") @db.VarChar(30)\\n  nickName    String        @map(\\\"nick_name\\\") @db.VarChar(30)\\n  userType    String?       @default(\\\"00\\\") @map(\\\"user_type\\\") @db.VarChar(2)\\n  email       String?       @default(\\\"\\\") @map(\\\"email\\\") @db.VarChar(50)\\n  phonenumber String?       @default(\\\"\\\") @map(\\\"phonenumber\\\") @db.VarChar(11)\\n  sex         String?       @default(\\\"0\\\") @map(\\\"sex\\\") @db.Char(1)\\n  avatar      String?       @default(\\\"\\\") @map(\\\"avatar\\\") @db.VarChar(100)\\n  password    String?       @default(\\\"\\\") @map(\\\"password\\\") @db.VarChar(100)\\n  status      String?       @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  loginIp     String?       @default(\\\"\\\") @map(\\\"login_ip\\\") @db.VarChar(128)\\n  loginDate   String?       @map(\\\"login_date\\\") @db.VarChar(25)\\n  createBy    String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime  String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy    String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime  String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark      String?       @map(\\\"remark\\\") @db.VarChar(500)\\n  dept        SysDept?      @relation(fields: [deptId], references: [deptId])\\n  roles       SysUserRole[]\\n  posts       SysUserPost[]\\n\\n  @@index([deptId])\\n  @@map(\\\"sys_user\\\")\\n}\\n\\nmodel SysRole {\\n  roleId            Int           @id @default(autoincrement()) @map(\\\"role_id\\\") @db.UnsignedInt\\n  roleName          String        @map(\\\"role_name\\\") @db.VarChar(30)\\n  roleKey           String        @map(\\\"role_key\\\") @db.VarChar(100)\\n  roleSort          Int           @map(\\\"role_sort\\\")\\n  dataScope         String?       @default(\\\"5\\\") @map(\\\"data_scope\\\") @db.Char(1)\\n  menuCheckStrictly Int?          @default(1) @map(\\\"menu_check_strictly\\\") @db.TinyInt\\n  deptCheckStrictly Int?          @default(1) @map(\\\"dept_check_strictly\\\") @db.TinyInt\\n  status            String        @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy          String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime        String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy          String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime        String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark            String?       @map(\\\"remark\\\") @db.VarChar(500)\\n  users             SysUserRole[]\\n  menus             SysRoleMenu[]\\n  depts             SysRoleDept[]\\n\\n  @@map(\\\"sys_role\\\")\\n}\\n\\nmodel SysUserRole {\\n  userId Int     @map(\\\"user_id\\\") @db.UnsignedInt\\n  roleId Int     @map(\\\"role_id\\\") @db.UnsignedInt\\n  user   SysUser @relation(fields: [userId], references: [userId])\\n  role   SysRole @relation(fields: [roleId], references: [roleId])\\n\\n  @@id([userId, roleId])\\n  @@index([roleId])\\n  @@map(\\\"sys_user_role\\\")\\n}\\n\\ngenerator client {\\n  provider        = \\\"prisma-client-js\\\"\\n  output          = \\\"./common/prisma-client\\\"\\n  previewFeatures = [\\\"views\\\", \\\"relationJoins\\\", \\\"prismaSchemaFolder\\\", \\\"omitApi\\\"]\\n  //这里可以指定平台引擎，native就是当前系统， 如果需要其他系统的自行添加，或者到目标系统执行npx prisma generate\\n  binaryTargets   = [\\\"native\\\"]\\n  // binaryTargets   = [\\\"native\\\", \\\"windows\\\", \\\"linux-musl\\\",\\\"debian-openssl-3.0.x\\\",\\\"darwin\\\",\\\"darwin-arm64\\\"]\\n}\\n\\ndatasource db {\\n  provider     = \\\"mysql\\\"\\n  url          = env(\\\"DATABASE_URL\\\")\\n  relationMode = \\\"prisma\\\"\\n}\\n\",\n  \"inlineSchemaHash\": \"0b0d574d7aafbd1cd7ba47583488b808df1af0e6a2ca704e20a74708d2aad32a\",\n  \"copyEngine\": true\n}\nconfig.dirname = '/'\n\nconfig.runtimeDataModel = JSON.parse(\"{\\\"models\\\":{\\\"GenTable\\\":{\\\"dbName\\\":\\\"gen_table\\\",\\\"fields\\\":[{\\\"name\\\":\\\"tableId\\\",\\\"dbName\\\":\\\"table_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tableName\\\",\\\"dbName\\\":\\\"table_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tableComment\\\",\\\"dbName\\\":\\\"table_comment\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"subTableName\\\",\\\"dbName\\\":\\\"sub_table_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"subTableFkName\\\",\\\"dbName\\\":\\\"sub_table_fk_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"className\\\",\\\"dbName\\\":\\\"class_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tplCategory\\\",\\\"dbName\\\":\\\"tpl_category\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"crud\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tplWebType\\\",\\\"dbName\\\":\\\"tpl_web_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"packageName\\\",\\\"dbName\\\":\\\"package_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"moduleName\\\",\\\"dbName\\\":\\\"module_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"businessName\\\",\\\"dbName\\\":\\\"business_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"functionName\\\",\\\"dbName\\\":\\\"function_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"functionAuthor\\\",\\\"dbName\\\":\\\"function_author\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"genType\\\",\\\"dbName\\\":\\\"gen_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"0\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"genPath\\\",\\\"dbName\\\":\\\"gen_path\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"/\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"options\\\",\\\"dbName\\\":\\\"options\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tableColumns\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"GenTableColumn\\\",\\\"relationName\\\":\\\"GenTableToGenTableColumn\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"GenTableColumn\\\":{\\\"dbName\\\":\\\"gen_table_column\\\",\\\"fields\\\":[{\\\"name\\\":\\\"columnId\\\",\\\"dbName\\\":\\\"column_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tableId\\\",\\\"dbName\\\":\\\"table_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"columnName\\\",\\\"dbName\\\":\\\"column_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"columnComment\\\",\\\"dbName\\\":\\\"column_comment\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"columnType\\\",\\\"dbName\\\":\\\"column_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"javaType\\\",\\\"dbName\\\":\\\"java_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"javaField\\\",\\\"dbName\\\":\\\"java_field\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isPk\\\",\\\"dbName\\\":\\\"is_pk\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isIncrement\\\",\\\"dbName\\\":\\\"is_increment\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isRequired\\\",\\\"dbName\\\":\\\"is_required\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isInsert\\\",\\\"dbName\\\":\\\"is_insert\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isEdit\\\",\\\"dbName\\\":\\\"is_edit\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isList\\\",\\\"dbName\\\":\\\"is_list\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isQuery\\\",\\\"dbName\\\":\\\"is_query\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"queryType\\\",\\\"dbName\\\":\\\"query_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"EQ\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"htmlType\\\",\\\"dbName\\\":\\\"html_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictType\\\",\\\"dbName\\\":\\\"dict_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"sort\\\",\\\"dbName\\\":\\\"sort\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"table\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"GenTable\\\",\\\"relationName\\\":\\\"GenTableToGenTableColumn\\\",\\\"relationFromFields\\\":[\\\"tableId\\\"],\\\"relationToFields\\\":[\\\"tableId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysConfig\\\":{\\\"dbName\\\":\\\"sys_config\\\",\\\"fields\\\":[{\\\"name\\\":\\\"configId\\\",\\\"dbName\\\":\\\"config_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"configName\\\",\\\"dbName\\\":\\\"config_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"configKey\\\",\\\"dbName\\\":\\\"config_key\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"configValue\\\",\\\"dbName\\\":\\\"config_value\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"configType\\\",\\\"dbName\\\":\\\"config_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"N\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysDept\\\":{\\\"dbName\\\":\\\"sys_dept\\\",\\\"fields\\\":[{\\\"name\\\":\\\"deptId\\\",\\\"dbName\\\":\\\"dept_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"parentId\\\",\\\"dbName\\\":\\\"parent_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"ancestors\\\",\\\"dbName\\\":\\\"ancestors\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"deptName\\\",\\\"dbName\\\":\\\"dept_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"orderNum\\\",\\\"dbName\\\":\\\"order_num\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"leader\\\",\\\"dbName\\\":\\\"leader\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"phone\\\",\\\"dbName\\\":\\\"phone\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"email\\\",\\\"dbName\\\":\\\"email\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"users\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUser\\\",\\\"relationName\\\":\\\"SysDeptToSysUser\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roles\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRoleDept\\\",\\\"relationName\\\":\\\"SysDeptToSysRoleDept\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysDictData\\\":{\\\"dbName\\\":\\\"sys_dict_data\\\",\\\"fields\\\":[{\\\"name\\\":\\\"dictCode\\\",\\\"dbName\\\":\\\"dict_code\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictSort\\\",\\\"dbName\\\":\\\"dict_sort\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictLabel\\\",\\\"dbName\\\":\\\"dict_label\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictValue\\\",\\\"dbName\\\":\\\"dict_value\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictType\\\",\\\"dbName\\\":\\\"dict_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"cssClass\\\",\\\"dbName\\\":\\\"css_class\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"listClass\\\",\\\"dbName\\\":\\\"list_class\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isDefault\\\",\\\"dbName\\\":\\\"is_default\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"N\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"sysDictType\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysDictType\\\",\\\"relationName\\\":\\\"SysDictDataToSysDictType\\\",\\\"relationFromFields\\\":[\\\"dictType\\\"],\\\"relationToFields\\\":[\\\"dictType\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysDictType\\\":{\\\"dbName\\\":\\\"sys_dict_type\\\",\\\"fields\\\":[{\\\"name\\\":\\\"dictId\\\",\\\"dbName\\\":\\\"dict_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictName\\\",\\\"dbName\\\":\\\"dict_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictType\\\",\\\"dbName\\\":\\\"dict_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":true,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictDatas\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysDictData\\\",\\\"relationName\\\":\\\"SysDictDataToSysDictType\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysLogininfor\\\":{\\\"dbName\\\":\\\"sys_logininfor\\\",\\\"fields\\\":[{\\\"name\\\":\\\"infoId\\\",\\\"dbName\\\":\\\"info_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"userName\\\",\\\"dbName\\\":\\\"user_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"ipaddr\\\",\\\"dbName\\\":\\\"ipaddr\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"loginLocation\\\",\\\"dbName\\\":\\\"login_location\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"browser\\\",\\\"dbName\\\":\\\"browser\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"os\\\",\\\"dbName\\\":\\\"os\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"msg\\\",\\\"dbName\\\":\\\"msg\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"loginTime\\\",\\\"dbName\\\":\\\"login_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysMenu\\\":{\\\"dbName\\\":\\\"sys_menu\\\",\\\"fields\\\":[{\\\"name\\\":\\\"menuId\\\",\\\"dbName\\\":\\\"menu_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menuName\\\",\\\"dbName\\\":\\\"menu_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"parentId\\\",\\\"dbName\\\":\\\"parent_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"orderNum\\\",\\\"dbName\\\":\\\"order_num\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"path\\\",\\\"dbName\\\":\\\"path\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"component\\\",\\\"dbName\\\":\\\"component\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"query\\\",\\\"dbName\\\":\\\"query\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isFrame\\\",\\\"dbName\\\":\\\"is_frame\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isCache\\\",\\\"dbName\\\":\\\"is_cache\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":1,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menuType\\\",\\\"dbName\\\":\\\"menu_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"visible\\\",\\\"dbName\\\":\\\"visible\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"perms\\\",\\\"dbName\\\":\\\"perms\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"icon\\\",\\\"dbName\\\":\\\"icon\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"#\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roles\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRoleMenu\\\",\\\"relationName\\\":\\\"SysMenuToSysRoleMenu\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysNotice\\\":{\\\"dbName\\\":\\\"sys_notice\\\",\\\"fields\\\":[{\\\"name\\\":\\\"noticeId\\\",\\\"dbName\\\":\\\"notice_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"noticeTitle\\\",\\\"dbName\\\":\\\"notice_title\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"noticeType\\\",\\\"dbName\\\":\\\"notice_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"noticeContent\\\",\\\"dbName\\\":\\\"notice_content\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysPost\\\":{\\\"dbName\\\":\\\"sys_post\\\",\\\"fields\\\":[{\\\"name\\\":\\\"postId\\\",\\\"dbName\\\":\\\"post_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"postCode\\\",\\\"dbName\\\":\\\"post_code\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"postName\\\",\\\"dbName\\\":\\\"post_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"postSort\\\",\\\"dbName\\\":\\\"post_sort\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"users\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUserPost\\\",\\\"relationName\\\":\\\"SysPostToSysUserPost\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysUserPost\\\":{\\\"dbName\\\":\\\"sys_user_post\\\",\\\"fields\\\":[{\\\"name\\\":\\\"userId\\\",\\\"dbName\\\":\\\"user_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"postId\\\",\\\"dbName\\\":\\\"post_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"user\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUser\\\",\\\"relationName\\\":\\\"SysUserToSysUserPost\\\",\\\"relationFromFields\\\":[\\\"userId\\\"],\\\"relationToFields\\\":[\\\"userId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"post\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysPost\\\",\\\"relationName\\\":\\\"SysPostToSysUserPost\\\",\\\"relationFromFields\\\":[\\\"postId\\\"],\\\"relationToFields\\\":[\\\"postId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":{\\\"name\\\":null,\\\"fields\\\":[\\\"userId\\\",\\\"postId\\\"]},\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysRoleDept\\\":{\\\"dbName\\\":\\\"sys_role_dept\\\",\\\"fields\\\":[{\\\"name\\\":\\\"roleId\\\",\\\"dbName\\\":\\\"role_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"deptId\\\",\\\"dbName\\\":\\\"dept_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"role\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRole\\\",\\\"relationName\\\":\\\"SysRoleToSysRoleDept\\\",\\\"relationFromFields\\\":[\\\"roleId\\\"],\\\"relationToFields\\\":[\\\"roleId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dept\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysDept\\\",\\\"relationName\\\":\\\"SysDeptToSysRoleDept\\\",\\\"relationFromFields\\\":[\\\"deptId\\\"],\\\"relationToFields\\\":[\\\"deptId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":{\\\"name\\\":null,\\\"fields\\\":[\\\"roleId\\\",\\\"deptId\\\"]},\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysRoleMenu\\\":{\\\"dbName\\\":\\\"sys_role_menu\\\",\\\"fields\\\":[{\\\"name\\\":\\\"roleId\\\",\\\"dbName\\\":\\\"role_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menuId\\\",\\\"dbName\\\":\\\"menu_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menu\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysMenu\\\",\\\"relationName\\\":\\\"SysMenuToSysRoleMenu\\\",\\\"relationFromFields\\\":[\\\"menuId\\\"],\\\"relationToFields\\\":[\\\"menuId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"role\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRole\\\",\\\"relationName\\\":\\\"SysRoleToSysRoleMenu\\\",\\\"relationFromFields\\\":[\\\"roleId\\\"],\\\"relationToFields\\\":[\\\"roleId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":{\\\"name\\\":null,\\\"fields\\\":[\\\"roleId\\\",\\\"menuId\\\"]},\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysUser\\\":{\\\"dbName\\\":\\\"sys_user\\\",\\\"fields\\\":[{\\\"name\\\":\\\"userId\\\",\\\"dbName\\\":\\\"user_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"deptId\\\",\\\"dbName\\\":\\\"dept_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"userName\\\",\\\"dbName\\\":\\\"user_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"nickName\\\",\\\"dbName\\\":\\\"nick_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"userType\\\",\\\"dbName\\\":\\\"user_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"00\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"email\\\",\\\"dbName\\\":\\\"email\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"phonenumber\\\",\\\"dbName\\\":\\\"phonenumber\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"sex\\\",\\\"dbName\\\":\\\"sex\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"0\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"avatar\\\",\\\"dbName\\\":\\\"avatar\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"password\\\",\\\"dbName\\\":\\\"password\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"loginIp\\\",\\\"dbName\\\":\\\"login_ip\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"loginDate\\\",\\\"dbName\\\":\\\"login_date\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dept\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysDept\\\",\\\"relationName\\\":\\\"SysDeptToSysUser\\\",\\\"relationFromFields\\\":[\\\"deptId\\\"],\\\"relationToFields\\\":[\\\"deptId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roles\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUserRole\\\",\\\"relationName\\\":\\\"SysUserToSysUserRole\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"posts\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUserPost\\\",\\\"relationName\\\":\\\"SysUserToSysUserPost\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysRole\\\":{\\\"dbName\\\":\\\"sys_role\\\",\\\"fields\\\":[{\\\"name\\\":\\\"roleId\\\",\\\"dbName\\\":\\\"role_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roleName\\\",\\\"dbName\\\":\\\"role_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roleKey\\\",\\\"dbName\\\":\\\"role_key\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roleSort\\\",\\\"dbName\\\":\\\"role_sort\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dataScope\\\",\\\"dbName\\\":\\\"data_scope\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"5\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menuCheckStrictly\\\",\\\"dbName\\\":\\\"menu_check_strictly\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":1,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"deptCheckStrictly\\\",\\\"dbName\\\":\\\"dept_check_strictly\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":1,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"users\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUserRole\\\",\\\"relationName\\\":\\\"SysRoleToSysUserRole\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menus\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRoleMenu\\\",\\\"relationName\\\":\\\"SysRoleToSysRoleMenu\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"depts\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRoleDept\\\",\\\"relationName\\\":\\\"SysRoleToSysRoleDept\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysUserRole\\\":{\\\"dbName\\\":\\\"sys_user_role\\\",\\\"fields\\\":[{\\\"name\\\":\\\"userId\\\",\\\"dbName\\\":\\\"user_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roleId\\\",\\\"dbName\\\":\\\"role_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"user\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUser\\\",\\\"relationName\\\":\\\"SysUserToSysUserRole\\\",\\\"relationFromFields\\\":[\\\"userId\\\"],\\\"relationToFields\\\":[\\\"userId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"role\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRole\\\",\\\"relationName\\\":\\\"SysRoleToSysUserRole\\\",\\\"relationFromFields\\\":[\\\"roleId\\\"],\\\"relationToFields\\\":[\\\"roleId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":{\\\"name\\\":null,\\\"fields\\\":[\\\"userId\\\",\\\"roleId\\\"]},\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false}},\\\"enums\\\":{},\\\"types\\\":{}}\")\ndefineDmmfProperty(exports.Prisma, config.runtimeDataModel)\nconfig.engineWasm = undefined\n\nconfig.injectableEdgeEnv = () => ({\n  parsed: {\n    DATABASE_URL: typeof globalThis !== 'undefined' && globalThis['DATABASE_URL'] || typeof process !== 'undefined' && process.env && process.env.DATABASE_URL || undefined\n  }\n})\n\nif (typeof globalThis !== 'undefined' && globalThis['DEBUG'] || typeof process !== 'undefined' && process.env && process.env.DEBUG || undefined) {\n  Debug.enable(typeof globalThis !== 'undefined' && globalThis['DEBUG'] || typeof process !== 'undefined' && process.env && process.env.DEBUG || undefined)\n}\n\nconst PrismaClient = getPrismaClient(config)\nexports.PrismaClient = PrismaClient\nObject.assign(exports, Prisma)\n\n"
  },
  {
    "path": "server/src/common/prisma-client/index-browser.js",
    "content": "\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nconst {\n  Decimal,\n  objectEnumValues,\n  makeStrictEnum,\n  Public,\n  getRuntime,\n} = require('./runtime/index-browser.js')\n\n\nconst Prisma = {}\n\nexports.Prisma = Prisma\nexports.$Enums = {}\n\n/**\n * Prisma Client JS version: 5.15.0\n * Query Engine version: 12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\n */\nPrisma.prismaVersion = {\n  client: \"5.15.0\",\n  engine: \"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\"\n}\n\nPrisma.PrismaClientKnownRequestError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`PrismaClientKnownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)};\nPrisma.PrismaClientUnknownRequestError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`PrismaClientUnknownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.PrismaClientRustPanicError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`PrismaClientRustPanicError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.PrismaClientInitializationError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`PrismaClientInitializationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.PrismaClientValidationError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`PrismaClientValidationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.NotFoundError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`NotFoundError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.Decimal = Decimal\n\n/**\n * Re-export of sql-template-tag\n */\nPrisma.sql = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`sqltag is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.empty = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`empty is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.join = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`join is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.raw = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`raw is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.validator = Public.validator\n\n/**\n* Extensions\n*/\nPrisma.getExtensionContext = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`Extensions.getExtensionContext is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.defineExtension = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`Extensions.defineExtension is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\n\n/**\n * Shorthand utilities for JSON filtering\n */\nPrisma.DbNull = objectEnumValues.instances.DbNull\nPrisma.JsonNull = objectEnumValues.instances.JsonNull\nPrisma.AnyNull = objectEnumValues.instances.AnyNull\n\nPrisma.NullTypes = {\n  DbNull: objectEnumValues.classes.DbNull,\n  JsonNull: objectEnumValues.classes.JsonNull,\n  AnyNull: objectEnumValues.classes.AnyNull\n}\n\n/**\n * Enums\n */\n\nexports.Prisma.TransactionIsolationLevel = makeStrictEnum({\n  ReadUncommitted: 'ReadUncommitted',\n  ReadCommitted: 'ReadCommitted',\n  RepeatableRead: 'RepeatableRead',\n  Serializable: 'Serializable'\n});\n\nexports.Prisma.GenTableScalarFieldEnum = {\n  tableId: 'tableId',\n  tableName: 'tableName',\n  tableComment: 'tableComment',\n  subTableName: 'subTableName',\n  subTableFkName: 'subTableFkName',\n  className: 'className',\n  tplCategory: 'tplCategory',\n  tplWebType: 'tplWebType',\n  packageName: 'packageName',\n  moduleName: 'moduleName',\n  businessName: 'businessName',\n  functionName: 'functionName',\n  functionAuthor: 'functionAuthor',\n  genType: 'genType',\n  genPath: 'genPath',\n  options: 'options',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.RelationLoadStrategy = {\n  query: 'query',\n  join: 'join'\n};\n\nexports.Prisma.GenTableColumnScalarFieldEnum = {\n  columnId: 'columnId',\n  tableId: 'tableId',\n  columnName: 'columnName',\n  columnComment: 'columnComment',\n  columnType: 'columnType',\n  javaType: 'javaType',\n  javaField: 'javaField',\n  isPk: 'isPk',\n  isIncrement: 'isIncrement',\n  isRequired: 'isRequired',\n  isInsert: 'isInsert',\n  isEdit: 'isEdit',\n  isList: 'isList',\n  isQuery: 'isQuery',\n  queryType: 'queryType',\n  htmlType: 'htmlType',\n  dictType: 'dictType',\n  sort: 'sort',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime'\n};\n\nexports.Prisma.SysConfigScalarFieldEnum = {\n  configId: 'configId',\n  configName: 'configName',\n  configKey: 'configKey',\n  configValue: 'configValue',\n  configType: 'configType',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysDeptScalarFieldEnum = {\n  deptId: 'deptId',\n  parentId: 'parentId',\n  ancestors: 'ancestors',\n  deptName: 'deptName',\n  orderNum: 'orderNum',\n  leader: 'leader',\n  phone: 'phone',\n  email: 'email',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime'\n};\n\nexports.Prisma.SysDictDataScalarFieldEnum = {\n  dictCode: 'dictCode',\n  dictSort: 'dictSort',\n  dictLabel: 'dictLabel',\n  dictValue: 'dictValue',\n  dictType: 'dictType',\n  cssClass: 'cssClass',\n  listClass: 'listClass',\n  isDefault: 'isDefault',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysDictTypeScalarFieldEnum = {\n  dictId: 'dictId',\n  dictName: 'dictName',\n  dictType: 'dictType',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysLogininforScalarFieldEnum = {\n  infoId: 'infoId',\n  userName: 'userName',\n  ipaddr: 'ipaddr',\n  loginLocation: 'loginLocation',\n  browser: 'browser',\n  os: 'os',\n  status: 'status',\n  msg: 'msg',\n  loginTime: 'loginTime'\n};\n\nexports.Prisma.SysMenuScalarFieldEnum = {\n  menuId: 'menuId',\n  menuName: 'menuName',\n  parentId: 'parentId',\n  orderNum: 'orderNum',\n  path: 'path',\n  component: 'component',\n  query: 'query',\n  isFrame: 'isFrame',\n  isCache: 'isCache',\n  menuType: 'menuType',\n  visible: 'visible',\n  status: 'status',\n  perms: 'perms',\n  icon: 'icon',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysNoticeScalarFieldEnum = {\n  noticeId: 'noticeId',\n  noticeTitle: 'noticeTitle',\n  noticeType: 'noticeType',\n  noticeContent: 'noticeContent',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysPostScalarFieldEnum = {\n  postId: 'postId',\n  postCode: 'postCode',\n  postName: 'postName',\n  postSort: 'postSort',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysUserPostScalarFieldEnum = {\n  userId: 'userId',\n  postId: 'postId'\n};\n\nexports.Prisma.SysRoleDeptScalarFieldEnum = {\n  roleId: 'roleId',\n  deptId: 'deptId'\n};\n\nexports.Prisma.SysRoleMenuScalarFieldEnum = {\n  roleId: 'roleId',\n  menuId: 'menuId'\n};\n\nexports.Prisma.SysUserScalarFieldEnum = {\n  userId: 'userId',\n  deptId: 'deptId',\n  userName: 'userName',\n  nickName: 'nickName',\n  userType: 'userType',\n  email: 'email',\n  phonenumber: 'phonenumber',\n  sex: 'sex',\n  avatar: 'avatar',\n  password: 'password',\n  status: 'status',\n  loginIp: 'loginIp',\n  loginDate: 'loginDate',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysRoleScalarFieldEnum = {\n  roleId: 'roleId',\n  roleName: 'roleName',\n  roleKey: 'roleKey',\n  roleSort: 'roleSort',\n  dataScope: 'dataScope',\n  menuCheckStrictly: 'menuCheckStrictly',\n  deptCheckStrictly: 'deptCheckStrictly',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysUserRoleScalarFieldEnum = {\n  userId: 'userId',\n  roleId: 'roleId'\n};\n\nexports.Prisma.SortOrder = {\n  asc: 'asc',\n  desc: 'desc'\n};\n\nexports.Prisma.NullsOrder = {\n  first: 'first',\n  last: 'last'\n};\n\n\nexports.Prisma.ModelName = {\n  GenTable: 'GenTable',\n  GenTableColumn: 'GenTableColumn',\n  SysConfig: 'SysConfig',\n  SysDept: 'SysDept',\n  SysDictData: 'SysDictData',\n  SysDictType: 'SysDictType',\n  SysLogininfor: 'SysLogininfor',\n  SysMenu: 'SysMenu',\n  SysNotice: 'SysNotice',\n  SysPost: 'SysPost',\n  SysUserPost: 'SysUserPost',\n  SysRoleDept: 'SysRoleDept',\n  SysRoleMenu: 'SysRoleMenu',\n  SysUser: 'SysUser',\n  SysRole: 'SysRole',\n  SysUserRole: 'SysUserRole'\n};\n\n/**\n * This is a stub Prisma Client that will error at runtime if called.\n */\nclass PrismaClient {\n  constructor() {\n    return new Proxy(this, {\n      get(target, prop) {\n        let message\n        const runtime = getRuntime()\n        if (runtime.isEdge) {\n          message = `PrismaClient is not configured to run in ${runtime.prettyName}. In order to run Prisma Client on edge runtime, either:\n- Use Prisma Accelerate: https://pris.ly/d/accelerate\n- Use Driver Adapters: https://pris.ly/d/driver-adapters\n`;\n        } else {\n          message = 'PrismaClient is unable to run in this browser environment, or has been bundled for the browser (running in `' + runtime.prettyName + '`).'\n        }\n        \n        message += `\nIf this is unexpected, please open an issue: https://pris.ly/prisma-prisma-bug-report`\n\n        throw new Error(message)\n      }\n    })\n  }\n}\n\nexports.PrismaClient = PrismaClient\n\nObject.assign(exports, Prisma)\n"
  },
  {
    "path": "server/src/common/prisma-client/index.d.ts",
    "content": "\n/**\n * Client\n**/\n\nimport * as runtime from './runtime/library.js';\nimport $Types = runtime.Types // general types\nimport $Public = runtime.Types.Public\nimport $Utils = runtime.Types.Utils\nimport $Extensions = runtime.Types.Extensions\nimport $Result = runtime.Types.Result\n\nexport type PrismaPromise<T> = $Public.PrismaPromise<T>\n\n\n/**\n * Model GenTable\n * \n */\nexport type GenTable = $Result.DefaultSelection<Prisma.$GenTablePayload>\n/**\n * Model GenTableColumn\n * \n */\nexport type GenTableColumn = $Result.DefaultSelection<Prisma.$GenTableColumnPayload>\n/**\n * Model SysConfig\n * \n */\nexport type SysConfig = $Result.DefaultSelection<Prisma.$SysConfigPayload>\n/**\n * Model SysDept\n * \n */\nexport type SysDept = $Result.DefaultSelection<Prisma.$SysDeptPayload>\n/**\n * Model SysDictData\n * \n */\nexport type SysDictData = $Result.DefaultSelection<Prisma.$SysDictDataPayload>\n/**\n * Model SysDictType\n * \n */\nexport type SysDictType = $Result.DefaultSelection<Prisma.$SysDictTypePayload>\n/**\n * Model SysLogininfor\n * \n */\nexport type SysLogininfor = $Result.DefaultSelection<Prisma.$SysLogininforPayload>\n/**\n * Model SysMenu\n * \n */\nexport type SysMenu = $Result.DefaultSelection<Prisma.$SysMenuPayload>\n/**\n * Model SysNotice\n * \n */\nexport type SysNotice = $Result.DefaultSelection<Prisma.$SysNoticePayload>\n/**\n * Model SysPost\n * \n */\nexport type SysPost = $Result.DefaultSelection<Prisma.$SysPostPayload>\n/**\n * Model SysUserPost\n * \n */\nexport type SysUserPost = $Result.DefaultSelection<Prisma.$SysUserPostPayload>\n/**\n * Model SysRoleDept\n * \n */\nexport type SysRoleDept = $Result.DefaultSelection<Prisma.$SysRoleDeptPayload>\n/**\n * Model SysRoleMenu\n * \n */\nexport type SysRoleMenu = $Result.DefaultSelection<Prisma.$SysRoleMenuPayload>\n/**\n * Model SysUser\n * \n */\nexport type SysUser = $Result.DefaultSelection<Prisma.$SysUserPayload>\n/**\n * Model SysRole\n * \n */\nexport type SysRole = $Result.DefaultSelection<Prisma.$SysRolePayload>\n/**\n * Model SysUserRole\n * \n */\nexport type SysUserRole = $Result.DefaultSelection<Prisma.$SysUserRolePayload>\n\n/**\n * ##  Prisma Client ʲˢ\n * \n * Type-safe database client for TypeScript & Node.js\n * @example\n * ```\n * const prisma = new PrismaClient()\n * // Fetch zero or more GenTables\n * const genTables = await prisma.genTable.findMany()\n * ```\n *\n * \n * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).\n */\nexport class PrismaClient<\n  T extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions,\n  U = 'log' extends keyof T ? T['log'] extends Array<Prisma.LogLevel | Prisma.LogDefinition> ? Prisma.GetEvents<T['log']> : never : never,\n  ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs\n> {\n  [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['other'] }\n\n    /**\n   * ##  Prisma Client ʲˢ\n   * \n   * Type-safe database client for TypeScript & Node.js\n   * @example\n   * ```\n   * const prisma = new PrismaClient()\n   * // Fetch zero or more GenTables\n   * const genTables = await prisma.genTable.findMany()\n   * ```\n   *\n   * \n   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).\n   */\n\n  constructor(optionsArg ?: Prisma.Subset<T, Prisma.PrismaClientOptions>);\n  $on<V extends U>(eventType: V, callback: (event: V extends 'query' ? Prisma.QueryEvent : Prisma.LogEvent) => void): void;\n\n  /**\n   * Connect with the database\n   */\n  $connect(): $Utils.JsPromise<void>;\n\n  /**\n   * Disconnect from the database\n   */\n  $disconnect(): $Utils.JsPromise<void>;\n\n  /**\n   * Add a middleware\n   * @deprecated since 4.16.0. For new code, prefer client extensions instead.\n   * @see https://pris.ly/d/extensions\n   */\n  $use(cb: Prisma.Middleware): void\n\n/**\n   * Executes a prepared raw query and returns the number of affected rows.\n   * @example\n   * ```\n   * const result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`\n   * ```\n   * \n   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).\n   */\n  $executeRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<number>;\n\n  /**\n   * Executes a raw query and returns the number of affected rows.\n   * Susceptible to SQL injections, see documentation.\n   * @example\n   * ```\n   * const result = await prisma.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com')\n   * ```\n   * \n   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).\n   */\n  $executeRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<number>;\n\n  /**\n   * Performs a prepared raw query and returns the `SELECT` data.\n   * @example\n   * ```\n   * const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`\n   * ```\n   * \n   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).\n   */\n  $queryRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<T>;\n\n  /**\n   * Performs a raw query and returns the `SELECT` data.\n   * Susceptible to SQL injections, see documentation.\n   * @example\n   * ```\n   * const result = await prisma.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com')\n   * ```\n   * \n   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).\n   */\n  $queryRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<T>;\n\n  /**\n   * Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole.\n   * @example\n   * ```\n   * const [george, bob, alice] = await prisma.$transaction([\n   *   prisma.user.create({ data: { name: 'George' } }),\n   *   prisma.user.create({ data: { name: 'Bob' } }),\n   *   prisma.user.create({ data: { name: 'Alice' } }),\n   * ])\n   * ```\n   * \n   * Read more in our [docs](https://www.prisma.io/docs/concepts/components/prisma-client/transactions).\n   */\n  $transaction<P extends Prisma.PrismaPromise<any>[]>(arg: [...P], options?: { isolationLevel?: Prisma.TransactionIsolationLevel }): $Utils.JsPromise<runtime.Types.Utils.UnwrapTuple<P>>\n\n  $transaction<R>(fn: (prisma: Omit<PrismaClient, runtime.ITXClientDenyList>) => $Utils.JsPromise<R>, options?: { maxWait?: number, timeout?: number, isolationLevel?: Prisma.TransactionIsolationLevel }): $Utils.JsPromise<R>\n\n\n  $extends: $Extensions.ExtendsHook<'extends', Prisma.TypeMapCb, ExtArgs>\n\n      /**\n   * `prisma.genTable`: Exposes CRUD operations for the **GenTable** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more GenTables\n    * const genTables = await prisma.genTable.findMany()\n    * ```\n    */\n  get genTable(): Prisma.GenTableDelegate<ExtArgs>;\n\n  /**\n   * `prisma.genTableColumn`: Exposes CRUD operations for the **GenTableColumn** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more GenTableColumns\n    * const genTableColumns = await prisma.genTableColumn.findMany()\n    * ```\n    */\n  get genTableColumn(): Prisma.GenTableColumnDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysConfig`: Exposes CRUD operations for the **SysConfig** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysConfigs\n    * const sysConfigs = await prisma.sysConfig.findMany()\n    * ```\n    */\n  get sysConfig(): Prisma.SysConfigDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysDept`: Exposes CRUD operations for the **SysDept** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysDepts\n    * const sysDepts = await prisma.sysDept.findMany()\n    * ```\n    */\n  get sysDept(): Prisma.SysDeptDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysDictData`: Exposes CRUD operations for the **SysDictData** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysDictData\n    * const sysDictData = await prisma.sysDictData.findMany()\n    * ```\n    */\n  get sysDictData(): Prisma.SysDictDataDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysDictType`: Exposes CRUD operations for the **SysDictType** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysDictTypes\n    * const sysDictTypes = await prisma.sysDictType.findMany()\n    * ```\n    */\n  get sysDictType(): Prisma.SysDictTypeDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysLogininfor`: Exposes CRUD operations for the **SysLogininfor** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysLogininfors\n    * const sysLogininfors = await prisma.sysLogininfor.findMany()\n    * ```\n    */\n  get sysLogininfor(): Prisma.SysLogininforDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysMenu`: Exposes CRUD operations for the **SysMenu** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysMenus\n    * const sysMenus = await prisma.sysMenu.findMany()\n    * ```\n    */\n  get sysMenu(): Prisma.SysMenuDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysNotice`: Exposes CRUD operations for the **SysNotice** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysNotices\n    * const sysNotices = await prisma.sysNotice.findMany()\n    * ```\n    */\n  get sysNotice(): Prisma.SysNoticeDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysPost`: Exposes CRUD operations for the **SysPost** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysPosts\n    * const sysPosts = await prisma.sysPost.findMany()\n    * ```\n    */\n  get sysPost(): Prisma.SysPostDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysUserPost`: Exposes CRUD operations for the **SysUserPost** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysUserPosts\n    * const sysUserPosts = await prisma.sysUserPost.findMany()\n    * ```\n    */\n  get sysUserPost(): Prisma.SysUserPostDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysRoleDept`: Exposes CRUD operations for the **SysRoleDept** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysRoleDepts\n    * const sysRoleDepts = await prisma.sysRoleDept.findMany()\n    * ```\n    */\n  get sysRoleDept(): Prisma.SysRoleDeptDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysRoleMenu`: Exposes CRUD operations for the **SysRoleMenu** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysRoleMenus\n    * const sysRoleMenus = await prisma.sysRoleMenu.findMany()\n    * ```\n    */\n  get sysRoleMenu(): Prisma.SysRoleMenuDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysUser`: Exposes CRUD operations for the **SysUser** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysUsers\n    * const sysUsers = await prisma.sysUser.findMany()\n    * ```\n    */\n  get sysUser(): Prisma.SysUserDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysRole`: Exposes CRUD operations for the **SysRole** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysRoles\n    * const sysRoles = await prisma.sysRole.findMany()\n    * ```\n    */\n  get sysRole(): Prisma.SysRoleDelegate<ExtArgs>;\n\n  /**\n   * `prisma.sysUserRole`: Exposes CRUD operations for the **SysUserRole** model.\n    * Example usage:\n    * ```ts\n    * // Fetch zero or more SysUserRoles\n    * const sysUserRoles = await prisma.sysUserRole.findMany()\n    * ```\n    */\n  get sysUserRole(): Prisma.SysUserRoleDelegate<ExtArgs>;\n}\n\nexport namespace Prisma {\n  export import DMMF = runtime.DMMF\n\n  export type PrismaPromise<T> = $Public.PrismaPromise<T>\n\n  /**\n   * Validator\n   */\n  export import validator = runtime.Public.validator\n\n  /**\n   * Prisma Errors\n   */\n  export import PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError\n  export import PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError\n  export import PrismaClientRustPanicError = runtime.PrismaClientRustPanicError\n  export import PrismaClientInitializationError = runtime.PrismaClientInitializationError\n  export import PrismaClientValidationError = runtime.PrismaClientValidationError\n  export import NotFoundError = runtime.NotFoundError\n\n  /**\n   * Re-export of sql-template-tag\n   */\n  export import sql = runtime.sqltag\n  export import empty = runtime.empty\n  export import join = runtime.join\n  export import raw = runtime.raw\n  export import Sql = runtime.Sql\n\n  /**\n   * Decimal.js\n   */\n  export import Decimal = runtime.Decimal\n\n  export type DecimalJsLike = runtime.DecimalJsLike\n\n  /**\n   * Metrics \n   */\n  export type Metrics = runtime.Metrics\n  export type Metric<T> = runtime.Metric<T>\n  export type MetricHistogram = runtime.MetricHistogram\n  export type MetricHistogramBucket = runtime.MetricHistogramBucket\n\n  /**\n  * Extensions\n  */\n  export import Extension = $Extensions.UserArgs\n  export import getExtensionContext = runtime.Extensions.getExtensionContext\n  export import Args = $Public.Args\n  export import Payload = $Public.Payload\n  export import Result = $Public.Result\n  export import Exact = $Public.Exact\n\n  /**\n   * Prisma Client JS version: 5.15.0\n   * Query Engine version: 12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\n   */\n  export type PrismaVersion = {\n    client: string\n  }\n\n  export const prismaVersion: PrismaVersion \n\n  /**\n   * Utility Types\n   */\n\n  /**\n   * From https://github.com/sindresorhus/type-fest/\n   * Matches a JSON object.\n   * This type can be useful to enforce some input to be JSON-compatible or as a super-type to be extended from. \n   */\n  export type JsonObject = {[Key in string]?: JsonValue}\n\n  /**\n   * From https://github.com/sindresorhus/type-fest/\n   * Matches a JSON array.\n   */\n  export interface JsonArray extends Array<JsonValue> {}\n\n  /**\n   * From https://github.com/sindresorhus/type-fest/\n   * Matches any valid JSON value.\n   */\n  export type JsonValue = string | number | boolean | JsonObject | JsonArray | null\n\n  /**\n   * Matches a JSON object.\n   * Unlike `JsonObject`, this type allows undefined and read-only properties.\n   */\n  export type InputJsonObject = {readonly [Key in string]?: InputJsonValue | null}\n\n  /**\n   * Matches a JSON array.\n   * Unlike `JsonArray`, readonly arrays are assignable to this type.\n   */\n  export interface InputJsonArray extends ReadonlyArray<InputJsonValue | null> {}\n\n  /**\n   * Matches any valid value that can be used as an input for operations like\n   * create and update as the value of a JSON field. Unlike `JsonValue`, this\n   * type allows read-only arrays and read-only object properties and disallows\n   * `null` at the top level.\n   *\n   * `null` cannot be used as the value of a JSON field because its meaning\n   * would be ambiguous. Use `Prisma.JsonNull` to store the JSON null value or\n   * `Prisma.DbNull` to clear the JSON value and set the field to the database\n   * NULL value instead.\n   *\n   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-by-null-values\n   */\n  export type InputJsonValue = string | number | boolean | InputJsonObject | InputJsonArray | { toJSON(): unknown }\n\n  /**\n   * Types of the values used to represent different kinds of `null` values when working with JSON fields.\n   * \n   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field\n   */\n  namespace NullTypes {\n    /**\n    * Type of `Prisma.DbNull`.\n    * \n    * You cannot use other instances of this class. Please use the `Prisma.DbNull` value.\n    * \n    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field\n    */\n    class DbNull {\n      private DbNull: never\n      private constructor()\n    }\n\n    /**\n    * Type of `Prisma.JsonNull`.\n    * \n    * You cannot use other instances of this class. Please use the `Prisma.JsonNull` value.\n    * \n    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field\n    */\n    class JsonNull {\n      private JsonNull: never\n      private constructor()\n    }\n\n    /**\n    * Type of `Prisma.AnyNull`.\n    * \n    * You cannot use other instances of this class. Please use the `Prisma.AnyNull` value.\n    * \n    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field\n    */\n    class AnyNull {\n      private AnyNull: never\n      private constructor()\n    }\n  }\n\n  /**\n   * Helper for filtering JSON entries that have `null` on the database (empty on the db)\n   * \n   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field\n   */\n  export const DbNull: NullTypes.DbNull\n\n  /**\n   * Helper for filtering JSON entries that have JSON `null` values (not empty on the db)\n   * \n   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field\n   */\n  export const JsonNull: NullTypes.JsonNull\n\n  /**\n   * Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull`\n   * \n   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field\n   */\n  export const AnyNull: NullTypes.AnyNull\n\n  type SelectAndInclude = {\n    select: any\n    include: any\n  }\n\n  type SelectAndOmit = {\n    select: any\n    omit: any\n  }\n\n  /**\n   * Get the type of the value, that the Promise holds.\n   */\n  export type PromiseType<T extends PromiseLike<any>> = T extends PromiseLike<infer U> ? U : T;\n\n  /**\n   * Get the return type of a function which returns a Promise.\n   */\n  export type PromiseReturnType<T extends (...args: any) => $Utils.JsPromise<any>> = PromiseType<ReturnType<T>>\n\n  /**\n   * From T, pick a set of properties whose keys are in the union K\n   */\n  type Prisma__Pick<T, K extends keyof T> = {\n      [P in K]: T[P];\n  };\n\n\n  export type Enumerable<T> = T | Array<T>;\n\n  export type RequiredKeys<T> = {\n    [K in keyof T]-?: {} extends Prisma__Pick<T, K> ? never : K\n  }[keyof T]\n\n  export type TruthyKeys<T> = keyof {\n    [K in keyof T as T[K] extends false | undefined | null ? never : K]: K\n  }\n\n  export type TrueKeys<T> = TruthyKeys<Prisma__Pick<T, RequiredKeys<T>>>\n\n  /**\n   * Subset\n   * @desc From `T` pick properties that exist in `U`. Simple version of Intersection\n   */\n  export type Subset<T, U> = {\n    [key in keyof T]: key extends keyof U ? T[key] : never;\n  };\n\n  /**\n   * SelectSubset\n   * @desc From `T` pick properties that exist in `U`. Simple version of Intersection.\n   * Additionally, it validates, if both select and include are present. If the case, it errors.\n   */\n  export type SelectSubset<T, U> = {\n    [key in keyof T]: key extends keyof U ? T[key] : never\n  } &\n    (T extends SelectAndInclude\n      ? 'Please either choose `select` or `include`.'\n      : T extends SelectAndOmit\n        ? 'Please either choose `select` or `omit`.'\n        : {})\n\n  /**\n   * Subset + Intersection\n   * @desc From `T` pick properties that exist in `U` and intersect `K`\n   */\n  export type SubsetIntersection<T, U, K> = {\n    [key in keyof T]: key extends keyof U ? T[key] : never\n  } &\n    K\n\n  type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };\n\n  /**\n   * XOR is needed to have a real mutually exclusive union type\n   * https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types\n   */\n  type XOR<T, U> =\n    T extends object ?\n    U extends object ?\n      (Without<T, U> & U) | (Without<U, T> & T)\n    : U : T\n\n\n  /**\n   * Is T a Record?\n   */\n  type IsObject<T extends any> = T extends Array<any>\n  ? False\n  : T extends Date\n  ? False\n  : T extends Uint8Array\n  ? False\n  : T extends BigInt\n  ? False\n  : T extends object\n  ? True\n  : False\n\n\n  /**\n   * If it's T[], return T\n   */\n  export type UnEnumerate<T extends unknown> = T extends Array<infer U> ? U : T\n\n  /**\n   * From ts-toolbelt\n   */\n\n  type __Either<O extends object, K extends Key> = Omit<O, K> &\n    {\n      // Merge all but K\n      [P in K]: Prisma__Pick<O, P & keyof O> // With K possibilities\n    }[K]\n\n  type EitherStrict<O extends object, K extends Key> = Strict<__Either<O, K>>\n\n  type EitherLoose<O extends object, K extends Key> = ComputeRaw<__Either<O, K>>\n\n  type _Either<\n    O extends object,\n    K extends Key,\n    strict extends Boolean\n  > = {\n    1: EitherStrict<O, K>\n    0: EitherLoose<O, K>\n  }[strict]\n\n  type Either<\n    O extends object,\n    K extends Key,\n    strict extends Boolean = 1\n  > = O extends unknown ? _Either<O, K, strict> : never\n\n  export type Union = any\n\n  type PatchUndefined<O extends object, O1 extends object> = {\n    [K in keyof O]: O[K] extends undefined ? At<O1, K> : O[K]\n  } & {}\n\n  /** Helper Types for \"Merge\" **/\n  export type IntersectOf<U extends Union> = (\n    U extends unknown ? (k: U) => void : never\n  ) extends (k: infer I) => void\n    ? I\n    : never\n\n  export type Overwrite<O extends object, O1 extends object> = {\n      [K in keyof O]: K extends keyof O1 ? O1[K] : O[K];\n  } & {};\n\n  type _Merge<U extends object> = IntersectOf<Overwrite<U, {\n      [K in keyof U]-?: At<U, K>;\n  }>>;\n\n  type Key = string | number | symbol;\n  type AtBasic<O extends object, K extends Key> = K extends keyof O ? O[K] : never;\n  type AtStrict<O extends object, K extends Key> = O[K & keyof O];\n  type AtLoose<O extends object, K extends Key> = O extends unknown ? AtStrict<O, K> : never;\n  export type At<O extends object, K extends Key, strict extends Boolean = 1> = {\n      1: AtStrict<O, K>;\n      0: AtLoose<O, K>;\n  }[strict];\n\n  export type ComputeRaw<A extends any> = A extends Function ? A : {\n    [K in keyof A]: A[K];\n  } & {};\n\n  export type OptionalFlat<O> = {\n    [K in keyof O]?: O[K];\n  } & {};\n\n  type _Record<K extends keyof any, T> = {\n    [P in K]: T;\n  };\n\n  // cause typescript not to expand types and preserve names\n  type NoExpand<T> = T extends unknown ? T : never;\n\n  // this type assumes the passed object is entirely optional\n  type AtLeast<O extends object, K extends string> = NoExpand<\n    O extends unknown\n    ? | (K extends keyof O ? { [P in K]: O[P] } & O : O)\n      | {[P in keyof O as P extends K ? K : never]-?: O[P]} & O\n    : never>;\n\n  type _Strict<U, _U = U> = U extends unknown ? U & OptionalFlat<_Record<Exclude<Keys<_U>, keyof U>, never>> : never;\n\n  export type Strict<U extends object> = ComputeRaw<_Strict<U>>;\n  /** End Helper Types for \"Merge\" **/\n\n  export type Merge<U extends object> = ComputeRaw<_Merge<Strict<U>>>;\n\n  /**\n  A [[Boolean]]\n  */\n  export type Boolean = True | False\n\n  // /**\n  // 1\n  // */\n  export type True = 1\n\n  /**\n  0\n  */\n  export type False = 0\n\n  export type Not<B extends Boolean> = {\n    0: 1\n    1: 0\n  }[B]\n\n  export type Extends<A1 extends any, A2 extends any> = [A1] extends [never]\n    ? 0 // anything `never` is false\n    : A1 extends A2\n    ? 1\n    : 0\n\n  export type Has<U extends Union, U1 extends Union> = Not<\n    Extends<Exclude<U1, U>, U1>\n  >\n\n  export type Or<B1 extends Boolean, B2 extends Boolean> = {\n    0: {\n      0: 0\n      1: 1\n    }\n    1: {\n      0: 1\n      1: 1\n    }\n  }[B1][B2]\n\n  export type Keys<U extends Union> = U extends unknown ? keyof U : never\n\n  type Cast<A, B> = A extends B ? A : B;\n\n  export const type: unique symbol;\n\n\n\n  /**\n   * Used by group by\n   */\n\n  export type GetScalarType<T, O> = O extends object ? {\n    [P in keyof T]: P extends keyof O\n      ? O[P]\n      : never\n  } : never\n\n  type FieldPaths<\n    T,\n    U = Omit<T, '_avg' | '_sum' | '_count' | '_min' | '_max'>\n  > = IsObject<T> extends True ? U : T\n\n  type GetHavingFields<T> = {\n    [K in keyof T]: Or<\n      Or<Extends<'OR', K>, Extends<'AND', K>>,\n      Extends<'NOT', K>\n    > extends True\n      ? // infer is only needed to not hit TS limit\n        // based on the brilliant idea of Pierre-Antoine Mills\n        // https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437\n        T[K] extends infer TK\n        ? GetHavingFields<UnEnumerate<TK> extends object ? Merge<UnEnumerate<TK>> : never>\n        : never\n      : {} extends FieldPaths<T[K]>\n      ? never\n      : K\n  }[keyof T]\n\n  /**\n   * Convert tuple to union\n   */\n  type _TupleToUnion<T> = T extends (infer E)[] ? E : never\n  type TupleToUnion<K extends readonly any[]> = _TupleToUnion<K>\n  type MaybeTupleToUnion<T> = T extends any[] ? TupleToUnion<T> : T\n\n  /**\n   * Like `Pick`, but additionally can also accept an array of keys\n   */\n  type PickEnumerable<T, K extends Enumerable<keyof T> | keyof T> = Prisma__Pick<T, MaybeTupleToUnion<K>>\n\n  /**\n   * Exclude all keys with underscores\n   */\n  type ExcludeUnderscoreKeys<T extends string> = T extends `_${string}` ? never : T\n\n\n  export type FieldRef<Model, FieldType> = runtime.FieldRef<Model, FieldType>\n\n  type FieldRefInputType<Model, FieldType> = Model extends never ? never : FieldRef<Model, FieldType>\n\n\n  export const ModelName: {\n    GenTable: 'GenTable',\n    GenTableColumn: 'GenTableColumn',\n    SysConfig: 'SysConfig',\n    SysDept: 'SysDept',\n    SysDictData: 'SysDictData',\n    SysDictType: 'SysDictType',\n    SysLogininfor: 'SysLogininfor',\n    SysMenu: 'SysMenu',\n    SysNotice: 'SysNotice',\n    SysPost: 'SysPost',\n    SysUserPost: 'SysUserPost',\n    SysRoleDept: 'SysRoleDept',\n    SysRoleMenu: 'SysRoleMenu',\n    SysUser: 'SysUser',\n    SysRole: 'SysRole',\n    SysUserRole: 'SysUserRole'\n  };\n\n  export type ModelName = (typeof ModelName)[keyof typeof ModelName]\n\n\n  export type Datasources = {\n    db?: Datasource\n  }\n\n\n  interface TypeMapCb extends $Utils.Fn<{extArgs: $Extensions.InternalArgs}, $Utils.Record<string, any>> {\n    returns: Prisma.TypeMap<this['params']['extArgs']>\n  }\n\n  export type TypeMap<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    meta: {\n      modelProps: 'genTable' | 'genTableColumn' | 'sysConfig' | 'sysDept' | 'sysDictData' | 'sysDictType' | 'sysLogininfor' | 'sysMenu' | 'sysNotice' | 'sysPost' | 'sysUserPost' | 'sysRoleDept' | 'sysRoleMenu' | 'sysUser' | 'sysRole' | 'sysUserRole'\n      txIsolationLevel: Prisma.TransactionIsolationLevel\n    },\n    model: {\n      GenTable: {\n        payload: Prisma.$GenTablePayload<ExtArgs>\n        fields: Prisma.GenTableFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.GenTableFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTablePayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.GenTableFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTablePayload>\n          }\n          findFirst: {\n            args: Prisma.GenTableFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTablePayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.GenTableFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTablePayload>\n          }\n          findMany: {\n            args: Prisma.GenTableFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTablePayload>[]\n          }\n          create: {\n            args: Prisma.GenTableCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTablePayload>\n          }\n          createMany: {\n            args: Prisma.GenTableCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.GenTableDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTablePayload>\n          }\n          update: {\n            args: Prisma.GenTableUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTablePayload>\n          }\n          deleteMany: {\n            args: Prisma.GenTableDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.GenTableUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.GenTableUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTablePayload>\n          }\n          aggregate: {\n            args: Prisma.GenTableAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateGenTable>\n          }\n          groupBy: {\n            args: Prisma.GenTableGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<GenTableGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.GenTableCountArgs<ExtArgs>,\n            result: $Utils.Optional<GenTableCountAggregateOutputType> | number\n          }\n        }\n      }\n      GenTableColumn: {\n        payload: Prisma.$GenTableColumnPayload<ExtArgs>\n        fields: Prisma.GenTableColumnFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.GenTableColumnFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTableColumnPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.GenTableColumnFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTableColumnPayload>\n          }\n          findFirst: {\n            args: Prisma.GenTableColumnFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTableColumnPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.GenTableColumnFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTableColumnPayload>\n          }\n          findMany: {\n            args: Prisma.GenTableColumnFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTableColumnPayload>[]\n          }\n          create: {\n            args: Prisma.GenTableColumnCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTableColumnPayload>\n          }\n          createMany: {\n            args: Prisma.GenTableColumnCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.GenTableColumnDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTableColumnPayload>\n          }\n          update: {\n            args: Prisma.GenTableColumnUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTableColumnPayload>\n          }\n          deleteMany: {\n            args: Prisma.GenTableColumnDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.GenTableColumnUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.GenTableColumnUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$GenTableColumnPayload>\n          }\n          aggregate: {\n            args: Prisma.GenTableColumnAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateGenTableColumn>\n          }\n          groupBy: {\n            args: Prisma.GenTableColumnGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<GenTableColumnGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.GenTableColumnCountArgs<ExtArgs>,\n            result: $Utils.Optional<GenTableColumnCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysConfig: {\n        payload: Prisma.$SysConfigPayload<ExtArgs>\n        fields: Prisma.SysConfigFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysConfigFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysConfigPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysConfigFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysConfigPayload>\n          }\n          findFirst: {\n            args: Prisma.SysConfigFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysConfigPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysConfigFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysConfigPayload>\n          }\n          findMany: {\n            args: Prisma.SysConfigFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysConfigPayload>[]\n          }\n          create: {\n            args: Prisma.SysConfigCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysConfigPayload>\n          }\n          createMany: {\n            args: Prisma.SysConfigCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysConfigDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysConfigPayload>\n          }\n          update: {\n            args: Prisma.SysConfigUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysConfigPayload>\n          }\n          deleteMany: {\n            args: Prisma.SysConfigDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysConfigUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysConfigUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysConfigPayload>\n          }\n          aggregate: {\n            args: Prisma.SysConfigAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysConfig>\n          }\n          groupBy: {\n            args: Prisma.SysConfigGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysConfigGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysConfigCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysConfigCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysDept: {\n        payload: Prisma.$SysDeptPayload<ExtArgs>\n        fields: Prisma.SysDeptFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysDeptFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDeptPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysDeptFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDeptPayload>\n          }\n          findFirst: {\n            args: Prisma.SysDeptFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDeptPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysDeptFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDeptPayload>\n          }\n          findMany: {\n            args: Prisma.SysDeptFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDeptPayload>[]\n          }\n          create: {\n            args: Prisma.SysDeptCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDeptPayload>\n          }\n          createMany: {\n            args: Prisma.SysDeptCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysDeptDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDeptPayload>\n          }\n          update: {\n            args: Prisma.SysDeptUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDeptPayload>\n          }\n          deleteMany: {\n            args: Prisma.SysDeptDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysDeptUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysDeptUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDeptPayload>\n          }\n          aggregate: {\n            args: Prisma.SysDeptAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysDept>\n          }\n          groupBy: {\n            args: Prisma.SysDeptGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysDeptGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysDeptCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysDeptCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysDictData: {\n        payload: Prisma.$SysDictDataPayload<ExtArgs>\n        fields: Prisma.SysDictDataFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysDictDataFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictDataPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysDictDataFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictDataPayload>\n          }\n          findFirst: {\n            args: Prisma.SysDictDataFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictDataPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysDictDataFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictDataPayload>\n          }\n          findMany: {\n            args: Prisma.SysDictDataFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictDataPayload>[]\n          }\n          create: {\n            args: Prisma.SysDictDataCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictDataPayload>\n          }\n          createMany: {\n            args: Prisma.SysDictDataCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysDictDataDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictDataPayload>\n          }\n          update: {\n            args: Prisma.SysDictDataUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictDataPayload>\n          }\n          deleteMany: {\n            args: Prisma.SysDictDataDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysDictDataUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysDictDataUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictDataPayload>\n          }\n          aggregate: {\n            args: Prisma.SysDictDataAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysDictData>\n          }\n          groupBy: {\n            args: Prisma.SysDictDataGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysDictDataGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysDictDataCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysDictDataCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysDictType: {\n        payload: Prisma.$SysDictTypePayload<ExtArgs>\n        fields: Prisma.SysDictTypeFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysDictTypeFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictTypePayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysDictTypeFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictTypePayload>\n          }\n          findFirst: {\n            args: Prisma.SysDictTypeFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictTypePayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysDictTypeFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictTypePayload>\n          }\n          findMany: {\n            args: Prisma.SysDictTypeFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictTypePayload>[]\n          }\n          create: {\n            args: Prisma.SysDictTypeCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictTypePayload>\n          }\n          createMany: {\n            args: Prisma.SysDictTypeCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysDictTypeDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictTypePayload>\n          }\n          update: {\n            args: Prisma.SysDictTypeUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictTypePayload>\n          }\n          deleteMany: {\n            args: Prisma.SysDictTypeDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysDictTypeUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysDictTypeUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysDictTypePayload>\n          }\n          aggregate: {\n            args: Prisma.SysDictTypeAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysDictType>\n          }\n          groupBy: {\n            args: Prisma.SysDictTypeGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysDictTypeGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysDictTypeCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysDictTypeCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysLogininfor: {\n        payload: Prisma.$SysLogininforPayload<ExtArgs>\n        fields: Prisma.SysLogininforFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysLogininforFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysLogininforPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysLogininforFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysLogininforPayload>\n          }\n          findFirst: {\n            args: Prisma.SysLogininforFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysLogininforPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysLogininforFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysLogininforPayload>\n          }\n          findMany: {\n            args: Prisma.SysLogininforFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysLogininforPayload>[]\n          }\n          create: {\n            args: Prisma.SysLogininforCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysLogininforPayload>\n          }\n          createMany: {\n            args: Prisma.SysLogininforCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysLogininforDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysLogininforPayload>\n          }\n          update: {\n            args: Prisma.SysLogininforUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysLogininforPayload>\n          }\n          deleteMany: {\n            args: Prisma.SysLogininforDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysLogininforUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysLogininforUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysLogininforPayload>\n          }\n          aggregate: {\n            args: Prisma.SysLogininforAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysLogininfor>\n          }\n          groupBy: {\n            args: Prisma.SysLogininforGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysLogininforGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysLogininforCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysLogininforCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysMenu: {\n        payload: Prisma.$SysMenuPayload<ExtArgs>\n        fields: Prisma.SysMenuFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysMenuFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysMenuPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysMenuFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysMenuPayload>\n          }\n          findFirst: {\n            args: Prisma.SysMenuFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysMenuPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysMenuFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysMenuPayload>\n          }\n          findMany: {\n            args: Prisma.SysMenuFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysMenuPayload>[]\n          }\n          create: {\n            args: Prisma.SysMenuCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysMenuPayload>\n          }\n          createMany: {\n            args: Prisma.SysMenuCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysMenuDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysMenuPayload>\n          }\n          update: {\n            args: Prisma.SysMenuUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysMenuPayload>\n          }\n          deleteMany: {\n            args: Prisma.SysMenuDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysMenuUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysMenuUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysMenuPayload>\n          }\n          aggregate: {\n            args: Prisma.SysMenuAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysMenu>\n          }\n          groupBy: {\n            args: Prisma.SysMenuGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysMenuGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysMenuCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysMenuCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysNotice: {\n        payload: Prisma.$SysNoticePayload<ExtArgs>\n        fields: Prisma.SysNoticeFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysNoticeFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysNoticePayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysNoticeFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysNoticePayload>\n          }\n          findFirst: {\n            args: Prisma.SysNoticeFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysNoticePayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysNoticeFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysNoticePayload>\n          }\n          findMany: {\n            args: Prisma.SysNoticeFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysNoticePayload>[]\n          }\n          create: {\n            args: Prisma.SysNoticeCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysNoticePayload>\n          }\n          createMany: {\n            args: Prisma.SysNoticeCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysNoticeDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysNoticePayload>\n          }\n          update: {\n            args: Prisma.SysNoticeUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysNoticePayload>\n          }\n          deleteMany: {\n            args: Prisma.SysNoticeDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysNoticeUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysNoticeUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysNoticePayload>\n          }\n          aggregate: {\n            args: Prisma.SysNoticeAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysNotice>\n          }\n          groupBy: {\n            args: Prisma.SysNoticeGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysNoticeGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysNoticeCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysNoticeCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysPost: {\n        payload: Prisma.$SysPostPayload<ExtArgs>\n        fields: Prisma.SysPostFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysPostFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysPostPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysPostFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysPostPayload>\n          }\n          findFirst: {\n            args: Prisma.SysPostFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysPostPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysPostFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysPostPayload>\n          }\n          findMany: {\n            args: Prisma.SysPostFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysPostPayload>[]\n          }\n          create: {\n            args: Prisma.SysPostCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysPostPayload>\n          }\n          createMany: {\n            args: Prisma.SysPostCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysPostDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysPostPayload>\n          }\n          update: {\n            args: Prisma.SysPostUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysPostPayload>\n          }\n          deleteMany: {\n            args: Prisma.SysPostDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysPostUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysPostUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysPostPayload>\n          }\n          aggregate: {\n            args: Prisma.SysPostAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysPost>\n          }\n          groupBy: {\n            args: Prisma.SysPostGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysPostGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysPostCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysPostCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysUserPost: {\n        payload: Prisma.$SysUserPostPayload<ExtArgs>\n        fields: Prisma.SysUserPostFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysUserPostFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPostPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysUserPostFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPostPayload>\n          }\n          findFirst: {\n            args: Prisma.SysUserPostFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPostPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysUserPostFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPostPayload>\n          }\n          findMany: {\n            args: Prisma.SysUserPostFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPostPayload>[]\n          }\n          create: {\n            args: Prisma.SysUserPostCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPostPayload>\n          }\n          createMany: {\n            args: Prisma.SysUserPostCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysUserPostDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPostPayload>\n          }\n          update: {\n            args: Prisma.SysUserPostUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPostPayload>\n          }\n          deleteMany: {\n            args: Prisma.SysUserPostDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysUserPostUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysUserPostUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPostPayload>\n          }\n          aggregate: {\n            args: Prisma.SysUserPostAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysUserPost>\n          }\n          groupBy: {\n            args: Prisma.SysUserPostGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysUserPostGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysUserPostCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysUserPostCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysRoleDept: {\n        payload: Prisma.$SysRoleDeptPayload<ExtArgs>\n        fields: Prisma.SysRoleDeptFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysRoleDeptFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleDeptPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysRoleDeptFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleDeptPayload>\n          }\n          findFirst: {\n            args: Prisma.SysRoleDeptFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleDeptPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysRoleDeptFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleDeptPayload>\n          }\n          findMany: {\n            args: Prisma.SysRoleDeptFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleDeptPayload>[]\n          }\n          create: {\n            args: Prisma.SysRoleDeptCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleDeptPayload>\n          }\n          createMany: {\n            args: Prisma.SysRoleDeptCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysRoleDeptDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleDeptPayload>\n          }\n          update: {\n            args: Prisma.SysRoleDeptUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleDeptPayload>\n          }\n          deleteMany: {\n            args: Prisma.SysRoleDeptDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysRoleDeptUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysRoleDeptUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleDeptPayload>\n          }\n          aggregate: {\n            args: Prisma.SysRoleDeptAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysRoleDept>\n          }\n          groupBy: {\n            args: Prisma.SysRoleDeptGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysRoleDeptGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysRoleDeptCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysRoleDeptCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysRoleMenu: {\n        payload: Prisma.$SysRoleMenuPayload<ExtArgs>\n        fields: Prisma.SysRoleMenuFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysRoleMenuFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleMenuPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysRoleMenuFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleMenuPayload>\n          }\n          findFirst: {\n            args: Prisma.SysRoleMenuFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleMenuPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysRoleMenuFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleMenuPayload>\n          }\n          findMany: {\n            args: Prisma.SysRoleMenuFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleMenuPayload>[]\n          }\n          create: {\n            args: Prisma.SysRoleMenuCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleMenuPayload>\n          }\n          createMany: {\n            args: Prisma.SysRoleMenuCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysRoleMenuDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleMenuPayload>\n          }\n          update: {\n            args: Prisma.SysRoleMenuUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleMenuPayload>\n          }\n          deleteMany: {\n            args: Prisma.SysRoleMenuDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysRoleMenuUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysRoleMenuUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRoleMenuPayload>\n          }\n          aggregate: {\n            args: Prisma.SysRoleMenuAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysRoleMenu>\n          }\n          groupBy: {\n            args: Prisma.SysRoleMenuGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysRoleMenuGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysRoleMenuCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysRoleMenuCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysUser: {\n        payload: Prisma.$SysUserPayload<ExtArgs>\n        fields: Prisma.SysUserFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysUserFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysUserFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPayload>\n          }\n          findFirst: {\n            args: Prisma.SysUserFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysUserFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPayload>\n          }\n          findMany: {\n            args: Prisma.SysUserFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPayload>[]\n          }\n          create: {\n            args: Prisma.SysUserCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPayload>\n          }\n          createMany: {\n            args: Prisma.SysUserCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysUserDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPayload>\n          }\n          update: {\n            args: Prisma.SysUserUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPayload>\n          }\n          deleteMany: {\n            args: Prisma.SysUserDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysUserUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysUserUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserPayload>\n          }\n          aggregate: {\n            args: Prisma.SysUserAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysUser>\n          }\n          groupBy: {\n            args: Prisma.SysUserGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysUserGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysUserCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysUserCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysRole: {\n        payload: Prisma.$SysRolePayload<ExtArgs>\n        fields: Prisma.SysRoleFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysRoleFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRolePayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysRoleFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRolePayload>\n          }\n          findFirst: {\n            args: Prisma.SysRoleFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRolePayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysRoleFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRolePayload>\n          }\n          findMany: {\n            args: Prisma.SysRoleFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRolePayload>[]\n          }\n          create: {\n            args: Prisma.SysRoleCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRolePayload>\n          }\n          createMany: {\n            args: Prisma.SysRoleCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysRoleDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRolePayload>\n          }\n          update: {\n            args: Prisma.SysRoleUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRolePayload>\n          }\n          deleteMany: {\n            args: Prisma.SysRoleDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysRoleUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysRoleUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysRolePayload>\n          }\n          aggregate: {\n            args: Prisma.SysRoleAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysRole>\n          }\n          groupBy: {\n            args: Prisma.SysRoleGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysRoleGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysRoleCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysRoleCountAggregateOutputType> | number\n          }\n        }\n      }\n      SysUserRole: {\n        payload: Prisma.$SysUserRolePayload<ExtArgs>\n        fields: Prisma.SysUserRoleFieldRefs\n        operations: {\n          findUnique: {\n            args: Prisma.SysUserRoleFindUniqueArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserRolePayload> | null\n          }\n          findUniqueOrThrow: {\n            args: Prisma.SysUserRoleFindUniqueOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserRolePayload>\n          }\n          findFirst: {\n            args: Prisma.SysUserRoleFindFirstArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserRolePayload> | null\n          }\n          findFirstOrThrow: {\n            args: Prisma.SysUserRoleFindFirstOrThrowArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserRolePayload>\n          }\n          findMany: {\n            args: Prisma.SysUserRoleFindManyArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserRolePayload>[]\n          }\n          create: {\n            args: Prisma.SysUserRoleCreateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserRolePayload>\n          }\n          createMany: {\n            args: Prisma.SysUserRoleCreateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          delete: {\n            args: Prisma.SysUserRoleDeleteArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserRolePayload>\n          }\n          update: {\n            args: Prisma.SysUserRoleUpdateArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserRolePayload>\n          }\n          deleteMany: {\n            args: Prisma.SysUserRoleDeleteManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          updateMany: {\n            args: Prisma.SysUserRoleUpdateManyArgs<ExtArgs>,\n            result: Prisma.BatchPayload\n          }\n          upsert: {\n            args: Prisma.SysUserRoleUpsertArgs<ExtArgs>,\n            result: $Utils.PayloadToResult<Prisma.$SysUserRolePayload>\n          }\n          aggregate: {\n            args: Prisma.SysUserRoleAggregateArgs<ExtArgs>,\n            result: $Utils.Optional<AggregateSysUserRole>\n          }\n          groupBy: {\n            args: Prisma.SysUserRoleGroupByArgs<ExtArgs>,\n            result: $Utils.Optional<SysUserRoleGroupByOutputType>[]\n          }\n          count: {\n            args: Prisma.SysUserRoleCountArgs<ExtArgs>,\n            result: $Utils.Optional<SysUserRoleCountAggregateOutputType> | number\n          }\n        }\n      }\n    }\n  } & {\n    other: {\n      payload: any\n      operations: {\n        $executeRawUnsafe: {\n          args: [query: string, ...values: any[]],\n          result: any\n        }\n        $executeRaw: {\n          args: [query: TemplateStringsArray | Prisma.Sql, ...values: any[]],\n          result: any\n        }\n        $queryRawUnsafe: {\n          args: [query: string, ...values: any[]],\n          result: any\n        }\n        $queryRaw: {\n          args: [query: TemplateStringsArray | Prisma.Sql, ...values: any[]],\n          result: any\n        }\n      }\n    }\n  }\n  export const defineExtension: $Extensions.ExtendsHook<'define', Prisma.TypeMapCb, $Extensions.DefaultArgs>\n  export type DefaultPrismaClient = PrismaClient\n  export type ErrorFormat = 'pretty' | 'colorless' | 'minimal'\n  export interface PrismaClientOptions {\n    /**\n     * Overwrites the datasource url from your schema.prisma file\n     */\n    datasources?: Datasources\n    /**\n     * Overwrites the datasource url from your schema.prisma file\n     */\n    datasourceUrl?: string\n    /**\n     * @default \"colorless\"\n     */\n    errorFormat?: ErrorFormat\n    /**\n     * @example\n     * ```\n     * // Defaults to stdout\n     * log: ['query', 'info', 'warn', 'error']\n     * \n     * // Emit as events\n     * log: [\n     *   { emit: 'stdout', level: 'query' },\n     *   { emit: 'stdout', level: 'info' },\n     *   { emit: 'stdout', level: 'warn' }\n     *   { emit: 'stdout', level: 'error' }\n     * ]\n     * ```\n     * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/logging#the-log-option).\n     */\n    log?: (LogLevel | LogDefinition)[]\n    /**\n     * The default values for transactionOptions\n     * maxWait ?= 2000\n     * timeout ?= 5000\n     */\n    transactionOptions?: {\n      maxWait?: number\n      timeout?: number\n      isolationLevel?: Prisma.TransactionIsolationLevel\n    }\n  }\n\n  /* Types for Logging */\n  export type LogLevel = 'info' | 'query' | 'warn' | 'error'\n  export type LogDefinition = {\n    level: LogLevel\n    emit: 'stdout' | 'event'\n  }\n\n  export type GetLogType<T extends LogLevel | LogDefinition> = T extends LogDefinition ? T['emit'] extends 'event' ? T['level'] : never : never\n  export type GetEvents<T extends any> = T extends Array<LogLevel | LogDefinition> ?\n    GetLogType<T[0]> | GetLogType<T[1]> | GetLogType<T[2]> | GetLogType<T[3]>\n    : never\n\n  export type QueryEvent = {\n    timestamp: Date\n    query: string\n    params: string\n    duration: number\n    target: string\n  }\n\n  export type LogEvent = {\n    timestamp: Date\n    message: string\n    target: string\n  }\n  /* End Types for Logging */\n\n\n  export type PrismaAction =\n    | 'findUnique'\n    | 'findUniqueOrThrow'\n    | 'findMany'\n    | 'findFirst'\n    | 'findFirstOrThrow'\n    | 'create'\n    | 'createMany'\n    | 'createManyAndReturn'\n    | 'update'\n    | 'updateMany'\n    | 'upsert'\n    | 'delete'\n    | 'deleteMany'\n    | 'executeRaw'\n    | 'queryRaw'\n    | 'aggregate'\n    | 'count'\n    | 'runCommandRaw'\n    | 'findRaw'\n    | 'groupBy'\n\n  /**\n   * These options are being passed into the middleware as \"params\"\n   */\n  export type MiddlewareParams = {\n    model?: ModelName\n    action: PrismaAction\n    args: any\n    dataPath: string[]\n    runInTransaction: boolean\n  }\n\n  /**\n   * The `T` type makes sure, that the `return proceed` is not forgotten in the middleware implementation\n   */\n  export type Middleware<T = any> = (\n    params: MiddlewareParams,\n    next: (params: MiddlewareParams) => $Utils.JsPromise<T>,\n  ) => $Utils.JsPromise<T>\n\n  // tested in getLogLevel.test.ts\n  export function getLogLevel(log: Array<LogLevel | LogDefinition>): LogLevel | undefined;\n\n  /**\n   * `PrismaClient` proxy available in interactive transactions.\n   */\n  export type TransactionClient = Omit<Prisma.DefaultPrismaClient, runtime.ITXClientDenyList>\n\n  export type Datasource = {\n    url?: string\n  }\n\n  /**\n   * Count Types\n   */\n\n\n  /**\n   * Count Type GenTableCountOutputType\n   */\n\n  export type GenTableCountOutputType = {\n    tableColumns: number\n  }\n\n  export type GenTableCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    tableColumns?: boolean | GenTableCountOutputTypeCountTableColumnsArgs\n  }\n\n  // Custom InputTypes\n  /**\n   * GenTableCountOutputType without action\n   */\n  export type GenTableCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableCountOutputType\n     */\n    select?: GenTableCountOutputTypeSelect<ExtArgs> | null\n  }\n\n  /**\n   * GenTableCountOutputType without action\n   */\n  export type GenTableCountOutputTypeCountTableColumnsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: GenTableColumnWhereInput\n  }\n\n\n  /**\n   * Count Type SysDeptCountOutputType\n   */\n\n  export type SysDeptCountOutputType = {\n    users: number\n    roles: number\n  }\n\n  export type SysDeptCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    users?: boolean | SysDeptCountOutputTypeCountUsersArgs\n    roles?: boolean | SysDeptCountOutputTypeCountRolesArgs\n  }\n\n  // Custom InputTypes\n  /**\n   * SysDeptCountOutputType without action\n   */\n  export type SysDeptCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDeptCountOutputType\n     */\n    select?: SysDeptCountOutputTypeSelect<ExtArgs> | null\n  }\n\n  /**\n   * SysDeptCountOutputType without action\n   */\n  export type SysDeptCountOutputTypeCountUsersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysUserWhereInput\n  }\n\n  /**\n   * SysDeptCountOutputType without action\n   */\n  export type SysDeptCountOutputTypeCountRolesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysRoleDeptWhereInput\n  }\n\n\n  /**\n   * Count Type SysDictTypeCountOutputType\n   */\n\n  export type SysDictTypeCountOutputType = {\n    dictDatas: number\n  }\n\n  export type SysDictTypeCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    dictDatas?: boolean | SysDictTypeCountOutputTypeCountDictDatasArgs\n  }\n\n  // Custom InputTypes\n  /**\n   * SysDictTypeCountOutputType without action\n   */\n  export type SysDictTypeCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictTypeCountOutputType\n     */\n    select?: SysDictTypeCountOutputTypeSelect<ExtArgs> | null\n  }\n\n  /**\n   * SysDictTypeCountOutputType without action\n   */\n  export type SysDictTypeCountOutputTypeCountDictDatasArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysDictDataWhereInput\n  }\n\n\n  /**\n   * Count Type SysMenuCountOutputType\n   */\n\n  export type SysMenuCountOutputType = {\n    roles: number\n  }\n\n  export type SysMenuCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    roles?: boolean | SysMenuCountOutputTypeCountRolesArgs\n  }\n\n  // Custom InputTypes\n  /**\n   * SysMenuCountOutputType without action\n   */\n  export type SysMenuCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenuCountOutputType\n     */\n    select?: SysMenuCountOutputTypeSelect<ExtArgs> | null\n  }\n\n  /**\n   * SysMenuCountOutputType without action\n   */\n  export type SysMenuCountOutputTypeCountRolesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysRoleMenuWhereInput\n  }\n\n\n  /**\n   * Count Type SysPostCountOutputType\n   */\n\n  export type SysPostCountOutputType = {\n    users: number\n  }\n\n  export type SysPostCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    users?: boolean | SysPostCountOutputTypeCountUsersArgs\n  }\n\n  // Custom InputTypes\n  /**\n   * SysPostCountOutputType without action\n   */\n  export type SysPostCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPostCountOutputType\n     */\n    select?: SysPostCountOutputTypeSelect<ExtArgs> | null\n  }\n\n  /**\n   * SysPostCountOutputType without action\n   */\n  export type SysPostCountOutputTypeCountUsersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysUserPostWhereInput\n  }\n\n\n  /**\n   * Count Type SysUserCountOutputType\n   */\n\n  export type SysUserCountOutputType = {\n    roles: number\n    posts: number\n  }\n\n  export type SysUserCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    roles?: boolean | SysUserCountOutputTypeCountRolesArgs\n    posts?: boolean | SysUserCountOutputTypeCountPostsArgs\n  }\n\n  // Custom InputTypes\n  /**\n   * SysUserCountOutputType without action\n   */\n  export type SysUserCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserCountOutputType\n     */\n    select?: SysUserCountOutputTypeSelect<ExtArgs> | null\n  }\n\n  /**\n   * SysUserCountOutputType without action\n   */\n  export type SysUserCountOutputTypeCountRolesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysUserRoleWhereInput\n  }\n\n  /**\n   * SysUserCountOutputType without action\n   */\n  export type SysUserCountOutputTypeCountPostsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysUserPostWhereInput\n  }\n\n\n  /**\n   * Count Type SysRoleCountOutputType\n   */\n\n  export type SysRoleCountOutputType = {\n    users: number\n    menus: number\n    depts: number\n  }\n\n  export type SysRoleCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    users?: boolean | SysRoleCountOutputTypeCountUsersArgs\n    menus?: boolean | SysRoleCountOutputTypeCountMenusArgs\n    depts?: boolean | SysRoleCountOutputTypeCountDeptsArgs\n  }\n\n  // Custom InputTypes\n  /**\n   * SysRoleCountOutputType without action\n   */\n  export type SysRoleCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleCountOutputType\n     */\n    select?: SysRoleCountOutputTypeSelect<ExtArgs> | null\n  }\n\n  /**\n   * SysRoleCountOutputType without action\n   */\n  export type SysRoleCountOutputTypeCountUsersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysUserRoleWhereInput\n  }\n\n  /**\n   * SysRoleCountOutputType without action\n   */\n  export type SysRoleCountOutputTypeCountMenusArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysRoleMenuWhereInput\n  }\n\n  /**\n   * SysRoleCountOutputType without action\n   */\n  export type SysRoleCountOutputTypeCountDeptsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysRoleDeptWhereInput\n  }\n\n\n  /**\n   * Models\n   */\n\n  /**\n   * Model GenTable\n   */\n\n  export type AggregateGenTable = {\n    _count: GenTableCountAggregateOutputType | null\n    _avg: GenTableAvgAggregateOutputType | null\n    _sum: GenTableSumAggregateOutputType | null\n    _min: GenTableMinAggregateOutputType | null\n    _max: GenTableMaxAggregateOutputType | null\n  }\n\n  export type GenTableAvgAggregateOutputType = {\n    tableId: number | null\n  }\n\n  export type GenTableSumAggregateOutputType = {\n    tableId: number | null\n  }\n\n  export type GenTableMinAggregateOutputType = {\n    tableId: number | null\n    tableName: string | null\n    tableComment: string | null\n    subTableName: string | null\n    subTableFkName: string | null\n    className: string | null\n    tplCategory: string | null\n    tplWebType: string | null\n    packageName: string | null\n    moduleName: string | null\n    businessName: string | null\n    functionName: string | null\n    functionAuthor: string | null\n    genType: string | null\n    genPath: string | null\n    options: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type GenTableMaxAggregateOutputType = {\n    tableId: number | null\n    tableName: string | null\n    tableComment: string | null\n    subTableName: string | null\n    subTableFkName: string | null\n    className: string | null\n    tplCategory: string | null\n    tplWebType: string | null\n    packageName: string | null\n    moduleName: string | null\n    businessName: string | null\n    functionName: string | null\n    functionAuthor: string | null\n    genType: string | null\n    genPath: string | null\n    options: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type GenTableCountAggregateOutputType = {\n    tableId: number\n    tableName: number\n    tableComment: number\n    subTableName: number\n    subTableFkName: number\n    className: number\n    tplCategory: number\n    tplWebType: number\n    packageName: number\n    moduleName: number\n    businessName: number\n    functionName: number\n    functionAuthor: number\n    genType: number\n    genPath: number\n    options: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    remark: number\n    _all: number\n  }\n\n\n  export type GenTableAvgAggregateInputType = {\n    tableId?: true\n  }\n\n  export type GenTableSumAggregateInputType = {\n    tableId?: true\n  }\n\n  export type GenTableMinAggregateInputType = {\n    tableId?: true\n    tableName?: true\n    tableComment?: true\n    subTableName?: true\n    subTableFkName?: true\n    className?: true\n    tplCategory?: true\n    tplWebType?: true\n    packageName?: true\n    moduleName?: true\n    businessName?: true\n    functionName?: true\n    functionAuthor?: true\n    genType?: true\n    genPath?: true\n    options?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type GenTableMaxAggregateInputType = {\n    tableId?: true\n    tableName?: true\n    tableComment?: true\n    subTableName?: true\n    subTableFkName?: true\n    className?: true\n    tplCategory?: true\n    tplWebType?: true\n    packageName?: true\n    moduleName?: true\n    businessName?: true\n    functionName?: true\n    functionAuthor?: true\n    genType?: true\n    genPath?: true\n    options?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type GenTableCountAggregateInputType = {\n    tableId?: true\n    tableName?: true\n    tableComment?: true\n    subTableName?: true\n    subTableFkName?: true\n    className?: true\n    tplCategory?: true\n    tplWebType?: true\n    packageName?: true\n    moduleName?: true\n    businessName?: true\n    functionName?: true\n    functionAuthor?: true\n    genType?: true\n    genPath?: true\n    options?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n    _all?: true\n  }\n\n  export type GenTableAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which GenTable to aggregate.\n     */\n    where?: GenTableWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of GenTables to fetch.\n     */\n    orderBy?: GenTableOrderByWithRelationInput | GenTableOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: GenTableWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` GenTables from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` GenTables.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned GenTables\n    **/\n    _count?: true | GenTableCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: GenTableAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: GenTableSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: GenTableMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: GenTableMaxAggregateInputType\n  }\n\n  export type GetGenTableAggregateType<T extends GenTableAggregateArgs> = {\n        [P in keyof T & keyof AggregateGenTable]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateGenTable[P]>\n      : GetScalarType<T[P], AggregateGenTable[P]>\n  }\n\n\n\n\n  export type GenTableGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: GenTableWhereInput\n    orderBy?: GenTableOrderByWithAggregationInput | GenTableOrderByWithAggregationInput[]\n    by: GenTableScalarFieldEnum[] | GenTableScalarFieldEnum\n    having?: GenTableScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: GenTableCountAggregateInputType | true\n    _avg?: GenTableAvgAggregateInputType\n    _sum?: GenTableSumAggregateInputType\n    _min?: GenTableMinAggregateInputType\n    _max?: GenTableMaxAggregateInputType\n  }\n\n  export type GenTableGroupByOutputType = {\n    tableId: number\n    tableName: string | null\n    tableComment: string | null\n    subTableName: string | null\n    subTableFkName: string | null\n    className: string | null\n    tplCategory: string | null\n    tplWebType: string | null\n    packageName: string | null\n    moduleName: string | null\n    businessName: string | null\n    functionName: string | null\n    functionAuthor: string | null\n    genType: string | null\n    genPath: string | null\n    options: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n    _count: GenTableCountAggregateOutputType | null\n    _avg: GenTableAvgAggregateOutputType | null\n    _sum: GenTableSumAggregateOutputType | null\n    _min: GenTableMinAggregateOutputType | null\n    _max: GenTableMaxAggregateOutputType | null\n  }\n\n  type GetGenTableGroupByPayload<T extends GenTableGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<GenTableGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof GenTableGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], GenTableGroupByOutputType[P]>\n            : GetScalarType<T[P], GenTableGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type GenTableSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    tableId?: boolean\n    tableName?: boolean\n    tableComment?: boolean\n    subTableName?: boolean\n    subTableFkName?: boolean\n    className?: boolean\n    tplCategory?: boolean\n    tplWebType?: boolean\n    packageName?: boolean\n    moduleName?: boolean\n    businessName?: boolean\n    functionName?: boolean\n    functionAuthor?: boolean\n    genType?: boolean\n    genPath?: boolean\n    options?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n    tableColumns?: boolean | GenTable$tableColumnsArgs<ExtArgs>\n    _count?: boolean | GenTableCountOutputTypeDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"genTable\"]>\n\n\n  export type GenTableSelectScalar = {\n    tableId?: boolean\n    tableName?: boolean\n    tableComment?: boolean\n    subTableName?: boolean\n    subTableFkName?: boolean\n    className?: boolean\n    tplCategory?: boolean\n    tplWebType?: boolean\n    packageName?: boolean\n    moduleName?: boolean\n    businessName?: boolean\n    functionName?: boolean\n    functionAuthor?: boolean\n    genType?: boolean\n    genPath?: boolean\n    options?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }\n\n  export type GenTableOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"tableId\" | \"tableName\" | \"tableComment\" | \"subTableName\" | \"subTableFkName\" | \"className\" | \"tplCategory\" | \"tplWebType\" | \"packageName\" | \"moduleName\" | \"businessName\" | \"functionName\" | \"functionAuthor\" | \"genType\" | \"genPath\" | \"options\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\" | \"remark\", ExtArgs[\"result\"][\"genTable\"]>\n  export type GenTableInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    tableColumns?: boolean | GenTable$tableColumnsArgs<ExtArgs>\n    _count?: boolean | GenTableCountOutputTypeDefaultArgs<ExtArgs>\n  }\n\n  export type $GenTablePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"GenTable\"\n    objects: {\n      tableColumns: Prisma.$GenTableColumnPayload<ExtArgs>[]\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      tableId: number\n      tableName: string | null\n      tableComment: string | null\n      subTableName: string | null\n      subTableFkName: string | null\n      className: string | null\n      tplCategory: string | null\n      tplWebType: string | null\n      packageName: string | null\n      moduleName: string | null\n      businessName: string | null\n      functionName: string | null\n      functionAuthor: string | null\n      genType: string | null\n      genPath: string | null\n      options: string | null\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n      remark: string | null\n    }, ExtArgs[\"result\"][\"genTable\"]>\n    composites: {}\n  }\n\n  type GenTableGetPayload<S extends boolean | null | undefined | GenTableDefaultArgs> = $Result.GetResult<Prisma.$GenTablePayload, S>\n\n  type GenTableCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<GenTableFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: GenTableCountAggregateInputType | true\n    }\n\n  export interface GenTableDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['GenTable'], meta: { name: 'GenTable' } }\n    /**\n     * Find zero or one GenTable that matches the filter.\n     * @param {GenTableFindUniqueArgs} args - Arguments to find a GenTable\n     * @example\n     * // Get one GenTable\n     * const genTable = await prisma.genTable.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends GenTableFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableFindUniqueArgs<ExtArgs>>\n    ): Prisma__GenTableClient<$Result.GetResult<Prisma.$GenTablePayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one GenTable that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {GenTableFindUniqueOrThrowArgs} args - Arguments to find a GenTable\n     * @example\n     * // Get one GenTable\n     * const genTable = await prisma.genTable.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends GenTableFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__GenTableClient<$Result.GetResult<Prisma.$GenTablePayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first GenTable that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableFindFirstArgs} args - Arguments to find a GenTable\n     * @example\n     * // Get one GenTable\n     * const genTable = await prisma.genTable.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends GenTableFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableFindFirstArgs<ExtArgs>>\n    ): Prisma__GenTableClient<$Result.GetResult<Prisma.$GenTablePayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first GenTable that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableFindFirstOrThrowArgs} args - Arguments to find a GenTable\n     * @example\n     * // Get one GenTable\n     * const genTable = await prisma.genTable.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends GenTableFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__GenTableClient<$Result.GetResult<Prisma.$GenTablePayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more GenTables that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all GenTables\n     * const genTables = await prisma.genTable.findMany()\n     * \n     * // Get first 10 GenTables\n     * const genTables = await prisma.genTable.findMany({ take: 10 })\n     * \n     * // Only select the `tableId`\n     * const genTableWithTableIdOnly = await prisma.genTable.findMany({ select: { tableId: true } })\n     * \n    **/\n    findMany<T extends GenTableFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$GenTablePayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a GenTable.\n     * @param {GenTableCreateArgs} args - Arguments to create a GenTable.\n     * @example\n     * // Create one GenTable\n     * const GenTable = await prisma.genTable.create({\n     *   data: {\n     *     // ... data to create a GenTable\n     *   }\n     * })\n     * \n    **/\n    create<T extends GenTableCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableCreateArgs<ExtArgs>>\n    ): Prisma__GenTableClient<$Result.GetResult<Prisma.$GenTablePayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many GenTables.\n     * @param {GenTableCreateManyArgs} args - Arguments to create many GenTables.\n     * @example\n     * // Create many GenTables\n     * const genTable = await prisma.genTable.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends GenTableCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a GenTable.\n     * @param {GenTableDeleteArgs} args - Arguments to delete one GenTable.\n     * @example\n     * // Delete one GenTable\n     * const GenTable = await prisma.genTable.delete({\n     *   where: {\n     *     // ... filter to delete one GenTable\n     *   }\n     * })\n     * \n    **/\n    delete<T extends GenTableDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableDeleteArgs<ExtArgs>>\n    ): Prisma__GenTableClient<$Result.GetResult<Prisma.$GenTablePayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one GenTable.\n     * @param {GenTableUpdateArgs} args - Arguments to update one GenTable.\n     * @example\n     * // Update one GenTable\n     * const genTable = await prisma.genTable.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends GenTableUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableUpdateArgs<ExtArgs>>\n    ): Prisma__GenTableClient<$Result.GetResult<Prisma.$GenTablePayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more GenTables.\n     * @param {GenTableDeleteManyArgs} args - Arguments to filter GenTables to delete.\n     * @example\n     * // Delete a few GenTables\n     * const { count } = await prisma.genTable.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends GenTableDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more GenTables.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many GenTables\n     * const genTable = await prisma.genTable.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends GenTableUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one GenTable.\n     * @param {GenTableUpsertArgs} args - Arguments to update or create a GenTable.\n     * @example\n     * // Update or create a GenTable\n     * const genTable = await prisma.genTable.upsert({\n     *   create: {\n     *     // ... data to create a GenTable\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the GenTable we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends GenTableUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableUpsertArgs<ExtArgs>>\n    ): Prisma__GenTableClient<$Result.GetResult<Prisma.$GenTablePayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of GenTables.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableCountArgs} args - Arguments to filter GenTables to count.\n     * @example\n     * // Count the number of GenTables\n     * const count = await prisma.genTable.count({\n     *   where: {\n     *     // ... the filter for the GenTables we want to count\n     *   }\n     * })\n    **/\n    count<T extends GenTableCountArgs>(\n      args?: Subset<T, GenTableCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], GenTableCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a GenTable.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends GenTableAggregateArgs>(args: Subset<T, GenTableAggregateArgs>): Prisma.PrismaPromise<GetGenTableAggregateType<T>>\n\n    /**\n     * Group by GenTable.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends GenTableGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: GenTableGroupByArgs['orderBy'] }\n        : { orderBy?: GenTableGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, GenTableGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetGenTableGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the GenTable model\n   */\n  readonly fields: GenTableFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for GenTable.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__GenTableClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    tableColumns<T extends GenTable$tableColumnsArgs<ExtArgs> = {}>(args?: Subset<T, GenTable$tableColumnsArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$GenTableColumnPayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the GenTable model\n   */ \n  interface GenTableFieldRefs {\n    readonly tableId: FieldRef<\"GenTable\", 'Int'>\n    readonly tableName: FieldRef<\"GenTable\", 'String'>\n    readonly tableComment: FieldRef<\"GenTable\", 'String'>\n    readonly subTableName: FieldRef<\"GenTable\", 'String'>\n    readonly subTableFkName: FieldRef<\"GenTable\", 'String'>\n    readonly className: FieldRef<\"GenTable\", 'String'>\n    readonly tplCategory: FieldRef<\"GenTable\", 'String'>\n    readonly tplWebType: FieldRef<\"GenTable\", 'String'>\n    readonly packageName: FieldRef<\"GenTable\", 'String'>\n    readonly moduleName: FieldRef<\"GenTable\", 'String'>\n    readonly businessName: FieldRef<\"GenTable\", 'String'>\n    readonly functionName: FieldRef<\"GenTable\", 'String'>\n    readonly functionAuthor: FieldRef<\"GenTable\", 'String'>\n    readonly genType: FieldRef<\"GenTable\", 'String'>\n    readonly genPath: FieldRef<\"GenTable\", 'String'>\n    readonly options: FieldRef<\"GenTable\", 'String'>\n    readonly createBy: FieldRef<\"GenTable\", 'String'>\n    readonly createTime: FieldRef<\"GenTable\", 'String'>\n    readonly updateBy: FieldRef<\"GenTable\", 'String'>\n    readonly updateTime: FieldRef<\"GenTable\", 'String'>\n    readonly remark: FieldRef<\"GenTable\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * GenTable findUnique\n   */\n  export type GenTableFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n    /**\n     * Filter, which GenTable to fetch.\n     */\n    where: GenTableWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTable findUniqueOrThrow\n   */\n  export type GenTableFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n    /**\n     * Filter, which GenTable to fetch.\n     */\n    where: GenTableWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTable findFirst\n   */\n  export type GenTableFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n    /**\n     * Filter, which GenTable to fetch.\n     */\n    where?: GenTableWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of GenTables to fetch.\n     */\n    orderBy?: GenTableOrderByWithRelationInput | GenTableOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for GenTables.\n     */\n    cursor?: GenTableWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` GenTables from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` GenTables.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of GenTables.\n     */\n    distinct?: GenTableScalarFieldEnum | GenTableScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTable findFirstOrThrow\n   */\n  export type GenTableFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n    /**\n     * Filter, which GenTable to fetch.\n     */\n    where?: GenTableWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of GenTables to fetch.\n     */\n    orderBy?: GenTableOrderByWithRelationInput | GenTableOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for GenTables.\n     */\n    cursor?: GenTableWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` GenTables from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` GenTables.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of GenTables.\n     */\n    distinct?: GenTableScalarFieldEnum | GenTableScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTable findMany\n   */\n  export type GenTableFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n    /**\n     * Filter, which GenTables to fetch.\n     */\n    where?: GenTableWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of GenTables to fetch.\n     */\n    orderBy?: GenTableOrderByWithRelationInput | GenTableOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing GenTables.\n     */\n    cursor?: GenTableWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` GenTables from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` GenTables.\n     */\n    skip?: number\n    distinct?: GenTableScalarFieldEnum | GenTableScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTable create\n   */\n  export type GenTableCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n    /**\n     * The data needed to create a GenTable.\n     */\n    data?: XOR<GenTableCreateInput, GenTableUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTable createMany\n   */\n  export type GenTableCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many GenTables.\n     */\n    data: GenTableCreateManyInput | GenTableCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * GenTable update\n   */\n  export type GenTableUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n    /**\n     * The data needed to update a GenTable.\n     */\n    data: XOR<GenTableUpdateInput, GenTableUncheckedUpdateInput>\n    /**\n     * Choose, which GenTable to update.\n     */\n    where: GenTableWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTable updateMany\n   */\n  export type GenTableUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update GenTables.\n     */\n    data: XOR<GenTableUpdateManyMutationInput, GenTableUncheckedUpdateManyInput>\n    /**\n     * Filter which GenTables to update\n     */\n    where?: GenTableWhereInput\n  }\n\n  /**\n   * GenTable upsert\n   */\n  export type GenTableUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n    /**\n     * The filter to search for the GenTable to update in case it exists.\n     */\n    where: GenTableWhereUniqueInput\n    /**\n     * In case the GenTable found by the `where` argument doesn't exist, create a new GenTable with this data.\n     */\n    create: XOR<GenTableCreateInput, GenTableUncheckedCreateInput>\n    /**\n     * In case the GenTable was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<GenTableUpdateInput, GenTableUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTable delete\n   */\n  export type GenTableDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n    /**\n     * Filter which GenTable to delete.\n     */\n    where: GenTableWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTable deleteMany\n   */\n  export type GenTableDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which GenTables to delete\n     */\n    where?: GenTableWhereInput\n  }\n\n  /**\n   * GenTable.tableColumns\n   */\n  export type GenTable$tableColumnsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n    where?: GenTableColumnWhereInput\n    orderBy?: GenTableColumnOrderByWithRelationInput | GenTableColumnOrderByWithRelationInput[]\n    cursor?: GenTableColumnWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: GenTableColumnScalarFieldEnum | GenTableColumnScalarFieldEnum[]\n  }\n\n  /**\n   * GenTable without action\n   */\n  export type GenTableDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model GenTableColumn\n   */\n\n  export type AggregateGenTableColumn = {\n    _count: GenTableColumnCountAggregateOutputType | null\n    _avg: GenTableColumnAvgAggregateOutputType | null\n    _sum: GenTableColumnSumAggregateOutputType | null\n    _min: GenTableColumnMinAggregateOutputType | null\n    _max: GenTableColumnMaxAggregateOutputType | null\n  }\n\n  export type GenTableColumnAvgAggregateOutputType = {\n    columnId: number | null\n    tableId: number | null\n    sort: number | null\n  }\n\n  export type GenTableColumnSumAggregateOutputType = {\n    columnId: number | null\n    tableId: number | null\n    sort: number | null\n  }\n\n  export type GenTableColumnMinAggregateOutputType = {\n    columnId: number | null\n    tableId: number | null\n    columnName: string | null\n    columnComment: string | null\n    columnType: string | null\n    javaType: string | null\n    javaField: string | null\n    isPk: string | null\n    isIncrement: string | null\n    isRequired: string | null\n    isInsert: string | null\n    isEdit: string | null\n    isList: string | null\n    isQuery: string | null\n    queryType: string | null\n    htmlType: string | null\n    dictType: string | null\n    sort: number | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n  }\n\n  export type GenTableColumnMaxAggregateOutputType = {\n    columnId: number | null\n    tableId: number | null\n    columnName: string | null\n    columnComment: string | null\n    columnType: string | null\n    javaType: string | null\n    javaField: string | null\n    isPk: string | null\n    isIncrement: string | null\n    isRequired: string | null\n    isInsert: string | null\n    isEdit: string | null\n    isList: string | null\n    isQuery: string | null\n    queryType: string | null\n    htmlType: string | null\n    dictType: string | null\n    sort: number | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n  }\n\n  export type GenTableColumnCountAggregateOutputType = {\n    columnId: number\n    tableId: number\n    columnName: number\n    columnComment: number\n    columnType: number\n    javaType: number\n    javaField: number\n    isPk: number\n    isIncrement: number\n    isRequired: number\n    isInsert: number\n    isEdit: number\n    isList: number\n    isQuery: number\n    queryType: number\n    htmlType: number\n    dictType: number\n    sort: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    _all: number\n  }\n\n\n  export type GenTableColumnAvgAggregateInputType = {\n    columnId?: true\n    tableId?: true\n    sort?: true\n  }\n\n  export type GenTableColumnSumAggregateInputType = {\n    columnId?: true\n    tableId?: true\n    sort?: true\n  }\n\n  export type GenTableColumnMinAggregateInputType = {\n    columnId?: true\n    tableId?: true\n    columnName?: true\n    columnComment?: true\n    columnType?: true\n    javaType?: true\n    javaField?: true\n    isPk?: true\n    isIncrement?: true\n    isRequired?: true\n    isInsert?: true\n    isEdit?: true\n    isList?: true\n    isQuery?: true\n    queryType?: true\n    htmlType?: true\n    dictType?: true\n    sort?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n  }\n\n  export type GenTableColumnMaxAggregateInputType = {\n    columnId?: true\n    tableId?: true\n    columnName?: true\n    columnComment?: true\n    columnType?: true\n    javaType?: true\n    javaField?: true\n    isPk?: true\n    isIncrement?: true\n    isRequired?: true\n    isInsert?: true\n    isEdit?: true\n    isList?: true\n    isQuery?: true\n    queryType?: true\n    htmlType?: true\n    dictType?: true\n    sort?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n  }\n\n  export type GenTableColumnCountAggregateInputType = {\n    columnId?: true\n    tableId?: true\n    columnName?: true\n    columnComment?: true\n    columnType?: true\n    javaType?: true\n    javaField?: true\n    isPk?: true\n    isIncrement?: true\n    isRequired?: true\n    isInsert?: true\n    isEdit?: true\n    isList?: true\n    isQuery?: true\n    queryType?: true\n    htmlType?: true\n    dictType?: true\n    sort?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    _all?: true\n  }\n\n  export type GenTableColumnAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which GenTableColumn to aggregate.\n     */\n    where?: GenTableColumnWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of GenTableColumns to fetch.\n     */\n    orderBy?: GenTableColumnOrderByWithRelationInput | GenTableColumnOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: GenTableColumnWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` GenTableColumns from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` GenTableColumns.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned GenTableColumns\n    **/\n    _count?: true | GenTableColumnCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: GenTableColumnAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: GenTableColumnSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: GenTableColumnMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: GenTableColumnMaxAggregateInputType\n  }\n\n  export type GetGenTableColumnAggregateType<T extends GenTableColumnAggregateArgs> = {\n        [P in keyof T & keyof AggregateGenTableColumn]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateGenTableColumn[P]>\n      : GetScalarType<T[P], AggregateGenTableColumn[P]>\n  }\n\n\n\n\n  export type GenTableColumnGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: GenTableColumnWhereInput\n    orderBy?: GenTableColumnOrderByWithAggregationInput | GenTableColumnOrderByWithAggregationInput[]\n    by: GenTableColumnScalarFieldEnum[] | GenTableColumnScalarFieldEnum\n    having?: GenTableColumnScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: GenTableColumnCountAggregateInputType | true\n    _avg?: GenTableColumnAvgAggregateInputType\n    _sum?: GenTableColumnSumAggregateInputType\n    _min?: GenTableColumnMinAggregateInputType\n    _max?: GenTableColumnMaxAggregateInputType\n  }\n\n  export type GenTableColumnGroupByOutputType = {\n    columnId: number\n    tableId: number | null\n    columnName: string | null\n    columnComment: string | null\n    columnType: string | null\n    javaType: string | null\n    javaField: string | null\n    isPk: string | null\n    isIncrement: string | null\n    isRequired: string | null\n    isInsert: string | null\n    isEdit: string | null\n    isList: string | null\n    isQuery: string | null\n    queryType: string | null\n    htmlType: string | null\n    dictType: string | null\n    sort: number | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    _count: GenTableColumnCountAggregateOutputType | null\n    _avg: GenTableColumnAvgAggregateOutputType | null\n    _sum: GenTableColumnSumAggregateOutputType | null\n    _min: GenTableColumnMinAggregateOutputType | null\n    _max: GenTableColumnMaxAggregateOutputType | null\n  }\n\n  type GetGenTableColumnGroupByPayload<T extends GenTableColumnGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<GenTableColumnGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof GenTableColumnGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], GenTableColumnGroupByOutputType[P]>\n            : GetScalarType<T[P], GenTableColumnGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type GenTableColumnSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    columnId?: boolean\n    tableId?: boolean\n    columnName?: boolean\n    columnComment?: boolean\n    columnType?: boolean\n    javaType?: boolean\n    javaField?: boolean\n    isPk?: boolean\n    isIncrement?: boolean\n    isRequired?: boolean\n    isInsert?: boolean\n    isEdit?: boolean\n    isList?: boolean\n    isQuery?: boolean\n    queryType?: boolean\n    htmlType?: boolean\n    dictType?: boolean\n    sort?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    table?: boolean | GenTableColumn$tableArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"genTableColumn\"]>\n\n\n  export type GenTableColumnSelectScalar = {\n    columnId?: boolean\n    tableId?: boolean\n    columnName?: boolean\n    columnComment?: boolean\n    columnType?: boolean\n    javaType?: boolean\n    javaField?: boolean\n    isPk?: boolean\n    isIncrement?: boolean\n    isRequired?: boolean\n    isInsert?: boolean\n    isEdit?: boolean\n    isList?: boolean\n    isQuery?: boolean\n    queryType?: boolean\n    htmlType?: boolean\n    dictType?: boolean\n    sort?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n  }\n\n  export type GenTableColumnOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"columnId\" | \"tableId\" | \"columnName\" | \"columnComment\" | \"columnType\" | \"javaType\" | \"javaField\" | \"isPk\" | \"isIncrement\" | \"isRequired\" | \"isInsert\" | \"isEdit\" | \"isList\" | \"isQuery\" | \"queryType\" | \"htmlType\" | \"dictType\" | \"sort\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\", ExtArgs[\"result\"][\"genTableColumn\"]>\n  export type GenTableColumnInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    table?: boolean | GenTableColumn$tableArgs<ExtArgs>\n  }\n\n  export type $GenTableColumnPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"GenTableColumn\"\n    objects: {\n      table: Prisma.$GenTablePayload<ExtArgs> | null\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      columnId: number\n      tableId: number | null\n      columnName: string | null\n      columnComment: string | null\n      columnType: string | null\n      javaType: string | null\n      javaField: string | null\n      isPk: string | null\n      isIncrement: string | null\n      isRequired: string | null\n      isInsert: string | null\n      isEdit: string | null\n      isList: string | null\n      isQuery: string | null\n      queryType: string | null\n      htmlType: string | null\n      dictType: string | null\n      sort: number | null\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n    }, ExtArgs[\"result\"][\"genTableColumn\"]>\n    composites: {}\n  }\n\n  type GenTableColumnGetPayload<S extends boolean | null | undefined | GenTableColumnDefaultArgs> = $Result.GetResult<Prisma.$GenTableColumnPayload, S>\n\n  type GenTableColumnCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<GenTableColumnFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: GenTableColumnCountAggregateInputType | true\n    }\n\n  export interface GenTableColumnDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['GenTableColumn'], meta: { name: 'GenTableColumn' } }\n    /**\n     * Find zero or one GenTableColumn that matches the filter.\n     * @param {GenTableColumnFindUniqueArgs} args - Arguments to find a GenTableColumn\n     * @example\n     * // Get one GenTableColumn\n     * const genTableColumn = await prisma.genTableColumn.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends GenTableColumnFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableColumnFindUniqueArgs<ExtArgs>>\n    ): Prisma__GenTableColumnClient<$Result.GetResult<Prisma.$GenTableColumnPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one GenTableColumn that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {GenTableColumnFindUniqueOrThrowArgs} args - Arguments to find a GenTableColumn\n     * @example\n     * // Get one GenTableColumn\n     * const genTableColumn = await prisma.genTableColumn.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends GenTableColumnFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableColumnFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__GenTableColumnClient<$Result.GetResult<Prisma.$GenTableColumnPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first GenTableColumn that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableColumnFindFirstArgs} args - Arguments to find a GenTableColumn\n     * @example\n     * // Get one GenTableColumn\n     * const genTableColumn = await prisma.genTableColumn.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends GenTableColumnFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableColumnFindFirstArgs<ExtArgs>>\n    ): Prisma__GenTableColumnClient<$Result.GetResult<Prisma.$GenTableColumnPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first GenTableColumn that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableColumnFindFirstOrThrowArgs} args - Arguments to find a GenTableColumn\n     * @example\n     * // Get one GenTableColumn\n     * const genTableColumn = await prisma.genTableColumn.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends GenTableColumnFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableColumnFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__GenTableColumnClient<$Result.GetResult<Prisma.$GenTableColumnPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more GenTableColumns that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableColumnFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all GenTableColumns\n     * const genTableColumns = await prisma.genTableColumn.findMany()\n     * \n     * // Get first 10 GenTableColumns\n     * const genTableColumns = await prisma.genTableColumn.findMany({ take: 10 })\n     * \n     * // Only select the `columnId`\n     * const genTableColumnWithColumnIdOnly = await prisma.genTableColumn.findMany({ select: { columnId: true } })\n     * \n    **/\n    findMany<T extends GenTableColumnFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableColumnFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$GenTableColumnPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a GenTableColumn.\n     * @param {GenTableColumnCreateArgs} args - Arguments to create a GenTableColumn.\n     * @example\n     * // Create one GenTableColumn\n     * const GenTableColumn = await prisma.genTableColumn.create({\n     *   data: {\n     *     // ... data to create a GenTableColumn\n     *   }\n     * })\n     * \n    **/\n    create<T extends GenTableColumnCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableColumnCreateArgs<ExtArgs>>\n    ): Prisma__GenTableColumnClient<$Result.GetResult<Prisma.$GenTableColumnPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many GenTableColumns.\n     * @param {GenTableColumnCreateManyArgs} args - Arguments to create many GenTableColumns.\n     * @example\n     * // Create many GenTableColumns\n     * const genTableColumn = await prisma.genTableColumn.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends GenTableColumnCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableColumnCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a GenTableColumn.\n     * @param {GenTableColumnDeleteArgs} args - Arguments to delete one GenTableColumn.\n     * @example\n     * // Delete one GenTableColumn\n     * const GenTableColumn = await prisma.genTableColumn.delete({\n     *   where: {\n     *     // ... filter to delete one GenTableColumn\n     *   }\n     * })\n     * \n    **/\n    delete<T extends GenTableColumnDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableColumnDeleteArgs<ExtArgs>>\n    ): Prisma__GenTableColumnClient<$Result.GetResult<Prisma.$GenTableColumnPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one GenTableColumn.\n     * @param {GenTableColumnUpdateArgs} args - Arguments to update one GenTableColumn.\n     * @example\n     * // Update one GenTableColumn\n     * const genTableColumn = await prisma.genTableColumn.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends GenTableColumnUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableColumnUpdateArgs<ExtArgs>>\n    ): Prisma__GenTableColumnClient<$Result.GetResult<Prisma.$GenTableColumnPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more GenTableColumns.\n     * @param {GenTableColumnDeleteManyArgs} args - Arguments to filter GenTableColumns to delete.\n     * @example\n     * // Delete a few GenTableColumns\n     * const { count } = await prisma.genTableColumn.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends GenTableColumnDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, GenTableColumnDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more GenTableColumns.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableColumnUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many GenTableColumns\n     * const genTableColumn = await prisma.genTableColumn.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends GenTableColumnUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableColumnUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one GenTableColumn.\n     * @param {GenTableColumnUpsertArgs} args - Arguments to update or create a GenTableColumn.\n     * @example\n     * // Update or create a GenTableColumn\n     * const genTableColumn = await prisma.genTableColumn.upsert({\n     *   create: {\n     *     // ... data to create a GenTableColumn\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the GenTableColumn we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends GenTableColumnUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, GenTableColumnUpsertArgs<ExtArgs>>\n    ): Prisma__GenTableColumnClient<$Result.GetResult<Prisma.$GenTableColumnPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of GenTableColumns.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableColumnCountArgs} args - Arguments to filter GenTableColumns to count.\n     * @example\n     * // Count the number of GenTableColumns\n     * const count = await prisma.genTableColumn.count({\n     *   where: {\n     *     // ... the filter for the GenTableColumns we want to count\n     *   }\n     * })\n    **/\n    count<T extends GenTableColumnCountArgs>(\n      args?: Subset<T, GenTableColumnCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], GenTableColumnCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a GenTableColumn.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableColumnAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends GenTableColumnAggregateArgs>(args: Subset<T, GenTableColumnAggregateArgs>): Prisma.PrismaPromise<GetGenTableColumnAggregateType<T>>\n\n    /**\n     * Group by GenTableColumn.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {GenTableColumnGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends GenTableColumnGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: GenTableColumnGroupByArgs['orderBy'] }\n        : { orderBy?: GenTableColumnGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, GenTableColumnGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetGenTableColumnGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the GenTableColumn model\n   */\n  readonly fields: GenTableColumnFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for GenTableColumn.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__GenTableColumnClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    table<T extends GenTableColumn$tableArgs<ExtArgs> = {}>(args?: Subset<T, GenTableColumn$tableArgs<ExtArgs>>): Prisma__GenTableClient<$Result.GetResult<Prisma.$GenTablePayload<ExtArgs>, T, 'findUniqueOrThrow'> | null, null, ExtArgs>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the GenTableColumn model\n   */ \n  interface GenTableColumnFieldRefs {\n    readonly columnId: FieldRef<\"GenTableColumn\", 'Int'>\n    readonly tableId: FieldRef<\"GenTableColumn\", 'Int'>\n    readonly columnName: FieldRef<\"GenTableColumn\", 'String'>\n    readonly columnComment: FieldRef<\"GenTableColumn\", 'String'>\n    readonly columnType: FieldRef<\"GenTableColumn\", 'String'>\n    readonly javaType: FieldRef<\"GenTableColumn\", 'String'>\n    readonly javaField: FieldRef<\"GenTableColumn\", 'String'>\n    readonly isPk: FieldRef<\"GenTableColumn\", 'String'>\n    readonly isIncrement: FieldRef<\"GenTableColumn\", 'String'>\n    readonly isRequired: FieldRef<\"GenTableColumn\", 'String'>\n    readonly isInsert: FieldRef<\"GenTableColumn\", 'String'>\n    readonly isEdit: FieldRef<\"GenTableColumn\", 'String'>\n    readonly isList: FieldRef<\"GenTableColumn\", 'String'>\n    readonly isQuery: FieldRef<\"GenTableColumn\", 'String'>\n    readonly queryType: FieldRef<\"GenTableColumn\", 'String'>\n    readonly htmlType: FieldRef<\"GenTableColumn\", 'String'>\n    readonly dictType: FieldRef<\"GenTableColumn\", 'String'>\n    readonly sort: FieldRef<\"GenTableColumn\", 'Int'>\n    readonly createBy: FieldRef<\"GenTableColumn\", 'String'>\n    readonly createTime: FieldRef<\"GenTableColumn\", 'String'>\n    readonly updateBy: FieldRef<\"GenTableColumn\", 'String'>\n    readonly updateTime: FieldRef<\"GenTableColumn\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * GenTableColumn findUnique\n   */\n  export type GenTableColumnFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n    /**\n     * Filter, which GenTableColumn to fetch.\n     */\n    where: GenTableColumnWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTableColumn findUniqueOrThrow\n   */\n  export type GenTableColumnFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n    /**\n     * Filter, which GenTableColumn to fetch.\n     */\n    where: GenTableColumnWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTableColumn findFirst\n   */\n  export type GenTableColumnFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n    /**\n     * Filter, which GenTableColumn to fetch.\n     */\n    where?: GenTableColumnWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of GenTableColumns to fetch.\n     */\n    orderBy?: GenTableColumnOrderByWithRelationInput | GenTableColumnOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for GenTableColumns.\n     */\n    cursor?: GenTableColumnWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` GenTableColumns from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` GenTableColumns.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of GenTableColumns.\n     */\n    distinct?: GenTableColumnScalarFieldEnum | GenTableColumnScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTableColumn findFirstOrThrow\n   */\n  export type GenTableColumnFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n    /**\n     * Filter, which GenTableColumn to fetch.\n     */\n    where?: GenTableColumnWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of GenTableColumns to fetch.\n     */\n    orderBy?: GenTableColumnOrderByWithRelationInput | GenTableColumnOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for GenTableColumns.\n     */\n    cursor?: GenTableColumnWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` GenTableColumns from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` GenTableColumns.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of GenTableColumns.\n     */\n    distinct?: GenTableColumnScalarFieldEnum | GenTableColumnScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTableColumn findMany\n   */\n  export type GenTableColumnFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n    /**\n     * Filter, which GenTableColumns to fetch.\n     */\n    where?: GenTableColumnWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of GenTableColumns to fetch.\n     */\n    orderBy?: GenTableColumnOrderByWithRelationInput | GenTableColumnOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing GenTableColumns.\n     */\n    cursor?: GenTableColumnWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` GenTableColumns from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` GenTableColumns.\n     */\n    skip?: number\n    distinct?: GenTableColumnScalarFieldEnum | GenTableColumnScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTableColumn create\n   */\n  export type GenTableColumnCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n    /**\n     * The data needed to create a GenTableColumn.\n     */\n    data?: XOR<GenTableColumnCreateInput, GenTableColumnUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTableColumn createMany\n   */\n  export type GenTableColumnCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many GenTableColumns.\n     */\n    data: GenTableColumnCreateManyInput | GenTableColumnCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * GenTableColumn update\n   */\n  export type GenTableColumnUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n    /**\n     * The data needed to update a GenTableColumn.\n     */\n    data: XOR<GenTableColumnUpdateInput, GenTableColumnUncheckedUpdateInput>\n    /**\n     * Choose, which GenTableColumn to update.\n     */\n    where: GenTableColumnWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTableColumn updateMany\n   */\n  export type GenTableColumnUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update GenTableColumns.\n     */\n    data: XOR<GenTableColumnUpdateManyMutationInput, GenTableColumnUncheckedUpdateManyInput>\n    /**\n     * Filter which GenTableColumns to update\n     */\n    where?: GenTableColumnWhereInput\n  }\n\n  /**\n   * GenTableColumn upsert\n   */\n  export type GenTableColumnUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n    /**\n     * The filter to search for the GenTableColumn to update in case it exists.\n     */\n    where: GenTableColumnWhereUniqueInput\n    /**\n     * In case the GenTableColumn found by the `where` argument doesn't exist, create a new GenTableColumn with this data.\n     */\n    create: XOR<GenTableColumnCreateInput, GenTableColumnUncheckedCreateInput>\n    /**\n     * In case the GenTableColumn was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<GenTableColumnUpdateInput, GenTableColumnUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTableColumn delete\n   */\n  export type GenTableColumnDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n    /**\n     * Filter which GenTableColumn to delete.\n     */\n    where: GenTableColumnWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * GenTableColumn deleteMany\n   */\n  export type GenTableColumnDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which GenTableColumns to delete\n     */\n    where?: GenTableColumnWhereInput\n  }\n\n  /**\n   * GenTableColumn.table\n   */\n  export type GenTableColumn$tableArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTable\n     */\n    select?: GenTableSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTable\n     */\n    omit?: GenTableOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableInclude<ExtArgs> | null\n    where?: GenTableWhereInput\n  }\n\n  /**\n   * GenTableColumn without action\n   */\n  export type GenTableColumnDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the GenTableColumn\n     */\n    select?: GenTableColumnSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the GenTableColumn\n     */\n    omit?: GenTableColumnOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: GenTableColumnInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysConfig\n   */\n\n  export type AggregateSysConfig = {\n    _count: SysConfigCountAggregateOutputType | null\n    _avg: SysConfigAvgAggregateOutputType | null\n    _sum: SysConfigSumAggregateOutputType | null\n    _min: SysConfigMinAggregateOutputType | null\n    _max: SysConfigMaxAggregateOutputType | null\n  }\n\n  export type SysConfigAvgAggregateOutputType = {\n    configId: number | null\n  }\n\n  export type SysConfigSumAggregateOutputType = {\n    configId: number | null\n  }\n\n  export type SysConfigMinAggregateOutputType = {\n    configId: number | null\n    configName: string | null\n    configKey: string | null\n    configValue: string | null\n    configType: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysConfigMaxAggregateOutputType = {\n    configId: number | null\n    configName: string | null\n    configKey: string | null\n    configValue: string | null\n    configType: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysConfigCountAggregateOutputType = {\n    configId: number\n    configName: number\n    configKey: number\n    configValue: number\n    configType: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    remark: number\n    _all: number\n  }\n\n\n  export type SysConfigAvgAggregateInputType = {\n    configId?: true\n  }\n\n  export type SysConfigSumAggregateInputType = {\n    configId?: true\n  }\n\n  export type SysConfigMinAggregateInputType = {\n    configId?: true\n    configName?: true\n    configKey?: true\n    configValue?: true\n    configType?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysConfigMaxAggregateInputType = {\n    configId?: true\n    configName?: true\n    configKey?: true\n    configValue?: true\n    configType?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysConfigCountAggregateInputType = {\n    configId?: true\n    configName?: true\n    configKey?: true\n    configValue?: true\n    configType?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n    _all?: true\n  }\n\n  export type SysConfigAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysConfig to aggregate.\n     */\n    where?: SysConfigWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysConfigs to fetch.\n     */\n    orderBy?: SysConfigOrderByWithRelationInput | SysConfigOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysConfigWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysConfigs from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysConfigs.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysConfigs\n    **/\n    _count?: true | SysConfigCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysConfigAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysConfigSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysConfigMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysConfigMaxAggregateInputType\n  }\n\n  export type GetSysConfigAggregateType<T extends SysConfigAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysConfig]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysConfig[P]>\n      : GetScalarType<T[P], AggregateSysConfig[P]>\n  }\n\n\n\n\n  export type SysConfigGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysConfigWhereInput\n    orderBy?: SysConfigOrderByWithAggregationInput | SysConfigOrderByWithAggregationInput[]\n    by: SysConfigScalarFieldEnum[] | SysConfigScalarFieldEnum\n    having?: SysConfigScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysConfigCountAggregateInputType | true\n    _avg?: SysConfigAvgAggregateInputType\n    _sum?: SysConfigSumAggregateInputType\n    _min?: SysConfigMinAggregateInputType\n    _max?: SysConfigMaxAggregateInputType\n  }\n\n  export type SysConfigGroupByOutputType = {\n    configId: number\n    configName: string | null\n    configKey: string | null\n    configValue: string | null\n    configType: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n    _count: SysConfigCountAggregateOutputType | null\n    _avg: SysConfigAvgAggregateOutputType | null\n    _sum: SysConfigSumAggregateOutputType | null\n    _min: SysConfigMinAggregateOutputType | null\n    _max: SysConfigMaxAggregateOutputType | null\n  }\n\n  type GetSysConfigGroupByPayload<T extends SysConfigGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysConfigGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysConfigGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysConfigGroupByOutputType[P]>\n            : GetScalarType<T[P], SysConfigGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysConfigSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    configId?: boolean\n    configName?: boolean\n    configKey?: boolean\n    configValue?: boolean\n    configType?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }, ExtArgs[\"result\"][\"sysConfig\"]>\n\n\n  export type SysConfigSelectScalar = {\n    configId?: boolean\n    configName?: boolean\n    configKey?: boolean\n    configValue?: boolean\n    configType?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }\n\n  export type SysConfigOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"configId\" | \"configName\" | \"configKey\" | \"configValue\" | \"configType\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\" | \"remark\", ExtArgs[\"result\"][\"sysConfig\"]>\n\n  export type $SysConfigPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysConfig\"\n    objects: {}\n    scalars: $Extensions.GetPayloadResult<{\n      configId: number\n      configName: string | null\n      configKey: string | null\n      configValue: string | null\n      configType: string | null\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n      remark: string | null\n    }, ExtArgs[\"result\"][\"sysConfig\"]>\n    composites: {}\n  }\n\n  type SysConfigGetPayload<S extends boolean | null | undefined | SysConfigDefaultArgs> = $Result.GetResult<Prisma.$SysConfigPayload, S>\n\n  type SysConfigCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysConfigFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysConfigCountAggregateInputType | true\n    }\n\n  export interface SysConfigDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysConfig'], meta: { name: 'SysConfig' } }\n    /**\n     * Find zero or one SysConfig that matches the filter.\n     * @param {SysConfigFindUniqueArgs} args - Arguments to find a SysConfig\n     * @example\n     * // Get one SysConfig\n     * const sysConfig = await prisma.sysConfig.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysConfigFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysConfigFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysConfigClient<$Result.GetResult<Prisma.$SysConfigPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysConfig that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysConfigFindUniqueOrThrowArgs} args - Arguments to find a SysConfig\n     * @example\n     * // Get one SysConfig\n     * const sysConfig = await prisma.sysConfig.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysConfigFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysConfigFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysConfigClient<$Result.GetResult<Prisma.$SysConfigPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysConfig that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysConfigFindFirstArgs} args - Arguments to find a SysConfig\n     * @example\n     * // Get one SysConfig\n     * const sysConfig = await prisma.sysConfig.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysConfigFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysConfigFindFirstArgs<ExtArgs>>\n    ): Prisma__SysConfigClient<$Result.GetResult<Prisma.$SysConfigPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysConfig that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysConfigFindFirstOrThrowArgs} args - Arguments to find a SysConfig\n     * @example\n     * // Get one SysConfig\n     * const sysConfig = await prisma.sysConfig.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysConfigFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysConfigFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysConfigClient<$Result.GetResult<Prisma.$SysConfigPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysConfigs that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysConfigFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysConfigs\n     * const sysConfigs = await prisma.sysConfig.findMany()\n     * \n     * // Get first 10 SysConfigs\n     * const sysConfigs = await prisma.sysConfig.findMany({ take: 10 })\n     * \n     * // Only select the `configId`\n     * const sysConfigWithConfigIdOnly = await prisma.sysConfig.findMany({ select: { configId: true } })\n     * \n    **/\n    findMany<T extends SysConfigFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysConfigFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysConfigPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysConfig.\n     * @param {SysConfigCreateArgs} args - Arguments to create a SysConfig.\n     * @example\n     * // Create one SysConfig\n     * const SysConfig = await prisma.sysConfig.create({\n     *   data: {\n     *     // ... data to create a SysConfig\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysConfigCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysConfigCreateArgs<ExtArgs>>\n    ): Prisma__SysConfigClient<$Result.GetResult<Prisma.$SysConfigPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysConfigs.\n     * @param {SysConfigCreateManyArgs} args - Arguments to create many SysConfigs.\n     * @example\n     * // Create many SysConfigs\n     * const sysConfig = await prisma.sysConfig.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysConfigCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysConfigCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysConfig.\n     * @param {SysConfigDeleteArgs} args - Arguments to delete one SysConfig.\n     * @example\n     * // Delete one SysConfig\n     * const SysConfig = await prisma.sysConfig.delete({\n     *   where: {\n     *     // ... filter to delete one SysConfig\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysConfigDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysConfigDeleteArgs<ExtArgs>>\n    ): Prisma__SysConfigClient<$Result.GetResult<Prisma.$SysConfigPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysConfig.\n     * @param {SysConfigUpdateArgs} args - Arguments to update one SysConfig.\n     * @example\n     * // Update one SysConfig\n     * const sysConfig = await prisma.sysConfig.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysConfigUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysConfigUpdateArgs<ExtArgs>>\n    ): Prisma__SysConfigClient<$Result.GetResult<Prisma.$SysConfigPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysConfigs.\n     * @param {SysConfigDeleteManyArgs} args - Arguments to filter SysConfigs to delete.\n     * @example\n     * // Delete a few SysConfigs\n     * const { count } = await prisma.sysConfig.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysConfigDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysConfigDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysConfigs.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysConfigUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysConfigs\n     * const sysConfig = await prisma.sysConfig.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysConfigUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysConfigUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysConfig.\n     * @param {SysConfigUpsertArgs} args - Arguments to update or create a SysConfig.\n     * @example\n     * // Update or create a SysConfig\n     * const sysConfig = await prisma.sysConfig.upsert({\n     *   create: {\n     *     // ... data to create a SysConfig\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysConfig we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysConfigUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysConfigUpsertArgs<ExtArgs>>\n    ): Prisma__SysConfigClient<$Result.GetResult<Prisma.$SysConfigPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysConfigs.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysConfigCountArgs} args - Arguments to filter SysConfigs to count.\n     * @example\n     * // Count the number of SysConfigs\n     * const count = await prisma.sysConfig.count({\n     *   where: {\n     *     // ... the filter for the SysConfigs we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysConfigCountArgs>(\n      args?: Subset<T, SysConfigCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysConfigCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysConfig.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysConfigAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysConfigAggregateArgs>(args: Subset<T, SysConfigAggregateArgs>): Prisma.PrismaPromise<GetSysConfigAggregateType<T>>\n\n    /**\n     * Group by SysConfig.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysConfigGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysConfigGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysConfigGroupByArgs['orderBy'] }\n        : { orderBy?: SysConfigGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysConfigGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysConfigGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysConfig model\n   */\n  readonly fields: SysConfigFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysConfig.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysConfigClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysConfig model\n   */ \n  interface SysConfigFieldRefs {\n    readonly configId: FieldRef<\"SysConfig\", 'Int'>\n    readonly configName: FieldRef<\"SysConfig\", 'String'>\n    readonly configKey: FieldRef<\"SysConfig\", 'String'>\n    readonly configValue: FieldRef<\"SysConfig\", 'String'>\n    readonly configType: FieldRef<\"SysConfig\", 'String'>\n    readonly createBy: FieldRef<\"SysConfig\", 'String'>\n    readonly createTime: FieldRef<\"SysConfig\", 'String'>\n    readonly updateBy: FieldRef<\"SysConfig\", 'String'>\n    readonly updateTime: FieldRef<\"SysConfig\", 'String'>\n    readonly remark: FieldRef<\"SysConfig\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysConfig findUnique\n   */\n  export type SysConfigFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysConfig\n     */\n    select?: SysConfigSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysConfig\n     */\n    omit?: SysConfigOmit<ExtArgs> | null\n    /**\n     * Filter, which SysConfig to fetch.\n     */\n    where: SysConfigWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysConfig findUniqueOrThrow\n   */\n  export type SysConfigFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysConfig\n     */\n    select?: SysConfigSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysConfig\n     */\n    omit?: SysConfigOmit<ExtArgs> | null\n    /**\n     * Filter, which SysConfig to fetch.\n     */\n    where: SysConfigWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysConfig findFirst\n   */\n  export type SysConfigFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysConfig\n     */\n    select?: SysConfigSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysConfig\n     */\n    omit?: SysConfigOmit<ExtArgs> | null\n    /**\n     * Filter, which SysConfig to fetch.\n     */\n    where?: SysConfigWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysConfigs to fetch.\n     */\n    orderBy?: SysConfigOrderByWithRelationInput | SysConfigOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysConfigs.\n     */\n    cursor?: SysConfigWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysConfigs from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysConfigs.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysConfigs.\n     */\n    distinct?: SysConfigScalarFieldEnum | SysConfigScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysConfig findFirstOrThrow\n   */\n  export type SysConfigFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysConfig\n     */\n    select?: SysConfigSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysConfig\n     */\n    omit?: SysConfigOmit<ExtArgs> | null\n    /**\n     * Filter, which SysConfig to fetch.\n     */\n    where?: SysConfigWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysConfigs to fetch.\n     */\n    orderBy?: SysConfigOrderByWithRelationInput | SysConfigOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysConfigs.\n     */\n    cursor?: SysConfigWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysConfigs from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysConfigs.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysConfigs.\n     */\n    distinct?: SysConfigScalarFieldEnum | SysConfigScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysConfig findMany\n   */\n  export type SysConfigFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysConfig\n     */\n    select?: SysConfigSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysConfig\n     */\n    omit?: SysConfigOmit<ExtArgs> | null\n    /**\n     * Filter, which SysConfigs to fetch.\n     */\n    where?: SysConfigWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysConfigs to fetch.\n     */\n    orderBy?: SysConfigOrderByWithRelationInput | SysConfigOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysConfigs.\n     */\n    cursor?: SysConfigWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysConfigs from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysConfigs.\n     */\n    skip?: number\n    distinct?: SysConfigScalarFieldEnum | SysConfigScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysConfig create\n   */\n  export type SysConfigCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysConfig\n     */\n    select?: SysConfigSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysConfig\n     */\n    omit?: SysConfigOmit<ExtArgs> | null\n    /**\n     * The data needed to create a SysConfig.\n     */\n    data?: XOR<SysConfigCreateInput, SysConfigUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysConfig createMany\n   */\n  export type SysConfigCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysConfigs.\n     */\n    data: SysConfigCreateManyInput | SysConfigCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysConfig update\n   */\n  export type SysConfigUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysConfig\n     */\n    select?: SysConfigSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysConfig\n     */\n    omit?: SysConfigOmit<ExtArgs> | null\n    /**\n     * The data needed to update a SysConfig.\n     */\n    data: XOR<SysConfigUpdateInput, SysConfigUncheckedUpdateInput>\n    /**\n     * Choose, which SysConfig to update.\n     */\n    where: SysConfigWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysConfig updateMany\n   */\n  export type SysConfigUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysConfigs.\n     */\n    data: XOR<SysConfigUpdateManyMutationInput, SysConfigUncheckedUpdateManyInput>\n    /**\n     * Filter which SysConfigs to update\n     */\n    where?: SysConfigWhereInput\n  }\n\n  /**\n   * SysConfig upsert\n   */\n  export type SysConfigUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysConfig\n     */\n    select?: SysConfigSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysConfig\n     */\n    omit?: SysConfigOmit<ExtArgs> | null\n    /**\n     * The filter to search for the SysConfig to update in case it exists.\n     */\n    where: SysConfigWhereUniqueInput\n    /**\n     * In case the SysConfig found by the `where` argument doesn't exist, create a new SysConfig with this data.\n     */\n    create: XOR<SysConfigCreateInput, SysConfigUncheckedCreateInput>\n    /**\n     * In case the SysConfig was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysConfigUpdateInput, SysConfigUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysConfig delete\n   */\n  export type SysConfigDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysConfig\n     */\n    select?: SysConfigSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysConfig\n     */\n    omit?: SysConfigOmit<ExtArgs> | null\n    /**\n     * Filter which SysConfig to delete.\n     */\n    where: SysConfigWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysConfig deleteMany\n   */\n  export type SysConfigDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysConfigs to delete\n     */\n    where?: SysConfigWhereInput\n  }\n\n  /**\n   * SysConfig without action\n   */\n  export type SysConfigDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysConfig\n     */\n    select?: SysConfigSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysConfig\n     */\n    omit?: SysConfigOmit<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysDept\n   */\n\n  export type AggregateSysDept = {\n    _count: SysDeptCountAggregateOutputType | null\n    _avg: SysDeptAvgAggregateOutputType | null\n    _sum: SysDeptSumAggregateOutputType | null\n    _min: SysDeptMinAggregateOutputType | null\n    _max: SysDeptMaxAggregateOutputType | null\n  }\n\n  export type SysDeptAvgAggregateOutputType = {\n    deptId: number | null\n    parentId: number | null\n    orderNum: number | null\n  }\n\n  export type SysDeptSumAggregateOutputType = {\n    deptId: number | null\n    parentId: number | null\n    orderNum: number | null\n  }\n\n  export type SysDeptMinAggregateOutputType = {\n    deptId: number | null\n    parentId: number | null\n    ancestors: string | null\n    deptName: string | null\n    orderNum: number | null\n    leader: string | null\n    phone: string | null\n    email: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n  }\n\n  export type SysDeptMaxAggregateOutputType = {\n    deptId: number | null\n    parentId: number | null\n    ancestors: string | null\n    deptName: string | null\n    orderNum: number | null\n    leader: string | null\n    phone: string | null\n    email: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n  }\n\n  export type SysDeptCountAggregateOutputType = {\n    deptId: number\n    parentId: number\n    ancestors: number\n    deptName: number\n    orderNum: number\n    leader: number\n    phone: number\n    email: number\n    status: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    _all: number\n  }\n\n\n  export type SysDeptAvgAggregateInputType = {\n    deptId?: true\n    parentId?: true\n    orderNum?: true\n  }\n\n  export type SysDeptSumAggregateInputType = {\n    deptId?: true\n    parentId?: true\n    orderNum?: true\n  }\n\n  export type SysDeptMinAggregateInputType = {\n    deptId?: true\n    parentId?: true\n    ancestors?: true\n    deptName?: true\n    orderNum?: true\n    leader?: true\n    phone?: true\n    email?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n  }\n\n  export type SysDeptMaxAggregateInputType = {\n    deptId?: true\n    parentId?: true\n    ancestors?: true\n    deptName?: true\n    orderNum?: true\n    leader?: true\n    phone?: true\n    email?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n  }\n\n  export type SysDeptCountAggregateInputType = {\n    deptId?: true\n    parentId?: true\n    ancestors?: true\n    deptName?: true\n    orderNum?: true\n    leader?: true\n    phone?: true\n    email?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    _all?: true\n  }\n\n  export type SysDeptAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysDept to aggregate.\n     */\n    where?: SysDeptWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDepts to fetch.\n     */\n    orderBy?: SysDeptOrderByWithRelationInput | SysDeptOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysDeptWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDepts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDepts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysDepts\n    **/\n    _count?: true | SysDeptCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysDeptAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysDeptSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysDeptMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysDeptMaxAggregateInputType\n  }\n\n  export type GetSysDeptAggregateType<T extends SysDeptAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysDept]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysDept[P]>\n      : GetScalarType<T[P], AggregateSysDept[P]>\n  }\n\n\n\n\n  export type SysDeptGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysDeptWhereInput\n    orderBy?: SysDeptOrderByWithAggregationInput | SysDeptOrderByWithAggregationInput[]\n    by: SysDeptScalarFieldEnum[] | SysDeptScalarFieldEnum\n    having?: SysDeptScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysDeptCountAggregateInputType | true\n    _avg?: SysDeptAvgAggregateInputType\n    _sum?: SysDeptSumAggregateInputType\n    _min?: SysDeptMinAggregateInputType\n    _max?: SysDeptMaxAggregateInputType\n  }\n\n  export type SysDeptGroupByOutputType = {\n    deptId: number\n    parentId: number | null\n    ancestors: string | null\n    deptName: string | null\n    orderNum: number | null\n    leader: string | null\n    phone: string | null\n    email: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    _count: SysDeptCountAggregateOutputType | null\n    _avg: SysDeptAvgAggregateOutputType | null\n    _sum: SysDeptSumAggregateOutputType | null\n    _min: SysDeptMinAggregateOutputType | null\n    _max: SysDeptMaxAggregateOutputType | null\n  }\n\n  type GetSysDeptGroupByPayload<T extends SysDeptGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysDeptGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysDeptGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysDeptGroupByOutputType[P]>\n            : GetScalarType<T[P], SysDeptGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysDeptSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    deptId?: boolean\n    parentId?: boolean\n    ancestors?: boolean\n    deptName?: boolean\n    orderNum?: boolean\n    leader?: boolean\n    phone?: boolean\n    email?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    users?: boolean | SysDept$usersArgs<ExtArgs>\n    roles?: boolean | SysDept$rolesArgs<ExtArgs>\n    _count?: boolean | SysDeptCountOutputTypeDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysDept\"]>\n\n\n  export type SysDeptSelectScalar = {\n    deptId?: boolean\n    parentId?: boolean\n    ancestors?: boolean\n    deptName?: boolean\n    orderNum?: boolean\n    leader?: boolean\n    phone?: boolean\n    email?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n  }\n\n  export type SysDeptOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"deptId\" | \"parentId\" | \"ancestors\" | \"deptName\" | \"orderNum\" | \"leader\" | \"phone\" | \"email\" | \"status\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\", ExtArgs[\"result\"][\"sysDept\"]>\n  export type SysDeptInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    users?: boolean | SysDept$usersArgs<ExtArgs>\n    roles?: boolean | SysDept$rolesArgs<ExtArgs>\n    _count?: boolean | SysDeptCountOutputTypeDefaultArgs<ExtArgs>\n  }\n\n  export type $SysDeptPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysDept\"\n    objects: {\n      users: Prisma.$SysUserPayload<ExtArgs>[]\n      roles: Prisma.$SysRoleDeptPayload<ExtArgs>[]\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      deptId: number\n      parentId: number | null\n      ancestors: string | null\n      deptName: string | null\n      orderNum: number | null\n      leader: string | null\n      phone: string | null\n      email: string | null\n      status: string | null\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n    }, ExtArgs[\"result\"][\"sysDept\"]>\n    composites: {}\n  }\n\n  type SysDeptGetPayload<S extends boolean | null | undefined | SysDeptDefaultArgs> = $Result.GetResult<Prisma.$SysDeptPayload, S>\n\n  type SysDeptCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysDeptFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysDeptCountAggregateInputType | true\n    }\n\n  export interface SysDeptDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysDept'], meta: { name: 'SysDept' } }\n    /**\n     * Find zero or one SysDept that matches the filter.\n     * @param {SysDeptFindUniqueArgs} args - Arguments to find a SysDept\n     * @example\n     * // Get one SysDept\n     * const sysDept = await prisma.sysDept.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysDeptFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDeptFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysDeptClient<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysDept that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysDeptFindUniqueOrThrowArgs} args - Arguments to find a SysDept\n     * @example\n     * // Get one SysDept\n     * const sysDept = await prisma.sysDept.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysDeptFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDeptFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysDeptClient<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysDept that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDeptFindFirstArgs} args - Arguments to find a SysDept\n     * @example\n     * // Get one SysDept\n     * const sysDept = await prisma.sysDept.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysDeptFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDeptFindFirstArgs<ExtArgs>>\n    ): Prisma__SysDeptClient<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysDept that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDeptFindFirstOrThrowArgs} args - Arguments to find a SysDept\n     * @example\n     * // Get one SysDept\n     * const sysDept = await prisma.sysDept.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysDeptFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDeptFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysDeptClient<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysDepts that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDeptFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysDepts\n     * const sysDepts = await prisma.sysDept.findMany()\n     * \n     * // Get first 10 SysDepts\n     * const sysDepts = await prisma.sysDept.findMany({ take: 10 })\n     * \n     * // Only select the `deptId`\n     * const sysDeptWithDeptIdOnly = await prisma.sysDept.findMany({ select: { deptId: true } })\n     * \n    **/\n    findMany<T extends SysDeptFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDeptFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysDept.\n     * @param {SysDeptCreateArgs} args - Arguments to create a SysDept.\n     * @example\n     * // Create one SysDept\n     * const SysDept = await prisma.sysDept.create({\n     *   data: {\n     *     // ... data to create a SysDept\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysDeptCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDeptCreateArgs<ExtArgs>>\n    ): Prisma__SysDeptClient<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysDepts.\n     * @param {SysDeptCreateManyArgs} args - Arguments to create many SysDepts.\n     * @example\n     * // Create many SysDepts\n     * const sysDept = await prisma.sysDept.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysDeptCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDeptCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysDept.\n     * @param {SysDeptDeleteArgs} args - Arguments to delete one SysDept.\n     * @example\n     * // Delete one SysDept\n     * const SysDept = await prisma.sysDept.delete({\n     *   where: {\n     *     // ... filter to delete one SysDept\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysDeptDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDeptDeleteArgs<ExtArgs>>\n    ): Prisma__SysDeptClient<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysDept.\n     * @param {SysDeptUpdateArgs} args - Arguments to update one SysDept.\n     * @example\n     * // Update one SysDept\n     * const sysDept = await prisma.sysDept.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysDeptUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDeptUpdateArgs<ExtArgs>>\n    ): Prisma__SysDeptClient<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysDepts.\n     * @param {SysDeptDeleteManyArgs} args - Arguments to filter SysDepts to delete.\n     * @example\n     * // Delete a few SysDepts\n     * const { count } = await prisma.sysDept.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysDeptDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDeptDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysDepts.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDeptUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysDepts\n     * const sysDept = await prisma.sysDept.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysDeptUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDeptUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysDept.\n     * @param {SysDeptUpsertArgs} args - Arguments to update or create a SysDept.\n     * @example\n     * // Update or create a SysDept\n     * const sysDept = await prisma.sysDept.upsert({\n     *   create: {\n     *     // ... data to create a SysDept\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysDept we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysDeptUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDeptUpsertArgs<ExtArgs>>\n    ): Prisma__SysDeptClient<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysDepts.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDeptCountArgs} args - Arguments to filter SysDepts to count.\n     * @example\n     * // Count the number of SysDepts\n     * const count = await prisma.sysDept.count({\n     *   where: {\n     *     // ... the filter for the SysDepts we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysDeptCountArgs>(\n      args?: Subset<T, SysDeptCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysDeptCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysDept.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDeptAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysDeptAggregateArgs>(args: Subset<T, SysDeptAggregateArgs>): Prisma.PrismaPromise<GetSysDeptAggregateType<T>>\n\n    /**\n     * Group by SysDept.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDeptGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysDeptGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysDeptGroupByArgs['orderBy'] }\n        : { orderBy?: SysDeptGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysDeptGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysDeptGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysDept model\n   */\n  readonly fields: SysDeptFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysDept.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysDeptClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    users<T extends SysDept$usersArgs<ExtArgs> = {}>(args?: Subset<T, SysDept$usersArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    roles<T extends SysDept$rolesArgs<ExtArgs> = {}>(args?: Subset<T, SysDept$rolesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysDept model\n   */ \n  interface SysDeptFieldRefs {\n    readonly deptId: FieldRef<\"SysDept\", 'Int'>\n    readonly parentId: FieldRef<\"SysDept\", 'Int'>\n    readonly ancestors: FieldRef<\"SysDept\", 'String'>\n    readonly deptName: FieldRef<\"SysDept\", 'String'>\n    readonly orderNum: FieldRef<\"SysDept\", 'Int'>\n    readonly leader: FieldRef<\"SysDept\", 'String'>\n    readonly phone: FieldRef<\"SysDept\", 'String'>\n    readonly email: FieldRef<\"SysDept\", 'String'>\n    readonly status: FieldRef<\"SysDept\", 'String'>\n    readonly createBy: FieldRef<\"SysDept\", 'String'>\n    readonly createTime: FieldRef<\"SysDept\", 'String'>\n    readonly updateBy: FieldRef<\"SysDept\", 'String'>\n    readonly updateTime: FieldRef<\"SysDept\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysDept findUnique\n   */\n  export type SysDeptFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDept to fetch.\n     */\n    where: SysDeptWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDept findUniqueOrThrow\n   */\n  export type SysDeptFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDept to fetch.\n     */\n    where: SysDeptWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDept findFirst\n   */\n  export type SysDeptFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDept to fetch.\n     */\n    where?: SysDeptWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDepts to fetch.\n     */\n    orderBy?: SysDeptOrderByWithRelationInput | SysDeptOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysDepts.\n     */\n    cursor?: SysDeptWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDepts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDepts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysDepts.\n     */\n    distinct?: SysDeptScalarFieldEnum | SysDeptScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDept findFirstOrThrow\n   */\n  export type SysDeptFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDept to fetch.\n     */\n    where?: SysDeptWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDepts to fetch.\n     */\n    orderBy?: SysDeptOrderByWithRelationInput | SysDeptOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysDepts.\n     */\n    cursor?: SysDeptWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDepts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDepts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysDepts.\n     */\n    distinct?: SysDeptScalarFieldEnum | SysDeptScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDept findMany\n   */\n  export type SysDeptFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDepts to fetch.\n     */\n    where?: SysDeptWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDepts to fetch.\n     */\n    orderBy?: SysDeptOrderByWithRelationInput | SysDeptOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysDepts.\n     */\n    cursor?: SysDeptWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDepts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDepts.\n     */\n    skip?: number\n    distinct?: SysDeptScalarFieldEnum | SysDeptScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDept create\n   */\n  export type SysDeptCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysDept.\n     */\n    data?: XOR<SysDeptCreateInput, SysDeptUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDept createMany\n   */\n  export type SysDeptCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysDepts.\n     */\n    data: SysDeptCreateManyInput | SysDeptCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysDept update\n   */\n  export type SysDeptUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysDept.\n     */\n    data: XOR<SysDeptUpdateInput, SysDeptUncheckedUpdateInput>\n    /**\n     * Choose, which SysDept to update.\n     */\n    where: SysDeptWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDept updateMany\n   */\n  export type SysDeptUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysDepts.\n     */\n    data: XOR<SysDeptUpdateManyMutationInput, SysDeptUncheckedUpdateManyInput>\n    /**\n     * Filter which SysDepts to update\n     */\n    where?: SysDeptWhereInput\n  }\n\n  /**\n   * SysDept upsert\n   */\n  export type SysDeptUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysDept to update in case it exists.\n     */\n    where: SysDeptWhereUniqueInput\n    /**\n     * In case the SysDept found by the `where` argument doesn't exist, create a new SysDept with this data.\n     */\n    create: XOR<SysDeptCreateInput, SysDeptUncheckedCreateInput>\n    /**\n     * In case the SysDept was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysDeptUpdateInput, SysDeptUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDept delete\n   */\n  export type SysDeptDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n    /**\n     * Filter which SysDept to delete.\n     */\n    where: SysDeptWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDept deleteMany\n   */\n  export type SysDeptDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysDepts to delete\n     */\n    where?: SysDeptWhereInput\n  }\n\n  /**\n   * SysDept.users\n   */\n  export type SysDept$usersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n    where?: SysUserWhereInput\n    orderBy?: SysUserOrderByWithRelationInput | SysUserOrderByWithRelationInput[]\n    cursor?: SysUserWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: SysUserScalarFieldEnum | SysUserScalarFieldEnum[]\n  }\n\n  /**\n   * SysDept.roles\n   */\n  export type SysDept$rolesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    where?: SysRoleDeptWhereInput\n    orderBy?: SysRoleDeptOrderByWithRelationInput | SysRoleDeptOrderByWithRelationInput[]\n    cursor?: SysRoleDeptWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: SysRoleDeptScalarFieldEnum | SysRoleDeptScalarFieldEnum[]\n  }\n\n  /**\n   * SysDept without action\n   */\n  export type SysDeptDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysDictData\n   */\n\n  export type AggregateSysDictData = {\n    _count: SysDictDataCountAggregateOutputType | null\n    _avg: SysDictDataAvgAggregateOutputType | null\n    _sum: SysDictDataSumAggregateOutputType | null\n    _min: SysDictDataMinAggregateOutputType | null\n    _max: SysDictDataMaxAggregateOutputType | null\n  }\n\n  export type SysDictDataAvgAggregateOutputType = {\n    dictCode: number | null\n    dictSort: number | null\n  }\n\n  export type SysDictDataSumAggregateOutputType = {\n    dictCode: number | null\n    dictSort: number | null\n  }\n\n  export type SysDictDataMinAggregateOutputType = {\n    dictCode: number | null\n    dictSort: number | null\n    dictLabel: string | null\n    dictValue: string | null\n    dictType: string | null\n    cssClass: string | null\n    listClass: string | null\n    isDefault: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysDictDataMaxAggregateOutputType = {\n    dictCode: number | null\n    dictSort: number | null\n    dictLabel: string | null\n    dictValue: string | null\n    dictType: string | null\n    cssClass: string | null\n    listClass: string | null\n    isDefault: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysDictDataCountAggregateOutputType = {\n    dictCode: number\n    dictSort: number\n    dictLabel: number\n    dictValue: number\n    dictType: number\n    cssClass: number\n    listClass: number\n    isDefault: number\n    status: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    remark: number\n    _all: number\n  }\n\n\n  export type SysDictDataAvgAggregateInputType = {\n    dictCode?: true\n    dictSort?: true\n  }\n\n  export type SysDictDataSumAggregateInputType = {\n    dictCode?: true\n    dictSort?: true\n  }\n\n  export type SysDictDataMinAggregateInputType = {\n    dictCode?: true\n    dictSort?: true\n    dictLabel?: true\n    dictValue?: true\n    dictType?: true\n    cssClass?: true\n    listClass?: true\n    isDefault?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysDictDataMaxAggregateInputType = {\n    dictCode?: true\n    dictSort?: true\n    dictLabel?: true\n    dictValue?: true\n    dictType?: true\n    cssClass?: true\n    listClass?: true\n    isDefault?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysDictDataCountAggregateInputType = {\n    dictCode?: true\n    dictSort?: true\n    dictLabel?: true\n    dictValue?: true\n    dictType?: true\n    cssClass?: true\n    listClass?: true\n    isDefault?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n    _all?: true\n  }\n\n  export type SysDictDataAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysDictData to aggregate.\n     */\n    where?: SysDictDataWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDictData to fetch.\n     */\n    orderBy?: SysDictDataOrderByWithRelationInput | SysDictDataOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysDictDataWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDictData from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDictData.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysDictData\n    **/\n    _count?: true | SysDictDataCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysDictDataAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysDictDataSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysDictDataMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysDictDataMaxAggregateInputType\n  }\n\n  export type GetSysDictDataAggregateType<T extends SysDictDataAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysDictData]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysDictData[P]>\n      : GetScalarType<T[P], AggregateSysDictData[P]>\n  }\n\n\n\n\n  export type SysDictDataGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysDictDataWhereInput\n    orderBy?: SysDictDataOrderByWithAggregationInput | SysDictDataOrderByWithAggregationInput[]\n    by: SysDictDataScalarFieldEnum[] | SysDictDataScalarFieldEnum\n    having?: SysDictDataScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysDictDataCountAggregateInputType | true\n    _avg?: SysDictDataAvgAggregateInputType\n    _sum?: SysDictDataSumAggregateInputType\n    _min?: SysDictDataMinAggregateInputType\n    _max?: SysDictDataMaxAggregateInputType\n  }\n\n  export type SysDictDataGroupByOutputType = {\n    dictCode: number\n    dictSort: number | null\n    dictLabel: string | null\n    dictValue: string | null\n    dictType: string | null\n    cssClass: string | null\n    listClass: string | null\n    isDefault: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n    _count: SysDictDataCountAggregateOutputType | null\n    _avg: SysDictDataAvgAggregateOutputType | null\n    _sum: SysDictDataSumAggregateOutputType | null\n    _min: SysDictDataMinAggregateOutputType | null\n    _max: SysDictDataMaxAggregateOutputType | null\n  }\n\n  type GetSysDictDataGroupByPayload<T extends SysDictDataGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysDictDataGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysDictDataGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysDictDataGroupByOutputType[P]>\n            : GetScalarType<T[P], SysDictDataGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysDictDataSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    dictCode?: boolean\n    dictSort?: boolean\n    dictLabel?: boolean\n    dictValue?: boolean\n    dictType?: boolean\n    cssClass?: boolean\n    listClass?: boolean\n    isDefault?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n    sysDictType?: boolean | SysDictData$sysDictTypeArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysDictData\"]>\n\n\n  export type SysDictDataSelectScalar = {\n    dictCode?: boolean\n    dictSort?: boolean\n    dictLabel?: boolean\n    dictValue?: boolean\n    dictType?: boolean\n    cssClass?: boolean\n    listClass?: boolean\n    isDefault?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }\n\n  export type SysDictDataOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"dictCode\" | \"dictSort\" | \"dictLabel\" | \"dictValue\" | \"dictType\" | \"cssClass\" | \"listClass\" | \"isDefault\" | \"status\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\" | \"remark\", ExtArgs[\"result\"][\"sysDictData\"]>\n  export type SysDictDataInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    sysDictType?: boolean | SysDictData$sysDictTypeArgs<ExtArgs>\n  }\n\n  export type $SysDictDataPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysDictData\"\n    objects: {\n      sysDictType: Prisma.$SysDictTypePayload<ExtArgs> | null\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      dictCode: number\n      dictSort: number | null\n      dictLabel: string | null\n      dictValue: string | null\n      dictType: string | null\n      cssClass: string | null\n      listClass: string | null\n      isDefault: string | null\n      status: string | null\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n      remark: string | null\n    }, ExtArgs[\"result\"][\"sysDictData\"]>\n    composites: {}\n  }\n\n  type SysDictDataGetPayload<S extends boolean | null | undefined | SysDictDataDefaultArgs> = $Result.GetResult<Prisma.$SysDictDataPayload, S>\n\n  type SysDictDataCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysDictDataFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysDictDataCountAggregateInputType | true\n    }\n\n  export interface SysDictDataDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysDictData'], meta: { name: 'SysDictData' } }\n    /**\n     * Find zero or one SysDictData that matches the filter.\n     * @param {SysDictDataFindUniqueArgs} args - Arguments to find a SysDictData\n     * @example\n     * // Get one SysDictData\n     * const sysDictData = await prisma.sysDictData.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysDictDataFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictDataFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysDictDataClient<$Result.GetResult<Prisma.$SysDictDataPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysDictData that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysDictDataFindUniqueOrThrowArgs} args - Arguments to find a SysDictData\n     * @example\n     * // Get one SysDictData\n     * const sysDictData = await prisma.sysDictData.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysDictDataFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictDataFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysDictDataClient<$Result.GetResult<Prisma.$SysDictDataPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysDictData that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictDataFindFirstArgs} args - Arguments to find a SysDictData\n     * @example\n     * // Get one SysDictData\n     * const sysDictData = await prisma.sysDictData.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysDictDataFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictDataFindFirstArgs<ExtArgs>>\n    ): Prisma__SysDictDataClient<$Result.GetResult<Prisma.$SysDictDataPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysDictData that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictDataFindFirstOrThrowArgs} args - Arguments to find a SysDictData\n     * @example\n     * // Get one SysDictData\n     * const sysDictData = await prisma.sysDictData.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysDictDataFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictDataFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysDictDataClient<$Result.GetResult<Prisma.$SysDictDataPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysDictData that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictDataFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysDictData\n     * const sysDictData = await prisma.sysDictData.findMany()\n     * \n     * // Get first 10 SysDictData\n     * const sysDictData = await prisma.sysDictData.findMany({ take: 10 })\n     * \n     * // Only select the `dictCode`\n     * const sysDictDataWithDictCodeOnly = await prisma.sysDictData.findMany({ select: { dictCode: true } })\n     * \n    **/\n    findMany<T extends SysDictDataFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictDataFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysDictDataPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysDictData.\n     * @param {SysDictDataCreateArgs} args - Arguments to create a SysDictData.\n     * @example\n     * // Create one SysDictData\n     * const SysDictData = await prisma.sysDictData.create({\n     *   data: {\n     *     // ... data to create a SysDictData\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysDictDataCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictDataCreateArgs<ExtArgs>>\n    ): Prisma__SysDictDataClient<$Result.GetResult<Prisma.$SysDictDataPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysDictData.\n     * @param {SysDictDataCreateManyArgs} args - Arguments to create many SysDictData.\n     * @example\n     * // Create many SysDictData\n     * const sysDictData = await prisma.sysDictData.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysDictDataCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictDataCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysDictData.\n     * @param {SysDictDataDeleteArgs} args - Arguments to delete one SysDictData.\n     * @example\n     * // Delete one SysDictData\n     * const SysDictData = await prisma.sysDictData.delete({\n     *   where: {\n     *     // ... filter to delete one SysDictData\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysDictDataDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictDataDeleteArgs<ExtArgs>>\n    ): Prisma__SysDictDataClient<$Result.GetResult<Prisma.$SysDictDataPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysDictData.\n     * @param {SysDictDataUpdateArgs} args - Arguments to update one SysDictData.\n     * @example\n     * // Update one SysDictData\n     * const sysDictData = await prisma.sysDictData.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysDictDataUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictDataUpdateArgs<ExtArgs>>\n    ): Prisma__SysDictDataClient<$Result.GetResult<Prisma.$SysDictDataPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysDictData.\n     * @param {SysDictDataDeleteManyArgs} args - Arguments to filter SysDictData to delete.\n     * @example\n     * // Delete a few SysDictData\n     * const { count } = await prisma.sysDictData.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysDictDataDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictDataDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysDictData.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictDataUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysDictData\n     * const sysDictData = await prisma.sysDictData.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysDictDataUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictDataUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysDictData.\n     * @param {SysDictDataUpsertArgs} args - Arguments to update or create a SysDictData.\n     * @example\n     * // Update or create a SysDictData\n     * const sysDictData = await prisma.sysDictData.upsert({\n     *   create: {\n     *     // ... data to create a SysDictData\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysDictData we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysDictDataUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictDataUpsertArgs<ExtArgs>>\n    ): Prisma__SysDictDataClient<$Result.GetResult<Prisma.$SysDictDataPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysDictData.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictDataCountArgs} args - Arguments to filter SysDictData to count.\n     * @example\n     * // Count the number of SysDictData\n     * const count = await prisma.sysDictData.count({\n     *   where: {\n     *     // ... the filter for the SysDictData we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysDictDataCountArgs>(\n      args?: Subset<T, SysDictDataCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysDictDataCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysDictData.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictDataAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysDictDataAggregateArgs>(args: Subset<T, SysDictDataAggregateArgs>): Prisma.PrismaPromise<GetSysDictDataAggregateType<T>>\n\n    /**\n     * Group by SysDictData.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictDataGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysDictDataGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysDictDataGroupByArgs['orderBy'] }\n        : { orderBy?: SysDictDataGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysDictDataGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysDictDataGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysDictData model\n   */\n  readonly fields: SysDictDataFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysDictData.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysDictDataClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    sysDictType<T extends SysDictData$sysDictTypeArgs<ExtArgs> = {}>(args?: Subset<T, SysDictData$sysDictTypeArgs<ExtArgs>>): Prisma__SysDictTypeClient<$Result.GetResult<Prisma.$SysDictTypePayload<ExtArgs>, T, 'findUniqueOrThrow'> | null, null, ExtArgs>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysDictData model\n   */ \n  interface SysDictDataFieldRefs {\n    readonly dictCode: FieldRef<\"SysDictData\", 'Int'>\n    readonly dictSort: FieldRef<\"SysDictData\", 'Int'>\n    readonly dictLabel: FieldRef<\"SysDictData\", 'String'>\n    readonly dictValue: FieldRef<\"SysDictData\", 'String'>\n    readonly dictType: FieldRef<\"SysDictData\", 'String'>\n    readonly cssClass: FieldRef<\"SysDictData\", 'String'>\n    readonly listClass: FieldRef<\"SysDictData\", 'String'>\n    readonly isDefault: FieldRef<\"SysDictData\", 'String'>\n    readonly status: FieldRef<\"SysDictData\", 'String'>\n    readonly createBy: FieldRef<\"SysDictData\", 'String'>\n    readonly createTime: FieldRef<\"SysDictData\", 'String'>\n    readonly updateBy: FieldRef<\"SysDictData\", 'String'>\n    readonly updateTime: FieldRef<\"SysDictData\", 'String'>\n    readonly remark: FieldRef<\"SysDictData\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysDictData findUnique\n   */\n  export type SysDictDataFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDictData to fetch.\n     */\n    where: SysDictDataWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictData findUniqueOrThrow\n   */\n  export type SysDictDataFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDictData to fetch.\n     */\n    where: SysDictDataWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictData findFirst\n   */\n  export type SysDictDataFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDictData to fetch.\n     */\n    where?: SysDictDataWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDictData to fetch.\n     */\n    orderBy?: SysDictDataOrderByWithRelationInput | SysDictDataOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysDictData.\n     */\n    cursor?: SysDictDataWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDictData from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDictData.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysDictData.\n     */\n    distinct?: SysDictDataScalarFieldEnum | SysDictDataScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictData findFirstOrThrow\n   */\n  export type SysDictDataFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDictData to fetch.\n     */\n    where?: SysDictDataWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDictData to fetch.\n     */\n    orderBy?: SysDictDataOrderByWithRelationInput | SysDictDataOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysDictData.\n     */\n    cursor?: SysDictDataWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDictData from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDictData.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysDictData.\n     */\n    distinct?: SysDictDataScalarFieldEnum | SysDictDataScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictData findMany\n   */\n  export type SysDictDataFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDictData to fetch.\n     */\n    where?: SysDictDataWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDictData to fetch.\n     */\n    orderBy?: SysDictDataOrderByWithRelationInput | SysDictDataOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysDictData.\n     */\n    cursor?: SysDictDataWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDictData from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDictData.\n     */\n    skip?: number\n    distinct?: SysDictDataScalarFieldEnum | SysDictDataScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictData create\n   */\n  export type SysDictDataCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysDictData.\n     */\n    data?: XOR<SysDictDataCreateInput, SysDictDataUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictData createMany\n   */\n  export type SysDictDataCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysDictData.\n     */\n    data: SysDictDataCreateManyInput | SysDictDataCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysDictData update\n   */\n  export type SysDictDataUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysDictData.\n     */\n    data: XOR<SysDictDataUpdateInput, SysDictDataUncheckedUpdateInput>\n    /**\n     * Choose, which SysDictData to update.\n     */\n    where: SysDictDataWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictData updateMany\n   */\n  export type SysDictDataUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysDictData.\n     */\n    data: XOR<SysDictDataUpdateManyMutationInput, SysDictDataUncheckedUpdateManyInput>\n    /**\n     * Filter which SysDictData to update\n     */\n    where?: SysDictDataWhereInput\n  }\n\n  /**\n   * SysDictData upsert\n   */\n  export type SysDictDataUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysDictData to update in case it exists.\n     */\n    where: SysDictDataWhereUniqueInput\n    /**\n     * In case the SysDictData found by the `where` argument doesn't exist, create a new SysDictData with this data.\n     */\n    create: XOR<SysDictDataCreateInput, SysDictDataUncheckedCreateInput>\n    /**\n     * In case the SysDictData was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysDictDataUpdateInput, SysDictDataUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictData delete\n   */\n  export type SysDictDataDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n    /**\n     * Filter which SysDictData to delete.\n     */\n    where: SysDictDataWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictData deleteMany\n   */\n  export type SysDictDataDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysDictData to delete\n     */\n    where?: SysDictDataWhereInput\n  }\n\n  /**\n   * SysDictData.sysDictType\n   */\n  export type SysDictData$sysDictTypeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n    where?: SysDictTypeWhereInput\n  }\n\n  /**\n   * SysDictData without action\n   */\n  export type SysDictDataDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysDictType\n   */\n\n  export type AggregateSysDictType = {\n    _count: SysDictTypeCountAggregateOutputType | null\n    _avg: SysDictTypeAvgAggregateOutputType | null\n    _sum: SysDictTypeSumAggregateOutputType | null\n    _min: SysDictTypeMinAggregateOutputType | null\n    _max: SysDictTypeMaxAggregateOutputType | null\n  }\n\n  export type SysDictTypeAvgAggregateOutputType = {\n    dictId: number | null\n  }\n\n  export type SysDictTypeSumAggregateOutputType = {\n    dictId: number | null\n  }\n\n  export type SysDictTypeMinAggregateOutputType = {\n    dictId: number | null\n    dictName: string | null\n    dictType: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysDictTypeMaxAggregateOutputType = {\n    dictId: number | null\n    dictName: string | null\n    dictType: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysDictTypeCountAggregateOutputType = {\n    dictId: number\n    dictName: number\n    dictType: number\n    status: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    remark: number\n    _all: number\n  }\n\n\n  export type SysDictTypeAvgAggregateInputType = {\n    dictId?: true\n  }\n\n  export type SysDictTypeSumAggregateInputType = {\n    dictId?: true\n  }\n\n  export type SysDictTypeMinAggregateInputType = {\n    dictId?: true\n    dictName?: true\n    dictType?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysDictTypeMaxAggregateInputType = {\n    dictId?: true\n    dictName?: true\n    dictType?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysDictTypeCountAggregateInputType = {\n    dictId?: true\n    dictName?: true\n    dictType?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n    _all?: true\n  }\n\n  export type SysDictTypeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysDictType to aggregate.\n     */\n    where?: SysDictTypeWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDictTypes to fetch.\n     */\n    orderBy?: SysDictTypeOrderByWithRelationInput | SysDictTypeOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysDictTypeWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDictTypes from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDictTypes.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysDictTypes\n    **/\n    _count?: true | SysDictTypeCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysDictTypeAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysDictTypeSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysDictTypeMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysDictTypeMaxAggregateInputType\n  }\n\n  export type GetSysDictTypeAggregateType<T extends SysDictTypeAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysDictType]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysDictType[P]>\n      : GetScalarType<T[P], AggregateSysDictType[P]>\n  }\n\n\n\n\n  export type SysDictTypeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysDictTypeWhereInput\n    orderBy?: SysDictTypeOrderByWithAggregationInput | SysDictTypeOrderByWithAggregationInput[]\n    by: SysDictTypeScalarFieldEnum[] | SysDictTypeScalarFieldEnum\n    having?: SysDictTypeScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysDictTypeCountAggregateInputType | true\n    _avg?: SysDictTypeAvgAggregateInputType\n    _sum?: SysDictTypeSumAggregateInputType\n    _min?: SysDictTypeMinAggregateInputType\n    _max?: SysDictTypeMaxAggregateInputType\n  }\n\n  export type SysDictTypeGroupByOutputType = {\n    dictId: number\n    dictName: string | null\n    dictType: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n    _count: SysDictTypeCountAggregateOutputType | null\n    _avg: SysDictTypeAvgAggregateOutputType | null\n    _sum: SysDictTypeSumAggregateOutputType | null\n    _min: SysDictTypeMinAggregateOutputType | null\n    _max: SysDictTypeMaxAggregateOutputType | null\n  }\n\n  type GetSysDictTypeGroupByPayload<T extends SysDictTypeGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysDictTypeGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysDictTypeGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysDictTypeGroupByOutputType[P]>\n            : GetScalarType<T[P], SysDictTypeGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysDictTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    dictId?: boolean\n    dictName?: boolean\n    dictType?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n    dictDatas?: boolean | SysDictType$dictDatasArgs<ExtArgs>\n    _count?: boolean | SysDictTypeCountOutputTypeDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysDictType\"]>\n\n\n  export type SysDictTypeSelectScalar = {\n    dictId?: boolean\n    dictName?: boolean\n    dictType?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }\n\n  export type SysDictTypeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"dictId\" | \"dictName\" | \"dictType\" | \"status\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\" | \"remark\", ExtArgs[\"result\"][\"sysDictType\"]>\n  export type SysDictTypeInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    dictDatas?: boolean | SysDictType$dictDatasArgs<ExtArgs>\n    _count?: boolean | SysDictTypeCountOutputTypeDefaultArgs<ExtArgs>\n  }\n\n  export type $SysDictTypePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysDictType\"\n    objects: {\n      dictDatas: Prisma.$SysDictDataPayload<ExtArgs>[]\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      dictId: number\n      dictName: string | null\n      dictType: string | null\n      status: string | null\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n      remark: string | null\n    }, ExtArgs[\"result\"][\"sysDictType\"]>\n    composites: {}\n  }\n\n  type SysDictTypeGetPayload<S extends boolean | null | undefined | SysDictTypeDefaultArgs> = $Result.GetResult<Prisma.$SysDictTypePayload, S>\n\n  type SysDictTypeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysDictTypeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysDictTypeCountAggregateInputType | true\n    }\n\n  export interface SysDictTypeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysDictType'], meta: { name: 'SysDictType' } }\n    /**\n     * Find zero or one SysDictType that matches the filter.\n     * @param {SysDictTypeFindUniqueArgs} args - Arguments to find a SysDictType\n     * @example\n     * // Get one SysDictType\n     * const sysDictType = await prisma.sysDictType.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysDictTypeFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictTypeFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysDictTypeClient<$Result.GetResult<Prisma.$SysDictTypePayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysDictType that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysDictTypeFindUniqueOrThrowArgs} args - Arguments to find a SysDictType\n     * @example\n     * // Get one SysDictType\n     * const sysDictType = await prisma.sysDictType.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysDictTypeFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictTypeFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysDictTypeClient<$Result.GetResult<Prisma.$SysDictTypePayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysDictType that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictTypeFindFirstArgs} args - Arguments to find a SysDictType\n     * @example\n     * // Get one SysDictType\n     * const sysDictType = await prisma.sysDictType.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysDictTypeFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictTypeFindFirstArgs<ExtArgs>>\n    ): Prisma__SysDictTypeClient<$Result.GetResult<Prisma.$SysDictTypePayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysDictType that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictTypeFindFirstOrThrowArgs} args - Arguments to find a SysDictType\n     * @example\n     * // Get one SysDictType\n     * const sysDictType = await prisma.sysDictType.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysDictTypeFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictTypeFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysDictTypeClient<$Result.GetResult<Prisma.$SysDictTypePayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysDictTypes that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictTypeFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysDictTypes\n     * const sysDictTypes = await prisma.sysDictType.findMany()\n     * \n     * // Get first 10 SysDictTypes\n     * const sysDictTypes = await prisma.sysDictType.findMany({ take: 10 })\n     * \n     * // Only select the `dictId`\n     * const sysDictTypeWithDictIdOnly = await prisma.sysDictType.findMany({ select: { dictId: true } })\n     * \n    **/\n    findMany<T extends SysDictTypeFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictTypeFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysDictTypePayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysDictType.\n     * @param {SysDictTypeCreateArgs} args - Arguments to create a SysDictType.\n     * @example\n     * // Create one SysDictType\n     * const SysDictType = await prisma.sysDictType.create({\n     *   data: {\n     *     // ... data to create a SysDictType\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysDictTypeCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictTypeCreateArgs<ExtArgs>>\n    ): Prisma__SysDictTypeClient<$Result.GetResult<Prisma.$SysDictTypePayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysDictTypes.\n     * @param {SysDictTypeCreateManyArgs} args - Arguments to create many SysDictTypes.\n     * @example\n     * // Create many SysDictTypes\n     * const sysDictType = await prisma.sysDictType.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysDictTypeCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictTypeCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysDictType.\n     * @param {SysDictTypeDeleteArgs} args - Arguments to delete one SysDictType.\n     * @example\n     * // Delete one SysDictType\n     * const SysDictType = await prisma.sysDictType.delete({\n     *   where: {\n     *     // ... filter to delete one SysDictType\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysDictTypeDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictTypeDeleteArgs<ExtArgs>>\n    ): Prisma__SysDictTypeClient<$Result.GetResult<Prisma.$SysDictTypePayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysDictType.\n     * @param {SysDictTypeUpdateArgs} args - Arguments to update one SysDictType.\n     * @example\n     * // Update one SysDictType\n     * const sysDictType = await prisma.sysDictType.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysDictTypeUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictTypeUpdateArgs<ExtArgs>>\n    ): Prisma__SysDictTypeClient<$Result.GetResult<Prisma.$SysDictTypePayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysDictTypes.\n     * @param {SysDictTypeDeleteManyArgs} args - Arguments to filter SysDictTypes to delete.\n     * @example\n     * // Delete a few SysDictTypes\n     * const { count } = await prisma.sysDictType.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysDictTypeDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysDictTypeDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysDictTypes.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictTypeUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysDictTypes\n     * const sysDictType = await prisma.sysDictType.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysDictTypeUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictTypeUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysDictType.\n     * @param {SysDictTypeUpsertArgs} args - Arguments to update or create a SysDictType.\n     * @example\n     * // Update or create a SysDictType\n     * const sysDictType = await prisma.sysDictType.upsert({\n     *   create: {\n     *     // ... data to create a SysDictType\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysDictType we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysDictTypeUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysDictTypeUpsertArgs<ExtArgs>>\n    ): Prisma__SysDictTypeClient<$Result.GetResult<Prisma.$SysDictTypePayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysDictTypes.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictTypeCountArgs} args - Arguments to filter SysDictTypes to count.\n     * @example\n     * // Count the number of SysDictTypes\n     * const count = await prisma.sysDictType.count({\n     *   where: {\n     *     // ... the filter for the SysDictTypes we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysDictTypeCountArgs>(\n      args?: Subset<T, SysDictTypeCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysDictTypeCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysDictType.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictTypeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysDictTypeAggregateArgs>(args: Subset<T, SysDictTypeAggregateArgs>): Prisma.PrismaPromise<GetSysDictTypeAggregateType<T>>\n\n    /**\n     * Group by SysDictType.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysDictTypeGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysDictTypeGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysDictTypeGroupByArgs['orderBy'] }\n        : { orderBy?: SysDictTypeGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysDictTypeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysDictTypeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysDictType model\n   */\n  readonly fields: SysDictTypeFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysDictType.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysDictTypeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    dictDatas<T extends SysDictType$dictDatasArgs<ExtArgs> = {}>(args?: Subset<T, SysDictType$dictDatasArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysDictDataPayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysDictType model\n   */ \n  interface SysDictTypeFieldRefs {\n    readonly dictId: FieldRef<\"SysDictType\", 'Int'>\n    readonly dictName: FieldRef<\"SysDictType\", 'String'>\n    readonly dictType: FieldRef<\"SysDictType\", 'String'>\n    readonly status: FieldRef<\"SysDictType\", 'String'>\n    readonly createBy: FieldRef<\"SysDictType\", 'String'>\n    readonly createTime: FieldRef<\"SysDictType\", 'String'>\n    readonly updateBy: FieldRef<\"SysDictType\", 'String'>\n    readonly updateTime: FieldRef<\"SysDictType\", 'String'>\n    readonly remark: FieldRef<\"SysDictType\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysDictType findUnique\n   */\n  export type SysDictTypeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDictType to fetch.\n     */\n    where: SysDictTypeWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictType findUniqueOrThrow\n   */\n  export type SysDictTypeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDictType to fetch.\n     */\n    where: SysDictTypeWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictType findFirst\n   */\n  export type SysDictTypeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDictType to fetch.\n     */\n    where?: SysDictTypeWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDictTypes to fetch.\n     */\n    orderBy?: SysDictTypeOrderByWithRelationInput | SysDictTypeOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysDictTypes.\n     */\n    cursor?: SysDictTypeWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDictTypes from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDictTypes.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysDictTypes.\n     */\n    distinct?: SysDictTypeScalarFieldEnum | SysDictTypeScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictType findFirstOrThrow\n   */\n  export type SysDictTypeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDictType to fetch.\n     */\n    where?: SysDictTypeWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDictTypes to fetch.\n     */\n    orderBy?: SysDictTypeOrderByWithRelationInput | SysDictTypeOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysDictTypes.\n     */\n    cursor?: SysDictTypeWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDictTypes from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDictTypes.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysDictTypes.\n     */\n    distinct?: SysDictTypeScalarFieldEnum | SysDictTypeScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictType findMany\n   */\n  export type SysDictTypeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n    /**\n     * Filter, which SysDictTypes to fetch.\n     */\n    where?: SysDictTypeWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysDictTypes to fetch.\n     */\n    orderBy?: SysDictTypeOrderByWithRelationInput | SysDictTypeOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysDictTypes.\n     */\n    cursor?: SysDictTypeWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysDictTypes from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysDictTypes.\n     */\n    skip?: number\n    distinct?: SysDictTypeScalarFieldEnum | SysDictTypeScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictType create\n   */\n  export type SysDictTypeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysDictType.\n     */\n    data?: XOR<SysDictTypeCreateInput, SysDictTypeUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictType createMany\n   */\n  export type SysDictTypeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysDictTypes.\n     */\n    data: SysDictTypeCreateManyInput | SysDictTypeCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysDictType update\n   */\n  export type SysDictTypeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysDictType.\n     */\n    data: XOR<SysDictTypeUpdateInput, SysDictTypeUncheckedUpdateInput>\n    /**\n     * Choose, which SysDictType to update.\n     */\n    where: SysDictTypeWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictType updateMany\n   */\n  export type SysDictTypeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysDictTypes.\n     */\n    data: XOR<SysDictTypeUpdateManyMutationInput, SysDictTypeUncheckedUpdateManyInput>\n    /**\n     * Filter which SysDictTypes to update\n     */\n    where?: SysDictTypeWhereInput\n  }\n\n  /**\n   * SysDictType upsert\n   */\n  export type SysDictTypeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysDictType to update in case it exists.\n     */\n    where: SysDictTypeWhereUniqueInput\n    /**\n     * In case the SysDictType found by the `where` argument doesn't exist, create a new SysDictType with this data.\n     */\n    create: XOR<SysDictTypeCreateInput, SysDictTypeUncheckedCreateInput>\n    /**\n     * In case the SysDictType was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysDictTypeUpdateInput, SysDictTypeUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictType delete\n   */\n  export type SysDictTypeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n    /**\n     * Filter which SysDictType to delete.\n     */\n    where: SysDictTypeWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysDictType deleteMany\n   */\n  export type SysDictTypeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysDictTypes to delete\n     */\n    where?: SysDictTypeWhereInput\n  }\n\n  /**\n   * SysDictType.dictDatas\n   */\n  export type SysDictType$dictDatasArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictData\n     */\n    select?: SysDictDataSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictData\n     */\n    omit?: SysDictDataOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictDataInclude<ExtArgs> | null\n    where?: SysDictDataWhereInput\n    orderBy?: SysDictDataOrderByWithRelationInput | SysDictDataOrderByWithRelationInput[]\n    cursor?: SysDictDataWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: SysDictDataScalarFieldEnum | SysDictDataScalarFieldEnum[]\n  }\n\n  /**\n   * SysDictType without action\n   */\n  export type SysDictTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDictType\n     */\n    select?: SysDictTypeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDictType\n     */\n    omit?: SysDictTypeOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDictTypeInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysLogininfor\n   */\n\n  export type AggregateSysLogininfor = {\n    _count: SysLogininforCountAggregateOutputType | null\n    _avg: SysLogininforAvgAggregateOutputType | null\n    _sum: SysLogininforSumAggregateOutputType | null\n    _min: SysLogininforMinAggregateOutputType | null\n    _max: SysLogininforMaxAggregateOutputType | null\n  }\n\n  export type SysLogininforAvgAggregateOutputType = {\n    infoId: number | null\n  }\n\n  export type SysLogininforSumAggregateOutputType = {\n    infoId: number | null\n  }\n\n  export type SysLogininforMinAggregateOutputType = {\n    infoId: number | null\n    userName: string | null\n    ipaddr: string | null\n    loginLocation: string | null\n    browser: string | null\n    os: string | null\n    status: string | null\n    msg: string | null\n    loginTime: string | null\n  }\n\n  export type SysLogininforMaxAggregateOutputType = {\n    infoId: number | null\n    userName: string | null\n    ipaddr: string | null\n    loginLocation: string | null\n    browser: string | null\n    os: string | null\n    status: string | null\n    msg: string | null\n    loginTime: string | null\n  }\n\n  export type SysLogininforCountAggregateOutputType = {\n    infoId: number\n    userName: number\n    ipaddr: number\n    loginLocation: number\n    browser: number\n    os: number\n    status: number\n    msg: number\n    loginTime: number\n    _all: number\n  }\n\n\n  export type SysLogininforAvgAggregateInputType = {\n    infoId?: true\n  }\n\n  export type SysLogininforSumAggregateInputType = {\n    infoId?: true\n  }\n\n  export type SysLogininforMinAggregateInputType = {\n    infoId?: true\n    userName?: true\n    ipaddr?: true\n    loginLocation?: true\n    browser?: true\n    os?: true\n    status?: true\n    msg?: true\n    loginTime?: true\n  }\n\n  export type SysLogininforMaxAggregateInputType = {\n    infoId?: true\n    userName?: true\n    ipaddr?: true\n    loginLocation?: true\n    browser?: true\n    os?: true\n    status?: true\n    msg?: true\n    loginTime?: true\n  }\n\n  export type SysLogininforCountAggregateInputType = {\n    infoId?: true\n    userName?: true\n    ipaddr?: true\n    loginLocation?: true\n    browser?: true\n    os?: true\n    status?: true\n    msg?: true\n    loginTime?: true\n    _all?: true\n  }\n\n  export type SysLogininforAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysLogininfor to aggregate.\n     */\n    where?: SysLogininforWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysLogininfors to fetch.\n     */\n    orderBy?: SysLogininforOrderByWithRelationInput | SysLogininforOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysLogininforWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysLogininfors from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysLogininfors.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysLogininfors\n    **/\n    _count?: true | SysLogininforCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysLogininforAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysLogininforSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysLogininforMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysLogininforMaxAggregateInputType\n  }\n\n  export type GetSysLogininforAggregateType<T extends SysLogininforAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysLogininfor]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysLogininfor[P]>\n      : GetScalarType<T[P], AggregateSysLogininfor[P]>\n  }\n\n\n\n\n  export type SysLogininforGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysLogininforWhereInput\n    orderBy?: SysLogininforOrderByWithAggregationInput | SysLogininforOrderByWithAggregationInput[]\n    by: SysLogininforScalarFieldEnum[] | SysLogininforScalarFieldEnum\n    having?: SysLogininforScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysLogininforCountAggregateInputType | true\n    _avg?: SysLogininforAvgAggregateInputType\n    _sum?: SysLogininforSumAggregateInputType\n    _min?: SysLogininforMinAggregateInputType\n    _max?: SysLogininforMaxAggregateInputType\n  }\n\n  export type SysLogininforGroupByOutputType = {\n    infoId: number\n    userName: string | null\n    ipaddr: string | null\n    loginLocation: string | null\n    browser: string | null\n    os: string | null\n    status: string | null\n    msg: string | null\n    loginTime: string | null\n    _count: SysLogininforCountAggregateOutputType | null\n    _avg: SysLogininforAvgAggregateOutputType | null\n    _sum: SysLogininforSumAggregateOutputType | null\n    _min: SysLogininforMinAggregateOutputType | null\n    _max: SysLogininforMaxAggregateOutputType | null\n  }\n\n  type GetSysLogininforGroupByPayload<T extends SysLogininforGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysLogininforGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysLogininforGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysLogininforGroupByOutputType[P]>\n            : GetScalarType<T[P], SysLogininforGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysLogininforSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    infoId?: boolean\n    userName?: boolean\n    ipaddr?: boolean\n    loginLocation?: boolean\n    browser?: boolean\n    os?: boolean\n    status?: boolean\n    msg?: boolean\n    loginTime?: boolean\n  }, ExtArgs[\"result\"][\"sysLogininfor\"]>\n\n\n  export type SysLogininforSelectScalar = {\n    infoId?: boolean\n    userName?: boolean\n    ipaddr?: boolean\n    loginLocation?: boolean\n    browser?: boolean\n    os?: boolean\n    status?: boolean\n    msg?: boolean\n    loginTime?: boolean\n  }\n\n  export type SysLogininforOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"infoId\" | \"userName\" | \"ipaddr\" | \"loginLocation\" | \"browser\" | \"os\" | \"status\" | \"msg\" | \"loginTime\", ExtArgs[\"result\"][\"sysLogininfor\"]>\n\n  export type $SysLogininforPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysLogininfor\"\n    objects: {}\n    scalars: $Extensions.GetPayloadResult<{\n      infoId: number\n      userName: string | null\n      ipaddr: string | null\n      loginLocation: string | null\n      browser: string | null\n      os: string | null\n      status: string | null\n      msg: string | null\n      loginTime: string | null\n    }, ExtArgs[\"result\"][\"sysLogininfor\"]>\n    composites: {}\n  }\n\n  type SysLogininforGetPayload<S extends boolean | null | undefined | SysLogininforDefaultArgs> = $Result.GetResult<Prisma.$SysLogininforPayload, S>\n\n  type SysLogininforCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysLogininforFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysLogininforCountAggregateInputType | true\n    }\n\n  export interface SysLogininforDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysLogininfor'], meta: { name: 'SysLogininfor' } }\n    /**\n     * Find zero or one SysLogininfor that matches the filter.\n     * @param {SysLogininforFindUniqueArgs} args - Arguments to find a SysLogininfor\n     * @example\n     * // Get one SysLogininfor\n     * const sysLogininfor = await prisma.sysLogininfor.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysLogininforFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysLogininforFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysLogininforClient<$Result.GetResult<Prisma.$SysLogininforPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysLogininfor that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysLogininforFindUniqueOrThrowArgs} args - Arguments to find a SysLogininfor\n     * @example\n     * // Get one SysLogininfor\n     * const sysLogininfor = await prisma.sysLogininfor.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysLogininforFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysLogininforFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysLogininforClient<$Result.GetResult<Prisma.$SysLogininforPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysLogininfor that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysLogininforFindFirstArgs} args - Arguments to find a SysLogininfor\n     * @example\n     * // Get one SysLogininfor\n     * const sysLogininfor = await prisma.sysLogininfor.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysLogininforFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysLogininforFindFirstArgs<ExtArgs>>\n    ): Prisma__SysLogininforClient<$Result.GetResult<Prisma.$SysLogininforPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysLogininfor that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysLogininforFindFirstOrThrowArgs} args - Arguments to find a SysLogininfor\n     * @example\n     * // Get one SysLogininfor\n     * const sysLogininfor = await prisma.sysLogininfor.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysLogininforFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysLogininforFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysLogininforClient<$Result.GetResult<Prisma.$SysLogininforPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysLogininfors that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysLogininforFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysLogininfors\n     * const sysLogininfors = await prisma.sysLogininfor.findMany()\n     * \n     * // Get first 10 SysLogininfors\n     * const sysLogininfors = await prisma.sysLogininfor.findMany({ take: 10 })\n     * \n     * // Only select the `infoId`\n     * const sysLogininforWithInfoIdOnly = await prisma.sysLogininfor.findMany({ select: { infoId: true } })\n     * \n    **/\n    findMany<T extends SysLogininforFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysLogininforFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysLogininforPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysLogininfor.\n     * @param {SysLogininforCreateArgs} args - Arguments to create a SysLogininfor.\n     * @example\n     * // Create one SysLogininfor\n     * const SysLogininfor = await prisma.sysLogininfor.create({\n     *   data: {\n     *     // ... data to create a SysLogininfor\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysLogininforCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysLogininforCreateArgs<ExtArgs>>\n    ): Prisma__SysLogininforClient<$Result.GetResult<Prisma.$SysLogininforPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysLogininfors.\n     * @param {SysLogininforCreateManyArgs} args - Arguments to create many SysLogininfors.\n     * @example\n     * // Create many SysLogininfors\n     * const sysLogininfor = await prisma.sysLogininfor.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysLogininforCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysLogininforCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysLogininfor.\n     * @param {SysLogininforDeleteArgs} args - Arguments to delete one SysLogininfor.\n     * @example\n     * // Delete one SysLogininfor\n     * const SysLogininfor = await prisma.sysLogininfor.delete({\n     *   where: {\n     *     // ... filter to delete one SysLogininfor\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysLogininforDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysLogininforDeleteArgs<ExtArgs>>\n    ): Prisma__SysLogininforClient<$Result.GetResult<Prisma.$SysLogininforPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysLogininfor.\n     * @param {SysLogininforUpdateArgs} args - Arguments to update one SysLogininfor.\n     * @example\n     * // Update one SysLogininfor\n     * const sysLogininfor = await prisma.sysLogininfor.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysLogininforUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysLogininforUpdateArgs<ExtArgs>>\n    ): Prisma__SysLogininforClient<$Result.GetResult<Prisma.$SysLogininforPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysLogininfors.\n     * @param {SysLogininforDeleteManyArgs} args - Arguments to filter SysLogininfors to delete.\n     * @example\n     * // Delete a few SysLogininfors\n     * const { count } = await prisma.sysLogininfor.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysLogininforDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysLogininforDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysLogininfors.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysLogininforUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysLogininfors\n     * const sysLogininfor = await prisma.sysLogininfor.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysLogininforUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysLogininforUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysLogininfor.\n     * @param {SysLogininforUpsertArgs} args - Arguments to update or create a SysLogininfor.\n     * @example\n     * // Update or create a SysLogininfor\n     * const sysLogininfor = await prisma.sysLogininfor.upsert({\n     *   create: {\n     *     // ... data to create a SysLogininfor\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysLogininfor we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysLogininforUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysLogininforUpsertArgs<ExtArgs>>\n    ): Prisma__SysLogininforClient<$Result.GetResult<Prisma.$SysLogininforPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysLogininfors.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysLogininforCountArgs} args - Arguments to filter SysLogininfors to count.\n     * @example\n     * // Count the number of SysLogininfors\n     * const count = await prisma.sysLogininfor.count({\n     *   where: {\n     *     // ... the filter for the SysLogininfors we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysLogininforCountArgs>(\n      args?: Subset<T, SysLogininforCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysLogininforCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysLogininfor.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysLogininforAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysLogininforAggregateArgs>(args: Subset<T, SysLogininforAggregateArgs>): Prisma.PrismaPromise<GetSysLogininforAggregateType<T>>\n\n    /**\n     * Group by SysLogininfor.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysLogininforGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysLogininforGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysLogininforGroupByArgs['orderBy'] }\n        : { orderBy?: SysLogininforGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysLogininforGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysLogininforGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysLogininfor model\n   */\n  readonly fields: SysLogininforFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysLogininfor.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysLogininforClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysLogininfor model\n   */ \n  interface SysLogininforFieldRefs {\n    readonly infoId: FieldRef<\"SysLogininfor\", 'Int'>\n    readonly userName: FieldRef<\"SysLogininfor\", 'String'>\n    readonly ipaddr: FieldRef<\"SysLogininfor\", 'String'>\n    readonly loginLocation: FieldRef<\"SysLogininfor\", 'String'>\n    readonly browser: FieldRef<\"SysLogininfor\", 'String'>\n    readonly os: FieldRef<\"SysLogininfor\", 'String'>\n    readonly status: FieldRef<\"SysLogininfor\", 'String'>\n    readonly msg: FieldRef<\"SysLogininfor\", 'String'>\n    readonly loginTime: FieldRef<\"SysLogininfor\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysLogininfor findUnique\n   */\n  export type SysLogininforFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysLogininfor\n     */\n    select?: SysLogininforSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysLogininfor\n     */\n    omit?: SysLogininforOmit<ExtArgs> | null\n    /**\n     * Filter, which SysLogininfor to fetch.\n     */\n    where: SysLogininforWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysLogininfor findUniqueOrThrow\n   */\n  export type SysLogininforFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysLogininfor\n     */\n    select?: SysLogininforSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysLogininfor\n     */\n    omit?: SysLogininforOmit<ExtArgs> | null\n    /**\n     * Filter, which SysLogininfor to fetch.\n     */\n    where: SysLogininforWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysLogininfor findFirst\n   */\n  export type SysLogininforFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysLogininfor\n     */\n    select?: SysLogininforSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysLogininfor\n     */\n    omit?: SysLogininforOmit<ExtArgs> | null\n    /**\n     * Filter, which SysLogininfor to fetch.\n     */\n    where?: SysLogininforWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysLogininfors to fetch.\n     */\n    orderBy?: SysLogininforOrderByWithRelationInput | SysLogininforOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysLogininfors.\n     */\n    cursor?: SysLogininforWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysLogininfors from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysLogininfors.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysLogininfors.\n     */\n    distinct?: SysLogininforScalarFieldEnum | SysLogininforScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysLogininfor findFirstOrThrow\n   */\n  export type SysLogininforFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysLogininfor\n     */\n    select?: SysLogininforSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysLogininfor\n     */\n    omit?: SysLogininforOmit<ExtArgs> | null\n    /**\n     * Filter, which SysLogininfor to fetch.\n     */\n    where?: SysLogininforWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysLogininfors to fetch.\n     */\n    orderBy?: SysLogininforOrderByWithRelationInput | SysLogininforOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysLogininfors.\n     */\n    cursor?: SysLogininforWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysLogininfors from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysLogininfors.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysLogininfors.\n     */\n    distinct?: SysLogininforScalarFieldEnum | SysLogininforScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysLogininfor findMany\n   */\n  export type SysLogininforFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysLogininfor\n     */\n    select?: SysLogininforSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysLogininfor\n     */\n    omit?: SysLogininforOmit<ExtArgs> | null\n    /**\n     * Filter, which SysLogininfors to fetch.\n     */\n    where?: SysLogininforWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysLogininfors to fetch.\n     */\n    orderBy?: SysLogininforOrderByWithRelationInput | SysLogininforOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysLogininfors.\n     */\n    cursor?: SysLogininforWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysLogininfors from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysLogininfors.\n     */\n    skip?: number\n    distinct?: SysLogininforScalarFieldEnum | SysLogininforScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysLogininfor create\n   */\n  export type SysLogininforCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysLogininfor\n     */\n    select?: SysLogininforSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysLogininfor\n     */\n    omit?: SysLogininforOmit<ExtArgs> | null\n    /**\n     * The data needed to create a SysLogininfor.\n     */\n    data?: XOR<SysLogininforCreateInput, SysLogininforUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysLogininfor createMany\n   */\n  export type SysLogininforCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysLogininfors.\n     */\n    data: SysLogininforCreateManyInput | SysLogininforCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysLogininfor update\n   */\n  export type SysLogininforUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysLogininfor\n     */\n    select?: SysLogininforSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysLogininfor\n     */\n    omit?: SysLogininforOmit<ExtArgs> | null\n    /**\n     * The data needed to update a SysLogininfor.\n     */\n    data: XOR<SysLogininforUpdateInput, SysLogininforUncheckedUpdateInput>\n    /**\n     * Choose, which SysLogininfor to update.\n     */\n    where: SysLogininforWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysLogininfor updateMany\n   */\n  export type SysLogininforUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysLogininfors.\n     */\n    data: XOR<SysLogininforUpdateManyMutationInput, SysLogininforUncheckedUpdateManyInput>\n    /**\n     * Filter which SysLogininfors to update\n     */\n    where?: SysLogininforWhereInput\n  }\n\n  /**\n   * SysLogininfor upsert\n   */\n  export type SysLogininforUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysLogininfor\n     */\n    select?: SysLogininforSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysLogininfor\n     */\n    omit?: SysLogininforOmit<ExtArgs> | null\n    /**\n     * The filter to search for the SysLogininfor to update in case it exists.\n     */\n    where: SysLogininforWhereUniqueInput\n    /**\n     * In case the SysLogininfor found by the `where` argument doesn't exist, create a new SysLogininfor with this data.\n     */\n    create: XOR<SysLogininforCreateInput, SysLogininforUncheckedCreateInput>\n    /**\n     * In case the SysLogininfor was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysLogininforUpdateInput, SysLogininforUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysLogininfor delete\n   */\n  export type SysLogininforDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysLogininfor\n     */\n    select?: SysLogininforSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysLogininfor\n     */\n    omit?: SysLogininforOmit<ExtArgs> | null\n    /**\n     * Filter which SysLogininfor to delete.\n     */\n    where: SysLogininforWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysLogininfor deleteMany\n   */\n  export type SysLogininforDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysLogininfors to delete\n     */\n    where?: SysLogininforWhereInput\n  }\n\n  /**\n   * SysLogininfor without action\n   */\n  export type SysLogininforDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysLogininfor\n     */\n    select?: SysLogininforSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysLogininfor\n     */\n    omit?: SysLogininforOmit<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysMenu\n   */\n\n  export type AggregateSysMenu = {\n    _count: SysMenuCountAggregateOutputType | null\n    _avg: SysMenuAvgAggregateOutputType | null\n    _sum: SysMenuSumAggregateOutputType | null\n    _min: SysMenuMinAggregateOutputType | null\n    _max: SysMenuMaxAggregateOutputType | null\n  }\n\n  export type SysMenuAvgAggregateOutputType = {\n    menuId: number | null\n    parentId: number | null\n    orderNum: number | null\n    isFrame: number | null\n    isCache: number | null\n  }\n\n  export type SysMenuSumAggregateOutputType = {\n    menuId: number | null\n    parentId: number | null\n    orderNum: number | null\n    isFrame: number | null\n    isCache: number | null\n  }\n\n  export type SysMenuMinAggregateOutputType = {\n    menuId: number | null\n    menuName: string | null\n    parentId: number | null\n    orderNum: number | null\n    path: string | null\n    component: string | null\n    query: string | null\n    isFrame: number | null\n    isCache: number | null\n    menuType: string | null\n    visible: string | null\n    status: string | null\n    perms: string | null\n    icon: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysMenuMaxAggregateOutputType = {\n    menuId: number | null\n    menuName: string | null\n    parentId: number | null\n    orderNum: number | null\n    path: string | null\n    component: string | null\n    query: string | null\n    isFrame: number | null\n    isCache: number | null\n    menuType: string | null\n    visible: string | null\n    status: string | null\n    perms: string | null\n    icon: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysMenuCountAggregateOutputType = {\n    menuId: number\n    menuName: number\n    parentId: number\n    orderNum: number\n    path: number\n    component: number\n    query: number\n    isFrame: number\n    isCache: number\n    menuType: number\n    visible: number\n    status: number\n    perms: number\n    icon: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    remark: number\n    _all: number\n  }\n\n\n  export type SysMenuAvgAggregateInputType = {\n    menuId?: true\n    parentId?: true\n    orderNum?: true\n    isFrame?: true\n    isCache?: true\n  }\n\n  export type SysMenuSumAggregateInputType = {\n    menuId?: true\n    parentId?: true\n    orderNum?: true\n    isFrame?: true\n    isCache?: true\n  }\n\n  export type SysMenuMinAggregateInputType = {\n    menuId?: true\n    menuName?: true\n    parentId?: true\n    orderNum?: true\n    path?: true\n    component?: true\n    query?: true\n    isFrame?: true\n    isCache?: true\n    menuType?: true\n    visible?: true\n    status?: true\n    perms?: true\n    icon?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysMenuMaxAggregateInputType = {\n    menuId?: true\n    menuName?: true\n    parentId?: true\n    orderNum?: true\n    path?: true\n    component?: true\n    query?: true\n    isFrame?: true\n    isCache?: true\n    menuType?: true\n    visible?: true\n    status?: true\n    perms?: true\n    icon?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysMenuCountAggregateInputType = {\n    menuId?: true\n    menuName?: true\n    parentId?: true\n    orderNum?: true\n    path?: true\n    component?: true\n    query?: true\n    isFrame?: true\n    isCache?: true\n    menuType?: true\n    visible?: true\n    status?: true\n    perms?: true\n    icon?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n    _all?: true\n  }\n\n  export type SysMenuAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysMenu to aggregate.\n     */\n    where?: SysMenuWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysMenus to fetch.\n     */\n    orderBy?: SysMenuOrderByWithRelationInput | SysMenuOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysMenuWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysMenus from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysMenus.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysMenus\n    **/\n    _count?: true | SysMenuCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysMenuAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysMenuSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysMenuMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysMenuMaxAggregateInputType\n  }\n\n  export type GetSysMenuAggregateType<T extends SysMenuAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysMenu]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysMenu[P]>\n      : GetScalarType<T[P], AggregateSysMenu[P]>\n  }\n\n\n\n\n  export type SysMenuGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysMenuWhereInput\n    orderBy?: SysMenuOrderByWithAggregationInput | SysMenuOrderByWithAggregationInput[]\n    by: SysMenuScalarFieldEnum[] | SysMenuScalarFieldEnum\n    having?: SysMenuScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysMenuCountAggregateInputType | true\n    _avg?: SysMenuAvgAggregateInputType\n    _sum?: SysMenuSumAggregateInputType\n    _min?: SysMenuMinAggregateInputType\n    _max?: SysMenuMaxAggregateInputType\n  }\n\n  export type SysMenuGroupByOutputType = {\n    menuId: number\n    menuName: string\n    parentId: number | null\n    orderNum: number | null\n    path: string | null\n    component: string | null\n    query: string | null\n    isFrame: number | null\n    isCache: number | null\n    menuType: string | null\n    visible: string | null\n    status: string | null\n    perms: string | null\n    icon: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n    _count: SysMenuCountAggregateOutputType | null\n    _avg: SysMenuAvgAggregateOutputType | null\n    _sum: SysMenuSumAggregateOutputType | null\n    _min: SysMenuMinAggregateOutputType | null\n    _max: SysMenuMaxAggregateOutputType | null\n  }\n\n  type GetSysMenuGroupByPayload<T extends SysMenuGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysMenuGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysMenuGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysMenuGroupByOutputType[P]>\n            : GetScalarType<T[P], SysMenuGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysMenuSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    menuId?: boolean\n    menuName?: boolean\n    parentId?: boolean\n    orderNum?: boolean\n    path?: boolean\n    component?: boolean\n    query?: boolean\n    isFrame?: boolean\n    isCache?: boolean\n    menuType?: boolean\n    visible?: boolean\n    status?: boolean\n    perms?: boolean\n    icon?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n    roles?: boolean | SysMenu$rolesArgs<ExtArgs>\n    _count?: boolean | SysMenuCountOutputTypeDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysMenu\"]>\n\n\n  export type SysMenuSelectScalar = {\n    menuId?: boolean\n    menuName?: boolean\n    parentId?: boolean\n    orderNum?: boolean\n    path?: boolean\n    component?: boolean\n    query?: boolean\n    isFrame?: boolean\n    isCache?: boolean\n    menuType?: boolean\n    visible?: boolean\n    status?: boolean\n    perms?: boolean\n    icon?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }\n\n  export type SysMenuOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"menuId\" | \"menuName\" | \"parentId\" | \"orderNum\" | \"path\" | \"component\" | \"query\" | \"isFrame\" | \"isCache\" | \"menuType\" | \"visible\" | \"status\" | \"perms\" | \"icon\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\" | \"remark\", ExtArgs[\"result\"][\"sysMenu\"]>\n  export type SysMenuInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    roles?: boolean | SysMenu$rolesArgs<ExtArgs>\n    _count?: boolean | SysMenuCountOutputTypeDefaultArgs<ExtArgs>\n  }\n\n  export type $SysMenuPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysMenu\"\n    objects: {\n      roles: Prisma.$SysRoleMenuPayload<ExtArgs>[]\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      menuId: number\n      menuName: string\n      parentId: number | null\n      orderNum: number | null\n      path: string | null\n      component: string | null\n      query: string | null\n      isFrame: number | null\n      isCache: number | null\n      menuType: string | null\n      visible: string | null\n      status: string | null\n      perms: string | null\n      icon: string | null\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n      remark: string | null\n    }, ExtArgs[\"result\"][\"sysMenu\"]>\n    composites: {}\n  }\n\n  type SysMenuGetPayload<S extends boolean | null | undefined | SysMenuDefaultArgs> = $Result.GetResult<Prisma.$SysMenuPayload, S>\n\n  type SysMenuCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysMenuFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysMenuCountAggregateInputType | true\n    }\n\n  export interface SysMenuDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysMenu'], meta: { name: 'SysMenu' } }\n    /**\n     * Find zero or one SysMenu that matches the filter.\n     * @param {SysMenuFindUniqueArgs} args - Arguments to find a SysMenu\n     * @example\n     * // Get one SysMenu\n     * const sysMenu = await prisma.sysMenu.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysMenuFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysMenuFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysMenuClient<$Result.GetResult<Prisma.$SysMenuPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysMenu that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysMenuFindUniqueOrThrowArgs} args - Arguments to find a SysMenu\n     * @example\n     * // Get one SysMenu\n     * const sysMenu = await prisma.sysMenu.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysMenuFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysMenuFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysMenuClient<$Result.GetResult<Prisma.$SysMenuPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysMenu that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysMenuFindFirstArgs} args - Arguments to find a SysMenu\n     * @example\n     * // Get one SysMenu\n     * const sysMenu = await prisma.sysMenu.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysMenuFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysMenuFindFirstArgs<ExtArgs>>\n    ): Prisma__SysMenuClient<$Result.GetResult<Prisma.$SysMenuPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysMenu that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysMenuFindFirstOrThrowArgs} args - Arguments to find a SysMenu\n     * @example\n     * // Get one SysMenu\n     * const sysMenu = await prisma.sysMenu.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysMenuFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysMenuFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysMenuClient<$Result.GetResult<Prisma.$SysMenuPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysMenus that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysMenuFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysMenus\n     * const sysMenus = await prisma.sysMenu.findMany()\n     * \n     * // Get first 10 SysMenus\n     * const sysMenus = await prisma.sysMenu.findMany({ take: 10 })\n     * \n     * // Only select the `menuId`\n     * const sysMenuWithMenuIdOnly = await prisma.sysMenu.findMany({ select: { menuId: true } })\n     * \n    **/\n    findMany<T extends SysMenuFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysMenuFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysMenuPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysMenu.\n     * @param {SysMenuCreateArgs} args - Arguments to create a SysMenu.\n     * @example\n     * // Create one SysMenu\n     * const SysMenu = await prisma.sysMenu.create({\n     *   data: {\n     *     // ... data to create a SysMenu\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysMenuCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysMenuCreateArgs<ExtArgs>>\n    ): Prisma__SysMenuClient<$Result.GetResult<Prisma.$SysMenuPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysMenus.\n     * @param {SysMenuCreateManyArgs} args - Arguments to create many SysMenus.\n     * @example\n     * // Create many SysMenus\n     * const sysMenu = await prisma.sysMenu.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysMenuCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysMenuCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysMenu.\n     * @param {SysMenuDeleteArgs} args - Arguments to delete one SysMenu.\n     * @example\n     * // Delete one SysMenu\n     * const SysMenu = await prisma.sysMenu.delete({\n     *   where: {\n     *     // ... filter to delete one SysMenu\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysMenuDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysMenuDeleteArgs<ExtArgs>>\n    ): Prisma__SysMenuClient<$Result.GetResult<Prisma.$SysMenuPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysMenu.\n     * @param {SysMenuUpdateArgs} args - Arguments to update one SysMenu.\n     * @example\n     * // Update one SysMenu\n     * const sysMenu = await prisma.sysMenu.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysMenuUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysMenuUpdateArgs<ExtArgs>>\n    ): Prisma__SysMenuClient<$Result.GetResult<Prisma.$SysMenuPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysMenus.\n     * @param {SysMenuDeleteManyArgs} args - Arguments to filter SysMenus to delete.\n     * @example\n     * // Delete a few SysMenus\n     * const { count } = await prisma.sysMenu.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysMenuDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysMenuDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysMenus.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysMenuUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysMenus\n     * const sysMenu = await prisma.sysMenu.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysMenuUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysMenuUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysMenu.\n     * @param {SysMenuUpsertArgs} args - Arguments to update or create a SysMenu.\n     * @example\n     * // Update or create a SysMenu\n     * const sysMenu = await prisma.sysMenu.upsert({\n     *   create: {\n     *     // ... data to create a SysMenu\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysMenu we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysMenuUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysMenuUpsertArgs<ExtArgs>>\n    ): Prisma__SysMenuClient<$Result.GetResult<Prisma.$SysMenuPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysMenus.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysMenuCountArgs} args - Arguments to filter SysMenus to count.\n     * @example\n     * // Count the number of SysMenus\n     * const count = await prisma.sysMenu.count({\n     *   where: {\n     *     // ... the filter for the SysMenus we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysMenuCountArgs>(\n      args?: Subset<T, SysMenuCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysMenuCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysMenu.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysMenuAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysMenuAggregateArgs>(args: Subset<T, SysMenuAggregateArgs>): Prisma.PrismaPromise<GetSysMenuAggregateType<T>>\n\n    /**\n     * Group by SysMenu.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysMenuGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysMenuGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysMenuGroupByArgs['orderBy'] }\n        : { orderBy?: SysMenuGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysMenuGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysMenuGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysMenu model\n   */\n  readonly fields: SysMenuFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysMenu.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysMenuClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    roles<T extends SysMenu$rolesArgs<ExtArgs> = {}>(args?: Subset<T, SysMenu$rolesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysMenu model\n   */ \n  interface SysMenuFieldRefs {\n    readonly menuId: FieldRef<\"SysMenu\", 'Int'>\n    readonly menuName: FieldRef<\"SysMenu\", 'String'>\n    readonly parentId: FieldRef<\"SysMenu\", 'Int'>\n    readonly orderNum: FieldRef<\"SysMenu\", 'Int'>\n    readonly path: FieldRef<\"SysMenu\", 'String'>\n    readonly component: FieldRef<\"SysMenu\", 'String'>\n    readonly query: FieldRef<\"SysMenu\", 'String'>\n    readonly isFrame: FieldRef<\"SysMenu\", 'Int'>\n    readonly isCache: FieldRef<\"SysMenu\", 'Int'>\n    readonly menuType: FieldRef<\"SysMenu\", 'String'>\n    readonly visible: FieldRef<\"SysMenu\", 'String'>\n    readonly status: FieldRef<\"SysMenu\", 'String'>\n    readonly perms: FieldRef<\"SysMenu\", 'String'>\n    readonly icon: FieldRef<\"SysMenu\", 'String'>\n    readonly createBy: FieldRef<\"SysMenu\", 'String'>\n    readonly createTime: FieldRef<\"SysMenu\", 'String'>\n    readonly updateBy: FieldRef<\"SysMenu\", 'String'>\n    readonly updateTime: FieldRef<\"SysMenu\", 'String'>\n    readonly remark: FieldRef<\"SysMenu\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysMenu findUnique\n   */\n  export type SysMenuFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenu\n     */\n    select?: SysMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysMenu\n     */\n    omit?: SysMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysMenuInclude<ExtArgs> | null\n    /**\n     * Filter, which SysMenu to fetch.\n     */\n    where: SysMenuWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysMenu findUniqueOrThrow\n   */\n  export type SysMenuFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenu\n     */\n    select?: SysMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysMenu\n     */\n    omit?: SysMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysMenuInclude<ExtArgs> | null\n    /**\n     * Filter, which SysMenu to fetch.\n     */\n    where: SysMenuWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysMenu findFirst\n   */\n  export type SysMenuFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenu\n     */\n    select?: SysMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysMenu\n     */\n    omit?: SysMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysMenuInclude<ExtArgs> | null\n    /**\n     * Filter, which SysMenu to fetch.\n     */\n    where?: SysMenuWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysMenus to fetch.\n     */\n    orderBy?: SysMenuOrderByWithRelationInput | SysMenuOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysMenus.\n     */\n    cursor?: SysMenuWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysMenus from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysMenus.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysMenus.\n     */\n    distinct?: SysMenuScalarFieldEnum | SysMenuScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysMenu findFirstOrThrow\n   */\n  export type SysMenuFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenu\n     */\n    select?: SysMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysMenu\n     */\n    omit?: SysMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysMenuInclude<ExtArgs> | null\n    /**\n     * Filter, which SysMenu to fetch.\n     */\n    where?: SysMenuWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysMenus to fetch.\n     */\n    orderBy?: SysMenuOrderByWithRelationInput | SysMenuOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysMenus.\n     */\n    cursor?: SysMenuWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysMenus from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysMenus.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysMenus.\n     */\n    distinct?: SysMenuScalarFieldEnum | SysMenuScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysMenu findMany\n   */\n  export type SysMenuFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenu\n     */\n    select?: SysMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysMenu\n     */\n    omit?: SysMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysMenuInclude<ExtArgs> | null\n    /**\n     * Filter, which SysMenus to fetch.\n     */\n    where?: SysMenuWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysMenus to fetch.\n     */\n    orderBy?: SysMenuOrderByWithRelationInput | SysMenuOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysMenus.\n     */\n    cursor?: SysMenuWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysMenus from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysMenus.\n     */\n    skip?: number\n    distinct?: SysMenuScalarFieldEnum | SysMenuScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysMenu create\n   */\n  export type SysMenuCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenu\n     */\n    select?: SysMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysMenu\n     */\n    omit?: SysMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysMenuInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysMenu.\n     */\n    data: XOR<SysMenuCreateInput, SysMenuUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysMenu createMany\n   */\n  export type SysMenuCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysMenus.\n     */\n    data: SysMenuCreateManyInput | SysMenuCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysMenu update\n   */\n  export type SysMenuUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenu\n     */\n    select?: SysMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysMenu\n     */\n    omit?: SysMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysMenuInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysMenu.\n     */\n    data: XOR<SysMenuUpdateInput, SysMenuUncheckedUpdateInput>\n    /**\n     * Choose, which SysMenu to update.\n     */\n    where: SysMenuWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysMenu updateMany\n   */\n  export type SysMenuUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysMenus.\n     */\n    data: XOR<SysMenuUpdateManyMutationInput, SysMenuUncheckedUpdateManyInput>\n    /**\n     * Filter which SysMenus to update\n     */\n    where?: SysMenuWhereInput\n  }\n\n  /**\n   * SysMenu upsert\n   */\n  export type SysMenuUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenu\n     */\n    select?: SysMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysMenu\n     */\n    omit?: SysMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysMenuInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysMenu to update in case it exists.\n     */\n    where: SysMenuWhereUniqueInput\n    /**\n     * In case the SysMenu found by the `where` argument doesn't exist, create a new SysMenu with this data.\n     */\n    create: XOR<SysMenuCreateInput, SysMenuUncheckedCreateInput>\n    /**\n     * In case the SysMenu was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysMenuUpdateInput, SysMenuUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysMenu delete\n   */\n  export type SysMenuDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenu\n     */\n    select?: SysMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysMenu\n     */\n    omit?: SysMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysMenuInclude<ExtArgs> | null\n    /**\n     * Filter which SysMenu to delete.\n     */\n    where: SysMenuWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysMenu deleteMany\n   */\n  export type SysMenuDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysMenus to delete\n     */\n    where?: SysMenuWhereInput\n  }\n\n  /**\n   * SysMenu.roles\n   */\n  export type SysMenu$rolesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    where?: SysRoleMenuWhereInput\n    orderBy?: SysRoleMenuOrderByWithRelationInput | SysRoleMenuOrderByWithRelationInput[]\n    cursor?: SysRoleMenuWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: SysRoleMenuScalarFieldEnum | SysRoleMenuScalarFieldEnum[]\n  }\n\n  /**\n   * SysMenu without action\n   */\n  export type SysMenuDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysMenu\n     */\n    select?: SysMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysMenu\n     */\n    omit?: SysMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysMenuInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysNotice\n   */\n\n  export type AggregateSysNotice = {\n    _count: SysNoticeCountAggregateOutputType | null\n    _avg: SysNoticeAvgAggregateOutputType | null\n    _sum: SysNoticeSumAggregateOutputType | null\n    _min: SysNoticeMinAggregateOutputType | null\n    _max: SysNoticeMaxAggregateOutputType | null\n  }\n\n  export type SysNoticeAvgAggregateOutputType = {\n    noticeId: number | null\n  }\n\n  export type SysNoticeSumAggregateOutputType = {\n    noticeId: number | null\n  }\n\n  export type SysNoticeMinAggregateOutputType = {\n    noticeId: number | null\n    noticeTitle: string | null\n    noticeType: string | null\n    noticeContent: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysNoticeMaxAggregateOutputType = {\n    noticeId: number | null\n    noticeTitle: string | null\n    noticeType: string | null\n    noticeContent: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysNoticeCountAggregateOutputType = {\n    noticeId: number\n    noticeTitle: number\n    noticeType: number\n    noticeContent: number\n    status: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    remark: number\n    _all: number\n  }\n\n\n  export type SysNoticeAvgAggregateInputType = {\n    noticeId?: true\n  }\n\n  export type SysNoticeSumAggregateInputType = {\n    noticeId?: true\n  }\n\n  export type SysNoticeMinAggregateInputType = {\n    noticeId?: true\n    noticeTitle?: true\n    noticeType?: true\n    noticeContent?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysNoticeMaxAggregateInputType = {\n    noticeId?: true\n    noticeTitle?: true\n    noticeType?: true\n    noticeContent?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysNoticeCountAggregateInputType = {\n    noticeId?: true\n    noticeTitle?: true\n    noticeType?: true\n    noticeContent?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n    _all?: true\n  }\n\n  export type SysNoticeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysNotice to aggregate.\n     */\n    where?: SysNoticeWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysNotices to fetch.\n     */\n    orderBy?: SysNoticeOrderByWithRelationInput | SysNoticeOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysNoticeWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysNotices from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysNotices.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysNotices\n    **/\n    _count?: true | SysNoticeCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysNoticeAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysNoticeSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysNoticeMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysNoticeMaxAggregateInputType\n  }\n\n  export type GetSysNoticeAggregateType<T extends SysNoticeAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysNotice]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysNotice[P]>\n      : GetScalarType<T[P], AggregateSysNotice[P]>\n  }\n\n\n\n\n  export type SysNoticeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysNoticeWhereInput\n    orderBy?: SysNoticeOrderByWithAggregationInput | SysNoticeOrderByWithAggregationInput[]\n    by: SysNoticeScalarFieldEnum[] | SysNoticeScalarFieldEnum\n    having?: SysNoticeScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysNoticeCountAggregateInputType | true\n    _avg?: SysNoticeAvgAggregateInputType\n    _sum?: SysNoticeSumAggregateInputType\n    _min?: SysNoticeMinAggregateInputType\n    _max?: SysNoticeMaxAggregateInputType\n  }\n\n  export type SysNoticeGroupByOutputType = {\n    noticeId: number\n    noticeTitle: string\n    noticeType: string\n    noticeContent: string | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n    _count: SysNoticeCountAggregateOutputType | null\n    _avg: SysNoticeAvgAggregateOutputType | null\n    _sum: SysNoticeSumAggregateOutputType | null\n    _min: SysNoticeMinAggregateOutputType | null\n    _max: SysNoticeMaxAggregateOutputType | null\n  }\n\n  type GetSysNoticeGroupByPayload<T extends SysNoticeGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysNoticeGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysNoticeGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysNoticeGroupByOutputType[P]>\n            : GetScalarType<T[P], SysNoticeGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysNoticeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    noticeId?: boolean\n    noticeTitle?: boolean\n    noticeType?: boolean\n    noticeContent?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }, ExtArgs[\"result\"][\"sysNotice\"]>\n\n\n  export type SysNoticeSelectScalar = {\n    noticeId?: boolean\n    noticeTitle?: boolean\n    noticeType?: boolean\n    noticeContent?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }\n\n  export type SysNoticeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"noticeId\" | \"noticeTitle\" | \"noticeType\" | \"noticeContent\" | \"status\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\" | \"remark\", ExtArgs[\"result\"][\"sysNotice\"]>\n\n  export type $SysNoticePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysNotice\"\n    objects: {}\n    scalars: $Extensions.GetPayloadResult<{\n      noticeId: number\n      noticeTitle: string\n      noticeType: string\n      noticeContent: string | null\n      status: string | null\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n      remark: string | null\n    }, ExtArgs[\"result\"][\"sysNotice\"]>\n    composites: {}\n  }\n\n  type SysNoticeGetPayload<S extends boolean | null | undefined | SysNoticeDefaultArgs> = $Result.GetResult<Prisma.$SysNoticePayload, S>\n\n  type SysNoticeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysNoticeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysNoticeCountAggregateInputType | true\n    }\n\n  export interface SysNoticeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysNotice'], meta: { name: 'SysNotice' } }\n    /**\n     * Find zero or one SysNotice that matches the filter.\n     * @param {SysNoticeFindUniqueArgs} args - Arguments to find a SysNotice\n     * @example\n     * // Get one SysNotice\n     * const sysNotice = await prisma.sysNotice.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysNoticeFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysNoticeFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysNoticeClient<$Result.GetResult<Prisma.$SysNoticePayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysNotice that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysNoticeFindUniqueOrThrowArgs} args - Arguments to find a SysNotice\n     * @example\n     * // Get one SysNotice\n     * const sysNotice = await prisma.sysNotice.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysNoticeFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysNoticeFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysNoticeClient<$Result.GetResult<Prisma.$SysNoticePayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysNotice that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysNoticeFindFirstArgs} args - Arguments to find a SysNotice\n     * @example\n     * // Get one SysNotice\n     * const sysNotice = await prisma.sysNotice.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysNoticeFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysNoticeFindFirstArgs<ExtArgs>>\n    ): Prisma__SysNoticeClient<$Result.GetResult<Prisma.$SysNoticePayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysNotice that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysNoticeFindFirstOrThrowArgs} args - Arguments to find a SysNotice\n     * @example\n     * // Get one SysNotice\n     * const sysNotice = await prisma.sysNotice.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysNoticeFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysNoticeFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysNoticeClient<$Result.GetResult<Prisma.$SysNoticePayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysNotices that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysNoticeFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysNotices\n     * const sysNotices = await prisma.sysNotice.findMany()\n     * \n     * // Get first 10 SysNotices\n     * const sysNotices = await prisma.sysNotice.findMany({ take: 10 })\n     * \n     * // Only select the `noticeId`\n     * const sysNoticeWithNoticeIdOnly = await prisma.sysNotice.findMany({ select: { noticeId: true } })\n     * \n    **/\n    findMany<T extends SysNoticeFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysNoticeFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysNoticePayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysNotice.\n     * @param {SysNoticeCreateArgs} args - Arguments to create a SysNotice.\n     * @example\n     * // Create one SysNotice\n     * const SysNotice = await prisma.sysNotice.create({\n     *   data: {\n     *     // ... data to create a SysNotice\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysNoticeCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysNoticeCreateArgs<ExtArgs>>\n    ): Prisma__SysNoticeClient<$Result.GetResult<Prisma.$SysNoticePayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysNotices.\n     * @param {SysNoticeCreateManyArgs} args - Arguments to create many SysNotices.\n     * @example\n     * // Create many SysNotices\n     * const sysNotice = await prisma.sysNotice.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysNoticeCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysNoticeCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysNotice.\n     * @param {SysNoticeDeleteArgs} args - Arguments to delete one SysNotice.\n     * @example\n     * // Delete one SysNotice\n     * const SysNotice = await prisma.sysNotice.delete({\n     *   where: {\n     *     // ... filter to delete one SysNotice\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysNoticeDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysNoticeDeleteArgs<ExtArgs>>\n    ): Prisma__SysNoticeClient<$Result.GetResult<Prisma.$SysNoticePayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysNotice.\n     * @param {SysNoticeUpdateArgs} args - Arguments to update one SysNotice.\n     * @example\n     * // Update one SysNotice\n     * const sysNotice = await prisma.sysNotice.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysNoticeUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysNoticeUpdateArgs<ExtArgs>>\n    ): Prisma__SysNoticeClient<$Result.GetResult<Prisma.$SysNoticePayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysNotices.\n     * @param {SysNoticeDeleteManyArgs} args - Arguments to filter SysNotices to delete.\n     * @example\n     * // Delete a few SysNotices\n     * const { count } = await prisma.sysNotice.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysNoticeDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysNoticeDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysNotices.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysNoticeUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysNotices\n     * const sysNotice = await prisma.sysNotice.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysNoticeUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysNoticeUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysNotice.\n     * @param {SysNoticeUpsertArgs} args - Arguments to update or create a SysNotice.\n     * @example\n     * // Update or create a SysNotice\n     * const sysNotice = await prisma.sysNotice.upsert({\n     *   create: {\n     *     // ... data to create a SysNotice\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysNotice we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysNoticeUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysNoticeUpsertArgs<ExtArgs>>\n    ): Prisma__SysNoticeClient<$Result.GetResult<Prisma.$SysNoticePayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysNotices.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysNoticeCountArgs} args - Arguments to filter SysNotices to count.\n     * @example\n     * // Count the number of SysNotices\n     * const count = await prisma.sysNotice.count({\n     *   where: {\n     *     // ... the filter for the SysNotices we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysNoticeCountArgs>(\n      args?: Subset<T, SysNoticeCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysNoticeCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysNotice.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysNoticeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysNoticeAggregateArgs>(args: Subset<T, SysNoticeAggregateArgs>): Prisma.PrismaPromise<GetSysNoticeAggregateType<T>>\n\n    /**\n     * Group by SysNotice.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysNoticeGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysNoticeGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysNoticeGroupByArgs['orderBy'] }\n        : { orderBy?: SysNoticeGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysNoticeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysNoticeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysNotice model\n   */\n  readonly fields: SysNoticeFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysNotice.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysNoticeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysNotice model\n   */ \n  interface SysNoticeFieldRefs {\n    readonly noticeId: FieldRef<\"SysNotice\", 'Int'>\n    readonly noticeTitle: FieldRef<\"SysNotice\", 'String'>\n    readonly noticeType: FieldRef<\"SysNotice\", 'String'>\n    readonly noticeContent: FieldRef<\"SysNotice\", 'String'>\n    readonly status: FieldRef<\"SysNotice\", 'String'>\n    readonly createBy: FieldRef<\"SysNotice\", 'String'>\n    readonly createTime: FieldRef<\"SysNotice\", 'String'>\n    readonly updateBy: FieldRef<\"SysNotice\", 'String'>\n    readonly updateTime: FieldRef<\"SysNotice\", 'String'>\n    readonly remark: FieldRef<\"SysNotice\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysNotice findUnique\n   */\n  export type SysNoticeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysNotice\n     */\n    select?: SysNoticeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysNotice\n     */\n    omit?: SysNoticeOmit<ExtArgs> | null\n    /**\n     * Filter, which SysNotice to fetch.\n     */\n    where: SysNoticeWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysNotice findUniqueOrThrow\n   */\n  export type SysNoticeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysNotice\n     */\n    select?: SysNoticeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysNotice\n     */\n    omit?: SysNoticeOmit<ExtArgs> | null\n    /**\n     * Filter, which SysNotice to fetch.\n     */\n    where: SysNoticeWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysNotice findFirst\n   */\n  export type SysNoticeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysNotice\n     */\n    select?: SysNoticeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysNotice\n     */\n    omit?: SysNoticeOmit<ExtArgs> | null\n    /**\n     * Filter, which SysNotice to fetch.\n     */\n    where?: SysNoticeWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysNotices to fetch.\n     */\n    orderBy?: SysNoticeOrderByWithRelationInput | SysNoticeOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysNotices.\n     */\n    cursor?: SysNoticeWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysNotices from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysNotices.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysNotices.\n     */\n    distinct?: SysNoticeScalarFieldEnum | SysNoticeScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysNotice findFirstOrThrow\n   */\n  export type SysNoticeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysNotice\n     */\n    select?: SysNoticeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysNotice\n     */\n    omit?: SysNoticeOmit<ExtArgs> | null\n    /**\n     * Filter, which SysNotice to fetch.\n     */\n    where?: SysNoticeWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysNotices to fetch.\n     */\n    orderBy?: SysNoticeOrderByWithRelationInput | SysNoticeOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysNotices.\n     */\n    cursor?: SysNoticeWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysNotices from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysNotices.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysNotices.\n     */\n    distinct?: SysNoticeScalarFieldEnum | SysNoticeScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysNotice findMany\n   */\n  export type SysNoticeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysNotice\n     */\n    select?: SysNoticeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysNotice\n     */\n    omit?: SysNoticeOmit<ExtArgs> | null\n    /**\n     * Filter, which SysNotices to fetch.\n     */\n    where?: SysNoticeWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysNotices to fetch.\n     */\n    orderBy?: SysNoticeOrderByWithRelationInput | SysNoticeOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysNotices.\n     */\n    cursor?: SysNoticeWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysNotices from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysNotices.\n     */\n    skip?: number\n    distinct?: SysNoticeScalarFieldEnum | SysNoticeScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysNotice create\n   */\n  export type SysNoticeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysNotice\n     */\n    select?: SysNoticeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysNotice\n     */\n    omit?: SysNoticeOmit<ExtArgs> | null\n    /**\n     * The data needed to create a SysNotice.\n     */\n    data: XOR<SysNoticeCreateInput, SysNoticeUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysNotice createMany\n   */\n  export type SysNoticeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysNotices.\n     */\n    data: SysNoticeCreateManyInput | SysNoticeCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysNotice update\n   */\n  export type SysNoticeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysNotice\n     */\n    select?: SysNoticeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysNotice\n     */\n    omit?: SysNoticeOmit<ExtArgs> | null\n    /**\n     * The data needed to update a SysNotice.\n     */\n    data: XOR<SysNoticeUpdateInput, SysNoticeUncheckedUpdateInput>\n    /**\n     * Choose, which SysNotice to update.\n     */\n    where: SysNoticeWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysNotice updateMany\n   */\n  export type SysNoticeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysNotices.\n     */\n    data: XOR<SysNoticeUpdateManyMutationInput, SysNoticeUncheckedUpdateManyInput>\n    /**\n     * Filter which SysNotices to update\n     */\n    where?: SysNoticeWhereInput\n  }\n\n  /**\n   * SysNotice upsert\n   */\n  export type SysNoticeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysNotice\n     */\n    select?: SysNoticeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysNotice\n     */\n    omit?: SysNoticeOmit<ExtArgs> | null\n    /**\n     * The filter to search for the SysNotice to update in case it exists.\n     */\n    where: SysNoticeWhereUniqueInput\n    /**\n     * In case the SysNotice found by the `where` argument doesn't exist, create a new SysNotice with this data.\n     */\n    create: XOR<SysNoticeCreateInput, SysNoticeUncheckedCreateInput>\n    /**\n     * In case the SysNotice was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysNoticeUpdateInput, SysNoticeUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysNotice delete\n   */\n  export type SysNoticeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysNotice\n     */\n    select?: SysNoticeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysNotice\n     */\n    omit?: SysNoticeOmit<ExtArgs> | null\n    /**\n     * Filter which SysNotice to delete.\n     */\n    where: SysNoticeWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysNotice deleteMany\n   */\n  export type SysNoticeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysNotices to delete\n     */\n    where?: SysNoticeWhereInput\n  }\n\n  /**\n   * SysNotice without action\n   */\n  export type SysNoticeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysNotice\n     */\n    select?: SysNoticeSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysNotice\n     */\n    omit?: SysNoticeOmit<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysPost\n   */\n\n  export type AggregateSysPost = {\n    _count: SysPostCountAggregateOutputType | null\n    _avg: SysPostAvgAggregateOutputType | null\n    _sum: SysPostSumAggregateOutputType | null\n    _min: SysPostMinAggregateOutputType | null\n    _max: SysPostMaxAggregateOutputType | null\n  }\n\n  export type SysPostAvgAggregateOutputType = {\n    postId: number | null\n    postSort: number | null\n  }\n\n  export type SysPostSumAggregateOutputType = {\n    postId: number | null\n    postSort: number | null\n  }\n\n  export type SysPostMinAggregateOutputType = {\n    postId: number | null\n    postCode: string | null\n    postName: string | null\n    postSort: number | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysPostMaxAggregateOutputType = {\n    postId: number | null\n    postCode: string | null\n    postName: string | null\n    postSort: number | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysPostCountAggregateOutputType = {\n    postId: number\n    postCode: number\n    postName: number\n    postSort: number\n    status: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    remark: number\n    _all: number\n  }\n\n\n  export type SysPostAvgAggregateInputType = {\n    postId?: true\n    postSort?: true\n  }\n\n  export type SysPostSumAggregateInputType = {\n    postId?: true\n    postSort?: true\n  }\n\n  export type SysPostMinAggregateInputType = {\n    postId?: true\n    postCode?: true\n    postName?: true\n    postSort?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysPostMaxAggregateInputType = {\n    postId?: true\n    postCode?: true\n    postName?: true\n    postSort?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysPostCountAggregateInputType = {\n    postId?: true\n    postCode?: true\n    postName?: true\n    postSort?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n    _all?: true\n  }\n\n  export type SysPostAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysPost to aggregate.\n     */\n    where?: SysPostWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysPosts to fetch.\n     */\n    orderBy?: SysPostOrderByWithRelationInput | SysPostOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysPostWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysPosts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysPosts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysPosts\n    **/\n    _count?: true | SysPostCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysPostAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysPostSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysPostMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysPostMaxAggregateInputType\n  }\n\n  export type GetSysPostAggregateType<T extends SysPostAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysPost]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysPost[P]>\n      : GetScalarType<T[P], AggregateSysPost[P]>\n  }\n\n\n\n\n  export type SysPostGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysPostWhereInput\n    orderBy?: SysPostOrderByWithAggregationInput | SysPostOrderByWithAggregationInput[]\n    by: SysPostScalarFieldEnum[] | SysPostScalarFieldEnum\n    having?: SysPostScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysPostCountAggregateInputType | true\n    _avg?: SysPostAvgAggregateInputType\n    _sum?: SysPostSumAggregateInputType\n    _min?: SysPostMinAggregateInputType\n    _max?: SysPostMaxAggregateInputType\n  }\n\n  export type SysPostGroupByOutputType = {\n    postId: number\n    postCode: string\n    postName: string\n    postSort: number\n    status: string\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n    _count: SysPostCountAggregateOutputType | null\n    _avg: SysPostAvgAggregateOutputType | null\n    _sum: SysPostSumAggregateOutputType | null\n    _min: SysPostMinAggregateOutputType | null\n    _max: SysPostMaxAggregateOutputType | null\n  }\n\n  type GetSysPostGroupByPayload<T extends SysPostGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysPostGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysPostGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysPostGroupByOutputType[P]>\n            : GetScalarType<T[P], SysPostGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysPostSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    postId?: boolean\n    postCode?: boolean\n    postName?: boolean\n    postSort?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n    users?: boolean | SysPost$usersArgs<ExtArgs>\n    _count?: boolean | SysPostCountOutputTypeDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysPost\"]>\n\n\n  export type SysPostSelectScalar = {\n    postId?: boolean\n    postCode?: boolean\n    postName?: boolean\n    postSort?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }\n\n  export type SysPostOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"postId\" | \"postCode\" | \"postName\" | \"postSort\" | \"status\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\" | \"remark\", ExtArgs[\"result\"][\"sysPost\"]>\n  export type SysPostInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    users?: boolean | SysPost$usersArgs<ExtArgs>\n    _count?: boolean | SysPostCountOutputTypeDefaultArgs<ExtArgs>\n  }\n\n  export type $SysPostPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysPost\"\n    objects: {\n      users: Prisma.$SysUserPostPayload<ExtArgs>[]\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      postId: number\n      postCode: string\n      postName: string\n      postSort: number\n      status: string\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n      remark: string | null\n    }, ExtArgs[\"result\"][\"sysPost\"]>\n    composites: {}\n  }\n\n  type SysPostGetPayload<S extends boolean | null | undefined | SysPostDefaultArgs> = $Result.GetResult<Prisma.$SysPostPayload, S>\n\n  type SysPostCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysPostFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysPostCountAggregateInputType | true\n    }\n\n  export interface SysPostDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysPost'], meta: { name: 'SysPost' } }\n    /**\n     * Find zero or one SysPost that matches the filter.\n     * @param {SysPostFindUniqueArgs} args - Arguments to find a SysPost\n     * @example\n     * // Get one SysPost\n     * const sysPost = await prisma.sysPost.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysPostFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysPostFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysPostClient<$Result.GetResult<Prisma.$SysPostPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysPost that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysPostFindUniqueOrThrowArgs} args - Arguments to find a SysPost\n     * @example\n     * // Get one SysPost\n     * const sysPost = await prisma.sysPost.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysPostFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysPostFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysPostClient<$Result.GetResult<Prisma.$SysPostPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysPost that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysPostFindFirstArgs} args - Arguments to find a SysPost\n     * @example\n     * // Get one SysPost\n     * const sysPost = await prisma.sysPost.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysPostFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysPostFindFirstArgs<ExtArgs>>\n    ): Prisma__SysPostClient<$Result.GetResult<Prisma.$SysPostPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysPost that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysPostFindFirstOrThrowArgs} args - Arguments to find a SysPost\n     * @example\n     * // Get one SysPost\n     * const sysPost = await prisma.sysPost.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysPostFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysPostFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysPostClient<$Result.GetResult<Prisma.$SysPostPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysPosts that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysPostFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysPosts\n     * const sysPosts = await prisma.sysPost.findMany()\n     * \n     * // Get first 10 SysPosts\n     * const sysPosts = await prisma.sysPost.findMany({ take: 10 })\n     * \n     * // Only select the `postId`\n     * const sysPostWithPostIdOnly = await prisma.sysPost.findMany({ select: { postId: true } })\n     * \n    **/\n    findMany<T extends SysPostFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysPostFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysPostPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysPost.\n     * @param {SysPostCreateArgs} args - Arguments to create a SysPost.\n     * @example\n     * // Create one SysPost\n     * const SysPost = await prisma.sysPost.create({\n     *   data: {\n     *     // ... data to create a SysPost\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysPostCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysPostCreateArgs<ExtArgs>>\n    ): Prisma__SysPostClient<$Result.GetResult<Prisma.$SysPostPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysPosts.\n     * @param {SysPostCreateManyArgs} args - Arguments to create many SysPosts.\n     * @example\n     * // Create many SysPosts\n     * const sysPost = await prisma.sysPost.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysPostCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysPostCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysPost.\n     * @param {SysPostDeleteArgs} args - Arguments to delete one SysPost.\n     * @example\n     * // Delete one SysPost\n     * const SysPost = await prisma.sysPost.delete({\n     *   where: {\n     *     // ... filter to delete one SysPost\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysPostDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysPostDeleteArgs<ExtArgs>>\n    ): Prisma__SysPostClient<$Result.GetResult<Prisma.$SysPostPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysPost.\n     * @param {SysPostUpdateArgs} args - Arguments to update one SysPost.\n     * @example\n     * // Update one SysPost\n     * const sysPost = await prisma.sysPost.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysPostUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysPostUpdateArgs<ExtArgs>>\n    ): Prisma__SysPostClient<$Result.GetResult<Prisma.$SysPostPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysPosts.\n     * @param {SysPostDeleteManyArgs} args - Arguments to filter SysPosts to delete.\n     * @example\n     * // Delete a few SysPosts\n     * const { count } = await prisma.sysPost.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysPostDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysPostDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysPosts.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysPostUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysPosts\n     * const sysPost = await prisma.sysPost.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysPostUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysPostUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysPost.\n     * @param {SysPostUpsertArgs} args - Arguments to update or create a SysPost.\n     * @example\n     * // Update or create a SysPost\n     * const sysPost = await prisma.sysPost.upsert({\n     *   create: {\n     *     // ... data to create a SysPost\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysPost we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysPostUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysPostUpsertArgs<ExtArgs>>\n    ): Prisma__SysPostClient<$Result.GetResult<Prisma.$SysPostPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysPosts.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysPostCountArgs} args - Arguments to filter SysPosts to count.\n     * @example\n     * // Count the number of SysPosts\n     * const count = await prisma.sysPost.count({\n     *   where: {\n     *     // ... the filter for the SysPosts we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysPostCountArgs>(\n      args?: Subset<T, SysPostCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysPostCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysPost.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysPostAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysPostAggregateArgs>(args: Subset<T, SysPostAggregateArgs>): Prisma.PrismaPromise<GetSysPostAggregateType<T>>\n\n    /**\n     * Group by SysPost.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysPostGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysPostGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysPostGroupByArgs['orderBy'] }\n        : { orderBy?: SysPostGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysPostGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysPostGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysPost model\n   */\n  readonly fields: SysPostFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysPost.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysPostClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    users<T extends SysPost$usersArgs<ExtArgs> = {}>(args?: Subset<T, SysPost$usersArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysPost model\n   */ \n  interface SysPostFieldRefs {\n    readonly postId: FieldRef<\"SysPost\", 'Int'>\n    readonly postCode: FieldRef<\"SysPost\", 'String'>\n    readonly postName: FieldRef<\"SysPost\", 'String'>\n    readonly postSort: FieldRef<\"SysPost\", 'Int'>\n    readonly status: FieldRef<\"SysPost\", 'String'>\n    readonly createBy: FieldRef<\"SysPost\", 'String'>\n    readonly createTime: FieldRef<\"SysPost\", 'String'>\n    readonly updateBy: FieldRef<\"SysPost\", 'String'>\n    readonly updateTime: FieldRef<\"SysPost\", 'String'>\n    readonly remark: FieldRef<\"SysPost\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysPost findUnique\n   */\n  export type SysPostFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPost\n     */\n    select?: SysPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysPost\n     */\n    omit?: SysPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysPostInclude<ExtArgs> | null\n    /**\n     * Filter, which SysPost to fetch.\n     */\n    where: SysPostWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysPost findUniqueOrThrow\n   */\n  export type SysPostFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPost\n     */\n    select?: SysPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysPost\n     */\n    omit?: SysPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysPostInclude<ExtArgs> | null\n    /**\n     * Filter, which SysPost to fetch.\n     */\n    where: SysPostWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysPost findFirst\n   */\n  export type SysPostFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPost\n     */\n    select?: SysPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysPost\n     */\n    omit?: SysPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysPostInclude<ExtArgs> | null\n    /**\n     * Filter, which SysPost to fetch.\n     */\n    where?: SysPostWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysPosts to fetch.\n     */\n    orderBy?: SysPostOrderByWithRelationInput | SysPostOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysPosts.\n     */\n    cursor?: SysPostWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysPosts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysPosts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysPosts.\n     */\n    distinct?: SysPostScalarFieldEnum | SysPostScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysPost findFirstOrThrow\n   */\n  export type SysPostFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPost\n     */\n    select?: SysPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysPost\n     */\n    omit?: SysPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysPostInclude<ExtArgs> | null\n    /**\n     * Filter, which SysPost to fetch.\n     */\n    where?: SysPostWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysPosts to fetch.\n     */\n    orderBy?: SysPostOrderByWithRelationInput | SysPostOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysPosts.\n     */\n    cursor?: SysPostWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysPosts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysPosts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysPosts.\n     */\n    distinct?: SysPostScalarFieldEnum | SysPostScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysPost findMany\n   */\n  export type SysPostFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPost\n     */\n    select?: SysPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysPost\n     */\n    omit?: SysPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysPostInclude<ExtArgs> | null\n    /**\n     * Filter, which SysPosts to fetch.\n     */\n    where?: SysPostWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysPosts to fetch.\n     */\n    orderBy?: SysPostOrderByWithRelationInput | SysPostOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysPosts.\n     */\n    cursor?: SysPostWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysPosts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysPosts.\n     */\n    skip?: number\n    distinct?: SysPostScalarFieldEnum | SysPostScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysPost create\n   */\n  export type SysPostCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPost\n     */\n    select?: SysPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysPost\n     */\n    omit?: SysPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysPostInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysPost.\n     */\n    data: XOR<SysPostCreateInput, SysPostUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysPost createMany\n   */\n  export type SysPostCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysPosts.\n     */\n    data: SysPostCreateManyInput | SysPostCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysPost update\n   */\n  export type SysPostUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPost\n     */\n    select?: SysPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysPost\n     */\n    omit?: SysPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysPostInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysPost.\n     */\n    data: XOR<SysPostUpdateInput, SysPostUncheckedUpdateInput>\n    /**\n     * Choose, which SysPost to update.\n     */\n    where: SysPostWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysPost updateMany\n   */\n  export type SysPostUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysPosts.\n     */\n    data: XOR<SysPostUpdateManyMutationInput, SysPostUncheckedUpdateManyInput>\n    /**\n     * Filter which SysPosts to update\n     */\n    where?: SysPostWhereInput\n  }\n\n  /**\n   * SysPost upsert\n   */\n  export type SysPostUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPost\n     */\n    select?: SysPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysPost\n     */\n    omit?: SysPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysPostInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysPost to update in case it exists.\n     */\n    where: SysPostWhereUniqueInput\n    /**\n     * In case the SysPost found by the `where` argument doesn't exist, create a new SysPost with this data.\n     */\n    create: XOR<SysPostCreateInput, SysPostUncheckedCreateInput>\n    /**\n     * In case the SysPost was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysPostUpdateInput, SysPostUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysPost delete\n   */\n  export type SysPostDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPost\n     */\n    select?: SysPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysPost\n     */\n    omit?: SysPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysPostInclude<ExtArgs> | null\n    /**\n     * Filter which SysPost to delete.\n     */\n    where: SysPostWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysPost deleteMany\n   */\n  export type SysPostDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysPosts to delete\n     */\n    where?: SysPostWhereInput\n  }\n\n  /**\n   * SysPost.users\n   */\n  export type SysPost$usersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    where?: SysUserPostWhereInput\n    orderBy?: SysUserPostOrderByWithRelationInput | SysUserPostOrderByWithRelationInput[]\n    cursor?: SysUserPostWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: SysUserPostScalarFieldEnum | SysUserPostScalarFieldEnum[]\n  }\n\n  /**\n   * SysPost without action\n   */\n  export type SysPostDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysPost\n     */\n    select?: SysPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysPost\n     */\n    omit?: SysPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysPostInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysUserPost\n   */\n\n  export type AggregateSysUserPost = {\n    _count: SysUserPostCountAggregateOutputType | null\n    _avg: SysUserPostAvgAggregateOutputType | null\n    _sum: SysUserPostSumAggregateOutputType | null\n    _min: SysUserPostMinAggregateOutputType | null\n    _max: SysUserPostMaxAggregateOutputType | null\n  }\n\n  export type SysUserPostAvgAggregateOutputType = {\n    userId: number | null\n    postId: number | null\n  }\n\n  export type SysUserPostSumAggregateOutputType = {\n    userId: number | null\n    postId: number | null\n  }\n\n  export type SysUserPostMinAggregateOutputType = {\n    userId: number | null\n    postId: number | null\n  }\n\n  export type SysUserPostMaxAggregateOutputType = {\n    userId: number | null\n    postId: number | null\n  }\n\n  export type SysUserPostCountAggregateOutputType = {\n    userId: number\n    postId: number\n    _all: number\n  }\n\n\n  export type SysUserPostAvgAggregateInputType = {\n    userId?: true\n    postId?: true\n  }\n\n  export type SysUserPostSumAggregateInputType = {\n    userId?: true\n    postId?: true\n  }\n\n  export type SysUserPostMinAggregateInputType = {\n    userId?: true\n    postId?: true\n  }\n\n  export type SysUserPostMaxAggregateInputType = {\n    userId?: true\n    postId?: true\n  }\n\n  export type SysUserPostCountAggregateInputType = {\n    userId?: true\n    postId?: true\n    _all?: true\n  }\n\n  export type SysUserPostAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysUserPost to aggregate.\n     */\n    where?: SysUserPostWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUserPosts to fetch.\n     */\n    orderBy?: SysUserPostOrderByWithRelationInput | SysUserPostOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysUserPostWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUserPosts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUserPosts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysUserPosts\n    **/\n    _count?: true | SysUserPostCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysUserPostAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysUserPostSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysUserPostMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysUserPostMaxAggregateInputType\n  }\n\n  export type GetSysUserPostAggregateType<T extends SysUserPostAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysUserPost]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysUserPost[P]>\n      : GetScalarType<T[P], AggregateSysUserPost[P]>\n  }\n\n\n\n\n  export type SysUserPostGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysUserPostWhereInput\n    orderBy?: SysUserPostOrderByWithAggregationInput | SysUserPostOrderByWithAggregationInput[]\n    by: SysUserPostScalarFieldEnum[] | SysUserPostScalarFieldEnum\n    having?: SysUserPostScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysUserPostCountAggregateInputType | true\n    _avg?: SysUserPostAvgAggregateInputType\n    _sum?: SysUserPostSumAggregateInputType\n    _min?: SysUserPostMinAggregateInputType\n    _max?: SysUserPostMaxAggregateInputType\n  }\n\n  export type SysUserPostGroupByOutputType = {\n    userId: number\n    postId: number\n    _count: SysUserPostCountAggregateOutputType | null\n    _avg: SysUserPostAvgAggregateOutputType | null\n    _sum: SysUserPostSumAggregateOutputType | null\n    _min: SysUserPostMinAggregateOutputType | null\n    _max: SysUserPostMaxAggregateOutputType | null\n  }\n\n  type GetSysUserPostGroupByPayload<T extends SysUserPostGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysUserPostGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysUserPostGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysUserPostGroupByOutputType[P]>\n            : GetScalarType<T[P], SysUserPostGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysUserPostSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    userId?: boolean\n    postId?: boolean\n    user?: boolean | SysUserDefaultArgs<ExtArgs>\n    post?: boolean | SysPostDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysUserPost\"]>\n\n\n  export type SysUserPostSelectScalar = {\n    userId?: boolean\n    postId?: boolean\n  }\n\n  export type SysUserPostOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"userId\" | \"postId\", ExtArgs[\"result\"][\"sysUserPost\"]>\n  export type SysUserPostInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    user?: boolean | SysUserDefaultArgs<ExtArgs>\n    post?: boolean | SysPostDefaultArgs<ExtArgs>\n  }\n\n  export type $SysUserPostPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysUserPost\"\n    objects: {\n      user: Prisma.$SysUserPayload<ExtArgs>\n      post: Prisma.$SysPostPayload<ExtArgs>\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      userId: number\n      postId: number\n    }, ExtArgs[\"result\"][\"sysUserPost\"]>\n    composites: {}\n  }\n\n  type SysUserPostGetPayload<S extends boolean | null | undefined | SysUserPostDefaultArgs> = $Result.GetResult<Prisma.$SysUserPostPayload, S>\n\n  type SysUserPostCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysUserPostFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysUserPostCountAggregateInputType | true\n    }\n\n  export interface SysUserPostDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysUserPost'], meta: { name: 'SysUserPost' } }\n    /**\n     * Find zero or one SysUserPost that matches the filter.\n     * @param {SysUserPostFindUniqueArgs} args - Arguments to find a SysUserPost\n     * @example\n     * // Get one SysUserPost\n     * const sysUserPost = await prisma.sysUserPost.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysUserPostFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserPostFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysUserPostClient<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysUserPost that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysUserPostFindUniqueOrThrowArgs} args - Arguments to find a SysUserPost\n     * @example\n     * // Get one SysUserPost\n     * const sysUserPost = await prisma.sysUserPost.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysUserPostFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserPostFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysUserPostClient<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysUserPost that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserPostFindFirstArgs} args - Arguments to find a SysUserPost\n     * @example\n     * // Get one SysUserPost\n     * const sysUserPost = await prisma.sysUserPost.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysUserPostFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserPostFindFirstArgs<ExtArgs>>\n    ): Prisma__SysUserPostClient<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysUserPost that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserPostFindFirstOrThrowArgs} args - Arguments to find a SysUserPost\n     * @example\n     * // Get one SysUserPost\n     * const sysUserPost = await prisma.sysUserPost.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysUserPostFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserPostFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysUserPostClient<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysUserPosts that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserPostFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysUserPosts\n     * const sysUserPosts = await prisma.sysUserPost.findMany()\n     * \n     * // Get first 10 SysUserPosts\n     * const sysUserPosts = await prisma.sysUserPost.findMany({ take: 10 })\n     * \n     * // Only select the `userId`\n     * const sysUserPostWithUserIdOnly = await prisma.sysUserPost.findMany({ select: { userId: true } })\n     * \n    **/\n    findMany<T extends SysUserPostFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserPostFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysUserPost.\n     * @param {SysUserPostCreateArgs} args - Arguments to create a SysUserPost.\n     * @example\n     * // Create one SysUserPost\n     * const SysUserPost = await prisma.sysUserPost.create({\n     *   data: {\n     *     // ... data to create a SysUserPost\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysUserPostCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserPostCreateArgs<ExtArgs>>\n    ): Prisma__SysUserPostClient<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysUserPosts.\n     * @param {SysUserPostCreateManyArgs} args - Arguments to create many SysUserPosts.\n     * @example\n     * // Create many SysUserPosts\n     * const sysUserPost = await prisma.sysUserPost.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysUserPostCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserPostCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysUserPost.\n     * @param {SysUserPostDeleteArgs} args - Arguments to delete one SysUserPost.\n     * @example\n     * // Delete one SysUserPost\n     * const SysUserPost = await prisma.sysUserPost.delete({\n     *   where: {\n     *     // ... filter to delete one SysUserPost\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysUserPostDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserPostDeleteArgs<ExtArgs>>\n    ): Prisma__SysUserPostClient<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysUserPost.\n     * @param {SysUserPostUpdateArgs} args - Arguments to update one SysUserPost.\n     * @example\n     * // Update one SysUserPost\n     * const sysUserPost = await prisma.sysUserPost.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysUserPostUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserPostUpdateArgs<ExtArgs>>\n    ): Prisma__SysUserPostClient<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysUserPosts.\n     * @param {SysUserPostDeleteManyArgs} args - Arguments to filter SysUserPosts to delete.\n     * @example\n     * // Delete a few SysUserPosts\n     * const { count } = await prisma.sysUserPost.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysUserPostDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserPostDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysUserPosts.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserPostUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysUserPosts\n     * const sysUserPost = await prisma.sysUserPost.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysUserPostUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserPostUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysUserPost.\n     * @param {SysUserPostUpsertArgs} args - Arguments to update or create a SysUserPost.\n     * @example\n     * // Update or create a SysUserPost\n     * const sysUserPost = await prisma.sysUserPost.upsert({\n     *   create: {\n     *     // ... data to create a SysUserPost\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysUserPost we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysUserPostUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserPostUpsertArgs<ExtArgs>>\n    ): Prisma__SysUserPostClient<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysUserPosts.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserPostCountArgs} args - Arguments to filter SysUserPosts to count.\n     * @example\n     * // Count the number of SysUserPosts\n     * const count = await prisma.sysUserPost.count({\n     *   where: {\n     *     // ... the filter for the SysUserPosts we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysUserPostCountArgs>(\n      args?: Subset<T, SysUserPostCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysUserPostCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysUserPost.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserPostAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysUserPostAggregateArgs>(args: Subset<T, SysUserPostAggregateArgs>): Prisma.PrismaPromise<GetSysUserPostAggregateType<T>>\n\n    /**\n     * Group by SysUserPost.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserPostGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysUserPostGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysUserPostGroupByArgs['orderBy'] }\n        : { orderBy?: SysUserPostGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysUserPostGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysUserPostGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysUserPost model\n   */\n  readonly fields: SysUserPostFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysUserPost.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysUserPostClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    user<T extends SysUserDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SysUserDefaultArgs<ExtArgs>>): Prisma__SysUserClient<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'findUniqueOrThrow'> | Null, Null, ExtArgs>;\n\n    post<T extends SysPostDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SysPostDefaultArgs<ExtArgs>>): Prisma__SysPostClient<$Result.GetResult<Prisma.$SysPostPayload<ExtArgs>, T, 'findUniqueOrThrow'> | Null, Null, ExtArgs>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysUserPost model\n   */ \n  interface SysUserPostFieldRefs {\n    readonly userId: FieldRef<\"SysUserPost\", 'Int'>\n    readonly postId: FieldRef<\"SysUserPost\", 'Int'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysUserPost findUnique\n   */\n  export type SysUserPostFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUserPost to fetch.\n     */\n    where: SysUserPostWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserPost findUniqueOrThrow\n   */\n  export type SysUserPostFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUserPost to fetch.\n     */\n    where: SysUserPostWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserPost findFirst\n   */\n  export type SysUserPostFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUserPost to fetch.\n     */\n    where?: SysUserPostWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUserPosts to fetch.\n     */\n    orderBy?: SysUserPostOrderByWithRelationInput | SysUserPostOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysUserPosts.\n     */\n    cursor?: SysUserPostWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUserPosts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUserPosts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysUserPosts.\n     */\n    distinct?: SysUserPostScalarFieldEnum | SysUserPostScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserPost findFirstOrThrow\n   */\n  export type SysUserPostFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUserPost to fetch.\n     */\n    where?: SysUserPostWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUserPosts to fetch.\n     */\n    orderBy?: SysUserPostOrderByWithRelationInput | SysUserPostOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysUserPosts.\n     */\n    cursor?: SysUserPostWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUserPosts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUserPosts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysUserPosts.\n     */\n    distinct?: SysUserPostScalarFieldEnum | SysUserPostScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserPost findMany\n   */\n  export type SysUserPostFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUserPosts to fetch.\n     */\n    where?: SysUserPostWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUserPosts to fetch.\n     */\n    orderBy?: SysUserPostOrderByWithRelationInput | SysUserPostOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysUserPosts.\n     */\n    cursor?: SysUserPostWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUserPosts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUserPosts.\n     */\n    skip?: number\n    distinct?: SysUserPostScalarFieldEnum | SysUserPostScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserPost create\n   */\n  export type SysUserPostCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysUserPost.\n     */\n    data: XOR<SysUserPostCreateInput, SysUserPostUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserPost createMany\n   */\n  export type SysUserPostCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysUserPosts.\n     */\n    data: SysUserPostCreateManyInput | SysUserPostCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysUserPost update\n   */\n  export type SysUserPostUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysUserPost.\n     */\n    data: XOR<SysUserPostUpdateInput, SysUserPostUncheckedUpdateInput>\n    /**\n     * Choose, which SysUserPost to update.\n     */\n    where: SysUserPostWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserPost updateMany\n   */\n  export type SysUserPostUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysUserPosts.\n     */\n    data: XOR<SysUserPostUpdateManyMutationInput, SysUserPostUncheckedUpdateManyInput>\n    /**\n     * Filter which SysUserPosts to update\n     */\n    where?: SysUserPostWhereInput\n  }\n\n  /**\n   * SysUserPost upsert\n   */\n  export type SysUserPostUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysUserPost to update in case it exists.\n     */\n    where: SysUserPostWhereUniqueInput\n    /**\n     * In case the SysUserPost found by the `where` argument doesn't exist, create a new SysUserPost with this data.\n     */\n    create: XOR<SysUserPostCreateInput, SysUserPostUncheckedCreateInput>\n    /**\n     * In case the SysUserPost was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysUserPostUpdateInput, SysUserPostUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserPost delete\n   */\n  export type SysUserPostDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    /**\n     * Filter which SysUserPost to delete.\n     */\n    where: SysUserPostWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserPost deleteMany\n   */\n  export type SysUserPostDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysUserPosts to delete\n     */\n    where?: SysUserPostWhereInput\n  }\n\n  /**\n   * SysUserPost without action\n   */\n  export type SysUserPostDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysRoleDept\n   */\n\n  export type AggregateSysRoleDept = {\n    _count: SysRoleDeptCountAggregateOutputType | null\n    _avg: SysRoleDeptAvgAggregateOutputType | null\n    _sum: SysRoleDeptSumAggregateOutputType | null\n    _min: SysRoleDeptMinAggregateOutputType | null\n    _max: SysRoleDeptMaxAggregateOutputType | null\n  }\n\n  export type SysRoleDeptAvgAggregateOutputType = {\n    roleId: number | null\n    deptId: number | null\n  }\n\n  export type SysRoleDeptSumAggregateOutputType = {\n    roleId: number | null\n    deptId: number | null\n  }\n\n  export type SysRoleDeptMinAggregateOutputType = {\n    roleId: number | null\n    deptId: number | null\n  }\n\n  export type SysRoleDeptMaxAggregateOutputType = {\n    roleId: number | null\n    deptId: number | null\n  }\n\n  export type SysRoleDeptCountAggregateOutputType = {\n    roleId: number\n    deptId: number\n    _all: number\n  }\n\n\n  export type SysRoleDeptAvgAggregateInputType = {\n    roleId?: true\n    deptId?: true\n  }\n\n  export type SysRoleDeptSumAggregateInputType = {\n    roleId?: true\n    deptId?: true\n  }\n\n  export type SysRoleDeptMinAggregateInputType = {\n    roleId?: true\n    deptId?: true\n  }\n\n  export type SysRoleDeptMaxAggregateInputType = {\n    roleId?: true\n    deptId?: true\n  }\n\n  export type SysRoleDeptCountAggregateInputType = {\n    roleId?: true\n    deptId?: true\n    _all?: true\n  }\n\n  export type SysRoleDeptAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysRoleDept to aggregate.\n     */\n    where?: SysRoleDeptWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoleDepts to fetch.\n     */\n    orderBy?: SysRoleDeptOrderByWithRelationInput | SysRoleDeptOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysRoleDeptWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoleDepts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoleDepts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysRoleDepts\n    **/\n    _count?: true | SysRoleDeptCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysRoleDeptAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysRoleDeptSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysRoleDeptMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysRoleDeptMaxAggregateInputType\n  }\n\n  export type GetSysRoleDeptAggregateType<T extends SysRoleDeptAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysRoleDept]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysRoleDept[P]>\n      : GetScalarType<T[P], AggregateSysRoleDept[P]>\n  }\n\n\n\n\n  export type SysRoleDeptGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysRoleDeptWhereInput\n    orderBy?: SysRoleDeptOrderByWithAggregationInput | SysRoleDeptOrderByWithAggregationInput[]\n    by: SysRoleDeptScalarFieldEnum[] | SysRoleDeptScalarFieldEnum\n    having?: SysRoleDeptScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysRoleDeptCountAggregateInputType | true\n    _avg?: SysRoleDeptAvgAggregateInputType\n    _sum?: SysRoleDeptSumAggregateInputType\n    _min?: SysRoleDeptMinAggregateInputType\n    _max?: SysRoleDeptMaxAggregateInputType\n  }\n\n  export type SysRoleDeptGroupByOutputType = {\n    roleId: number\n    deptId: number\n    _count: SysRoleDeptCountAggregateOutputType | null\n    _avg: SysRoleDeptAvgAggregateOutputType | null\n    _sum: SysRoleDeptSumAggregateOutputType | null\n    _min: SysRoleDeptMinAggregateOutputType | null\n    _max: SysRoleDeptMaxAggregateOutputType | null\n  }\n\n  type GetSysRoleDeptGroupByPayload<T extends SysRoleDeptGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysRoleDeptGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysRoleDeptGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysRoleDeptGroupByOutputType[P]>\n            : GetScalarType<T[P], SysRoleDeptGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysRoleDeptSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    roleId?: boolean\n    deptId?: boolean\n    role?: boolean | SysRoleDefaultArgs<ExtArgs>\n    dept?: boolean | SysDeptDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysRoleDept\"]>\n\n\n  export type SysRoleDeptSelectScalar = {\n    roleId?: boolean\n    deptId?: boolean\n  }\n\n  export type SysRoleDeptOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"roleId\" | \"deptId\", ExtArgs[\"result\"][\"sysRoleDept\"]>\n  export type SysRoleDeptInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    role?: boolean | SysRoleDefaultArgs<ExtArgs>\n    dept?: boolean | SysDeptDefaultArgs<ExtArgs>\n  }\n\n  export type $SysRoleDeptPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysRoleDept\"\n    objects: {\n      role: Prisma.$SysRolePayload<ExtArgs>\n      dept: Prisma.$SysDeptPayload<ExtArgs>\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      roleId: number\n      deptId: number\n    }, ExtArgs[\"result\"][\"sysRoleDept\"]>\n    composites: {}\n  }\n\n  type SysRoleDeptGetPayload<S extends boolean | null | undefined | SysRoleDeptDefaultArgs> = $Result.GetResult<Prisma.$SysRoleDeptPayload, S>\n\n  type SysRoleDeptCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysRoleDeptFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysRoleDeptCountAggregateInputType | true\n    }\n\n  export interface SysRoleDeptDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysRoleDept'], meta: { name: 'SysRoleDept' } }\n    /**\n     * Find zero or one SysRoleDept that matches the filter.\n     * @param {SysRoleDeptFindUniqueArgs} args - Arguments to find a SysRoleDept\n     * @example\n     * // Get one SysRoleDept\n     * const sysRoleDept = await prisma.sysRoleDept.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysRoleDeptFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleDeptFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysRoleDeptClient<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysRoleDept that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysRoleDeptFindUniqueOrThrowArgs} args - Arguments to find a SysRoleDept\n     * @example\n     * // Get one SysRoleDept\n     * const sysRoleDept = await prisma.sysRoleDept.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysRoleDeptFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleDeptFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysRoleDeptClient<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysRoleDept that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleDeptFindFirstArgs} args - Arguments to find a SysRoleDept\n     * @example\n     * // Get one SysRoleDept\n     * const sysRoleDept = await prisma.sysRoleDept.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysRoleDeptFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleDeptFindFirstArgs<ExtArgs>>\n    ): Prisma__SysRoleDeptClient<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysRoleDept that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleDeptFindFirstOrThrowArgs} args - Arguments to find a SysRoleDept\n     * @example\n     * // Get one SysRoleDept\n     * const sysRoleDept = await prisma.sysRoleDept.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysRoleDeptFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleDeptFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysRoleDeptClient<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysRoleDepts that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleDeptFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysRoleDepts\n     * const sysRoleDepts = await prisma.sysRoleDept.findMany()\n     * \n     * // Get first 10 SysRoleDepts\n     * const sysRoleDepts = await prisma.sysRoleDept.findMany({ take: 10 })\n     * \n     * // Only select the `roleId`\n     * const sysRoleDeptWithRoleIdOnly = await prisma.sysRoleDept.findMany({ select: { roleId: true } })\n     * \n    **/\n    findMany<T extends SysRoleDeptFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleDeptFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysRoleDept.\n     * @param {SysRoleDeptCreateArgs} args - Arguments to create a SysRoleDept.\n     * @example\n     * // Create one SysRoleDept\n     * const SysRoleDept = await prisma.sysRoleDept.create({\n     *   data: {\n     *     // ... data to create a SysRoleDept\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysRoleDeptCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleDeptCreateArgs<ExtArgs>>\n    ): Prisma__SysRoleDeptClient<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysRoleDepts.\n     * @param {SysRoleDeptCreateManyArgs} args - Arguments to create many SysRoleDepts.\n     * @example\n     * // Create many SysRoleDepts\n     * const sysRoleDept = await prisma.sysRoleDept.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysRoleDeptCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleDeptCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysRoleDept.\n     * @param {SysRoleDeptDeleteArgs} args - Arguments to delete one SysRoleDept.\n     * @example\n     * // Delete one SysRoleDept\n     * const SysRoleDept = await prisma.sysRoleDept.delete({\n     *   where: {\n     *     // ... filter to delete one SysRoleDept\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysRoleDeptDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleDeptDeleteArgs<ExtArgs>>\n    ): Prisma__SysRoleDeptClient<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysRoleDept.\n     * @param {SysRoleDeptUpdateArgs} args - Arguments to update one SysRoleDept.\n     * @example\n     * // Update one SysRoleDept\n     * const sysRoleDept = await prisma.sysRoleDept.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysRoleDeptUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleDeptUpdateArgs<ExtArgs>>\n    ): Prisma__SysRoleDeptClient<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysRoleDepts.\n     * @param {SysRoleDeptDeleteManyArgs} args - Arguments to filter SysRoleDepts to delete.\n     * @example\n     * // Delete a few SysRoleDepts\n     * const { count } = await prisma.sysRoleDept.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysRoleDeptDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleDeptDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysRoleDepts.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleDeptUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysRoleDepts\n     * const sysRoleDept = await prisma.sysRoleDept.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysRoleDeptUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleDeptUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysRoleDept.\n     * @param {SysRoleDeptUpsertArgs} args - Arguments to update or create a SysRoleDept.\n     * @example\n     * // Update or create a SysRoleDept\n     * const sysRoleDept = await prisma.sysRoleDept.upsert({\n     *   create: {\n     *     // ... data to create a SysRoleDept\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysRoleDept we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysRoleDeptUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleDeptUpsertArgs<ExtArgs>>\n    ): Prisma__SysRoleDeptClient<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysRoleDepts.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleDeptCountArgs} args - Arguments to filter SysRoleDepts to count.\n     * @example\n     * // Count the number of SysRoleDepts\n     * const count = await prisma.sysRoleDept.count({\n     *   where: {\n     *     // ... the filter for the SysRoleDepts we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysRoleDeptCountArgs>(\n      args?: Subset<T, SysRoleDeptCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysRoleDeptCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysRoleDept.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleDeptAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysRoleDeptAggregateArgs>(args: Subset<T, SysRoleDeptAggregateArgs>): Prisma.PrismaPromise<GetSysRoleDeptAggregateType<T>>\n\n    /**\n     * Group by SysRoleDept.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleDeptGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysRoleDeptGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysRoleDeptGroupByArgs['orderBy'] }\n        : { orderBy?: SysRoleDeptGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysRoleDeptGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysRoleDeptGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysRoleDept model\n   */\n  readonly fields: SysRoleDeptFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysRoleDept.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysRoleDeptClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    role<T extends SysRoleDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SysRoleDefaultArgs<ExtArgs>>): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'findUniqueOrThrow'> | Null, Null, ExtArgs>;\n\n    dept<T extends SysDeptDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SysDeptDefaultArgs<ExtArgs>>): Prisma__SysDeptClient<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'findUniqueOrThrow'> | Null, Null, ExtArgs>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysRoleDept model\n   */ \n  interface SysRoleDeptFieldRefs {\n    readonly roleId: FieldRef<\"SysRoleDept\", 'Int'>\n    readonly deptId: FieldRef<\"SysRoleDept\", 'Int'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysRoleDept findUnique\n   */\n  export type SysRoleDeptFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoleDept to fetch.\n     */\n    where: SysRoleDeptWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleDept findUniqueOrThrow\n   */\n  export type SysRoleDeptFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoleDept to fetch.\n     */\n    where: SysRoleDeptWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleDept findFirst\n   */\n  export type SysRoleDeptFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoleDept to fetch.\n     */\n    where?: SysRoleDeptWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoleDepts to fetch.\n     */\n    orderBy?: SysRoleDeptOrderByWithRelationInput | SysRoleDeptOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysRoleDepts.\n     */\n    cursor?: SysRoleDeptWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoleDepts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoleDepts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysRoleDepts.\n     */\n    distinct?: SysRoleDeptScalarFieldEnum | SysRoleDeptScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleDept findFirstOrThrow\n   */\n  export type SysRoleDeptFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoleDept to fetch.\n     */\n    where?: SysRoleDeptWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoleDepts to fetch.\n     */\n    orderBy?: SysRoleDeptOrderByWithRelationInput | SysRoleDeptOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysRoleDepts.\n     */\n    cursor?: SysRoleDeptWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoleDepts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoleDepts.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysRoleDepts.\n     */\n    distinct?: SysRoleDeptScalarFieldEnum | SysRoleDeptScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleDept findMany\n   */\n  export type SysRoleDeptFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoleDepts to fetch.\n     */\n    where?: SysRoleDeptWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoleDepts to fetch.\n     */\n    orderBy?: SysRoleDeptOrderByWithRelationInput | SysRoleDeptOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysRoleDepts.\n     */\n    cursor?: SysRoleDeptWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoleDepts from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoleDepts.\n     */\n    skip?: number\n    distinct?: SysRoleDeptScalarFieldEnum | SysRoleDeptScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleDept create\n   */\n  export type SysRoleDeptCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysRoleDept.\n     */\n    data: XOR<SysRoleDeptCreateInput, SysRoleDeptUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleDept createMany\n   */\n  export type SysRoleDeptCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysRoleDepts.\n     */\n    data: SysRoleDeptCreateManyInput | SysRoleDeptCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysRoleDept update\n   */\n  export type SysRoleDeptUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysRoleDept.\n     */\n    data: XOR<SysRoleDeptUpdateInput, SysRoleDeptUncheckedUpdateInput>\n    /**\n     * Choose, which SysRoleDept to update.\n     */\n    where: SysRoleDeptWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleDept updateMany\n   */\n  export type SysRoleDeptUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysRoleDepts.\n     */\n    data: XOR<SysRoleDeptUpdateManyMutationInput, SysRoleDeptUncheckedUpdateManyInput>\n    /**\n     * Filter which SysRoleDepts to update\n     */\n    where?: SysRoleDeptWhereInput\n  }\n\n  /**\n   * SysRoleDept upsert\n   */\n  export type SysRoleDeptUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysRoleDept to update in case it exists.\n     */\n    where: SysRoleDeptWhereUniqueInput\n    /**\n     * In case the SysRoleDept found by the `where` argument doesn't exist, create a new SysRoleDept with this data.\n     */\n    create: XOR<SysRoleDeptCreateInput, SysRoleDeptUncheckedCreateInput>\n    /**\n     * In case the SysRoleDept was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysRoleDeptUpdateInput, SysRoleDeptUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleDept delete\n   */\n  export type SysRoleDeptDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    /**\n     * Filter which SysRoleDept to delete.\n     */\n    where: SysRoleDeptWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleDept deleteMany\n   */\n  export type SysRoleDeptDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysRoleDepts to delete\n     */\n    where?: SysRoleDeptWhereInput\n  }\n\n  /**\n   * SysRoleDept without action\n   */\n  export type SysRoleDeptDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysRoleMenu\n   */\n\n  export type AggregateSysRoleMenu = {\n    _count: SysRoleMenuCountAggregateOutputType | null\n    _avg: SysRoleMenuAvgAggregateOutputType | null\n    _sum: SysRoleMenuSumAggregateOutputType | null\n    _min: SysRoleMenuMinAggregateOutputType | null\n    _max: SysRoleMenuMaxAggregateOutputType | null\n  }\n\n  export type SysRoleMenuAvgAggregateOutputType = {\n    roleId: number | null\n    menuId: number | null\n  }\n\n  export type SysRoleMenuSumAggregateOutputType = {\n    roleId: number | null\n    menuId: number | null\n  }\n\n  export type SysRoleMenuMinAggregateOutputType = {\n    roleId: number | null\n    menuId: number | null\n  }\n\n  export type SysRoleMenuMaxAggregateOutputType = {\n    roleId: number | null\n    menuId: number | null\n  }\n\n  export type SysRoleMenuCountAggregateOutputType = {\n    roleId: number\n    menuId: number\n    _all: number\n  }\n\n\n  export type SysRoleMenuAvgAggregateInputType = {\n    roleId?: true\n    menuId?: true\n  }\n\n  export type SysRoleMenuSumAggregateInputType = {\n    roleId?: true\n    menuId?: true\n  }\n\n  export type SysRoleMenuMinAggregateInputType = {\n    roleId?: true\n    menuId?: true\n  }\n\n  export type SysRoleMenuMaxAggregateInputType = {\n    roleId?: true\n    menuId?: true\n  }\n\n  export type SysRoleMenuCountAggregateInputType = {\n    roleId?: true\n    menuId?: true\n    _all?: true\n  }\n\n  export type SysRoleMenuAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysRoleMenu to aggregate.\n     */\n    where?: SysRoleMenuWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoleMenus to fetch.\n     */\n    orderBy?: SysRoleMenuOrderByWithRelationInput | SysRoleMenuOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysRoleMenuWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoleMenus from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoleMenus.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysRoleMenus\n    **/\n    _count?: true | SysRoleMenuCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysRoleMenuAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysRoleMenuSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysRoleMenuMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysRoleMenuMaxAggregateInputType\n  }\n\n  export type GetSysRoleMenuAggregateType<T extends SysRoleMenuAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysRoleMenu]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysRoleMenu[P]>\n      : GetScalarType<T[P], AggregateSysRoleMenu[P]>\n  }\n\n\n\n\n  export type SysRoleMenuGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysRoleMenuWhereInput\n    orderBy?: SysRoleMenuOrderByWithAggregationInput | SysRoleMenuOrderByWithAggregationInput[]\n    by: SysRoleMenuScalarFieldEnum[] | SysRoleMenuScalarFieldEnum\n    having?: SysRoleMenuScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysRoleMenuCountAggregateInputType | true\n    _avg?: SysRoleMenuAvgAggregateInputType\n    _sum?: SysRoleMenuSumAggregateInputType\n    _min?: SysRoleMenuMinAggregateInputType\n    _max?: SysRoleMenuMaxAggregateInputType\n  }\n\n  export type SysRoleMenuGroupByOutputType = {\n    roleId: number\n    menuId: number\n    _count: SysRoleMenuCountAggregateOutputType | null\n    _avg: SysRoleMenuAvgAggregateOutputType | null\n    _sum: SysRoleMenuSumAggregateOutputType | null\n    _min: SysRoleMenuMinAggregateOutputType | null\n    _max: SysRoleMenuMaxAggregateOutputType | null\n  }\n\n  type GetSysRoleMenuGroupByPayload<T extends SysRoleMenuGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysRoleMenuGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysRoleMenuGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysRoleMenuGroupByOutputType[P]>\n            : GetScalarType<T[P], SysRoleMenuGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysRoleMenuSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    roleId?: boolean\n    menuId?: boolean\n    menu?: boolean | SysMenuDefaultArgs<ExtArgs>\n    role?: boolean | SysRoleDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysRoleMenu\"]>\n\n\n  export type SysRoleMenuSelectScalar = {\n    roleId?: boolean\n    menuId?: boolean\n  }\n\n  export type SysRoleMenuOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"roleId\" | \"menuId\", ExtArgs[\"result\"][\"sysRoleMenu\"]>\n  export type SysRoleMenuInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    menu?: boolean | SysMenuDefaultArgs<ExtArgs>\n    role?: boolean | SysRoleDefaultArgs<ExtArgs>\n  }\n\n  export type $SysRoleMenuPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysRoleMenu\"\n    objects: {\n      menu: Prisma.$SysMenuPayload<ExtArgs>\n      role: Prisma.$SysRolePayload<ExtArgs>\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      roleId: number\n      menuId: number\n    }, ExtArgs[\"result\"][\"sysRoleMenu\"]>\n    composites: {}\n  }\n\n  type SysRoleMenuGetPayload<S extends boolean | null | undefined | SysRoleMenuDefaultArgs> = $Result.GetResult<Prisma.$SysRoleMenuPayload, S>\n\n  type SysRoleMenuCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysRoleMenuFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysRoleMenuCountAggregateInputType | true\n    }\n\n  export interface SysRoleMenuDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysRoleMenu'], meta: { name: 'SysRoleMenu' } }\n    /**\n     * Find zero or one SysRoleMenu that matches the filter.\n     * @param {SysRoleMenuFindUniqueArgs} args - Arguments to find a SysRoleMenu\n     * @example\n     * // Get one SysRoleMenu\n     * const sysRoleMenu = await prisma.sysRoleMenu.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysRoleMenuFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleMenuFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysRoleMenuClient<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysRoleMenu that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysRoleMenuFindUniqueOrThrowArgs} args - Arguments to find a SysRoleMenu\n     * @example\n     * // Get one SysRoleMenu\n     * const sysRoleMenu = await prisma.sysRoleMenu.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysRoleMenuFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleMenuFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysRoleMenuClient<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysRoleMenu that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleMenuFindFirstArgs} args - Arguments to find a SysRoleMenu\n     * @example\n     * // Get one SysRoleMenu\n     * const sysRoleMenu = await prisma.sysRoleMenu.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysRoleMenuFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleMenuFindFirstArgs<ExtArgs>>\n    ): Prisma__SysRoleMenuClient<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysRoleMenu that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleMenuFindFirstOrThrowArgs} args - Arguments to find a SysRoleMenu\n     * @example\n     * // Get one SysRoleMenu\n     * const sysRoleMenu = await prisma.sysRoleMenu.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysRoleMenuFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleMenuFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysRoleMenuClient<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysRoleMenus that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleMenuFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysRoleMenus\n     * const sysRoleMenus = await prisma.sysRoleMenu.findMany()\n     * \n     * // Get first 10 SysRoleMenus\n     * const sysRoleMenus = await prisma.sysRoleMenu.findMany({ take: 10 })\n     * \n     * // Only select the `roleId`\n     * const sysRoleMenuWithRoleIdOnly = await prisma.sysRoleMenu.findMany({ select: { roleId: true } })\n     * \n    **/\n    findMany<T extends SysRoleMenuFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleMenuFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysRoleMenu.\n     * @param {SysRoleMenuCreateArgs} args - Arguments to create a SysRoleMenu.\n     * @example\n     * // Create one SysRoleMenu\n     * const SysRoleMenu = await prisma.sysRoleMenu.create({\n     *   data: {\n     *     // ... data to create a SysRoleMenu\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysRoleMenuCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleMenuCreateArgs<ExtArgs>>\n    ): Prisma__SysRoleMenuClient<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysRoleMenus.\n     * @param {SysRoleMenuCreateManyArgs} args - Arguments to create many SysRoleMenus.\n     * @example\n     * // Create many SysRoleMenus\n     * const sysRoleMenu = await prisma.sysRoleMenu.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysRoleMenuCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleMenuCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysRoleMenu.\n     * @param {SysRoleMenuDeleteArgs} args - Arguments to delete one SysRoleMenu.\n     * @example\n     * // Delete one SysRoleMenu\n     * const SysRoleMenu = await prisma.sysRoleMenu.delete({\n     *   where: {\n     *     // ... filter to delete one SysRoleMenu\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysRoleMenuDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleMenuDeleteArgs<ExtArgs>>\n    ): Prisma__SysRoleMenuClient<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysRoleMenu.\n     * @param {SysRoleMenuUpdateArgs} args - Arguments to update one SysRoleMenu.\n     * @example\n     * // Update one SysRoleMenu\n     * const sysRoleMenu = await prisma.sysRoleMenu.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysRoleMenuUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleMenuUpdateArgs<ExtArgs>>\n    ): Prisma__SysRoleMenuClient<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysRoleMenus.\n     * @param {SysRoleMenuDeleteManyArgs} args - Arguments to filter SysRoleMenus to delete.\n     * @example\n     * // Delete a few SysRoleMenus\n     * const { count } = await prisma.sysRoleMenu.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysRoleMenuDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleMenuDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysRoleMenus.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleMenuUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysRoleMenus\n     * const sysRoleMenu = await prisma.sysRoleMenu.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysRoleMenuUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleMenuUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysRoleMenu.\n     * @param {SysRoleMenuUpsertArgs} args - Arguments to update or create a SysRoleMenu.\n     * @example\n     * // Update or create a SysRoleMenu\n     * const sysRoleMenu = await prisma.sysRoleMenu.upsert({\n     *   create: {\n     *     // ... data to create a SysRoleMenu\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysRoleMenu we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysRoleMenuUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleMenuUpsertArgs<ExtArgs>>\n    ): Prisma__SysRoleMenuClient<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysRoleMenus.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleMenuCountArgs} args - Arguments to filter SysRoleMenus to count.\n     * @example\n     * // Count the number of SysRoleMenus\n     * const count = await prisma.sysRoleMenu.count({\n     *   where: {\n     *     // ... the filter for the SysRoleMenus we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysRoleMenuCountArgs>(\n      args?: Subset<T, SysRoleMenuCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysRoleMenuCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysRoleMenu.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleMenuAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysRoleMenuAggregateArgs>(args: Subset<T, SysRoleMenuAggregateArgs>): Prisma.PrismaPromise<GetSysRoleMenuAggregateType<T>>\n\n    /**\n     * Group by SysRoleMenu.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleMenuGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysRoleMenuGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysRoleMenuGroupByArgs['orderBy'] }\n        : { orderBy?: SysRoleMenuGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysRoleMenuGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysRoleMenuGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysRoleMenu model\n   */\n  readonly fields: SysRoleMenuFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysRoleMenu.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysRoleMenuClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    menu<T extends SysMenuDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SysMenuDefaultArgs<ExtArgs>>): Prisma__SysMenuClient<$Result.GetResult<Prisma.$SysMenuPayload<ExtArgs>, T, 'findUniqueOrThrow'> | Null, Null, ExtArgs>;\n\n    role<T extends SysRoleDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SysRoleDefaultArgs<ExtArgs>>): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'findUniqueOrThrow'> | Null, Null, ExtArgs>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysRoleMenu model\n   */ \n  interface SysRoleMenuFieldRefs {\n    readonly roleId: FieldRef<\"SysRoleMenu\", 'Int'>\n    readonly menuId: FieldRef<\"SysRoleMenu\", 'Int'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysRoleMenu findUnique\n   */\n  export type SysRoleMenuFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoleMenu to fetch.\n     */\n    where: SysRoleMenuWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleMenu findUniqueOrThrow\n   */\n  export type SysRoleMenuFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoleMenu to fetch.\n     */\n    where: SysRoleMenuWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleMenu findFirst\n   */\n  export type SysRoleMenuFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoleMenu to fetch.\n     */\n    where?: SysRoleMenuWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoleMenus to fetch.\n     */\n    orderBy?: SysRoleMenuOrderByWithRelationInput | SysRoleMenuOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysRoleMenus.\n     */\n    cursor?: SysRoleMenuWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoleMenus from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoleMenus.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysRoleMenus.\n     */\n    distinct?: SysRoleMenuScalarFieldEnum | SysRoleMenuScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleMenu findFirstOrThrow\n   */\n  export type SysRoleMenuFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoleMenu to fetch.\n     */\n    where?: SysRoleMenuWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoleMenus to fetch.\n     */\n    orderBy?: SysRoleMenuOrderByWithRelationInput | SysRoleMenuOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysRoleMenus.\n     */\n    cursor?: SysRoleMenuWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoleMenus from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoleMenus.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysRoleMenus.\n     */\n    distinct?: SysRoleMenuScalarFieldEnum | SysRoleMenuScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleMenu findMany\n   */\n  export type SysRoleMenuFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoleMenus to fetch.\n     */\n    where?: SysRoleMenuWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoleMenus to fetch.\n     */\n    orderBy?: SysRoleMenuOrderByWithRelationInput | SysRoleMenuOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysRoleMenus.\n     */\n    cursor?: SysRoleMenuWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoleMenus from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoleMenus.\n     */\n    skip?: number\n    distinct?: SysRoleMenuScalarFieldEnum | SysRoleMenuScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleMenu create\n   */\n  export type SysRoleMenuCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysRoleMenu.\n     */\n    data: XOR<SysRoleMenuCreateInput, SysRoleMenuUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleMenu createMany\n   */\n  export type SysRoleMenuCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysRoleMenus.\n     */\n    data: SysRoleMenuCreateManyInput | SysRoleMenuCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysRoleMenu update\n   */\n  export type SysRoleMenuUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysRoleMenu.\n     */\n    data: XOR<SysRoleMenuUpdateInput, SysRoleMenuUncheckedUpdateInput>\n    /**\n     * Choose, which SysRoleMenu to update.\n     */\n    where: SysRoleMenuWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleMenu updateMany\n   */\n  export type SysRoleMenuUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysRoleMenus.\n     */\n    data: XOR<SysRoleMenuUpdateManyMutationInput, SysRoleMenuUncheckedUpdateManyInput>\n    /**\n     * Filter which SysRoleMenus to update\n     */\n    where?: SysRoleMenuWhereInput\n  }\n\n  /**\n   * SysRoleMenu upsert\n   */\n  export type SysRoleMenuUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysRoleMenu to update in case it exists.\n     */\n    where: SysRoleMenuWhereUniqueInput\n    /**\n     * In case the SysRoleMenu found by the `where` argument doesn't exist, create a new SysRoleMenu with this data.\n     */\n    create: XOR<SysRoleMenuCreateInput, SysRoleMenuUncheckedCreateInput>\n    /**\n     * In case the SysRoleMenu was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysRoleMenuUpdateInput, SysRoleMenuUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleMenu delete\n   */\n  export type SysRoleMenuDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    /**\n     * Filter which SysRoleMenu to delete.\n     */\n    where: SysRoleMenuWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRoleMenu deleteMany\n   */\n  export type SysRoleMenuDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysRoleMenus to delete\n     */\n    where?: SysRoleMenuWhereInput\n  }\n\n  /**\n   * SysRoleMenu without action\n   */\n  export type SysRoleMenuDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysUser\n   */\n\n  export type AggregateSysUser = {\n    _count: SysUserCountAggregateOutputType | null\n    _avg: SysUserAvgAggregateOutputType | null\n    _sum: SysUserSumAggregateOutputType | null\n    _min: SysUserMinAggregateOutputType | null\n    _max: SysUserMaxAggregateOutputType | null\n  }\n\n  export type SysUserAvgAggregateOutputType = {\n    userId: number | null\n    deptId: number | null\n  }\n\n  export type SysUserSumAggregateOutputType = {\n    userId: number | null\n    deptId: number | null\n  }\n\n  export type SysUserMinAggregateOutputType = {\n    userId: number | null\n    deptId: number | null\n    userName: string | null\n    nickName: string | null\n    userType: string | null\n    email: string | null\n    phonenumber: string | null\n    sex: string | null\n    avatar: string | null\n    password: string | null\n    status: string | null\n    loginIp: string | null\n    loginDate: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysUserMaxAggregateOutputType = {\n    userId: number | null\n    deptId: number | null\n    userName: string | null\n    nickName: string | null\n    userType: string | null\n    email: string | null\n    phonenumber: string | null\n    sex: string | null\n    avatar: string | null\n    password: string | null\n    status: string | null\n    loginIp: string | null\n    loginDate: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysUserCountAggregateOutputType = {\n    userId: number\n    deptId: number\n    userName: number\n    nickName: number\n    userType: number\n    email: number\n    phonenumber: number\n    sex: number\n    avatar: number\n    password: number\n    status: number\n    loginIp: number\n    loginDate: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    remark: number\n    _all: number\n  }\n\n\n  export type SysUserAvgAggregateInputType = {\n    userId?: true\n    deptId?: true\n  }\n\n  export type SysUserSumAggregateInputType = {\n    userId?: true\n    deptId?: true\n  }\n\n  export type SysUserMinAggregateInputType = {\n    userId?: true\n    deptId?: true\n    userName?: true\n    nickName?: true\n    userType?: true\n    email?: true\n    phonenumber?: true\n    sex?: true\n    avatar?: true\n    password?: true\n    status?: true\n    loginIp?: true\n    loginDate?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysUserMaxAggregateInputType = {\n    userId?: true\n    deptId?: true\n    userName?: true\n    nickName?: true\n    userType?: true\n    email?: true\n    phonenumber?: true\n    sex?: true\n    avatar?: true\n    password?: true\n    status?: true\n    loginIp?: true\n    loginDate?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysUserCountAggregateInputType = {\n    userId?: true\n    deptId?: true\n    userName?: true\n    nickName?: true\n    userType?: true\n    email?: true\n    phonenumber?: true\n    sex?: true\n    avatar?: true\n    password?: true\n    status?: true\n    loginIp?: true\n    loginDate?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n    _all?: true\n  }\n\n  export type SysUserAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysUser to aggregate.\n     */\n    where?: SysUserWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUsers to fetch.\n     */\n    orderBy?: SysUserOrderByWithRelationInput | SysUserOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysUserWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUsers from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUsers.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysUsers\n    **/\n    _count?: true | SysUserCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysUserAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysUserSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysUserMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysUserMaxAggregateInputType\n  }\n\n  export type GetSysUserAggregateType<T extends SysUserAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysUser]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysUser[P]>\n      : GetScalarType<T[P], AggregateSysUser[P]>\n  }\n\n\n\n\n  export type SysUserGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysUserWhereInput\n    orderBy?: SysUserOrderByWithAggregationInput | SysUserOrderByWithAggregationInput[]\n    by: SysUserScalarFieldEnum[] | SysUserScalarFieldEnum\n    having?: SysUserScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysUserCountAggregateInputType | true\n    _avg?: SysUserAvgAggregateInputType\n    _sum?: SysUserSumAggregateInputType\n    _min?: SysUserMinAggregateInputType\n    _max?: SysUserMaxAggregateInputType\n  }\n\n  export type SysUserGroupByOutputType = {\n    userId: number\n    deptId: number | null\n    userName: string\n    nickName: string\n    userType: string | null\n    email: string | null\n    phonenumber: string | null\n    sex: string | null\n    avatar: string | null\n    password: string | null\n    status: string | null\n    loginIp: string | null\n    loginDate: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n    _count: SysUserCountAggregateOutputType | null\n    _avg: SysUserAvgAggregateOutputType | null\n    _sum: SysUserSumAggregateOutputType | null\n    _min: SysUserMinAggregateOutputType | null\n    _max: SysUserMaxAggregateOutputType | null\n  }\n\n  type GetSysUserGroupByPayload<T extends SysUserGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysUserGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysUserGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysUserGroupByOutputType[P]>\n            : GetScalarType<T[P], SysUserGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysUserSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    userId?: boolean\n    deptId?: boolean\n    userName?: boolean\n    nickName?: boolean\n    userType?: boolean\n    email?: boolean\n    phonenumber?: boolean\n    sex?: boolean\n    avatar?: boolean\n    password?: boolean\n    status?: boolean\n    loginIp?: boolean\n    loginDate?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n    dept?: boolean | SysUser$deptArgs<ExtArgs>\n    roles?: boolean | SysUser$rolesArgs<ExtArgs>\n    posts?: boolean | SysUser$postsArgs<ExtArgs>\n    _count?: boolean | SysUserCountOutputTypeDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysUser\"]>\n\n\n  export type SysUserSelectScalar = {\n    userId?: boolean\n    deptId?: boolean\n    userName?: boolean\n    nickName?: boolean\n    userType?: boolean\n    email?: boolean\n    phonenumber?: boolean\n    sex?: boolean\n    avatar?: boolean\n    password?: boolean\n    status?: boolean\n    loginIp?: boolean\n    loginDate?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }\n\n  export type SysUserOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"userId\" | \"deptId\" | \"userName\" | \"nickName\" | \"userType\" | \"email\" | \"phonenumber\" | \"sex\" | \"avatar\" | \"password\" | \"status\" | \"loginIp\" | \"loginDate\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\" | \"remark\", ExtArgs[\"result\"][\"sysUser\"]>\n  export type SysUserInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    dept?: boolean | SysUser$deptArgs<ExtArgs>\n    roles?: boolean | SysUser$rolesArgs<ExtArgs>\n    posts?: boolean | SysUser$postsArgs<ExtArgs>\n    _count?: boolean | SysUserCountOutputTypeDefaultArgs<ExtArgs>\n  }\n\n  export type $SysUserPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysUser\"\n    objects: {\n      dept: Prisma.$SysDeptPayload<ExtArgs> | null\n      roles: Prisma.$SysUserRolePayload<ExtArgs>[]\n      posts: Prisma.$SysUserPostPayload<ExtArgs>[]\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      userId: number\n      deptId: number | null\n      userName: string\n      nickName: string\n      userType: string | null\n      email: string | null\n      phonenumber: string | null\n      sex: string | null\n      avatar: string | null\n      password: string | null\n      status: string | null\n      loginIp: string | null\n      loginDate: string | null\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n      remark: string | null\n    }, ExtArgs[\"result\"][\"sysUser\"]>\n    composites: {}\n  }\n\n  type SysUserGetPayload<S extends boolean | null | undefined | SysUserDefaultArgs> = $Result.GetResult<Prisma.$SysUserPayload, S>\n\n  type SysUserCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysUserFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysUserCountAggregateInputType | true\n    }\n\n  export interface SysUserDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysUser'], meta: { name: 'SysUser' } }\n    /**\n     * Find zero or one SysUser that matches the filter.\n     * @param {SysUserFindUniqueArgs} args - Arguments to find a SysUser\n     * @example\n     * // Get one SysUser\n     * const sysUser = await prisma.sysUser.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysUserFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysUserClient<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysUser that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysUserFindUniqueOrThrowArgs} args - Arguments to find a SysUser\n     * @example\n     * // Get one SysUser\n     * const sysUser = await prisma.sysUser.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysUserFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysUserClient<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysUser that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserFindFirstArgs} args - Arguments to find a SysUser\n     * @example\n     * // Get one SysUser\n     * const sysUser = await prisma.sysUser.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysUserFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserFindFirstArgs<ExtArgs>>\n    ): Prisma__SysUserClient<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysUser that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserFindFirstOrThrowArgs} args - Arguments to find a SysUser\n     * @example\n     * // Get one SysUser\n     * const sysUser = await prisma.sysUser.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysUserFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysUserClient<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysUsers that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysUsers\n     * const sysUsers = await prisma.sysUser.findMany()\n     * \n     * // Get first 10 SysUsers\n     * const sysUsers = await prisma.sysUser.findMany({ take: 10 })\n     * \n     * // Only select the `userId`\n     * const sysUserWithUserIdOnly = await prisma.sysUser.findMany({ select: { userId: true } })\n     * \n    **/\n    findMany<T extends SysUserFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysUser.\n     * @param {SysUserCreateArgs} args - Arguments to create a SysUser.\n     * @example\n     * // Create one SysUser\n     * const SysUser = await prisma.sysUser.create({\n     *   data: {\n     *     // ... data to create a SysUser\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysUserCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserCreateArgs<ExtArgs>>\n    ): Prisma__SysUserClient<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysUsers.\n     * @param {SysUserCreateManyArgs} args - Arguments to create many SysUsers.\n     * @example\n     * // Create many SysUsers\n     * const sysUser = await prisma.sysUser.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysUserCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysUser.\n     * @param {SysUserDeleteArgs} args - Arguments to delete one SysUser.\n     * @example\n     * // Delete one SysUser\n     * const SysUser = await prisma.sysUser.delete({\n     *   where: {\n     *     // ... filter to delete one SysUser\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysUserDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserDeleteArgs<ExtArgs>>\n    ): Prisma__SysUserClient<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysUser.\n     * @param {SysUserUpdateArgs} args - Arguments to update one SysUser.\n     * @example\n     * // Update one SysUser\n     * const sysUser = await prisma.sysUser.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysUserUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserUpdateArgs<ExtArgs>>\n    ): Prisma__SysUserClient<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysUsers.\n     * @param {SysUserDeleteManyArgs} args - Arguments to filter SysUsers to delete.\n     * @example\n     * // Delete a few SysUsers\n     * const { count } = await prisma.sysUser.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysUserDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysUsers.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysUsers\n     * const sysUser = await prisma.sysUser.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysUserUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysUser.\n     * @param {SysUserUpsertArgs} args - Arguments to update or create a SysUser.\n     * @example\n     * // Update or create a SysUser\n     * const sysUser = await prisma.sysUser.upsert({\n     *   create: {\n     *     // ... data to create a SysUser\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysUser we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysUserUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserUpsertArgs<ExtArgs>>\n    ): Prisma__SysUserClient<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysUsers.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserCountArgs} args - Arguments to filter SysUsers to count.\n     * @example\n     * // Count the number of SysUsers\n     * const count = await prisma.sysUser.count({\n     *   where: {\n     *     // ... the filter for the SysUsers we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysUserCountArgs>(\n      args?: Subset<T, SysUserCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysUserCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysUser.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysUserAggregateArgs>(args: Subset<T, SysUserAggregateArgs>): Prisma.PrismaPromise<GetSysUserAggregateType<T>>\n\n    /**\n     * Group by SysUser.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysUserGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysUserGroupByArgs['orderBy'] }\n        : { orderBy?: SysUserGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysUserGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysUserGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysUser model\n   */\n  readonly fields: SysUserFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysUser.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysUserClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    dept<T extends SysUser$deptArgs<ExtArgs> = {}>(args?: Subset<T, SysUser$deptArgs<ExtArgs>>): Prisma__SysDeptClient<$Result.GetResult<Prisma.$SysDeptPayload<ExtArgs>, T, 'findUniqueOrThrow'> | null, null, ExtArgs>;\n\n    roles<T extends SysUser$rolesArgs<ExtArgs> = {}>(args?: Subset<T, SysUser$rolesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    posts<T extends SysUser$postsArgs<ExtArgs> = {}>(args?: Subset<T, SysUser$postsArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysUserPostPayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysUser model\n   */ \n  interface SysUserFieldRefs {\n    readonly userId: FieldRef<\"SysUser\", 'Int'>\n    readonly deptId: FieldRef<\"SysUser\", 'Int'>\n    readonly userName: FieldRef<\"SysUser\", 'String'>\n    readonly nickName: FieldRef<\"SysUser\", 'String'>\n    readonly userType: FieldRef<\"SysUser\", 'String'>\n    readonly email: FieldRef<\"SysUser\", 'String'>\n    readonly phonenumber: FieldRef<\"SysUser\", 'String'>\n    readonly sex: FieldRef<\"SysUser\", 'String'>\n    readonly avatar: FieldRef<\"SysUser\", 'String'>\n    readonly password: FieldRef<\"SysUser\", 'String'>\n    readonly status: FieldRef<\"SysUser\", 'String'>\n    readonly loginIp: FieldRef<\"SysUser\", 'String'>\n    readonly loginDate: FieldRef<\"SysUser\", 'String'>\n    readonly createBy: FieldRef<\"SysUser\", 'String'>\n    readonly createTime: FieldRef<\"SysUser\", 'String'>\n    readonly updateBy: FieldRef<\"SysUser\", 'String'>\n    readonly updateTime: FieldRef<\"SysUser\", 'String'>\n    readonly remark: FieldRef<\"SysUser\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysUser findUnique\n   */\n  export type SysUserFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUser to fetch.\n     */\n    where: SysUserWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUser findUniqueOrThrow\n   */\n  export type SysUserFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUser to fetch.\n     */\n    where: SysUserWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUser findFirst\n   */\n  export type SysUserFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUser to fetch.\n     */\n    where?: SysUserWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUsers to fetch.\n     */\n    orderBy?: SysUserOrderByWithRelationInput | SysUserOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysUsers.\n     */\n    cursor?: SysUserWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUsers from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUsers.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysUsers.\n     */\n    distinct?: SysUserScalarFieldEnum | SysUserScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUser findFirstOrThrow\n   */\n  export type SysUserFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUser to fetch.\n     */\n    where?: SysUserWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUsers to fetch.\n     */\n    orderBy?: SysUserOrderByWithRelationInput | SysUserOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysUsers.\n     */\n    cursor?: SysUserWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUsers from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUsers.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysUsers.\n     */\n    distinct?: SysUserScalarFieldEnum | SysUserScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUser findMany\n   */\n  export type SysUserFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUsers to fetch.\n     */\n    where?: SysUserWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUsers to fetch.\n     */\n    orderBy?: SysUserOrderByWithRelationInput | SysUserOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysUsers.\n     */\n    cursor?: SysUserWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUsers from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUsers.\n     */\n    skip?: number\n    distinct?: SysUserScalarFieldEnum | SysUserScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUser create\n   */\n  export type SysUserCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysUser.\n     */\n    data: XOR<SysUserCreateInput, SysUserUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUser createMany\n   */\n  export type SysUserCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysUsers.\n     */\n    data: SysUserCreateManyInput | SysUserCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysUser update\n   */\n  export type SysUserUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysUser.\n     */\n    data: XOR<SysUserUpdateInput, SysUserUncheckedUpdateInput>\n    /**\n     * Choose, which SysUser to update.\n     */\n    where: SysUserWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUser updateMany\n   */\n  export type SysUserUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysUsers.\n     */\n    data: XOR<SysUserUpdateManyMutationInput, SysUserUncheckedUpdateManyInput>\n    /**\n     * Filter which SysUsers to update\n     */\n    where?: SysUserWhereInput\n  }\n\n  /**\n   * SysUser upsert\n   */\n  export type SysUserUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysUser to update in case it exists.\n     */\n    where: SysUserWhereUniqueInput\n    /**\n     * In case the SysUser found by the `where` argument doesn't exist, create a new SysUser with this data.\n     */\n    create: XOR<SysUserCreateInput, SysUserUncheckedCreateInput>\n    /**\n     * In case the SysUser was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysUserUpdateInput, SysUserUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUser delete\n   */\n  export type SysUserDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n    /**\n     * Filter which SysUser to delete.\n     */\n    where: SysUserWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUser deleteMany\n   */\n  export type SysUserDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysUsers to delete\n     */\n    where?: SysUserWhereInput\n  }\n\n  /**\n   * SysUser.dept\n   */\n  export type SysUser$deptArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysDept\n     */\n    select?: SysDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysDept\n     */\n    omit?: SysDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysDeptInclude<ExtArgs> | null\n    where?: SysDeptWhereInput\n  }\n\n  /**\n   * SysUser.roles\n   */\n  export type SysUser$rolesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    where?: SysUserRoleWhereInput\n    orderBy?: SysUserRoleOrderByWithRelationInput | SysUserRoleOrderByWithRelationInput[]\n    cursor?: SysUserRoleWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: SysUserRoleScalarFieldEnum | SysUserRoleScalarFieldEnum[]\n  }\n\n  /**\n   * SysUser.posts\n   */\n  export type SysUser$postsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserPost\n     */\n    select?: SysUserPostSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserPost\n     */\n    omit?: SysUserPostOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserPostInclude<ExtArgs> | null\n    where?: SysUserPostWhereInput\n    orderBy?: SysUserPostOrderByWithRelationInput | SysUserPostOrderByWithRelationInput[]\n    cursor?: SysUserPostWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: SysUserPostScalarFieldEnum | SysUserPostScalarFieldEnum[]\n  }\n\n  /**\n   * SysUser without action\n   */\n  export type SysUserDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUser\n     */\n    select?: SysUserSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUser\n     */\n    omit?: SysUserOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysRole\n   */\n\n  export type AggregateSysRole = {\n    _count: SysRoleCountAggregateOutputType | null\n    _avg: SysRoleAvgAggregateOutputType | null\n    _sum: SysRoleSumAggregateOutputType | null\n    _min: SysRoleMinAggregateOutputType | null\n    _max: SysRoleMaxAggregateOutputType | null\n  }\n\n  export type SysRoleAvgAggregateOutputType = {\n    roleId: number | null\n    roleSort: number | null\n    menuCheckStrictly: number | null\n    deptCheckStrictly: number | null\n  }\n\n  export type SysRoleSumAggregateOutputType = {\n    roleId: number | null\n    roleSort: number | null\n    menuCheckStrictly: number | null\n    deptCheckStrictly: number | null\n  }\n\n  export type SysRoleMinAggregateOutputType = {\n    roleId: number | null\n    roleName: string | null\n    roleKey: string | null\n    roleSort: number | null\n    dataScope: string | null\n    menuCheckStrictly: number | null\n    deptCheckStrictly: number | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysRoleMaxAggregateOutputType = {\n    roleId: number | null\n    roleName: string | null\n    roleKey: string | null\n    roleSort: number | null\n    dataScope: string | null\n    menuCheckStrictly: number | null\n    deptCheckStrictly: number | null\n    status: string | null\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n  }\n\n  export type SysRoleCountAggregateOutputType = {\n    roleId: number\n    roleName: number\n    roleKey: number\n    roleSort: number\n    dataScope: number\n    menuCheckStrictly: number\n    deptCheckStrictly: number\n    status: number\n    createBy: number\n    createTime: number\n    updateBy: number\n    updateTime: number\n    remark: number\n    _all: number\n  }\n\n\n  export type SysRoleAvgAggregateInputType = {\n    roleId?: true\n    roleSort?: true\n    menuCheckStrictly?: true\n    deptCheckStrictly?: true\n  }\n\n  export type SysRoleSumAggregateInputType = {\n    roleId?: true\n    roleSort?: true\n    menuCheckStrictly?: true\n    deptCheckStrictly?: true\n  }\n\n  export type SysRoleMinAggregateInputType = {\n    roleId?: true\n    roleName?: true\n    roleKey?: true\n    roleSort?: true\n    dataScope?: true\n    menuCheckStrictly?: true\n    deptCheckStrictly?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysRoleMaxAggregateInputType = {\n    roleId?: true\n    roleName?: true\n    roleKey?: true\n    roleSort?: true\n    dataScope?: true\n    menuCheckStrictly?: true\n    deptCheckStrictly?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n  }\n\n  export type SysRoleCountAggregateInputType = {\n    roleId?: true\n    roleName?: true\n    roleKey?: true\n    roleSort?: true\n    dataScope?: true\n    menuCheckStrictly?: true\n    deptCheckStrictly?: true\n    status?: true\n    createBy?: true\n    createTime?: true\n    updateBy?: true\n    updateTime?: true\n    remark?: true\n    _all?: true\n  }\n\n  export type SysRoleAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysRole to aggregate.\n     */\n    where?: SysRoleWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoles to fetch.\n     */\n    orderBy?: SysRoleOrderByWithRelationInput | SysRoleOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysRoleWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoles from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoles.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysRoles\n    **/\n    _count?: true | SysRoleCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysRoleAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysRoleSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysRoleMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysRoleMaxAggregateInputType\n  }\n\n  export type GetSysRoleAggregateType<T extends SysRoleAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysRole]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysRole[P]>\n      : GetScalarType<T[P], AggregateSysRole[P]>\n  }\n\n\n\n\n  export type SysRoleGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysRoleWhereInput\n    orderBy?: SysRoleOrderByWithAggregationInput | SysRoleOrderByWithAggregationInput[]\n    by: SysRoleScalarFieldEnum[] | SysRoleScalarFieldEnum\n    having?: SysRoleScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysRoleCountAggregateInputType | true\n    _avg?: SysRoleAvgAggregateInputType\n    _sum?: SysRoleSumAggregateInputType\n    _min?: SysRoleMinAggregateInputType\n    _max?: SysRoleMaxAggregateInputType\n  }\n\n  export type SysRoleGroupByOutputType = {\n    roleId: number\n    roleName: string\n    roleKey: string\n    roleSort: number\n    dataScope: string | null\n    menuCheckStrictly: number | null\n    deptCheckStrictly: number | null\n    status: string\n    createBy: string | null\n    createTime: string | null\n    updateBy: string | null\n    updateTime: string | null\n    remark: string | null\n    _count: SysRoleCountAggregateOutputType | null\n    _avg: SysRoleAvgAggregateOutputType | null\n    _sum: SysRoleSumAggregateOutputType | null\n    _min: SysRoleMinAggregateOutputType | null\n    _max: SysRoleMaxAggregateOutputType | null\n  }\n\n  type GetSysRoleGroupByPayload<T extends SysRoleGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysRoleGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysRoleGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysRoleGroupByOutputType[P]>\n            : GetScalarType<T[P], SysRoleGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysRoleSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    roleId?: boolean\n    roleName?: boolean\n    roleKey?: boolean\n    roleSort?: boolean\n    dataScope?: boolean\n    menuCheckStrictly?: boolean\n    deptCheckStrictly?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n    users?: boolean | SysRole$usersArgs<ExtArgs>\n    menus?: boolean | SysRole$menusArgs<ExtArgs>\n    depts?: boolean | SysRole$deptsArgs<ExtArgs>\n    _count?: boolean | SysRoleCountOutputTypeDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysRole\"]>\n\n\n  export type SysRoleSelectScalar = {\n    roleId?: boolean\n    roleName?: boolean\n    roleKey?: boolean\n    roleSort?: boolean\n    dataScope?: boolean\n    menuCheckStrictly?: boolean\n    deptCheckStrictly?: boolean\n    status?: boolean\n    createBy?: boolean\n    createTime?: boolean\n    updateBy?: boolean\n    updateTime?: boolean\n    remark?: boolean\n  }\n\n  export type SysRoleOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"roleId\" | \"roleName\" | \"roleKey\" | \"roleSort\" | \"dataScope\" | \"menuCheckStrictly\" | \"deptCheckStrictly\" | \"status\" | \"createBy\" | \"createTime\" | \"updateBy\" | \"updateTime\" | \"remark\", ExtArgs[\"result\"][\"sysRole\"]>\n  export type SysRoleInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    users?: boolean | SysRole$usersArgs<ExtArgs>\n    menus?: boolean | SysRole$menusArgs<ExtArgs>\n    depts?: boolean | SysRole$deptsArgs<ExtArgs>\n    _count?: boolean | SysRoleCountOutputTypeDefaultArgs<ExtArgs>\n  }\n\n  export type $SysRolePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysRole\"\n    objects: {\n      users: Prisma.$SysUserRolePayload<ExtArgs>[]\n      menus: Prisma.$SysRoleMenuPayload<ExtArgs>[]\n      depts: Prisma.$SysRoleDeptPayload<ExtArgs>[]\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      roleId: number\n      roleName: string\n      roleKey: string\n      roleSort: number\n      dataScope: string | null\n      menuCheckStrictly: number | null\n      deptCheckStrictly: number | null\n      status: string\n      createBy: string | null\n      createTime: string | null\n      updateBy: string | null\n      updateTime: string | null\n      remark: string | null\n    }, ExtArgs[\"result\"][\"sysRole\"]>\n    composites: {}\n  }\n\n  type SysRoleGetPayload<S extends boolean | null | undefined | SysRoleDefaultArgs> = $Result.GetResult<Prisma.$SysRolePayload, S>\n\n  type SysRoleCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysRoleFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysRoleCountAggregateInputType | true\n    }\n\n  export interface SysRoleDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysRole'], meta: { name: 'SysRole' } }\n    /**\n     * Find zero or one SysRole that matches the filter.\n     * @param {SysRoleFindUniqueArgs} args - Arguments to find a SysRole\n     * @example\n     * // Get one SysRole\n     * const sysRole = await prisma.sysRole.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysRoleFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysRole that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysRoleFindUniqueOrThrowArgs} args - Arguments to find a SysRole\n     * @example\n     * // Get one SysRole\n     * const sysRole = await prisma.sysRole.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysRoleFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysRole that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleFindFirstArgs} args - Arguments to find a SysRole\n     * @example\n     * // Get one SysRole\n     * const sysRole = await prisma.sysRole.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysRoleFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleFindFirstArgs<ExtArgs>>\n    ): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysRole that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleFindFirstOrThrowArgs} args - Arguments to find a SysRole\n     * @example\n     * // Get one SysRole\n     * const sysRole = await prisma.sysRole.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysRoleFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysRoles that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysRoles\n     * const sysRoles = await prisma.sysRole.findMany()\n     * \n     * // Get first 10 SysRoles\n     * const sysRoles = await prisma.sysRole.findMany({ take: 10 })\n     * \n     * // Only select the `roleId`\n     * const sysRoleWithRoleIdOnly = await prisma.sysRole.findMany({ select: { roleId: true } })\n     * \n    **/\n    findMany<T extends SysRoleFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysRole.\n     * @param {SysRoleCreateArgs} args - Arguments to create a SysRole.\n     * @example\n     * // Create one SysRole\n     * const SysRole = await prisma.sysRole.create({\n     *   data: {\n     *     // ... data to create a SysRole\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysRoleCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleCreateArgs<ExtArgs>>\n    ): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysRoles.\n     * @param {SysRoleCreateManyArgs} args - Arguments to create many SysRoles.\n     * @example\n     * // Create many SysRoles\n     * const sysRole = await prisma.sysRole.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysRoleCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysRole.\n     * @param {SysRoleDeleteArgs} args - Arguments to delete one SysRole.\n     * @example\n     * // Delete one SysRole\n     * const SysRole = await prisma.sysRole.delete({\n     *   where: {\n     *     // ... filter to delete one SysRole\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysRoleDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleDeleteArgs<ExtArgs>>\n    ): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysRole.\n     * @param {SysRoleUpdateArgs} args - Arguments to update one SysRole.\n     * @example\n     * // Update one SysRole\n     * const sysRole = await prisma.sysRole.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysRoleUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleUpdateArgs<ExtArgs>>\n    ): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysRoles.\n     * @param {SysRoleDeleteManyArgs} args - Arguments to filter SysRoles to delete.\n     * @example\n     * // Delete a few SysRoles\n     * const { count } = await prisma.sysRole.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysRoleDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysRoleDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysRoles.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysRoles\n     * const sysRole = await prisma.sysRole.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysRoleUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysRole.\n     * @param {SysRoleUpsertArgs} args - Arguments to update or create a SysRole.\n     * @example\n     * // Update or create a SysRole\n     * const sysRole = await prisma.sysRole.upsert({\n     *   create: {\n     *     // ... data to create a SysRole\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysRole we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysRoleUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysRoleUpsertArgs<ExtArgs>>\n    ): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysRoles.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleCountArgs} args - Arguments to filter SysRoles to count.\n     * @example\n     * // Count the number of SysRoles\n     * const count = await prisma.sysRole.count({\n     *   where: {\n     *     // ... the filter for the SysRoles we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysRoleCountArgs>(\n      args?: Subset<T, SysRoleCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysRoleCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysRole.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysRoleAggregateArgs>(args: Subset<T, SysRoleAggregateArgs>): Prisma.PrismaPromise<GetSysRoleAggregateType<T>>\n\n    /**\n     * Group by SysRole.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysRoleGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysRoleGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysRoleGroupByArgs['orderBy'] }\n        : { orderBy?: SysRoleGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysRoleGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysRoleGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysRole model\n   */\n  readonly fields: SysRoleFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysRole.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysRoleClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    users<T extends SysRole$usersArgs<ExtArgs> = {}>(args?: Subset<T, SysRole$usersArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    menus<T extends SysRole$menusArgs<ExtArgs> = {}>(args?: Subset<T, SysRole$menusArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysRoleMenuPayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    depts<T extends SysRole$deptsArgs<ExtArgs> = {}>(args?: Subset<T, SysRole$deptsArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysRoleDeptPayload<ExtArgs>, T, 'findMany'> | Null>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysRole model\n   */ \n  interface SysRoleFieldRefs {\n    readonly roleId: FieldRef<\"SysRole\", 'Int'>\n    readonly roleName: FieldRef<\"SysRole\", 'String'>\n    readonly roleKey: FieldRef<\"SysRole\", 'String'>\n    readonly roleSort: FieldRef<\"SysRole\", 'Int'>\n    readonly dataScope: FieldRef<\"SysRole\", 'String'>\n    readonly menuCheckStrictly: FieldRef<\"SysRole\", 'Int'>\n    readonly deptCheckStrictly: FieldRef<\"SysRole\", 'Int'>\n    readonly status: FieldRef<\"SysRole\", 'String'>\n    readonly createBy: FieldRef<\"SysRole\", 'String'>\n    readonly createTime: FieldRef<\"SysRole\", 'String'>\n    readonly updateBy: FieldRef<\"SysRole\", 'String'>\n    readonly updateTime: FieldRef<\"SysRole\", 'String'>\n    readonly remark: FieldRef<\"SysRole\", 'String'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysRole findUnique\n   */\n  export type SysRoleFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRole\n     */\n    select?: SysRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRole\n     */\n    omit?: SysRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRole to fetch.\n     */\n    where: SysRoleWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRole findUniqueOrThrow\n   */\n  export type SysRoleFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRole\n     */\n    select?: SysRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRole\n     */\n    omit?: SysRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRole to fetch.\n     */\n    where: SysRoleWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRole findFirst\n   */\n  export type SysRoleFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRole\n     */\n    select?: SysRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRole\n     */\n    omit?: SysRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRole to fetch.\n     */\n    where?: SysRoleWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoles to fetch.\n     */\n    orderBy?: SysRoleOrderByWithRelationInput | SysRoleOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysRoles.\n     */\n    cursor?: SysRoleWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoles from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoles.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysRoles.\n     */\n    distinct?: SysRoleScalarFieldEnum | SysRoleScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRole findFirstOrThrow\n   */\n  export type SysRoleFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRole\n     */\n    select?: SysRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRole\n     */\n    omit?: SysRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRole to fetch.\n     */\n    where?: SysRoleWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoles to fetch.\n     */\n    orderBy?: SysRoleOrderByWithRelationInput | SysRoleOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysRoles.\n     */\n    cursor?: SysRoleWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoles from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoles.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysRoles.\n     */\n    distinct?: SysRoleScalarFieldEnum | SysRoleScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRole findMany\n   */\n  export type SysRoleFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRole\n     */\n    select?: SysRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRole\n     */\n    omit?: SysRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleInclude<ExtArgs> | null\n    /**\n     * Filter, which SysRoles to fetch.\n     */\n    where?: SysRoleWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysRoles to fetch.\n     */\n    orderBy?: SysRoleOrderByWithRelationInput | SysRoleOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysRoles.\n     */\n    cursor?: SysRoleWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysRoles from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysRoles.\n     */\n    skip?: number\n    distinct?: SysRoleScalarFieldEnum | SysRoleScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRole create\n   */\n  export type SysRoleCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRole\n     */\n    select?: SysRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRole\n     */\n    omit?: SysRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysRole.\n     */\n    data: XOR<SysRoleCreateInput, SysRoleUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRole createMany\n   */\n  export type SysRoleCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysRoles.\n     */\n    data: SysRoleCreateManyInput | SysRoleCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysRole update\n   */\n  export type SysRoleUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRole\n     */\n    select?: SysRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRole\n     */\n    omit?: SysRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysRole.\n     */\n    data: XOR<SysRoleUpdateInput, SysRoleUncheckedUpdateInput>\n    /**\n     * Choose, which SysRole to update.\n     */\n    where: SysRoleWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRole updateMany\n   */\n  export type SysRoleUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysRoles.\n     */\n    data: XOR<SysRoleUpdateManyMutationInput, SysRoleUncheckedUpdateManyInput>\n    /**\n     * Filter which SysRoles to update\n     */\n    where?: SysRoleWhereInput\n  }\n\n  /**\n   * SysRole upsert\n   */\n  export type SysRoleUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRole\n     */\n    select?: SysRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRole\n     */\n    omit?: SysRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysRole to update in case it exists.\n     */\n    where: SysRoleWhereUniqueInput\n    /**\n     * In case the SysRole found by the `where` argument doesn't exist, create a new SysRole with this data.\n     */\n    create: XOR<SysRoleCreateInput, SysRoleUncheckedCreateInput>\n    /**\n     * In case the SysRole was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysRoleUpdateInput, SysRoleUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRole delete\n   */\n  export type SysRoleDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRole\n     */\n    select?: SysRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRole\n     */\n    omit?: SysRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleInclude<ExtArgs> | null\n    /**\n     * Filter which SysRole to delete.\n     */\n    where: SysRoleWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysRole deleteMany\n   */\n  export type SysRoleDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysRoles to delete\n     */\n    where?: SysRoleWhereInput\n  }\n\n  /**\n   * SysRole.users\n   */\n  export type SysRole$usersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    where?: SysUserRoleWhereInput\n    orderBy?: SysUserRoleOrderByWithRelationInput | SysUserRoleOrderByWithRelationInput[]\n    cursor?: SysUserRoleWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: SysUserRoleScalarFieldEnum | SysUserRoleScalarFieldEnum[]\n  }\n\n  /**\n   * SysRole.menus\n   */\n  export type SysRole$menusArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleMenu\n     */\n    select?: SysRoleMenuSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleMenu\n     */\n    omit?: SysRoleMenuOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleMenuInclude<ExtArgs> | null\n    where?: SysRoleMenuWhereInput\n    orderBy?: SysRoleMenuOrderByWithRelationInput | SysRoleMenuOrderByWithRelationInput[]\n    cursor?: SysRoleMenuWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: SysRoleMenuScalarFieldEnum | SysRoleMenuScalarFieldEnum[]\n  }\n\n  /**\n   * SysRole.depts\n   */\n  export type SysRole$deptsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRoleDept\n     */\n    select?: SysRoleDeptSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRoleDept\n     */\n    omit?: SysRoleDeptOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleDeptInclude<ExtArgs> | null\n    where?: SysRoleDeptWhereInput\n    orderBy?: SysRoleDeptOrderByWithRelationInput | SysRoleDeptOrderByWithRelationInput[]\n    cursor?: SysRoleDeptWhereUniqueInput\n    take?: number\n    skip?: number\n    distinct?: SysRoleDeptScalarFieldEnum | SysRoleDeptScalarFieldEnum[]\n  }\n\n  /**\n   * SysRole without action\n   */\n  export type SysRoleDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysRole\n     */\n    select?: SysRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysRole\n     */\n    omit?: SysRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysRoleInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Model SysUserRole\n   */\n\n  export type AggregateSysUserRole = {\n    _count: SysUserRoleCountAggregateOutputType | null\n    _avg: SysUserRoleAvgAggregateOutputType | null\n    _sum: SysUserRoleSumAggregateOutputType | null\n    _min: SysUserRoleMinAggregateOutputType | null\n    _max: SysUserRoleMaxAggregateOutputType | null\n  }\n\n  export type SysUserRoleAvgAggregateOutputType = {\n    userId: number | null\n    roleId: number | null\n  }\n\n  export type SysUserRoleSumAggregateOutputType = {\n    userId: number | null\n    roleId: number | null\n  }\n\n  export type SysUserRoleMinAggregateOutputType = {\n    userId: number | null\n    roleId: number | null\n  }\n\n  export type SysUserRoleMaxAggregateOutputType = {\n    userId: number | null\n    roleId: number | null\n  }\n\n  export type SysUserRoleCountAggregateOutputType = {\n    userId: number\n    roleId: number\n    _all: number\n  }\n\n\n  export type SysUserRoleAvgAggregateInputType = {\n    userId?: true\n    roleId?: true\n  }\n\n  export type SysUserRoleSumAggregateInputType = {\n    userId?: true\n    roleId?: true\n  }\n\n  export type SysUserRoleMinAggregateInputType = {\n    userId?: true\n    roleId?: true\n  }\n\n  export type SysUserRoleMaxAggregateInputType = {\n    userId?: true\n    roleId?: true\n  }\n\n  export type SysUserRoleCountAggregateInputType = {\n    userId?: true\n    roleId?: true\n    _all?: true\n  }\n\n  export type SysUserRoleAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysUserRole to aggregate.\n     */\n    where?: SysUserRoleWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUserRoles to fetch.\n     */\n    orderBy?: SysUserRoleOrderByWithRelationInput | SysUserRoleOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the start position\n     */\n    cursor?: SysUserRoleWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUserRoles from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUserRoles.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Count returned SysUserRoles\n    **/\n    _count?: true | SysUserRoleCountAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to average\n    **/\n    _avg?: SysUserRoleAvgAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to sum\n    **/\n    _sum?: SysUserRoleSumAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the minimum value\n    **/\n    _min?: SysUserRoleMinAggregateInputType\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}\n     * \n     * Select which fields to find the maximum value\n    **/\n    _max?: SysUserRoleMaxAggregateInputType\n  }\n\n  export type GetSysUserRoleAggregateType<T extends SysUserRoleAggregateArgs> = {\n        [P in keyof T & keyof AggregateSysUserRole]: P extends '_count' | 'count'\n      ? T[P] extends true\n        ? number\n        : GetScalarType<T[P], AggregateSysUserRole[P]>\n      : GetScalarType<T[P], AggregateSysUserRole[P]>\n  }\n\n\n\n\n  export type SysUserRoleGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    where?: SysUserRoleWhereInput\n    orderBy?: SysUserRoleOrderByWithAggregationInput | SysUserRoleOrderByWithAggregationInput[]\n    by: SysUserRoleScalarFieldEnum[] | SysUserRoleScalarFieldEnum\n    having?: SysUserRoleScalarWhereWithAggregatesInput\n    take?: number\n    skip?: number\n    _count?: SysUserRoleCountAggregateInputType | true\n    _avg?: SysUserRoleAvgAggregateInputType\n    _sum?: SysUserRoleSumAggregateInputType\n    _min?: SysUserRoleMinAggregateInputType\n    _max?: SysUserRoleMaxAggregateInputType\n  }\n\n  export type SysUserRoleGroupByOutputType = {\n    userId: number\n    roleId: number\n    _count: SysUserRoleCountAggregateOutputType | null\n    _avg: SysUserRoleAvgAggregateOutputType | null\n    _sum: SysUserRoleSumAggregateOutputType | null\n    _min: SysUserRoleMinAggregateOutputType | null\n    _max: SysUserRoleMaxAggregateOutputType | null\n  }\n\n  type GetSysUserRoleGroupByPayload<T extends SysUserRoleGroupByArgs> = Prisma.PrismaPromise<\n    Array<\n      PickEnumerable<SysUserRoleGroupByOutputType, T['by']> &\n        {\n          [P in ((keyof T) & (keyof SysUserRoleGroupByOutputType))]: P extends '_count'\n            ? T[P] extends boolean\n              ? number\n              : GetScalarType<T[P], SysUserRoleGroupByOutputType[P]>\n            : GetScalarType<T[P], SysUserRoleGroupByOutputType[P]>\n        }\n      >\n    >\n\n\n  export type SysUserRoleSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{\n    userId?: boolean\n    roleId?: boolean\n    user?: boolean | SysUserDefaultArgs<ExtArgs>\n    role?: boolean | SysRoleDefaultArgs<ExtArgs>\n  }, ExtArgs[\"result\"][\"sysUserRole\"]>\n\n\n  export type SysUserRoleSelectScalar = {\n    userId?: boolean\n    roleId?: boolean\n  }\n\n  export type SysUserRoleOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<\"userId\" | \"roleId\", ExtArgs[\"result\"][\"sysUserRole\"]>\n  export type SysUserRoleInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    user?: boolean | SysUserDefaultArgs<ExtArgs>\n    role?: boolean | SysRoleDefaultArgs<ExtArgs>\n  }\n\n  export type $SysUserRolePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    name: \"SysUserRole\"\n    objects: {\n      user: Prisma.$SysUserPayload<ExtArgs>\n      role: Prisma.$SysRolePayload<ExtArgs>\n    }\n    scalars: $Extensions.GetPayloadResult<{\n      userId: number\n      roleId: number\n    }, ExtArgs[\"result\"][\"sysUserRole\"]>\n    composites: {}\n  }\n\n  type SysUserRoleGetPayload<S extends boolean | null | undefined | SysUserRoleDefaultArgs> = $Result.GetResult<Prisma.$SysUserRolePayload, S>\n\n  type SysUserRoleCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = \n    Omit<SysUserRoleFindManyArgs, 'select' | 'include' | 'distinct' | 'omit' | 'relationLoadStrategy'> & {\n      select?: SysUserRoleCountAggregateInputType | true\n    }\n\n  export interface SysUserRoleDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> {\n    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SysUserRole'], meta: { name: 'SysUserRole' } }\n    /**\n     * Find zero or one SysUserRole that matches the filter.\n     * @param {SysUserRoleFindUniqueArgs} args - Arguments to find a SysUserRole\n     * @example\n     * // Get one SysUserRole\n     * const sysUserRole = await prisma.sysUserRole.findUnique({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUnique<T extends SysUserRoleFindUniqueArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserRoleFindUniqueArgs<ExtArgs>>\n    ): Prisma__SysUserRoleClient<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'findUnique'> | null, null, ExtArgs>\n\n    /**\n     * Find one SysUserRole that matches the filter or throw an error with `error.code='P2025'` \n     * if no matches were found.\n     * @param {SysUserRoleFindUniqueOrThrowArgs} args - Arguments to find a SysUserRole\n     * @example\n     * // Get one SysUserRole\n     * const sysUserRole = await prisma.sysUserRole.findUniqueOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findUniqueOrThrow<T extends SysUserRoleFindUniqueOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserRoleFindUniqueOrThrowArgs<ExtArgs>>\n    ): Prisma__SysUserRoleClient<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'findUniqueOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find the first SysUserRole that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserRoleFindFirstArgs} args - Arguments to find a SysUserRole\n     * @example\n     * // Get one SysUserRole\n     * const sysUserRole = await prisma.sysUserRole.findFirst({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirst<T extends SysUserRoleFindFirstArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserRoleFindFirstArgs<ExtArgs>>\n    ): Prisma__SysUserRoleClient<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'findFirst'> | null, null, ExtArgs>\n\n    /**\n     * Find the first SysUserRole that matches the filter or\n     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserRoleFindFirstOrThrowArgs} args - Arguments to find a SysUserRole\n     * @example\n     * // Get one SysUserRole\n     * const sysUserRole = await prisma.sysUserRole.findFirstOrThrow({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n    **/\n    findFirstOrThrow<T extends SysUserRoleFindFirstOrThrowArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserRoleFindFirstOrThrowArgs<ExtArgs>>\n    ): Prisma__SysUserRoleClient<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'findFirstOrThrow'>, never, ExtArgs>\n\n    /**\n     * Find zero or more SysUserRoles that matches the filter.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserRoleFindManyArgs} args - Arguments to filter and select certain fields only.\n     * @example\n     * // Get all SysUserRoles\n     * const sysUserRoles = await prisma.sysUserRole.findMany()\n     * \n     * // Get first 10 SysUserRoles\n     * const sysUserRoles = await prisma.sysUserRole.findMany({ take: 10 })\n     * \n     * // Only select the `userId`\n     * const sysUserRoleWithUserIdOnly = await prisma.sysUserRole.findMany({ select: { userId: true } })\n     * \n    **/\n    findMany<T extends SysUserRoleFindManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserRoleFindManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'findMany'>>\n\n    /**\n     * Create a SysUserRole.\n     * @param {SysUserRoleCreateArgs} args - Arguments to create a SysUserRole.\n     * @example\n     * // Create one SysUserRole\n     * const SysUserRole = await prisma.sysUserRole.create({\n     *   data: {\n     *     // ... data to create a SysUserRole\n     *   }\n     * })\n     * \n    **/\n    create<T extends SysUserRoleCreateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserRoleCreateArgs<ExtArgs>>\n    ): Prisma__SysUserRoleClient<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'create'>, never, ExtArgs>\n\n    /**\n     * Create many SysUserRoles.\n     * @param {SysUserRoleCreateManyArgs} args - Arguments to create many SysUserRoles.\n     * @example\n     * // Create many SysUserRoles\n     * const sysUserRole = await prisma.sysUserRole.createMany({\n     *   data: [\n     *     // ... provide data here\n     *   ]\n     * })\n     *     \n    **/\n    createMany<T extends SysUserRoleCreateManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserRoleCreateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Delete a SysUserRole.\n     * @param {SysUserRoleDeleteArgs} args - Arguments to delete one SysUserRole.\n     * @example\n     * // Delete one SysUserRole\n     * const SysUserRole = await prisma.sysUserRole.delete({\n     *   where: {\n     *     // ... filter to delete one SysUserRole\n     *   }\n     * })\n     * \n    **/\n    delete<T extends SysUserRoleDeleteArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserRoleDeleteArgs<ExtArgs>>\n    ): Prisma__SysUserRoleClient<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'delete'>, never, ExtArgs>\n\n    /**\n     * Update one SysUserRole.\n     * @param {SysUserRoleUpdateArgs} args - Arguments to update one SysUserRole.\n     * @example\n     * // Update one SysUserRole\n     * const sysUserRole = await prisma.sysUserRole.update({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    update<T extends SysUserRoleUpdateArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserRoleUpdateArgs<ExtArgs>>\n    ): Prisma__SysUserRoleClient<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'update'>, never, ExtArgs>\n\n    /**\n     * Delete zero or more SysUserRoles.\n     * @param {SysUserRoleDeleteManyArgs} args - Arguments to filter SysUserRoles to delete.\n     * @example\n     * // Delete a few SysUserRoles\n     * const { count } = await prisma.sysUserRole.deleteMany({\n     *   where: {\n     *     // ... provide filter here\n     *   }\n     * })\n     * \n    **/\n    deleteMany<T extends SysUserRoleDeleteManyArgs<ExtArgs>>(\n      args?: SelectSubset<T, SysUserRoleDeleteManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Update zero or more SysUserRoles.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserRoleUpdateManyArgs} args - Arguments to update one or more rows.\n     * @example\n     * // Update many SysUserRoles\n     * const sysUserRole = await prisma.sysUserRole.updateMany({\n     *   where: {\n     *     // ... provide filter here\n     *   },\n     *   data: {\n     *     // ... provide data here\n     *   }\n     * })\n     * \n    **/\n    updateMany<T extends SysUserRoleUpdateManyArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserRoleUpdateManyArgs<ExtArgs>>\n    ): Prisma.PrismaPromise<BatchPayload>\n\n    /**\n     * Create or update one SysUserRole.\n     * @param {SysUserRoleUpsertArgs} args - Arguments to update or create a SysUserRole.\n     * @example\n     * // Update or create a SysUserRole\n     * const sysUserRole = await prisma.sysUserRole.upsert({\n     *   create: {\n     *     // ... data to create a SysUserRole\n     *   },\n     *   update: {\n     *     // ... in case it already exists, update\n     *   },\n     *   where: {\n     *     // ... the filter for the SysUserRole we want to update\n     *   }\n     * })\n    **/\n    upsert<T extends SysUserRoleUpsertArgs<ExtArgs>>(\n      args: SelectSubset<T, SysUserRoleUpsertArgs<ExtArgs>>\n    ): Prisma__SysUserRoleClient<$Result.GetResult<Prisma.$SysUserRolePayload<ExtArgs>, T, 'upsert'>, never, ExtArgs>\n\n    /**\n     * Count the number of SysUserRoles.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserRoleCountArgs} args - Arguments to filter SysUserRoles to count.\n     * @example\n     * // Count the number of SysUserRoles\n     * const count = await prisma.sysUserRole.count({\n     *   where: {\n     *     // ... the filter for the SysUserRoles we want to count\n     *   }\n     * })\n    **/\n    count<T extends SysUserRoleCountArgs>(\n      args?: Subset<T, SysUserRoleCountArgs>,\n    ): Prisma.PrismaPromise<\n      T extends $Utils.Record<'select', any>\n        ? T['select'] extends true\n          ? number\n          : GetScalarType<T['select'], SysUserRoleCountAggregateOutputType>\n        : number\n    >\n\n    /**\n     * Allows you to perform aggregations operations on a SysUserRole.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserRoleAggregateArgs} args - Select which aggregations you would like to apply and on what fields.\n     * @example\n     * // Ordered by age ascending\n     * // Where email contains prisma.io\n     * // Limited to the 10 users\n     * const aggregations = await prisma.user.aggregate({\n     *   _avg: {\n     *     age: true,\n     *   },\n     *   where: {\n     *     email: {\n     *       contains: \"prisma.io\",\n     *     },\n     *   },\n     *   orderBy: {\n     *     age: \"asc\",\n     *   },\n     *   take: 10,\n     * })\n    **/\n    aggregate<T extends SysUserRoleAggregateArgs>(args: Subset<T, SysUserRoleAggregateArgs>): Prisma.PrismaPromise<GetSysUserRoleAggregateType<T>>\n\n    /**\n     * Group by SysUserRole.\n     * Note, that providing `undefined` is treated as the value not being there.\n     * Read more here: https://pris.ly/d/null-undefined\n     * @param {SysUserRoleGroupByArgs} args - Group by arguments.\n     * @example\n     * // Group by city, order by createdAt, get count\n     * const result = await prisma.user.groupBy({\n     *   by: ['city', 'createdAt'],\n     *   orderBy: {\n     *     createdAt: true\n     *   },\n     *   _count: {\n     *     _all: true\n     *   },\n     * })\n     * \n    **/\n    groupBy<\n      T extends SysUserRoleGroupByArgs,\n      HasSelectOrTake extends Or<\n        Extends<'skip', Keys<T>>,\n        Extends<'take', Keys<T>>\n      >,\n      OrderByArg extends True extends HasSelectOrTake\n        ? { orderBy: SysUserRoleGroupByArgs['orderBy'] }\n        : { orderBy?: SysUserRoleGroupByArgs['orderBy'] },\n      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,\n      ByFields extends MaybeTupleToUnion<T['by']>,\n      ByValid extends Has<ByFields, OrderFields>,\n      HavingFields extends GetHavingFields<T['having']>,\n      HavingValid extends Has<ByFields, HavingFields>,\n      ByEmpty extends T['by'] extends never[] ? True : False,\n      InputErrors extends ByEmpty extends True\n      ? `Error: \"by\" must not be empty.`\n      : HavingValid extends False\n      ? {\n          [P in HavingFields]: P extends ByFields\n            ? never\n            : P extends string\n            ? `Error: Field \"${P}\" used in \"having\" needs to be provided in \"by\".`\n            : [\n                Error,\n                'Field ',\n                P,\n                ` in \"having\" needs to be provided in \"by\"`,\n              ]\n        }[HavingFields]\n      : 'take' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n      : 'skip' extends Keys<T>\n      ? 'orderBy' extends Keys<T>\n        ? ByValid extends True\n          ? {}\n          : {\n              [P in OrderFields]: P extends ByFields\n                ? never\n                : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n            }[OrderFields]\n        : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n      : ByValid extends True\n      ? {}\n      : {\n          [P in OrderFields]: P extends ByFields\n            ? never\n            : `Error: Field \"${P}\" in \"orderBy\" needs to be provided in \"by\"`\n        }[OrderFields]\n    >(args: SubsetIntersection<T, SysUserRoleGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSysUserRoleGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>\n  /**\n   * Fields of the SysUserRole model\n   */\n  readonly fields: SysUserRoleFieldRefs;\n  }\n\n  /**\n   * The delegate class that acts as a \"Promise-like\" for SysUserRole.\n   * Why is this prefixed with `Prisma__`?\n   * Because we want to prevent naming conflicts as mentioned in\n   * https://github.com/prisma/prisma-client-js/issues/707\n   */\n  export interface Prisma__SysUserRoleClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> extends Prisma.PrismaPromise<T> {\n    readonly [Symbol.toStringTag]: 'PrismaPromise';\n\n    user<T extends SysUserDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SysUserDefaultArgs<ExtArgs>>): Prisma__SysUserClient<$Result.GetResult<Prisma.$SysUserPayload<ExtArgs>, T, 'findUniqueOrThrow'> | Null, Null, ExtArgs>;\n\n    role<T extends SysRoleDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SysRoleDefaultArgs<ExtArgs>>): Prisma__SysRoleClient<$Result.GetResult<Prisma.$SysRolePayload<ExtArgs>, T, 'findUniqueOrThrow'> | Null, Null, ExtArgs>;\n\n    /**\n     * Attaches callbacks for the resolution and/or rejection of the Promise.\n     * @param onfulfilled The callback to execute when the Promise is resolved.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of which ever callback is executed.\n     */\n    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>;\n    /**\n     * Attaches a callback for only the rejection of the Promise.\n     * @param onrejected The callback to execute when the Promise is rejected.\n     * @returns A Promise for the completion of the callback.\n     */\n    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>;\n    /**\n     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The\n     * resolved value cannot be modified from the callback.\n     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).\n     * @returns A Promise for the completion of the callback.\n     */\n    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>;\n  }\n\n\n\n  /**\n   * Fields of the SysUserRole model\n   */ \n  interface SysUserRoleFieldRefs {\n    readonly userId: FieldRef<\"SysUserRole\", 'Int'>\n    readonly roleId: FieldRef<\"SysUserRole\", 'Int'>\n  }\n    \n\n  // Custom InputTypes\n  /**\n   * SysUserRole findUnique\n   */\n  export type SysUserRoleFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUserRole to fetch.\n     */\n    where: SysUserRoleWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserRole findUniqueOrThrow\n   */\n  export type SysUserRoleFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUserRole to fetch.\n     */\n    where: SysUserRoleWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserRole findFirst\n   */\n  export type SysUserRoleFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUserRole to fetch.\n     */\n    where?: SysUserRoleWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUserRoles to fetch.\n     */\n    orderBy?: SysUserRoleOrderByWithRelationInput | SysUserRoleOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysUserRoles.\n     */\n    cursor?: SysUserRoleWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUserRoles from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUserRoles.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysUserRoles.\n     */\n    distinct?: SysUserRoleScalarFieldEnum | SysUserRoleScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserRole findFirstOrThrow\n   */\n  export type SysUserRoleFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUserRole to fetch.\n     */\n    where?: SysUserRoleWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUserRoles to fetch.\n     */\n    orderBy?: SysUserRoleOrderByWithRelationInput | SysUserRoleOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for searching for SysUserRoles.\n     */\n    cursor?: SysUserRoleWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUserRoles from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUserRoles.\n     */\n    skip?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}\n     * \n     * Filter by unique combinations of SysUserRoles.\n     */\n    distinct?: SysUserRoleScalarFieldEnum | SysUserRoleScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserRole findMany\n   */\n  export type SysUserRoleFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    /**\n     * Filter, which SysUserRoles to fetch.\n     */\n    where?: SysUserRoleWhereInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}\n     * \n     * Determine the order of SysUserRoles to fetch.\n     */\n    orderBy?: SysUserRoleOrderByWithRelationInput | SysUserRoleOrderByWithRelationInput[]\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}\n     * \n     * Sets the position for listing SysUserRoles.\n     */\n    cursor?: SysUserRoleWhereUniqueInput\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Take `±n` SysUserRoles from the position of the cursor.\n     */\n    take?: number\n    /**\n     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}\n     * \n     * Skip the first `n` SysUserRoles.\n     */\n    skip?: number\n    distinct?: SysUserRoleScalarFieldEnum | SysUserRoleScalarFieldEnum[]\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserRole create\n   */\n  export type SysUserRoleCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    /**\n     * The data needed to create a SysUserRole.\n     */\n    data: XOR<SysUserRoleCreateInput, SysUserRoleUncheckedCreateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserRole createMany\n   */\n  export type SysUserRoleCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to create many SysUserRoles.\n     */\n    data: SysUserRoleCreateManyInput | SysUserRoleCreateManyInput[]\n    skipDuplicates?: boolean\n  }\n\n  /**\n   * SysUserRole update\n   */\n  export type SysUserRoleUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    /**\n     * The data needed to update a SysUserRole.\n     */\n    data: XOR<SysUserRoleUpdateInput, SysUserRoleUncheckedUpdateInput>\n    /**\n     * Choose, which SysUserRole to update.\n     */\n    where: SysUserRoleWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserRole updateMany\n   */\n  export type SysUserRoleUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * The data used to update SysUserRoles.\n     */\n    data: XOR<SysUserRoleUpdateManyMutationInput, SysUserRoleUncheckedUpdateManyInput>\n    /**\n     * Filter which SysUserRoles to update\n     */\n    where?: SysUserRoleWhereInput\n  }\n\n  /**\n   * SysUserRole upsert\n   */\n  export type SysUserRoleUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    /**\n     * The filter to search for the SysUserRole to update in case it exists.\n     */\n    where: SysUserRoleWhereUniqueInput\n    /**\n     * In case the SysUserRole found by the `where` argument doesn't exist, create a new SysUserRole with this data.\n     */\n    create: XOR<SysUserRoleCreateInput, SysUserRoleUncheckedCreateInput>\n    /**\n     * In case the SysUserRole was found with the provided `where` argument, update it with this data.\n     */\n    update: XOR<SysUserRoleUpdateInput, SysUserRoleUncheckedUpdateInput>\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserRole delete\n   */\n  export type SysUserRoleDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n    /**\n     * Filter which SysUserRole to delete.\n     */\n    where: SysUserRoleWhereUniqueInput\n    relationLoadStrategy?: RelationLoadStrategy\n  }\n\n  /**\n   * SysUserRole deleteMany\n   */\n  export type SysUserRoleDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Filter which SysUserRoles to delete\n     */\n    where?: SysUserRoleWhereInput\n  }\n\n  /**\n   * SysUserRole without action\n   */\n  export type SysUserRoleDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {\n    /**\n     * Select specific fields to fetch from the SysUserRole\n     */\n    select?: SysUserRoleSelect<ExtArgs> | null\n    /**\n     * Omit specific fields from the SysUserRole\n     */\n    omit?: SysUserRoleOmit<ExtArgs> | null\n    /**\n     * Choose, which related nodes to fetch as well\n     */\n    include?: SysUserRoleInclude<ExtArgs> | null\n  }\n\n\n  /**\n   * Enums\n   */\n\n  export const TransactionIsolationLevel: {\n    ReadUncommitted: 'ReadUncommitted',\n    ReadCommitted: 'ReadCommitted',\n    RepeatableRead: 'RepeatableRead',\n    Serializable: 'Serializable'\n  };\n\n  export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]\n\n\n  export const GenTableScalarFieldEnum: {\n    tableId: 'tableId',\n    tableName: 'tableName',\n    tableComment: 'tableComment',\n    subTableName: 'subTableName',\n    subTableFkName: 'subTableFkName',\n    className: 'className',\n    tplCategory: 'tplCategory',\n    tplWebType: 'tplWebType',\n    packageName: 'packageName',\n    moduleName: 'moduleName',\n    businessName: 'businessName',\n    functionName: 'functionName',\n    functionAuthor: 'functionAuthor',\n    genType: 'genType',\n    genPath: 'genPath',\n    options: 'options',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime',\n    remark: 'remark'\n  };\n\n  export type GenTableScalarFieldEnum = (typeof GenTableScalarFieldEnum)[keyof typeof GenTableScalarFieldEnum]\n\n\n  export const RelationLoadStrategy: {\n    query: 'query',\n    join: 'join'\n  };\n\n  export type RelationLoadStrategy = (typeof RelationLoadStrategy)[keyof typeof RelationLoadStrategy]\n\n\n  export const GenTableColumnScalarFieldEnum: {\n    columnId: 'columnId',\n    tableId: 'tableId',\n    columnName: 'columnName',\n    columnComment: 'columnComment',\n    columnType: 'columnType',\n    javaType: 'javaType',\n    javaField: 'javaField',\n    isPk: 'isPk',\n    isIncrement: 'isIncrement',\n    isRequired: 'isRequired',\n    isInsert: 'isInsert',\n    isEdit: 'isEdit',\n    isList: 'isList',\n    isQuery: 'isQuery',\n    queryType: 'queryType',\n    htmlType: 'htmlType',\n    dictType: 'dictType',\n    sort: 'sort',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime'\n  };\n\n  export type GenTableColumnScalarFieldEnum = (typeof GenTableColumnScalarFieldEnum)[keyof typeof GenTableColumnScalarFieldEnum]\n\n\n  export const SysConfigScalarFieldEnum: {\n    configId: 'configId',\n    configName: 'configName',\n    configKey: 'configKey',\n    configValue: 'configValue',\n    configType: 'configType',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime',\n    remark: 'remark'\n  };\n\n  export type SysConfigScalarFieldEnum = (typeof SysConfigScalarFieldEnum)[keyof typeof SysConfigScalarFieldEnum]\n\n\n  export const SysDeptScalarFieldEnum: {\n    deptId: 'deptId',\n    parentId: 'parentId',\n    ancestors: 'ancestors',\n    deptName: 'deptName',\n    orderNum: 'orderNum',\n    leader: 'leader',\n    phone: 'phone',\n    email: 'email',\n    status: 'status',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime'\n  };\n\n  export type SysDeptScalarFieldEnum = (typeof SysDeptScalarFieldEnum)[keyof typeof SysDeptScalarFieldEnum]\n\n\n  export const SysDictDataScalarFieldEnum: {\n    dictCode: 'dictCode',\n    dictSort: 'dictSort',\n    dictLabel: 'dictLabel',\n    dictValue: 'dictValue',\n    dictType: 'dictType',\n    cssClass: 'cssClass',\n    listClass: 'listClass',\n    isDefault: 'isDefault',\n    status: 'status',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime',\n    remark: 'remark'\n  };\n\n  export type SysDictDataScalarFieldEnum = (typeof SysDictDataScalarFieldEnum)[keyof typeof SysDictDataScalarFieldEnum]\n\n\n  export const SysDictTypeScalarFieldEnum: {\n    dictId: 'dictId',\n    dictName: 'dictName',\n    dictType: 'dictType',\n    status: 'status',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime',\n    remark: 'remark'\n  };\n\n  export type SysDictTypeScalarFieldEnum = (typeof SysDictTypeScalarFieldEnum)[keyof typeof SysDictTypeScalarFieldEnum]\n\n\n  export const SysLogininforScalarFieldEnum: {\n    infoId: 'infoId',\n    userName: 'userName',\n    ipaddr: 'ipaddr',\n    loginLocation: 'loginLocation',\n    browser: 'browser',\n    os: 'os',\n    status: 'status',\n    msg: 'msg',\n    loginTime: 'loginTime'\n  };\n\n  export type SysLogininforScalarFieldEnum = (typeof SysLogininforScalarFieldEnum)[keyof typeof SysLogininforScalarFieldEnum]\n\n\n  export const SysMenuScalarFieldEnum: {\n    menuId: 'menuId',\n    menuName: 'menuName',\n    parentId: 'parentId',\n    orderNum: 'orderNum',\n    path: 'path',\n    component: 'component',\n    query: 'query',\n    isFrame: 'isFrame',\n    isCache: 'isCache',\n    menuType: 'menuType',\n    visible: 'visible',\n    status: 'status',\n    perms: 'perms',\n    icon: 'icon',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime',\n    remark: 'remark'\n  };\n\n  export type SysMenuScalarFieldEnum = (typeof SysMenuScalarFieldEnum)[keyof typeof SysMenuScalarFieldEnum]\n\n\n  export const SysNoticeScalarFieldEnum: {\n    noticeId: 'noticeId',\n    noticeTitle: 'noticeTitle',\n    noticeType: 'noticeType',\n    noticeContent: 'noticeContent',\n    status: 'status',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime',\n    remark: 'remark'\n  };\n\n  export type SysNoticeScalarFieldEnum = (typeof SysNoticeScalarFieldEnum)[keyof typeof SysNoticeScalarFieldEnum]\n\n\n  export const SysPostScalarFieldEnum: {\n    postId: 'postId',\n    postCode: 'postCode',\n    postName: 'postName',\n    postSort: 'postSort',\n    status: 'status',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime',\n    remark: 'remark'\n  };\n\n  export type SysPostScalarFieldEnum = (typeof SysPostScalarFieldEnum)[keyof typeof SysPostScalarFieldEnum]\n\n\n  export const SysUserPostScalarFieldEnum: {\n    userId: 'userId',\n    postId: 'postId'\n  };\n\n  export type SysUserPostScalarFieldEnum = (typeof SysUserPostScalarFieldEnum)[keyof typeof SysUserPostScalarFieldEnum]\n\n\n  export const SysRoleDeptScalarFieldEnum: {\n    roleId: 'roleId',\n    deptId: 'deptId'\n  };\n\n  export type SysRoleDeptScalarFieldEnum = (typeof SysRoleDeptScalarFieldEnum)[keyof typeof SysRoleDeptScalarFieldEnum]\n\n\n  export const SysRoleMenuScalarFieldEnum: {\n    roleId: 'roleId',\n    menuId: 'menuId'\n  };\n\n  export type SysRoleMenuScalarFieldEnum = (typeof SysRoleMenuScalarFieldEnum)[keyof typeof SysRoleMenuScalarFieldEnum]\n\n\n  export const SysUserScalarFieldEnum: {\n    userId: 'userId',\n    deptId: 'deptId',\n    userName: 'userName',\n    nickName: 'nickName',\n    userType: 'userType',\n    email: 'email',\n    phonenumber: 'phonenumber',\n    sex: 'sex',\n    avatar: 'avatar',\n    password: 'password',\n    status: 'status',\n    loginIp: 'loginIp',\n    loginDate: 'loginDate',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime',\n    remark: 'remark'\n  };\n\n  export type SysUserScalarFieldEnum = (typeof SysUserScalarFieldEnum)[keyof typeof SysUserScalarFieldEnum]\n\n\n  export const SysRoleScalarFieldEnum: {\n    roleId: 'roleId',\n    roleName: 'roleName',\n    roleKey: 'roleKey',\n    roleSort: 'roleSort',\n    dataScope: 'dataScope',\n    menuCheckStrictly: 'menuCheckStrictly',\n    deptCheckStrictly: 'deptCheckStrictly',\n    status: 'status',\n    createBy: 'createBy',\n    createTime: 'createTime',\n    updateBy: 'updateBy',\n    updateTime: 'updateTime',\n    remark: 'remark'\n  };\n\n  export type SysRoleScalarFieldEnum = (typeof SysRoleScalarFieldEnum)[keyof typeof SysRoleScalarFieldEnum]\n\n\n  export const SysUserRoleScalarFieldEnum: {\n    userId: 'userId',\n    roleId: 'roleId'\n  };\n\n  export type SysUserRoleScalarFieldEnum = (typeof SysUserRoleScalarFieldEnum)[keyof typeof SysUserRoleScalarFieldEnum]\n\n\n  export const SortOrder: {\n    asc: 'asc',\n    desc: 'desc'\n  };\n\n  export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]\n\n\n  export const NullsOrder: {\n    first: 'first',\n    last: 'last'\n  };\n\n  export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]\n\n\n  /**\n   * Field references \n   */\n\n\n  /**\n   * Reference to a field of type 'Int'\n   */\n  export type IntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int'>\n    \n\n\n  /**\n   * Reference to a field of type 'String'\n   */\n  export type StringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'String'>\n    \n\n\n  /**\n   * Reference to a field of type 'Float'\n   */\n  export type FloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Float'>\n    \n  /**\n   * Deep Input Types\n   */\n\n\n  export type GenTableWhereInput = {\n    AND?: GenTableWhereInput | GenTableWhereInput[]\n    OR?: GenTableWhereInput[]\n    NOT?: GenTableWhereInput | GenTableWhereInput[]\n    tableId?: IntFilter<\"GenTable\"> | number\n    tableName?: StringNullableFilter<\"GenTable\"> | string | null\n    tableComment?: StringNullableFilter<\"GenTable\"> | string | null\n    subTableName?: StringNullableFilter<\"GenTable\"> | string | null\n    subTableFkName?: StringNullableFilter<\"GenTable\"> | string | null\n    className?: StringNullableFilter<\"GenTable\"> | string | null\n    tplCategory?: StringNullableFilter<\"GenTable\"> | string | null\n    tplWebType?: StringNullableFilter<\"GenTable\"> | string | null\n    packageName?: StringNullableFilter<\"GenTable\"> | string | null\n    moduleName?: StringNullableFilter<\"GenTable\"> | string | null\n    businessName?: StringNullableFilter<\"GenTable\"> | string | null\n    functionName?: StringNullableFilter<\"GenTable\"> | string | null\n    functionAuthor?: StringNullableFilter<\"GenTable\"> | string | null\n    genType?: StringNullableFilter<\"GenTable\"> | string | null\n    genPath?: StringNullableFilter<\"GenTable\"> | string | null\n    options?: StringNullableFilter<\"GenTable\"> | string | null\n    createBy?: StringNullableFilter<\"GenTable\"> | string | null\n    createTime?: StringNullableFilter<\"GenTable\"> | string | null\n    updateBy?: StringNullableFilter<\"GenTable\"> | string | null\n    updateTime?: StringNullableFilter<\"GenTable\"> | string | null\n    remark?: StringNullableFilter<\"GenTable\"> | string | null\n    tableColumns?: GenTableColumnListRelationFilter\n  }\n\n  export type GenTableOrderByWithRelationInput = {\n    tableId?: SortOrder\n    tableName?: SortOrderInput | SortOrder\n    tableComment?: SortOrderInput | SortOrder\n    subTableName?: SortOrderInput | SortOrder\n    subTableFkName?: SortOrderInput | SortOrder\n    className?: SortOrderInput | SortOrder\n    tplCategory?: SortOrderInput | SortOrder\n    tplWebType?: SortOrderInput | SortOrder\n    packageName?: SortOrderInput | SortOrder\n    moduleName?: SortOrderInput | SortOrder\n    businessName?: SortOrderInput | SortOrder\n    functionName?: SortOrderInput | SortOrder\n    functionAuthor?: SortOrderInput | SortOrder\n    genType?: SortOrderInput | SortOrder\n    genPath?: SortOrderInput | SortOrder\n    options?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    tableColumns?: GenTableColumnOrderByRelationAggregateInput\n  }\n\n  export type GenTableWhereUniqueInput = Prisma.AtLeast<{\n    tableId?: number\n    AND?: GenTableWhereInput | GenTableWhereInput[]\n    OR?: GenTableWhereInput[]\n    NOT?: GenTableWhereInput | GenTableWhereInput[]\n    tableName?: StringNullableFilter<\"GenTable\"> | string | null\n    tableComment?: StringNullableFilter<\"GenTable\"> | string | null\n    subTableName?: StringNullableFilter<\"GenTable\"> | string | null\n    subTableFkName?: StringNullableFilter<\"GenTable\"> | string | null\n    className?: StringNullableFilter<\"GenTable\"> | string | null\n    tplCategory?: StringNullableFilter<\"GenTable\"> | string | null\n    tplWebType?: StringNullableFilter<\"GenTable\"> | string | null\n    packageName?: StringNullableFilter<\"GenTable\"> | string | null\n    moduleName?: StringNullableFilter<\"GenTable\"> | string | null\n    businessName?: StringNullableFilter<\"GenTable\"> | string | null\n    functionName?: StringNullableFilter<\"GenTable\"> | string | null\n    functionAuthor?: StringNullableFilter<\"GenTable\"> | string | null\n    genType?: StringNullableFilter<\"GenTable\"> | string | null\n    genPath?: StringNullableFilter<\"GenTable\"> | string | null\n    options?: StringNullableFilter<\"GenTable\"> | string | null\n    createBy?: StringNullableFilter<\"GenTable\"> | string | null\n    createTime?: StringNullableFilter<\"GenTable\"> | string | null\n    updateBy?: StringNullableFilter<\"GenTable\"> | string | null\n    updateTime?: StringNullableFilter<\"GenTable\"> | string | null\n    remark?: StringNullableFilter<\"GenTable\"> | string | null\n    tableColumns?: GenTableColumnListRelationFilter\n  }, \"tableId\">\n\n  export type GenTableOrderByWithAggregationInput = {\n    tableId?: SortOrder\n    tableName?: SortOrderInput | SortOrder\n    tableComment?: SortOrderInput | SortOrder\n    subTableName?: SortOrderInput | SortOrder\n    subTableFkName?: SortOrderInput | SortOrder\n    className?: SortOrderInput | SortOrder\n    tplCategory?: SortOrderInput | SortOrder\n    tplWebType?: SortOrderInput | SortOrder\n    packageName?: SortOrderInput | SortOrder\n    moduleName?: SortOrderInput | SortOrder\n    businessName?: SortOrderInput | SortOrder\n    functionName?: SortOrderInput | SortOrder\n    functionAuthor?: SortOrderInput | SortOrder\n    genType?: SortOrderInput | SortOrder\n    genPath?: SortOrderInput | SortOrder\n    options?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    _count?: GenTableCountOrderByAggregateInput\n    _avg?: GenTableAvgOrderByAggregateInput\n    _max?: GenTableMaxOrderByAggregateInput\n    _min?: GenTableMinOrderByAggregateInput\n    _sum?: GenTableSumOrderByAggregateInput\n  }\n\n  export type GenTableScalarWhereWithAggregatesInput = {\n    AND?: GenTableScalarWhereWithAggregatesInput | GenTableScalarWhereWithAggregatesInput[]\n    OR?: GenTableScalarWhereWithAggregatesInput[]\n    NOT?: GenTableScalarWhereWithAggregatesInput | GenTableScalarWhereWithAggregatesInput[]\n    tableId?: IntWithAggregatesFilter<\"GenTable\"> | number\n    tableName?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    tableComment?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    subTableName?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    subTableFkName?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    className?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    tplCategory?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    tplWebType?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    packageName?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    moduleName?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    businessName?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    functionName?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    functionAuthor?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    genType?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    genPath?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    options?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    createBy?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n    remark?: StringNullableWithAggregatesFilter<\"GenTable\"> | string | null\n  }\n\n  export type GenTableColumnWhereInput = {\n    AND?: GenTableColumnWhereInput | GenTableColumnWhereInput[]\n    OR?: GenTableColumnWhereInput[]\n    NOT?: GenTableColumnWhereInput | GenTableColumnWhereInput[]\n    columnId?: IntFilter<\"GenTableColumn\"> | number\n    tableId?: IntNullableFilter<\"GenTableColumn\"> | number | null\n    columnName?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    columnComment?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    columnType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    javaType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    javaField?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isPk?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isIncrement?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isRequired?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isInsert?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isEdit?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isList?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isQuery?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    queryType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    htmlType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    dictType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    sort?: IntNullableFilter<\"GenTableColumn\"> | number | null\n    createBy?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    createTime?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    updateBy?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    updateTime?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    table?: XOR<GenTableNullableRelationFilter, GenTableWhereInput> | null\n  }\n\n  export type GenTableColumnOrderByWithRelationInput = {\n    columnId?: SortOrder\n    tableId?: SortOrderInput | SortOrder\n    columnName?: SortOrderInput | SortOrder\n    columnComment?: SortOrderInput | SortOrder\n    columnType?: SortOrderInput | SortOrder\n    javaType?: SortOrderInput | SortOrder\n    javaField?: SortOrderInput | SortOrder\n    isPk?: SortOrderInput | SortOrder\n    isIncrement?: SortOrderInput | SortOrder\n    isRequired?: SortOrderInput | SortOrder\n    isInsert?: SortOrderInput | SortOrder\n    isEdit?: SortOrderInput | SortOrder\n    isList?: SortOrderInput | SortOrder\n    isQuery?: SortOrderInput | SortOrder\n    queryType?: SortOrderInput | SortOrder\n    htmlType?: SortOrderInput | SortOrder\n    dictType?: SortOrderInput | SortOrder\n    sort?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    table?: GenTableOrderByWithRelationInput\n  }\n\n  export type GenTableColumnWhereUniqueInput = Prisma.AtLeast<{\n    columnId?: number\n    AND?: GenTableColumnWhereInput | GenTableColumnWhereInput[]\n    OR?: GenTableColumnWhereInput[]\n    NOT?: GenTableColumnWhereInput | GenTableColumnWhereInput[]\n    tableId?: IntNullableFilter<\"GenTableColumn\"> | number | null\n    columnName?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    columnComment?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    columnType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    javaType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    javaField?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isPk?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isIncrement?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isRequired?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isInsert?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isEdit?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isList?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isQuery?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    queryType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    htmlType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    dictType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    sort?: IntNullableFilter<\"GenTableColumn\"> | number | null\n    createBy?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    createTime?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    updateBy?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    updateTime?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    table?: XOR<GenTableNullableRelationFilter, GenTableWhereInput> | null\n  }, \"columnId\">\n\n  export type GenTableColumnOrderByWithAggregationInput = {\n    columnId?: SortOrder\n    tableId?: SortOrderInput | SortOrder\n    columnName?: SortOrderInput | SortOrder\n    columnComment?: SortOrderInput | SortOrder\n    columnType?: SortOrderInput | SortOrder\n    javaType?: SortOrderInput | SortOrder\n    javaField?: SortOrderInput | SortOrder\n    isPk?: SortOrderInput | SortOrder\n    isIncrement?: SortOrderInput | SortOrder\n    isRequired?: SortOrderInput | SortOrder\n    isInsert?: SortOrderInput | SortOrder\n    isEdit?: SortOrderInput | SortOrder\n    isList?: SortOrderInput | SortOrder\n    isQuery?: SortOrderInput | SortOrder\n    queryType?: SortOrderInput | SortOrder\n    htmlType?: SortOrderInput | SortOrder\n    dictType?: SortOrderInput | SortOrder\n    sort?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    _count?: GenTableColumnCountOrderByAggregateInput\n    _avg?: GenTableColumnAvgOrderByAggregateInput\n    _max?: GenTableColumnMaxOrderByAggregateInput\n    _min?: GenTableColumnMinOrderByAggregateInput\n    _sum?: GenTableColumnSumOrderByAggregateInput\n  }\n\n  export type GenTableColumnScalarWhereWithAggregatesInput = {\n    AND?: GenTableColumnScalarWhereWithAggregatesInput | GenTableColumnScalarWhereWithAggregatesInput[]\n    OR?: GenTableColumnScalarWhereWithAggregatesInput[]\n    NOT?: GenTableColumnScalarWhereWithAggregatesInput | GenTableColumnScalarWhereWithAggregatesInput[]\n    columnId?: IntWithAggregatesFilter<\"GenTableColumn\"> | number\n    tableId?: IntNullableWithAggregatesFilter<\"GenTableColumn\"> | number | null\n    columnName?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    columnComment?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    columnType?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    javaType?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    javaField?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    isPk?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    isIncrement?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    isRequired?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    isInsert?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    isEdit?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    isList?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    isQuery?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    queryType?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    htmlType?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    dictType?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    sort?: IntNullableWithAggregatesFilter<\"GenTableColumn\"> | number | null\n    createBy?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"GenTableColumn\"> | string | null\n  }\n\n  export type SysConfigWhereInput = {\n    AND?: SysConfigWhereInput | SysConfigWhereInput[]\n    OR?: SysConfigWhereInput[]\n    NOT?: SysConfigWhereInput | SysConfigWhereInput[]\n    configId?: IntFilter<\"SysConfig\"> | number\n    configName?: StringNullableFilter<\"SysConfig\"> | string | null\n    configKey?: StringNullableFilter<\"SysConfig\"> | string | null\n    configValue?: StringNullableFilter<\"SysConfig\"> | string | null\n    configType?: StringNullableFilter<\"SysConfig\"> | string | null\n    createBy?: StringNullableFilter<\"SysConfig\"> | string | null\n    createTime?: StringNullableFilter<\"SysConfig\"> | string | null\n    updateBy?: StringNullableFilter<\"SysConfig\"> | string | null\n    updateTime?: StringNullableFilter<\"SysConfig\"> | string | null\n    remark?: StringNullableFilter<\"SysConfig\"> | string | null\n  }\n\n  export type SysConfigOrderByWithRelationInput = {\n    configId?: SortOrder\n    configName?: SortOrderInput | SortOrder\n    configKey?: SortOrderInput | SortOrder\n    configValue?: SortOrderInput | SortOrder\n    configType?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n  }\n\n  export type SysConfigWhereUniqueInput = Prisma.AtLeast<{\n    configId?: number\n    AND?: SysConfigWhereInput | SysConfigWhereInput[]\n    OR?: SysConfigWhereInput[]\n    NOT?: SysConfigWhereInput | SysConfigWhereInput[]\n    configName?: StringNullableFilter<\"SysConfig\"> | string | null\n    configKey?: StringNullableFilter<\"SysConfig\"> | string | null\n    configValue?: StringNullableFilter<\"SysConfig\"> | string | null\n    configType?: StringNullableFilter<\"SysConfig\"> | string | null\n    createBy?: StringNullableFilter<\"SysConfig\"> | string | null\n    createTime?: StringNullableFilter<\"SysConfig\"> | string | null\n    updateBy?: StringNullableFilter<\"SysConfig\"> | string | null\n    updateTime?: StringNullableFilter<\"SysConfig\"> | string | null\n    remark?: StringNullableFilter<\"SysConfig\"> | string | null\n  }, \"configId\">\n\n  export type SysConfigOrderByWithAggregationInput = {\n    configId?: SortOrder\n    configName?: SortOrderInput | SortOrder\n    configKey?: SortOrderInput | SortOrder\n    configValue?: SortOrderInput | SortOrder\n    configType?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    _count?: SysConfigCountOrderByAggregateInput\n    _avg?: SysConfigAvgOrderByAggregateInput\n    _max?: SysConfigMaxOrderByAggregateInput\n    _min?: SysConfigMinOrderByAggregateInput\n    _sum?: SysConfigSumOrderByAggregateInput\n  }\n\n  export type SysConfigScalarWhereWithAggregatesInput = {\n    AND?: SysConfigScalarWhereWithAggregatesInput | SysConfigScalarWhereWithAggregatesInput[]\n    OR?: SysConfigScalarWhereWithAggregatesInput[]\n    NOT?: SysConfigScalarWhereWithAggregatesInput | SysConfigScalarWhereWithAggregatesInput[]\n    configId?: IntWithAggregatesFilter<\"SysConfig\"> | number\n    configName?: StringNullableWithAggregatesFilter<\"SysConfig\"> | string | null\n    configKey?: StringNullableWithAggregatesFilter<\"SysConfig\"> | string | null\n    configValue?: StringNullableWithAggregatesFilter<\"SysConfig\"> | string | null\n    configType?: StringNullableWithAggregatesFilter<\"SysConfig\"> | string | null\n    createBy?: StringNullableWithAggregatesFilter<\"SysConfig\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"SysConfig\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"SysConfig\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"SysConfig\"> | string | null\n    remark?: StringNullableWithAggregatesFilter<\"SysConfig\"> | string | null\n  }\n\n  export type SysDeptWhereInput = {\n    AND?: SysDeptWhereInput | SysDeptWhereInput[]\n    OR?: SysDeptWhereInput[]\n    NOT?: SysDeptWhereInput | SysDeptWhereInput[]\n    deptId?: IntFilter<\"SysDept\"> | number\n    parentId?: IntNullableFilter<\"SysDept\"> | number | null\n    ancestors?: StringNullableFilter<\"SysDept\"> | string | null\n    deptName?: StringNullableFilter<\"SysDept\"> | string | null\n    orderNum?: IntNullableFilter<\"SysDept\"> | number | null\n    leader?: StringNullableFilter<\"SysDept\"> | string | null\n    phone?: StringNullableFilter<\"SysDept\"> | string | null\n    email?: StringNullableFilter<\"SysDept\"> | string | null\n    status?: StringNullableFilter<\"SysDept\"> | string | null\n    createBy?: StringNullableFilter<\"SysDept\"> | string | null\n    createTime?: StringNullableFilter<\"SysDept\"> | string | null\n    updateBy?: StringNullableFilter<\"SysDept\"> | string | null\n    updateTime?: StringNullableFilter<\"SysDept\"> | string | null\n    users?: SysUserListRelationFilter\n    roles?: SysRoleDeptListRelationFilter\n  }\n\n  export type SysDeptOrderByWithRelationInput = {\n    deptId?: SortOrder\n    parentId?: SortOrderInput | SortOrder\n    ancestors?: SortOrderInput | SortOrder\n    deptName?: SortOrderInput | SortOrder\n    orderNum?: SortOrderInput | SortOrder\n    leader?: SortOrderInput | SortOrder\n    phone?: SortOrderInput | SortOrder\n    email?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    users?: SysUserOrderByRelationAggregateInput\n    roles?: SysRoleDeptOrderByRelationAggregateInput\n  }\n\n  export type SysDeptWhereUniqueInput = Prisma.AtLeast<{\n    deptId?: number\n    AND?: SysDeptWhereInput | SysDeptWhereInput[]\n    OR?: SysDeptWhereInput[]\n    NOT?: SysDeptWhereInput | SysDeptWhereInput[]\n    parentId?: IntNullableFilter<\"SysDept\"> | number | null\n    ancestors?: StringNullableFilter<\"SysDept\"> | string | null\n    deptName?: StringNullableFilter<\"SysDept\"> | string | null\n    orderNum?: IntNullableFilter<\"SysDept\"> | number | null\n    leader?: StringNullableFilter<\"SysDept\"> | string | null\n    phone?: StringNullableFilter<\"SysDept\"> | string | null\n    email?: StringNullableFilter<\"SysDept\"> | string | null\n    status?: StringNullableFilter<\"SysDept\"> | string | null\n    createBy?: StringNullableFilter<\"SysDept\"> | string | null\n    createTime?: StringNullableFilter<\"SysDept\"> | string | null\n    updateBy?: StringNullableFilter<\"SysDept\"> | string | null\n    updateTime?: StringNullableFilter<\"SysDept\"> | string | null\n    users?: SysUserListRelationFilter\n    roles?: SysRoleDeptListRelationFilter\n  }, \"deptId\">\n\n  export type SysDeptOrderByWithAggregationInput = {\n    deptId?: SortOrder\n    parentId?: SortOrderInput | SortOrder\n    ancestors?: SortOrderInput | SortOrder\n    deptName?: SortOrderInput | SortOrder\n    orderNum?: SortOrderInput | SortOrder\n    leader?: SortOrderInput | SortOrder\n    phone?: SortOrderInput | SortOrder\n    email?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    _count?: SysDeptCountOrderByAggregateInput\n    _avg?: SysDeptAvgOrderByAggregateInput\n    _max?: SysDeptMaxOrderByAggregateInput\n    _min?: SysDeptMinOrderByAggregateInput\n    _sum?: SysDeptSumOrderByAggregateInput\n  }\n\n  export type SysDeptScalarWhereWithAggregatesInput = {\n    AND?: SysDeptScalarWhereWithAggregatesInput | SysDeptScalarWhereWithAggregatesInput[]\n    OR?: SysDeptScalarWhereWithAggregatesInput[]\n    NOT?: SysDeptScalarWhereWithAggregatesInput | SysDeptScalarWhereWithAggregatesInput[]\n    deptId?: IntWithAggregatesFilter<\"SysDept\"> | number\n    parentId?: IntNullableWithAggregatesFilter<\"SysDept\"> | number | null\n    ancestors?: StringNullableWithAggregatesFilter<\"SysDept\"> | string | null\n    deptName?: StringNullableWithAggregatesFilter<\"SysDept\"> | string | null\n    orderNum?: IntNullableWithAggregatesFilter<\"SysDept\"> | number | null\n    leader?: StringNullableWithAggregatesFilter<\"SysDept\"> | string | null\n    phone?: StringNullableWithAggregatesFilter<\"SysDept\"> | string | null\n    email?: StringNullableWithAggregatesFilter<\"SysDept\"> | string | null\n    status?: StringNullableWithAggregatesFilter<\"SysDept\"> | string | null\n    createBy?: StringNullableWithAggregatesFilter<\"SysDept\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"SysDept\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"SysDept\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"SysDept\"> | string | null\n  }\n\n  export type SysDictDataWhereInput = {\n    AND?: SysDictDataWhereInput | SysDictDataWhereInput[]\n    OR?: SysDictDataWhereInput[]\n    NOT?: SysDictDataWhereInput | SysDictDataWhereInput[]\n    dictCode?: IntFilter<\"SysDictData\"> | number\n    dictSort?: IntNullableFilter<\"SysDictData\"> | number | null\n    dictLabel?: StringNullableFilter<\"SysDictData\"> | string | null\n    dictValue?: StringNullableFilter<\"SysDictData\"> | string | null\n    dictType?: StringNullableFilter<\"SysDictData\"> | string | null\n    cssClass?: StringNullableFilter<\"SysDictData\"> | string | null\n    listClass?: StringNullableFilter<\"SysDictData\"> | string | null\n    isDefault?: StringNullableFilter<\"SysDictData\"> | string | null\n    status?: StringNullableFilter<\"SysDictData\"> | string | null\n    createBy?: StringNullableFilter<\"SysDictData\"> | string | null\n    createTime?: StringNullableFilter<\"SysDictData\"> | string | null\n    updateBy?: StringNullableFilter<\"SysDictData\"> | string | null\n    updateTime?: StringNullableFilter<\"SysDictData\"> | string | null\n    remark?: StringNullableFilter<\"SysDictData\"> | string | null\n    sysDictType?: XOR<SysDictTypeNullableRelationFilter, SysDictTypeWhereInput> | null\n  }\n\n  export type SysDictDataOrderByWithRelationInput = {\n    dictCode?: SortOrder\n    dictSort?: SortOrderInput | SortOrder\n    dictLabel?: SortOrderInput | SortOrder\n    dictValue?: SortOrderInput | SortOrder\n    dictType?: SortOrderInput | SortOrder\n    cssClass?: SortOrderInput | SortOrder\n    listClass?: SortOrderInput | SortOrder\n    isDefault?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    sysDictType?: SysDictTypeOrderByWithRelationInput\n  }\n\n  export type SysDictDataWhereUniqueInput = Prisma.AtLeast<{\n    dictCode?: number\n    AND?: SysDictDataWhereInput | SysDictDataWhereInput[]\n    OR?: SysDictDataWhereInput[]\n    NOT?: SysDictDataWhereInput | SysDictDataWhereInput[]\n    dictSort?: IntNullableFilter<\"SysDictData\"> | number | null\n    dictLabel?: StringNullableFilter<\"SysDictData\"> | string | null\n    dictValue?: StringNullableFilter<\"SysDictData\"> | string | null\n    dictType?: StringNullableFilter<\"SysDictData\"> | string | null\n    cssClass?: StringNullableFilter<\"SysDictData\"> | string | null\n    listClass?: StringNullableFilter<\"SysDictData\"> | string | null\n    isDefault?: StringNullableFilter<\"SysDictData\"> | string | null\n    status?: StringNullableFilter<\"SysDictData\"> | string | null\n    createBy?: StringNullableFilter<\"SysDictData\"> | string | null\n    createTime?: StringNullableFilter<\"SysDictData\"> | string | null\n    updateBy?: StringNullableFilter<\"SysDictData\"> | string | null\n    updateTime?: StringNullableFilter<\"SysDictData\"> | string | null\n    remark?: StringNullableFilter<\"SysDictData\"> | string | null\n    sysDictType?: XOR<SysDictTypeNullableRelationFilter, SysDictTypeWhereInput> | null\n  }, \"dictCode\">\n\n  export type SysDictDataOrderByWithAggregationInput = {\n    dictCode?: SortOrder\n    dictSort?: SortOrderInput | SortOrder\n    dictLabel?: SortOrderInput | SortOrder\n    dictValue?: SortOrderInput | SortOrder\n    dictType?: SortOrderInput | SortOrder\n    cssClass?: SortOrderInput | SortOrder\n    listClass?: SortOrderInput | SortOrder\n    isDefault?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    _count?: SysDictDataCountOrderByAggregateInput\n    _avg?: SysDictDataAvgOrderByAggregateInput\n    _max?: SysDictDataMaxOrderByAggregateInput\n    _min?: SysDictDataMinOrderByAggregateInput\n    _sum?: SysDictDataSumOrderByAggregateInput\n  }\n\n  export type SysDictDataScalarWhereWithAggregatesInput = {\n    AND?: SysDictDataScalarWhereWithAggregatesInput | SysDictDataScalarWhereWithAggregatesInput[]\n    OR?: SysDictDataScalarWhereWithAggregatesInput[]\n    NOT?: SysDictDataScalarWhereWithAggregatesInput | SysDictDataScalarWhereWithAggregatesInput[]\n    dictCode?: IntWithAggregatesFilter<\"SysDictData\"> | number\n    dictSort?: IntNullableWithAggregatesFilter<\"SysDictData\"> | number | null\n    dictLabel?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    dictValue?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    dictType?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    cssClass?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    listClass?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    isDefault?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    status?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    createBy?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n    remark?: StringNullableWithAggregatesFilter<\"SysDictData\"> | string | null\n  }\n\n  export type SysDictTypeWhereInput = {\n    AND?: SysDictTypeWhereInput | SysDictTypeWhereInput[]\n    OR?: SysDictTypeWhereInput[]\n    NOT?: SysDictTypeWhereInput | SysDictTypeWhereInput[]\n    dictId?: IntFilter<\"SysDictType\"> | number\n    dictName?: StringNullableFilter<\"SysDictType\"> | string | null\n    dictType?: StringNullableFilter<\"SysDictType\"> | string | null\n    status?: StringNullableFilter<\"SysDictType\"> | string | null\n    createBy?: StringNullableFilter<\"SysDictType\"> | string | null\n    createTime?: StringNullableFilter<\"SysDictType\"> | string | null\n    updateBy?: StringNullableFilter<\"SysDictType\"> | string | null\n    updateTime?: StringNullableFilter<\"SysDictType\"> | string | null\n    remark?: StringNullableFilter<\"SysDictType\"> | string | null\n    dictDatas?: SysDictDataListRelationFilter\n  }\n\n  export type SysDictTypeOrderByWithRelationInput = {\n    dictId?: SortOrder\n    dictName?: SortOrderInput | SortOrder\n    dictType?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    dictDatas?: SysDictDataOrderByRelationAggregateInput\n  }\n\n  export type SysDictTypeWhereUniqueInput = Prisma.AtLeast<{\n    dictId?: number\n    dictType?: string\n    AND?: SysDictTypeWhereInput | SysDictTypeWhereInput[]\n    OR?: SysDictTypeWhereInput[]\n    NOT?: SysDictTypeWhereInput | SysDictTypeWhereInput[]\n    dictName?: StringNullableFilter<\"SysDictType\"> | string | null\n    status?: StringNullableFilter<\"SysDictType\"> | string | null\n    createBy?: StringNullableFilter<\"SysDictType\"> | string | null\n    createTime?: StringNullableFilter<\"SysDictType\"> | string | null\n    updateBy?: StringNullableFilter<\"SysDictType\"> | string | null\n    updateTime?: StringNullableFilter<\"SysDictType\"> | string | null\n    remark?: StringNullableFilter<\"SysDictType\"> | string | null\n    dictDatas?: SysDictDataListRelationFilter\n  }, \"dictId\" | \"dictType\">\n\n  export type SysDictTypeOrderByWithAggregationInput = {\n    dictId?: SortOrder\n    dictName?: SortOrderInput | SortOrder\n    dictType?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    _count?: SysDictTypeCountOrderByAggregateInput\n    _avg?: SysDictTypeAvgOrderByAggregateInput\n    _max?: SysDictTypeMaxOrderByAggregateInput\n    _min?: SysDictTypeMinOrderByAggregateInput\n    _sum?: SysDictTypeSumOrderByAggregateInput\n  }\n\n  export type SysDictTypeScalarWhereWithAggregatesInput = {\n    AND?: SysDictTypeScalarWhereWithAggregatesInput | SysDictTypeScalarWhereWithAggregatesInput[]\n    OR?: SysDictTypeScalarWhereWithAggregatesInput[]\n    NOT?: SysDictTypeScalarWhereWithAggregatesInput | SysDictTypeScalarWhereWithAggregatesInput[]\n    dictId?: IntWithAggregatesFilter<\"SysDictType\"> | number\n    dictName?: StringNullableWithAggregatesFilter<\"SysDictType\"> | string | null\n    dictType?: StringNullableWithAggregatesFilter<\"SysDictType\"> | string | null\n    status?: StringNullableWithAggregatesFilter<\"SysDictType\"> | string | null\n    createBy?: StringNullableWithAggregatesFilter<\"SysDictType\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"SysDictType\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"SysDictType\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"SysDictType\"> | string | null\n    remark?: StringNullableWithAggregatesFilter<\"SysDictType\"> | string | null\n  }\n\n  export type SysLogininforWhereInput = {\n    AND?: SysLogininforWhereInput | SysLogininforWhereInput[]\n    OR?: SysLogininforWhereInput[]\n    NOT?: SysLogininforWhereInput | SysLogininforWhereInput[]\n    infoId?: IntFilter<\"SysLogininfor\"> | number\n    userName?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    ipaddr?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    loginLocation?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    browser?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    os?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    status?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    msg?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    loginTime?: StringNullableFilter<\"SysLogininfor\"> | string | null\n  }\n\n  export type SysLogininforOrderByWithRelationInput = {\n    infoId?: SortOrder\n    userName?: SortOrderInput | SortOrder\n    ipaddr?: SortOrderInput | SortOrder\n    loginLocation?: SortOrderInput | SortOrder\n    browser?: SortOrderInput | SortOrder\n    os?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    msg?: SortOrderInput | SortOrder\n    loginTime?: SortOrderInput | SortOrder\n  }\n\n  export type SysLogininforWhereUniqueInput = Prisma.AtLeast<{\n    infoId?: number\n    AND?: SysLogininforWhereInput | SysLogininforWhereInput[]\n    OR?: SysLogininforWhereInput[]\n    NOT?: SysLogininforWhereInput | SysLogininforWhereInput[]\n    userName?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    ipaddr?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    loginLocation?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    browser?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    os?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    status?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    msg?: StringNullableFilter<\"SysLogininfor\"> | string | null\n    loginTime?: StringNullableFilter<\"SysLogininfor\"> | string | null\n  }, \"infoId\">\n\n  export type SysLogininforOrderByWithAggregationInput = {\n    infoId?: SortOrder\n    userName?: SortOrderInput | SortOrder\n    ipaddr?: SortOrderInput | SortOrder\n    loginLocation?: SortOrderInput | SortOrder\n    browser?: SortOrderInput | SortOrder\n    os?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    msg?: SortOrderInput | SortOrder\n    loginTime?: SortOrderInput | SortOrder\n    _count?: SysLogininforCountOrderByAggregateInput\n    _avg?: SysLogininforAvgOrderByAggregateInput\n    _max?: SysLogininforMaxOrderByAggregateInput\n    _min?: SysLogininforMinOrderByAggregateInput\n    _sum?: SysLogininforSumOrderByAggregateInput\n  }\n\n  export type SysLogininforScalarWhereWithAggregatesInput = {\n    AND?: SysLogininforScalarWhereWithAggregatesInput | SysLogininforScalarWhereWithAggregatesInput[]\n    OR?: SysLogininforScalarWhereWithAggregatesInput[]\n    NOT?: SysLogininforScalarWhereWithAggregatesInput | SysLogininforScalarWhereWithAggregatesInput[]\n    infoId?: IntWithAggregatesFilter<\"SysLogininfor\"> | number\n    userName?: StringNullableWithAggregatesFilter<\"SysLogininfor\"> | string | null\n    ipaddr?: StringNullableWithAggregatesFilter<\"SysLogininfor\"> | string | null\n    loginLocation?: StringNullableWithAggregatesFilter<\"SysLogininfor\"> | string | null\n    browser?: StringNullableWithAggregatesFilter<\"SysLogininfor\"> | string | null\n    os?: StringNullableWithAggregatesFilter<\"SysLogininfor\"> | string | null\n    status?: StringNullableWithAggregatesFilter<\"SysLogininfor\"> | string | null\n    msg?: StringNullableWithAggregatesFilter<\"SysLogininfor\"> | string | null\n    loginTime?: StringNullableWithAggregatesFilter<\"SysLogininfor\"> | string | null\n  }\n\n  export type SysMenuWhereInput = {\n    AND?: SysMenuWhereInput | SysMenuWhereInput[]\n    OR?: SysMenuWhereInput[]\n    NOT?: SysMenuWhereInput | SysMenuWhereInput[]\n    menuId?: IntFilter<\"SysMenu\"> | number\n    menuName?: StringFilter<\"SysMenu\"> | string\n    parentId?: IntNullableFilter<\"SysMenu\"> | number | null\n    orderNum?: IntNullableFilter<\"SysMenu\"> | number | null\n    path?: StringNullableFilter<\"SysMenu\"> | string | null\n    component?: StringNullableFilter<\"SysMenu\"> | string | null\n    query?: StringNullableFilter<\"SysMenu\"> | string | null\n    isFrame?: IntNullableFilter<\"SysMenu\"> | number | null\n    isCache?: IntNullableFilter<\"SysMenu\"> | number | null\n    menuType?: StringNullableFilter<\"SysMenu\"> | string | null\n    visible?: StringNullableFilter<\"SysMenu\"> | string | null\n    status?: StringNullableFilter<\"SysMenu\"> | string | null\n    perms?: StringNullableFilter<\"SysMenu\"> | string | null\n    icon?: StringNullableFilter<\"SysMenu\"> | string | null\n    createBy?: StringNullableFilter<\"SysMenu\"> | string | null\n    createTime?: StringNullableFilter<\"SysMenu\"> | string | null\n    updateBy?: StringNullableFilter<\"SysMenu\"> | string | null\n    updateTime?: StringNullableFilter<\"SysMenu\"> | string | null\n    remark?: StringNullableFilter<\"SysMenu\"> | string | null\n    roles?: SysRoleMenuListRelationFilter\n  }\n\n  export type SysMenuOrderByWithRelationInput = {\n    menuId?: SortOrder\n    menuName?: SortOrder\n    parentId?: SortOrderInput | SortOrder\n    orderNum?: SortOrderInput | SortOrder\n    path?: SortOrderInput | SortOrder\n    component?: SortOrderInput | SortOrder\n    query?: SortOrderInput | SortOrder\n    isFrame?: SortOrderInput | SortOrder\n    isCache?: SortOrderInput | SortOrder\n    menuType?: SortOrderInput | SortOrder\n    visible?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    perms?: SortOrderInput | SortOrder\n    icon?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    roles?: SysRoleMenuOrderByRelationAggregateInput\n  }\n\n  export type SysMenuWhereUniqueInput = Prisma.AtLeast<{\n    menuId?: number\n    AND?: SysMenuWhereInput | SysMenuWhereInput[]\n    OR?: SysMenuWhereInput[]\n    NOT?: SysMenuWhereInput | SysMenuWhereInput[]\n    menuName?: StringFilter<\"SysMenu\"> | string\n    parentId?: IntNullableFilter<\"SysMenu\"> | number | null\n    orderNum?: IntNullableFilter<\"SysMenu\"> | number | null\n    path?: StringNullableFilter<\"SysMenu\"> | string | null\n    component?: StringNullableFilter<\"SysMenu\"> | string | null\n    query?: StringNullableFilter<\"SysMenu\"> | string | null\n    isFrame?: IntNullableFilter<\"SysMenu\"> | number | null\n    isCache?: IntNullableFilter<\"SysMenu\"> | number | null\n    menuType?: StringNullableFilter<\"SysMenu\"> | string | null\n    visible?: StringNullableFilter<\"SysMenu\"> | string | null\n    status?: StringNullableFilter<\"SysMenu\"> | string | null\n    perms?: StringNullableFilter<\"SysMenu\"> | string | null\n    icon?: StringNullableFilter<\"SysMenu\"> | string | null\n    createBy?: StringNullableFilter<\"SysMenu\"> | string | null\n    createTime?: StringNullableFilter<\"SysMenu\"> | string | null\n    updateBy?: StringNullableFilter<\"SysMenu\"> | string | null\n    updateTime?: StringNullableFilter<\"SysMenu\"> | string | null\n    remark?: StringNullableFilter<\"SysMenu\"> | string | null\n    roles?: SysRoleMenuListRelationFilter\n  }, \"menuId\">\n\n  export type SysMenuOrderByWithAggregationInput = {\n    menuId?: SortOrder\n    menuName?: SortOrder\n    parentId?: SortOrderInput | SortOrder\n    orderNum?: SortOrderInput | SortOrder\n    path?: SortOrderInput | SortOrder\n    component?: SortOrderInput | SortOrder\n    query?: SortOrderInput | SortOrder\n    isFrame?: SortOrderInput | SortOrder\n    isCache?: SortOrderInput | SortOrder\n    menuType?: SortOrderInput | SortOrder\n    visible?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    perms?: SortOrderInput | SortOrder\n    icon?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    _count?: SysMenuCountOrderByAggregateInput\n    _avg?: SysMenuAvgOrderByAggregateInput\n    _max?: SysMenuMaxOrderByAggregateInput\n    _min?: SysMenuMinOrderByAggregateInput\n    _sum?: SysMenuSumOrderByAggregateInput\n  }\n\n  export type SysMenuScalarWhereWithAggregatesInput = {\n    AND?: SysMenuScalarWhereWithAggregatesInput | SysMenuScalarWhereWithAggregatesInput[]\n    OR?: SysMenuScalarWhereWithAggregatesInput[]\n    NOT?: SysMenuScalarWhereWithAggregatesInput | SysMenuScalarWhereWithAggregatesInput[]\n    menuId?: IntWithAggregatesFilter<\"SysMenu\"> | number\n    menuName?: StringWithAggregatesFilter<\"SysMenu\"> | string\n    parentId?: IntNullableWithAggregatesFilter<\"SysMenu\"> | number | null\n    orderNum?: IntNullableWithAggregatesFilter<\"SysMenu\"> | number | null\n    path?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    component?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    query?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    isFrame?: IntNullableWithAggregatesFilter<\"SysMenu\"> | number | null\n    isCache?: IntNullableWithAggregatesFilter<\"SysMenu\"> | number | null\n    menuType?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    visible?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    status?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    perms?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    icon?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    createBy?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n    remark?: StringNullableWithAggregatesFilter<\"SysMenu\"> | string | null\n  }\n\n  export type SysNoticeWhereInput = {\n    AND?: SysNoticeWhereInput | SysNoticeWhereInput[]\n    OR?: SysNoticeWhereInput[]\n    NOT?: SysNoticeWhereInput | SysNoticeWhereInput[]\n    noticeId?: IntFilter<\"SysNotice\"> | number\n    noticeTitle?: StringFilter<\"SysNotice\"> | string\n    noticeType?: StringFilter<\"SysNotice\"> | string\n    noticeContent?: StringNullableFilter<\"SysNotice\"> | string | null\n    status?: StringNullableFilter<\"SysNotice\"> | string | null\n    createBy?: StringNullableFilter<\"SysNotice\"> | string | null\n    createTime?: StringNullableFilter<\"SysNotice\"> | string | null\n    updateBy?: StringNullableFilter<\"SysNotice\"> | string | null\n    updateTime?: StringNullableFilter<\"SysNotice\"> | string | null\n    remark?: StringNullableFilter<\"SysNotice\"> | string | null\n  }\n\n  export type SysNoticeOrderByWithRelationInput = {\n    noticeId?: SortOrder\n    noticeTitle?: SortOrder\n    noticeType?: SortOrder\n    noticeContent?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n  }\n\n  export type SysNoticeWhereUniqueInput = Prisma.AtLeast<{\n    noticeId?: number\n    AND?: SysNoticeWhereInput | SysNoticeWhereInput[]\n    OR?: SysNoticeWhereInput[]\n    NOT?: SysNoticeWhereInput | SysNoticeWhereInput[]\n    noticeTitle?: StringFilter<\"SysNotice\"> | string\n    noticeType?: StringFilter<\"SysNotice\"> | string\n    noticeContent?: StringNullableFilter<\"SysNotice\"> | string | null\n    status?: StringNullableFilter<\"SysNotice\"> | string | null\n    createBy?: StringNullableFilter<\"SysNotice\"> | string | null\n    createTime?: StringNullableFilter<\"SysNotice\"> | string | null\n    updateBy?: StringNullableFilter<\"SysNotice\"> | string | null\n    updateTime?: StringNullableFilter<\"SysNotice\"> | string | null\n    remark?: StringNullableFilter<\"SysNotice\"> | string | null\n  }, \"noticeId\">\n\n  export type SysNoticeOrderByWithAggregationInput = {\n    noticeId?: SortOrder\n    noticeTitle?: SortOrder\n    noticeType?: SortOrder\n    noticeContent?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    _count?: SysNoticeCountOrderByAggregateInput\n    _avg?: SysNoticeAvgOrderByAggregateInput\n    _max?: SysNoticeMaxOrderByAggregateInput\n    _min?: SysNoticeMinOrderByAggregateInput\n    _sum?: SysNoticeSumOrderByAggregateInput\n  }\n\n  export type SysNoticeScalarWhereWithAggregatesInput = {\n    AND?: SysNoticeScalarWhereWithAggregatesInput | SysNoticeScalarWhereWithAggregatesInput[]\n    OR?: SysNoticeScalarWhereWithAggregatesInput[]\n    NOT?: SysNoticeScalarWhereWithAggregatesInput | SysNoticeScalarWhereWithAggregatesInput[]\n    noticeId?: IntWithAggregatesFilter<\"SysNotice\"> | number\n    noticeTitle?: StringWithAggregatesFilter<\"SysNotice\"> | string\n    noticeType?: StringWithAggregatesFilter<\"SysNotice\"> | string\n    noticeContent?: StringNullableWithAggregatesFilter<\"SysNotice\"> | string | null\n    status?: StringNullableWithAggregatesFilter<\"SysNotice\"> | string | null\n    createBy?: StringNullableWithAggregatesFilter<\"SysNotice\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"SysNotice\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"SysNotice\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"SysNotice\"> | string | null\n    remark?: StringNullableWithAggregatesFilter<\"SysNotice\"> | string | null\n  }\n\n  export type SysPostWhereInput = {\n    AND?: SysPostWhereInput | SysPostWhereInput[]\n    OR?: SysPostWhereInput[]\n    NOT?: SysPostWhereInput | SysPostWhereInput[]\n    postId?: IntFilter<\"SysPost\"> | number\n    postCode?: StringFilter<\"SysPost\"> | string\n    postName?: StringFilter<\"SysPost\"> | string\n    postSort?: IntFilter<\"SysPost\"> | number\n    status?: StringFilter<\"SysPost\"> | string\n    createBy?: StringNullableFilter<\"SysPost\"> | string | null\n    createTime?: StringNullableFilter<\"SysPost\"> | string | null\n    updateBy?: StringNullableFilter<\"SysPost\"> | string | null\n    updateTime?: StringNullableFilter<\"SysPost\"> | string | null\n    remark?: StringNullableFilter<\"SysPost\"> | string | null\n    users?: SysUserPostListRelationFilter\n  }\n\n  export type SysPostOrderByWithRelationInput = {\n    postId?: SortOrder\n    postCode?: SortOrder\n    postName?: SortOrder\n    postSort?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    users?: SysUserPostOrderByRelationAggregateInput\n  }\n\n  export type SysPostWhereUniqueInput = Prisma.AtLeast<{\n    postId?: number\n    AND?: SysPostWhereInput | SysPostWhereInput[]\n    OR?: SysPostWhereInput[]\n    NOT?: SysPostWhereInput | SysPostWhereInput[]\n    postCode?: StringFilter<\"SysPost\"> | string\n    postName?: StringFilter<\"SysPost\"> | string\n    postSort?: IntFilter<\"SysPost\"> | number\n    status?: StringFilter<\"SysPost\"> | string\n    createBy?: StringNullableFilter<\"SysPost\"> | string | null\n    createTime?: StringNullableFilter<\"SysPost\"> | string | null\n    updateBy?: StringNullableFilter<\"SysPost\"> | string | null\n    updateTime?: StringNullableFilter<\"SysPost\"> | string | null\n    remark?: StringNullableFilter<\"SysPost\"> | string | null\n    users?: SysUserPostListRelationFilter\n  }, \"postId\">\n\n  export type SysPostOrderByWithAggregationInput = {\n    postId?: SortOrder\n    postCode?: SortOrder\n    postName?: SortOrder\n    postSort?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    _count?: SysPostCountOrderByAggregateInput\n    _avg?: SysPostAvgOrderByAggregateInput\n    _max?: SysPostMaxOrderByAggregateInput\n    _min?: SysPostMinOrderByAggregateInput\n    _sum?: SysPostSumOrderByAggregateInput\n  }\n\n  export type SysPostScalarWhereWithAggregatesInput = {\n    AND?: SysPostScalarWhereWithAggregatesInput | SysPostScalarWhereWithAggregatesInput[]\n    OR?: SysPostScalarWhereWithAggregatesInput[]\n    NOT?: SysPostScalarWhereWithAggregatesInput | SysPostScalarWhereWithAggregatesInput[]\n    postId?: IntWithAggregatesFilter<\"SysPost\"> | number\n    postCode?: StringWithAggregatesFilter<\"SysPost\"> | string\n    postName?: StringWithAggregatesFilter<\"SysPost\"> | string\n    postSort?: IntWithAggregatesFilter<\"SysPost\"> | number\n    status?: StringWithAggregatesFilter<\"SysPost\"> | string\n    createBy?: StringNullableWithAggregatesFilter<\"SysPost\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"SysPost\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"SysPost\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"SysPost\"> | string | null\n    remark?: StringNullableWithAggregatesFilter<\"SysPost\"> | string | null\n  }\n\n  export type SysUserPostWhereInput = {\n    AND?: SysUserPostWhereInput | SysUserPostWhereInput[]\n    OR?: SysUserPostWhereInput[]\n    NOT?: SysUserPostWhereInput | SysUserPostWhereInput[]\n    userId?: IntFilter<\"SysUserPost\"> | number\n    postId?: IntFilter<\"SysUserPost\"> | number\n    user?: XOR<SysUserRelationFilter, SysUserWhereInput>\n    post?: XOR<SysPostRelationFilter, SysPostWhereInput>\n  }\n\n  export type SysUserPostOrderByWithRelationInput = {\n    userId?: SortOrder\n    postId?: SortOrder\n    user?: SysUserOrderByWithRelationInput\n    post?: SysPostOrderByWithRelationInput\n  }\n\n  export type SysUserPostWhereUniqueInput = Prisma.AtLeast<{\n    userId_postId?: SysUserPostUserIdPostIdCompoundUniqueInput\n    AND?: SysUserPostWhereInput | SysUserPostWhereInput[]\n    OR?: SysUserPostWhereInput[]\n    NOT?: SysUserPostWhereInput | SysUserPostWhereInput[]\n    userId?: IntFilter<\"SysUserPost\"> | number\n    postId?: IntFilter<\"SysUserPost\"> | number\n    user?: XOR<SysUserRelationFilter, SysUserWhereInput>\n    post?: XOR<SysPostRelationFilter, SysPostWhereInput>\n  }, \"userId_postId\">\n\n  export type SysUserPostOrderByWithAggregationInput = {\n    userId?: SortOrder\n    postId?: SortOrder\n    _count?: SysUserPostCountOrderByAggregateInput\n    _avg?: SysUserPostAvgOrderByAggregateInput\n    _max?: SysUserPostMaxOrderByAggregateInput\n    _min?: SysUserPostMinOrderByAggregateInput\n    _sum?: SysUserPostSumOrderByAggregateInput\n  }\n\n  export type SysUserPostScalarWhereWithAggregatesInput = {\n    AND?: SysUserPostScalarWhereWithAggregatesInput | SysUserPostScalarWhereWithAggregatesInput[]\n    OR?: SysUserPostScalarWhereWithAggregatesInput[]\n    NOT?: SysUserPostScalarWhereWithAggregatesInput | SysUserPostScalarWhereWithAggregatesInput[]\n    userId?: IntWithAggregatesFilter<\"SysUserPost\"> | number\n    postId?: IntWithAggregatesFilter<\"SysUserPost\"> | number\n  }\n\n  export type SysRoleDeptWhereInput = {\n    AND?: SysRoleDeptWhereInput | SysRoleDeptWhereInput[]\n    OR?: SysRoleDeptWhereInput[]\n    NOT?: SysRoleDeptWhereInput | SysRoleDeptWhereInput[]\n    roleId?: IntFilter<\"SysRoleDept\"> | number\n    deptId?: IntFilter<\"SysRoleDept\"> | number\n    role?: XOR<SysRoleRelationFilter, SysRoleWhereInput>\n    dept?: XOR<SysDeptRelationFilter, SysDeptWhereInput>\n  }\n\n  export type SysRoleDeptOrderByWithRelationInput = {\n    roleId?: SortOrder\n    deptId?: SortOrder\n    role?: SysRoleOrderByWithRelationInput\n    dept?: SysDeptOrderByWithRelationInput\n  }\n\n  export type SysRoleDeptWhereUniqueInput = Prisma.AtLeast<{\n    roleId_deptId?: SysRoleDeptRoleIdDeptIdCompoundUniqueInput\n    AND?: SysRoleDeptWhereInput | SysRoleDeptWhereInput[]\n    OR?: SysRoleDeptWhereInput[]\n    NOT?: SysRoleDeptWhereInput | SysRoleDeptWhereInput[]\n    roleId?: IntFilter<\"SysRoleDept\"> | number\n    deptId?: IntFilter<\"SysRoleDept\"> | number\n    role?: XOR<SysRoleRelationFilter, SysRoleWhereInput>\n    dept?: XOR<SysDeptRelationFilter, SysDeptWhereInput>\n  }, \"roleId_deptId\">\n\n  export type SysRoleDeptOrderByWithAggregationInput = {\n    roleId?: SortOrder\n    deptId?: SortOrder\n    _count?: SysRoleDeptCountOrderByAggregateInput\n    _avg?: SysRoleDeptAvgOrderByAggregateInput\n    _max?: SysRoleDeptMaxOrderByAggregateInput\n    _min?: SysRoleDeptMinOrderByAggregateInput\n    _sum?: SysRoleDeptSumOrderByAggregateInput\n  }\n\n  export type SysRoleDeptScalarWhereWithAggregatesInput = {\n    AND?: SysRoleDeptScalarWhereWithAggregatesInput | SysRoleDeptScalarWhereWithAggregatesInput[]\n    OR?: SysRoleDeptScalarWhereWithAggregatesInput[]\n    NOT?: SysRoleDeptScalarWhereWithAggregatesInput | SysRoleDeptScalarWhereWithAggregatesInput[]\n    roleId?: IntWithAggregatesFilter<\"SysRoleDept\"> | number\n    deptId?: IntWithAggregatesFilter<\"SysRoleDept\"> | number\n  }\n\n  export type SysRoleMenuWhereInput = {\n    AND?: SysRoleMenuWhereInput | SysRoleMenuWhereInput[]\n    OR?: SysRoleMenuWhereInput[]\n    NOT?: SysRoleMenuWhereInput | SysRoleMenuWhereInput[]\n    roleId?: IntFilter<\"SysRoleMenu\"> | number\n    menuId?: IntFilter<\"SysRoleMenu\"> | number\n    menu?: XOR<SysMenuRelationFilter, SysMenuWhereInput>\n    role?: XOR<SysRoleRelationFilter, SysRoleWhereInput>\n  }\n\n  export type SysRoleMenuOrderByWithRelationInput = {\n    roleId?: SortOrder\n    menuId?: SortOrder\n    menu?: SysMenuOrderByWithRelationInput\n    role?: SysRoleOrderByWithRelationInput\n  }\n\n  export type SysRoleMenuWhereUniqueInput = Prisma.AtLeast<{\n    roleId_menuId?: SysRoleMenuRoleIdMenuIdCompoundUniqueInput\n    AND?: SysRoleMenuWhereInput | SysRoleMenuWhereInput[]\n    OR?: SysRoleMenuWhereInput[]\n    NOT?: SysRoleMenuWhereInput | SysRoleMenuWhereInput[]\n    roleId?: IntFilter<\"SysRoleMenu\"> | number\n    menuId?: IntFilter<\"SysRoleMenu\"> | number\n    menu?: XOR<SysMenuRelationFilter, SysMenuWhereInput>\n    role?: XOR<SysRoleRelationFilter, SysRoleWhereInput>\n  }, \"roleId_menuId\">\n\n  export type SysRoleMenuOrderByWithAggregationInput = {\n    roleId?: SortOrder\n    menuId?: SortOrder\n    _count?: SysRoleMenuCountOrderByAggregateInput\n    _avg?: SysRoleMenuAvgOrderByAggregateInput\n    _max?: SysRoleMenuMaxOrderByAggregateInput\n    _min?: SysRoleMenuMinOrderByAggregateInput\n    _sum?: SysRoleMenuSumOrderByAggregateInput\n  }\n\n  export type SysRoleMenuScalarWhereWithAggregatesInput = {\n    AND?: SysRoleMenuScalarWhereWithAggregatesInput | SysRoleMenuScalarWhereWithAggregatesInput[]\n    OR?: SysRoleMenuScalarWhereWithAggregatesInput[]\n    NOT?: SysRoleMenuScalarWhereWithAggregatesInput | SysRoleMenuScalarWhereWithAggregatesInput[]\n    roleId?: IntWithAggregatesFilter<\"SysRoleMenu\"> | number\n    menuId?: IntWithAggregatesFilter<\"SysRoleMenu\"> | number\n  }\n\n  export type SysUserWhereInput = {\n    AND?: SysUserWhereInput | SysUserWhereInput[]\n    OR?: SysUserWhereInput[]\n    NOT?: SysUserWhereInput | SysUserWhereInput[]\n    userId?: IntFilter<\"SysUser\"> | number\n    deptId?: IntNullableFilter<\"SysUser\"> | number | null\n    userName?: StringFilter<\"SysUser\"> | string\n    nickName?: StringFilter<\"SysUser\"> | string\n    userType?: StringNullableFilter<\"SysUser\"> | string | null\n    email?: StringNullableFilter<\"SysUser\"> | string | null\n    phonenumber?: StringNullableFilter<\"SysUser\"> | string | null\n    sex?: StringNullableFilter<\"SysUser\"> | string | null\n    avatar?: StringNullableFilter<\"SysUser\"> | string | null\n    password?: StringNullableFilter<\"SysUser\"> | string | null\n    status?: StringNullableFilter<\"SysUser\"> | string | null\n    loginIp?: StringNullableFilter<\"SysUser\"> | string | null\n    loginDate?: StringNullableFilter<\"SysUser\"> | string | null\n    createBy?: StringNullableFilter<\"SysUser\"> | string | null\n    createTime?: StringNullableFilter<\"SysUser\"> | string | null\n    updateBy?: StringNullableFilter<\"SysUser\"> | string | null\n    updateTime?: StringNullableFilter<\"SysUser\"> | string | null\n    remark?: StringNullableFilter<\"SysUser\"> | string | null\n    dept?: XOR<SysDeptNullableRelationFilter, SysDeptWhereInput> | null\n    roles?: SysUserRoleListRelationFilter\n    posts?: SysUserPostListRelationFilter\n  }\n\n  export type SysUserOrderByWithRelationInput = {\n    userId?: SortOrder\n    deptId?: SortOrderInput | SortOrder\n    userName?: SortOrder\n    nickName?: SortOrder\n    userType?: SortOrderInput | SortOrder\n    email?: SortOrderInput | SortOrder\n    phonenumber?: SortOrderInput | SortOrder\n    sex?: SortOrderInput | SortOrder\n    avatar?: SortOrderInput | SortOrder\n    password?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    loginIp?: SortOrderInput | SortOrder\n    loginDate?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    dept?: SysDeptOrderByWithRelationInput\n    roles?: SysUserRoleOrderByRelationAggregateInput\n    posts?: SysUserPostOrderByRelationAggregateInput\n  }\n\n  export type SysUserWhereUniqueInput = Prisma.AtLeast<{\n    userId?: number\n    AND?: SysUserWhereInput | SysUserWhereInput[]\n    OR?: SysUserWhereInput[]\n    NOT?: SysUserWhereInput | SysUserWhereInput[]\n    deptId?: IntNullableFilter<\"SysUser\"> | number | null\n    userName?: StringFilter<\"SysUser\"> | string\n    nickName?: StringFilter<\"SysUser\"> | string\n    userType?: StringNullableFilter<\"SysUser\"> | string | null\n    email?: StringNullableFilter<\"SysUser\"> | string | null\n    phonenumber?: StringNullableFilter<\"SysUser\"> | string | null\n    sex?: StringNullableFilter<\"SysUser\"> | string | null\n    avatar?: StringNullableFilter<\"SysUser\"> | string | null\n    password?: StringNullableFilter<\"SysUser\"> | string | null\n    status?: StringNullableFilter<\"SysUser\"> | string | null\n    loginIp?: StringNullableFilter<\"SysUser\"> | string | null\n    loginDate?: StringNullableFilter<\"SysUser\"> | string | null\n    createBy?: StringNullableFilter<\"SysUser\"> | string | null\n    createTime?: StringNullableFilter<\"SysUser\"> | string | null\n    updateBy?: StringNullableFilter<\"SysUser\"> | string | null\n    updateTime?: StringNullableFilter<\"SysUser\"> | string | null\n    remark?: StringNullableFilter<\"SysUser\"> | string | null\n    dept?: XOR<SysDeptNullableRelationFilter, SysDeptWhereInput> | null\n    roles?: SysUserRoleListRelationFilter\n    posts?: SysUserPostListRelationFilter\n  }, \"userId\">\n\n  export type SysUserOrderByWithAggregationInput = {\n    userId?: SortOrder\n    deptId?: SortOrderInput | SortOrder\n    userName?: SortOrder\n    nickName?: SortOrder\n    userType?: SortOrderInput | SortOrder\n    email?: SortOrderInput | SortOrder\n    phonenumber?: SortOrderInput | SortOrder\n    sex?: SortOrderInput | SortOrder\n    avatar?: SortOrderInput | SortOrder\n    password?: SortOrderInput | SortOrder\n    status?: SortOrderInput | SortOrder\n    loginIp?: SortOrderInput | SortOrder\n    loginDate?: SortOrderInput | SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    _count?: SysUserCountOrderByAggregateInput\n    _avg?: SysUserAvgOrderByAggregateInput\n    _max?: SysUserMaxOrderByAggregateInput\n    _min?: SysUserMinOrderByAggregateInput\n    _sum?: SysUserSumOrderByAggregateInput\n  }\n\n  export type SysUserScalarWhereWithAggregatesInput = {\n    AND?: SysUserScalarWhereWithAggregatesInput | SysUserScalarWhereWithAggregatesInput[]\n    OR?: SysUserScalarWhereWithAggregatesInput[]\n    NOT?: SysUserScalarWhereWithAggregatesInput | SysUserScalarWhereWithAggregatesInput[]\n    userId?: IntWithAggregatesFilter<\"SysUser\"> | number\n    deptId?: IntNullableWithAggregatesFilter<\"SysUser\"> | number | null\n    userName?: StringWithAggregatesFilter<\"SysUser\"> | string\n    nickName?: StringWithAggregatesFilter<\"SysUser\"> | string\n    userType?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    email?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    phonenumber?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    sex?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    avatar?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    password?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    status?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    loginIp?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    loginDate?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    createBy?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n    remark?: StringNullableWithAggregatesFilter<\"SysUser\"> | string | null\n  }\n\n  export type SysRoleWhereInput = {\n    AND?: SysRoleWhereInput | SysRoleWhereInput[]\n    OR?: SysRoleWhereInput[]\n    NOT?: SysRoleWhereInput | SysRoleWhereInput[]\n    roleId?: IntFilter<\"SysRole\"> | number\n    roleName?: StringFilter<\"SysRole\"> | string\n    roleKey?: StringFilter<\"SysRole\"> | string\n    roleSort?: IntFilter<\"SysRole\"> | number\n    dataScope?: StringNullableFilter<\"SysRole\"> | string | null\n    menuCheckStrictly?: IntNullableFilter<\"SysRole\"> | number | null\n    deptCheckStrictly?: IntNullableFilter<\"SysRole\"> | number | null\n    status?: StringFilter<\"SysRole\"> | string\n    createBy?: StringNullableFilter<\"SysRole\"> | string | null\n    createTime?: StringNullableFilter<\"SysRole\"> | string | null\n    updateBy?: StringNullableFilter<\"SysRole\"> | string | null\n    updateTime?: StringNullableFilter<\"SysRole\"> | string | null\n    remark?: StringNullableFilter<\"SysRole\"> | string | null\n    users?: SysUserRoleListRelationFilter\n    menus?: SysRoleMenuListRelationFilter\n    depts?: SysRoleDeptListRelationFilter\n  }\n\n  export type SysRoleOrderByWithRelationInput = {\n    roleId?: SortOrder\n    roleName?: SortOrder\n    roleKey?: SortOrder\n    roleSort?: SortOrder\n    dataScope?: SortOrderInput | SortOrder\n    menuCheckStrictly?: SortOrderInput | SortOrder\n    deptCheckStrictly?: SortOrderInput | SortOrder\n    status?: SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    users?: SysUserRoleOrderByRelationAggregateInput\n    menus?: SysRoleMenuOrderByRelationAggregateInput\n    depts?: SysRoleDeptOrderByRelationAggregateInput\n  }\n\n  export type SysRoleWhereUniqueInput = Prisma.AtLeast<{\n    roleId?: number\n    AND?: SysRoleWhereInput | SysRoleWhereInput[]\n    OR?: SysRoleWhereInput[]\n    NOT?: SysRoleWhereInput | SysRoleWhereInput[]\n    roleName?: StringFilter<\"SysRole\"> | string\n    roleKey?: StringFilter<\"SysRole\"> | string\n    roleSort?: IntFilter<\"SysRole\"> | number\n    dataScope?: StringNullableFilter<\"SysRole\"> | string | null\n    menuCheckStrictly?: IntNullableFilter<\"SysRole\"> | number | null\n    deptCheckStrictly?: IntNullableFilter<\"SysRole\"> | number | null\n    status?: StringFilter<\"SysRole\"> | string\n    createBy?: StringNullableFilter<\"SysRole\"> | string | null\n    createTime?: StringNullableFilter<\"SysRole\"> | string | null\n    updateBy?: StringNullableFilter<\"SysRole\"> | string | null\n    updateTime?: StringNullableFilter<\"SysRole\"> | string | null\n    remark?: StringNullableFilter<\"SysRole\"> | string | null\n    users?: SysUserRoleListRelationFilter\n    menus?: SysRoleMenuListRelationFilter\n    depts?: SysRoleDeptListRelationFilter\n  }, \"roleId\">\n\n  export type SysRoleOrderByWithAggregationInput = {\n    roleId?: SortOrder\n    roleName?: SortOrder\n    roleKey?: SortOrder\n    roleSort?: SortOrder\n    dataScope?: SortOrderInput | SortOrder\n    menuCheckStrictly?: SortOrderInput | SortOrder\n    deptCheckStrictly?: SortOrderInput | SortOrder\n    status?: SortOrder\n    createBy?: SortOrderInput | SortOrder\n    createTime?: SortOrderInput | SortOrder\n    updateBy?: SortOrderInput | SortOrder\n    updateTime?: SortOrderInput | SortOrder\n    remark?: SortOrderInput | SortOrder\n    _count?: SysRoleCountOrderByAggregateInput\n    _avg?: SysRoleAvgOrderByAggregateInput\n    _max?: SysRoleMaxOrderByAggregateInput\n    _min?: SysRoleMinOrderByAggregateInput\n    _sum?: SysRoleSumOrderByAggregateInput\n  }\n\n  export type SysRoleScalarWhereWithAggregatesInput = {\n    AND?: SysRoleScalarWhereWithAggregatesInput | SysRoleScalarWhereWithAggregatesInput[]\n    OR?: SysRoleScalarWhereWithAggregatesInput[]\n    NOT?: SysRoleScalarWhereWithAggregatesInput | SysRoleScalarWhereWithAggregatesInput[]\n    roleId?: IntWithAggregatesFilter<\"SysRole\"> | number\n    roleName?: StringWithAggregatesFilter<\"SysRole\"> | string\n    roleKey?: StringWithAggregatesFilter<\"SysRole\"> | string\n    roleSort?: IntWithAggregatesFilter<\"SysRole\"> | number\n    dataScope?: StringNullableWithAggregatesFilter<\"SysRole\"> | string | null\n    menuCheckStrictly?: IntNullableWithAggregatesFilter<\"SysRole\"> | number | null\n    deptCheckStrictly?: IntNullableWithAggregatesFilter<\"SysRole\"> | number | null\n    status?: StringWithAggregatesFilter<\"SysRole\"> | string\n    createBy?: StringNullableWithAggregatesFilter<\"SysRole\"> | string | null\n    createTime?: StringNullableWithAggregatesFilter<\"SysRole\"> | string | null\n    updateBy?: StringNullableWithAggregatesFilter<\"SysRole\"> | string | null\n    updateTime?: StringNullableWithAggregatesFilter<\"SysRole\"> | string | null\n    remark?: StringNullableWithAggregatesFilter<\"SysRole\"> | string | null\n  }\n\n  export type SysUserRoleWhereInput = {\n    AND?: SysUserRoleWhereInput | SysUserRoleWhereInput[]\n    OR?: SysUserRoleWhereInput[]\n    NOT?: SysUserRoleWhereInput | SysUserRoleWhereInput[]\n    userId?: IntFilter<\"SysUserRole\"> | number\n    roleId?: IntFilter<\"SysUserRole\"> | number\n    user?: XOR<SysUserRelationFilter, SysUserWhereInput>\n    role?: XOR<SysRoleRelationFilter, SysRoleWhereInput>\n  }\n\n  export type SysUserRoleOrderByWithRelationInput = {\n    userId?: SortOrder\n    roleId?: SortOrder\n    user?: SysUserOrderByWithRelationInput\n    role?: SysRoleOrderByWithRelationInput\n  }\n\n  export type SysUserRoleWhereUniqueInput = Prisma.AtLeast<{\n    userId_roleId?: SysUserRoleUserIdRoleIdCompoundUniqueInput\n    AND?: SysUserRoleWhereInput | SysUserRoleWhereInput[]\n    OR?: SysUserRoleWhereInput[]\n    NOT?: SysUserRoleWhereInput | SysUserRoleWhereInput[]\n    userId?: IntFilter<\"SysUserRole\"> | number\n    roleId?: IntFilter<\"SysUserRole\"> | number\n    user?: XOR<SysUserRelationFilter, SysUserWhereInput>\n    role?: XOR<SysRoleRelationFilter, SysRoleWhereInput>\n  }, \"userId_roleId\">\n\n  export type SysUserRoleOrderByWithAggregationInput = {\n    userId?: SortOrder\n    roleId?: SortOrder\n    _count?: SysUserRoleCountOrderByAggregateInput\n    _avg?: SysUserRoleAvgOrderByAggregateInput\n    _max?: SysUserRoleMaxOrderByAggregateInput\n    _min?: SysUserRoleMinOrderByAggregateInput\n    _sum?: SysUserRoleSumOrderByAggregateInput\n  }\n\n  export type SysUserRoleScalarWhereWithAggregatesInput = {\n    AND?: SysUserRoleScalarWhereWithAggregatesInput | SysUserRoleScalarWhereWithAggregatesInput[]\n    OR?: SysUserRoleScalarWhereWithAggregatesInput[]\n    NOT?: SysUserRoleScalarWhereWithAggregatesInput | SysUserRoleScalarWhereWithAggregatesInput[]\n    userId?: IntWithAggregatesFilter<\"SysUserRole\"> | number\n    roleId?: IntWithAggregatesFilter<\"SysUserRole\"> | number\n  }\n\n  export type GenTableCreateInput = {\n    tableName?: string | null\n    tableComment?: string | null\n    subTableName?: string | null\n    subTableFkName?: string | null\n    className?: string | null\n    tplCategory?: string | null\n    tplWebType?: string | null\n    packageName?: string | null\n    moduleName?: string | null\n    businessName?: string | null\n    functionName?: string | null\n    functionAuthor?: string | null\n    genType?: string | null\n    genPath?: string | null\n    options?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    tableColumns?: GenTableColumnCreateNestedManyWithoutTableInput\n  }\n\n  export type GenTableUncheckedCreateInput = {\n    tableId?: number\n    tableName?: string | null\n    tableComment?: string | null\n    subTableName?: string | null\n    subTableFkName?: string | null\n    className?: string | null\n    tplCategory?: string | null\n    tplWebType?: string | null\n    packageName?: string | null\n    moduleName?: string | null\n    businessName?: string | null\n    functionName?: string | null\n    functionAuthor?: string | null\n    genType?: string | null\n    genPath?: string | null\n    options?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    tableColumns?: GenTableColumnUncheckedCreateNestedManyWithoutTableInput\n  }\n\n  export type GenTableUpdateInput = {\n    tableName?: NullableStringFieldUpdateOperationsInput | string | null\n    tableComment?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableName?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableFkName?: NullableStringFieldUpdateOperationsInput | string | null\n    className?: NullableStringFieldUpdateOperationsInput | string | null\n    tplCategory?: NullableStringFieldUpdateOperationsInput | string | null\n    tplWebType?: NullableStringFieldUpdateOperationsInput | string | null\n    packageName?: NullableStringFieldUpdateOperationsInput | string | null\n    moduleName?: NullableStringFieldUpdateOperationsInput | string | null\n    businessName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionAuthor?: NullableStringFieldUpdateOperationsInput | string | null\n    genType?: NullableStringFieldUpdateOperationsInput | string | null\n    genPath?: NullableStringFieldUpdateOperationsInput | string | null\n    options?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    tableColumns?: GenTableColumnUpdateManyWithoutTableNestedInput\n  }\n\n  export type GenTableUncheckedUpdateInput = {\n    tableId?: IntFieldUpdateOperationsInput | number\n    tableName?: NullableStringFieldUpdateOperationsInput | string | null\n    tableComment?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableName?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableFkName?: NullableStringFieldUpdateOperationsInput | string | null\n    className?: NullableStringFieldUpdateOperationsInput | string | null\n    tplCategory?: NullableStringFieldUpdateOperationsInput | string | null\n    tplWebType?: NullableStringFieldUpdateOperationsInput | string | null\n    packageName?: NullableStringFieldUpdateOperationsInput | string | null\n    moduleName?: NullableStringFieldUpdateOperationsInput | string | null\n    businessName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionAuthor?: NullableStringFieldUpdateOperationsInput | string | null\n    genType?: NullableStringFieldUpdateOperationsInput | string | null\n    genPath?: NullableStringFieldUpdateOperationsInput | string | null\n    options?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    tableColumns?: GenTableColumnUncheckedUpdateManyWithoutTableNestedInput\n  }\n\n  export type GenTableCreateManyInput = {\n    tableId?: number\n    tableName?: string | null\n    tableComment?: string | null\n    subTableName?: string | null\n    subTableFkName?: string | null\n    className?: string | null\n    tplCategory?: string | null\n    tplWebType?: string | null\n    packageName?: string | null\n    moduleName?: string | null\n    businessName?: string | null\n    functionName?: string | null\n    functionAuthor?: string | null\n    genType?: string | null\n    genPath?: string | null\n    options?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type GenTableUpdateManyMutationInput = {\n    tableName?: NullableStringFieldUpdateOperationsInput | string | null\n    tableComment?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableName?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableFkName?: NullableStringFieldUpdateOperationsInput | string | null\n    className?: NullableStringFieldUpdateOperationsInput | string | null\n    tplCategory?: NullableStringFieldUpdateOperationsInput | string | null\n    tplWebType?: NullableStringFieldUpdateOperationsInput | string | null\n    packageName?: NullableStringFieldUpdateOperationsInput | string | null\n    moduleName?: NullableStringFieldUpdateOperationsInput | string | null\n    businessName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionAuthor?: NullableStringFieldUpdateOperationsInput | string | null\n    genType?: NullableStringFieldUpdateOperationsInput | string | null\n    genPath?: NullableStringFieldUpdateOperationsInput | string | null\n    options?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type GenTableUncheckedUpdateManyInput = {\n    tableId?: IntFieldUpdateOperationsInput | number\n    tableName?: NullableStringFieldUpdateOperationsInput | string | null\n    tableComment?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableName?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableFkName?: NullableStringFieldUpdateOperationsInput | string | null\n    className?: NullableStringFieldUpdateOperationsInput | string | null\n    tplCategory?: NullableStringFieldUpdateOperationsInput | string | null\n    tplWebType?: NullableStringFieldUpdateOperationsInput | string | null\n    packageName?: NullableStringFieldUpdateOperationsInput | string | null\n    moduleName?: NullableStringFieldUpdateOperationsInput | string | null\n    businessName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionAuthor?: NullableStringFieldUpdateOperationsInput | string | null\n    genType?: NullableStringFieldUpdateOperationsInput | string | null\n    genPath?: NullableStringFieldUpdateOperationsInput | string | null\n    options?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type GenTableColumnCreateInput = {\n    columnName?: string | null\n    columnComment?: string | null\n    columnType?: string | null\n    javaType?: string | null\n    javaField?: string | null\n    isPk?: string | null\n    isIncrement?: string | null\n    isRequired?: string | null\n    isInsert?: string | null\n    isEdit?: string | null\n    isList?: string | null\n    isQuery?: string | null\n    queryType?: string | null\n    htmlType?: string | null\n    dictType?: string | null\n    sort?: number | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    table?: GenTableCreateNestedOneWithoutTableColumnsInput\n  }\n\n  export type GenTableColumnUncheckedCreateInput = {\n    columnId?: number\n    tableId?: number | null\n    columnName?: string | null\n    columnComment?: string | null\n    columnType?: string | null\n    javaType?: string | null\n    javaField?: string | null\n    isPk?: string | null\n    isIncrement?: string | null\n    isRequired?: string | null\n    isInsert?: string | null\n    isEdit?: string | null\n    isList?: string | null\n    isQuery?: string | null\n    queryType?: string | null\n    htmlType?: string | null\n    dictType?: string | null\n    sort?: number | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n  }\n\n  export type GenTableColumnUpdateInput = {\n    columnName?: NullableStringFieldUpdateOperationsInput | string | null\n    columnComment?: NullableStringFieldUpdateOperationsInput | string | null\n    columnType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaField?: NullableStringFieldUpdateOperationsInput | string | null\n    isPk?: NullableStringFieldUpdateOperationsInput | string | null\n    isIncrement?: NullableStringFieldUpdateOperationsInput | string | null\n    isRequired?: NullableStringFieldUpdateOperationsInput | string | null\n    isInsert?: NullableStringFieldUpdateOperationsInput | string | null\n    isEdit?: NullableStringFieldUpdateOperationsInput | string | null\n    isList?: NullableStringFieldUpdateOperationsInput | string | null\n    isQuery?: NullableStringFieldUpdateOperationsInput | string | null\n    queryType?: NullableStringFieldUpdateOperationsInput | string | null\n    htmlType?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    sort?: NullableIntFieldUpdateOperationsInput | number | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    table?: GenTableUpdateOneWithoutTableColumnsNestedInput\n  }\n\n  export type GenTableColumnUncheckedUpdateInput = {\n    columnId?: IntFieldUpdateOperationsInput | number\n    tableId?: NullableIntFieldUpdateOperationsInput | number | null\n    columnName?: NullableStringFieldUpdateOperationsInput | string | null\n    columnComment?: NullableStringFieldUpdateOperationsInput | string | null\n    columnType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaField?: NullableStringFieldUpdateOperationsInput | string | null\n    isPk?: NullableStringFieldUpdateOperationsInput | string | null\n    isIncrement?: NullableStringFieldUpdateOperationsInput | string | null\n    isRequired?: NullableStringFieldUpdateOperationsInput | string | null\n    isInsert?: NullableStringFieldUpdateOperationsInput | string | null\n    isEdit?: NullableStringFieldUpdateOperationsInput | string | null\n    isList?: NullableStringFieldUpdateOperationsInput | string | null\n    isQuery?: NullableStringFieldUpdateOperationsInput | string | null\n    queryType?: NullableStringFieldUpdateOperationsInput | string | null\n    htmlType?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    sort?: NullableIntFieldUpdateOperationsInput | number | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type GenTableColumnCreateManyInput = {\n    columnId?: number\n    tableId?: number | null\n    columnName?: string | null\n    columnComment?: string | null\n    columnType?: string | null\n    javaType?: string | null\n    javaField?: string | null\n    isPk?: string | null\n    isIncrement?: string | null\n    isRequired?: string | null\n    isInsert?: string | null\n    isEdit?: string | null\n    isList?: string | null\n    isQuery?: string | null\n    queryType?: string | null\n    htmlType?: string | null\n    dictType?: string | null\n    sort?: number | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n  }\n\n  export type GenTableColumnUpdateManyMutationInput = {\n    columnName?: NullableStringFieldUpdateOperationsInput | string | null\n    columnComment?: NullableStringFieldUpdateOperationsInput | string | null\n    columnType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaField?: NullableStringFieldUpdateOperationsInput | string | null\n    isPk?: NullableStringFieldUpdateOperationsInput | string | null\n    isIncrement?: NullableStringFieldUpdateOperationsInput | string | null\n    isRequired?: NullableStringFieldUpdateOperationsInput | string | null\n    isInsert?: NullableStringFieldUpdateOperationsInput | string | null\n    isEdit?: NullableStringFieldUpdateOperationsInput | string | null\n    isList?: NullableStringFieldUpdateOperationsInput | string | null\n    isQuery?: NullableStringFieldUpdateOperationsInput | string | null\n    queryType?: NullableStringFieldUpdateOperationsInput | string | null\n    htmlType?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    sort?: NullableIntFieldUpdateOperationsInput | number | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type GenTableColumnUncheckedUpdateManyInput = {\n    columnId?: IntFieldUpdateOperationsInput | number\n    tableId?: NullableIntFieldUpdateOperationsInput | number | null\n    columnName?: NullableStringFieldUpdateOperationsInput | string | null\n    columnComment?: NullableStringFieldUpdateOperationsInput | string | null\n    columnType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaField?: NullableStringFieldUpdateOperationsInput | string | null\n    isPk?: NullableStringFieldUpdateOperationsInput | string | null\n    isIncrement?: NullableStringFieldUpdateOperationsInput | string | null\n    isRequired?: NullableStringFieldUpdateOperationsInput | string | null\n    isInsert?: NullableStringFieldUpdateOperationsInput | string | null\n    isEdit?: NullableStringFieldUpdateOperationsInput | string | null\n    isList?: NullableStringFieldUpdateOperationsInput | string | null\n    isQuery?: NullableStringFieldUpdateOperationsInput | string | null\n    queryType?: NullableStringFieldUpdateOperationsInput | string | null\n    htmlType?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    sort?: NullableIntFieldUpdateOperationsInput | number | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysConfigCreateInput = {\n    configName?: string | null\n    configKey?: string | null\n    configValue?: string | null\n    configType?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysConfigUncheckedCreateInput = {\n    configId?: number\n    configName?: string | null\n    configKey?: string | null\n    configValue?: string | null\n    configType?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysConfigUpdateInput = {\n    configName?: NullableStringFieldUpdateOperationsInput | string | null\n    configKey?: NullableStringFieldUpdateOperationsInput | string | null\n    configValue?: NullableStringFieldUpdateOperationsInput | string | null\n    configType?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysConfigUncheckedUpdateInput = {\n    configId?: IntFieldUpdateOperationsInput | number\n    configName?: NullableStringFieldUpdateOperationsInput | string | null\n    configKey?: NullableStringFieldUpdateOperationsInput | string | null\n    configValue?: NullableStringFieldUpdateOperationsInput | string | null\n    configType?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysConfigCreateManyInput = {\n    configId?: number\n    configName?: string | null\n    configKey?: string | null\n    configValue?: string | null\n    configType?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysConfigUpdateManyMutationInput = {\n    configName?: NullableStringFieldUpdateOperationsInput | string | null\n    configKey?: NullableStringFieldUpdateOperationsInput | string | null\n    configValue?: NullableStringFieldUpdateOperationsInput | string | null\n    configType?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysConfigUncheckedUpdateManyInput = {\n    configId?: IntFieldUpdateOperationsInput | number\n    configName?: NullableStringFieldUpdateOperationsInput | string | null\n    configKey?: NullableStringFieldUpdateOperationsInput | string | null\n    configValue?: NullableStringFieldUpdateOperationsInput | string | null\n    configType?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDeptCreateInput = {\n    parentId?: number | null\n    ancestors?: string | null\n    deptName?: string | null\n    orderNum?: number | null\n    leader?: string | null\n    phone?: string | null\n    email?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    users?: SysUserCreateNestedManyWithoutDeptInput\n    roles?: SysRoleDeptCreateNestedManyWithoutDeptInput\n  }\n\n  export type SysDeptUncheckedCreateInput = {\n    deptId?: number\n    parentId?: number | null\n    ancestors?: string | null\n    deptName?: string | null\n    orderNum?: number | null\n    leader?: string | null\n    phone?: string | null\n    email?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    users?: SysUserUncheckedCreateNestedManyWithoutDeptInput\n    roles?: SysRoleDeptUncheckedCreateNestedManyWithoutDeptInput\n  }\n\n  export type SysDeptUpdateInput = {\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    ancestors?: NullableStringFieldUpdateOperationsInput | string | null\n    deptName?: NullableStringFieldUpdateOperationsInput | string | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    leader?: NullableStringFieldUpdateOperationsInput | string | null\n    phone?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserUpdateManyWithoutDeptNestedInput\n    roles?: SysRoleDeptUpdateManyWithoutDeptNestedInput\n  }\n\n  export type SysDeptUncheckedUpdateInput = {\n    deptId?: IntFieldUpdateOperationsInput | number\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    ancestors?: NullableStringFieldUpdateOperationsInput | string | null\n    deptName?: NullableStringFieldUpdateOperationsInput | string | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    leader?: NullableStringFieldUpdateOperationsInput | string | null\n    phone?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserUncheckedUpdateManyWithoutDeptNestedInput\n    roles?: SysRoleDeptUncheckedUpdateManyWithoutDeptNestedInput\n  }\n\n  export type SysDeptCreateManyInput = {\n    deptId?: number\n    parentId?: number | null\n    ancestors?: string | null\n    deptName?: string | null\n    orderNum?: number | null\n    leader?: string | null\n    phone?: string | null\n    email?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n  }\n\n  export type SysDeptUpdateManyMutationInput = {\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    ancestors?: NullableStringFieldUpdateOperationsInput | string | null\n    deptName?: NullableStringFieldUpdateOperationsInput | string | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    leader?: NullableStringFieldUpdateOperationsInput | string | null\n    phone?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDeptUncheckedUpdateManyInput = {\n    deptId?: IntFieldUpdateOperationsInput | number\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    ancestors?: NullableStringFieldUpdateOperationsInput | string | null\n    deptName?: NullableStringFieldUpdateOperationsInput | string | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    leader?: NullableStringFieldUpdateOperationsInput | string | null\n    phone?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDictDataCreateInput = {\n    dictSort?: number | null\n    dictLabel?: string | null\n    dictValue?: string | null\n    cssClass?: string | null\n    listClass?: string | null\n    isDefault?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    sysDictType?: SysDictTypeCreateNestedOneWithoutDictDatasInput\n  }\n\n  export type SysDictDataUncheckedCreateInput = {\n    dictCode?: number\n    dictSort?: number | null\n    dictLabel?: string | null\n    dictValue?: string | null\n    dictType?: string | null\n    cssClass?: string | null\n    listClass?: string | null\n    isDefault?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysDictDataUpdateInput = {\n    dictSort?: NullableIntFieldUpdateOperationsInput | number | null\n    dictLabel?: NullableStringFieldUpdateOperationsInput | string | null\n    dictValue?: NullableStringFieldUpdateOperationsInput | string | null\n    cssClass?: NullableStringFieldUpdateOperationsInput | string | null\n    listClass?: NullableStringFieldUpdateOperationsInput | string | null\n    isDefault?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    sysDictType?: SysDictTypeUpdateOneWithoutDictDatasNestedInput\n  }\n\n  export type SysDictDataUncheckedUpdateInput = {\n    dictCode?: IntFieldUpdateOperationsInput | number\n    dictSort?: NullableIntFieldUpdateOperationsInput | number | null\n    dictLabel?: NullableStringFieldUpdateOperationsInput | string | null\n    dictValue?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    cssClass?: NullableStringFieldUpdateOperationsInput | string | null\n    listClass?: NullableStringFieldUpdateOperationsInput | string | null\n    isDefault?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDictDataCreateManyInput = {\n    dictCode?: number\n    dictSort?: number | null\n    dictLabel?: string | null\n    dictValue?: string | null\n    dictType?: string | null\n    cssClass?: string | null\n    listClass?: string | null\n    isDefault?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysDictDataUpdateManyMutationInput = {\n    dictSort?: NullableIntFieldUpdateOperationsInput | number | null\n    dictLabel?: NullableStringFieldUpdateOperationsInput | string | null\n    dictValue?: NullableStringFieldUpdateOperationsInput | string | null\n    cssClass?: NullableStringFieldUpdateOperationsInput | string | null\n    listClass?: NullableStringFieldUpdateOperationsInput | string | null\n    isDefault?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDictDataUncheckedUpdateManyInput = {\n    dictCode?: IntFieldUpdateOperationsInput | number\n    dictSort?: NullableIntFieldUpdateOperationsInput | number | null\n    dictLabel?: NullableStringFieldUpdateOperationsInput | string | null\n    dictValue?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    cssClass?: NullableStringFieldUpdateOperationsInput | string | null\n    listClass?: NullableStringFieldUpdateOperationsInput | string | null\n    isDefault?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDictTypeCreateInput = {\n    dictName?: string | null\n    dictType?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    dictDatas?: SysDictDataCreateNestedManyWithoutSysDictTypeInput\n  }\n\n  export type SysDictTypeUncheckedCreateInput = {\n    dictId?: number\n    dictName?: string | null\n    dictType?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    dictDatas?: SysDictDataUncheckedCreateNestedManyWithoutSysDictTypeInput\n  }\n\n  export type SysDictTypeUpdateInput = {\n    dictName?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    dictDatas?: SysDictDataUpdateManyWithoutSysDictTypeNestedInput\n  }\n\n  export type SysDictTypeUncheckedUpdateInput = {\n    dictId?: IntFieldUpdateOperationsInput | number\n    dictName?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    dictDatas?: SysDictDataUncheckedUpdateManyWithoutSysDictTypeNestedInput\n  }\n\n  export type SysDictTypeCreateManyInput = {\n    dictId?: number\n    dictName?: string | null\n    dictType?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysDictTypeUpdateManyMutationInput = {\n    dictName?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDictTypeUncheckedUpdateManyInput = {\n    dictId?: IntFieldUpdateOperationsInput | number\n    dictName?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysLogininforCreateInput = {\n    userName?: string | null\n    ipaddr?: string | null\n    loginLocation?: string | null\n    browser?: string | null\n    os?: string | null\n    status?: string | null\n    msg?: string | null\n    loginTime?: string | null\n  }\n\n  export type SysLogininforUncheckedCreateInput = {\n    infoId?: number\n    userName?: string | null\n    ipaddr?: string | null\n    loginLocation?: string | null\n    browser?: string | null\n    os?: string | null\n    status?: string | null\n    msg?: string | null\n    loginTime?: string | null\n  }\n\n  export type SysLogininforUpdateInput = {\n    userName?: NullableStringFieldUpdateOperationsInput | string | null\n    ipaddr?: NullableStringFieldUpdateOperationsInput | string | null\n    loginLocation?: NullableStringFieldUpdateOperationsInput | string | null\n    browser?: NullableStringFieldUpdateOperationsInput | string | null\n    os?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    msg?: NullableStringFieldUpdateOperationsInput | string | null\n    loginTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysLogininforUncheckedUpdateInput = {\n    infoId?: IntFieldUpdateOperationsInput | number\n    userName?: NullableStringFieldUpdateOperationsInput | string | null\n    ipaddr?: NullableStringFieldUpdateOperationsInput | string | null\n    loginLocation?: NullableStringFieldUpdateOperationsInput | string | null\n    browser?: NullableStringFieldUpdateOperationsInput | string | null\n    os?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    msg?: NullableStringFieldUpdateOperationsInput | string | null\n    loginTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysLogininforCreateManyInput = {\n    infoId?: number\n    userName?: string | null\n    ipaddr?: string | null\n    loginLocation?: string | null\n    browser?: string | null\n    os?: string | null\n    status?: string | null\n    msg?: string | null\n    loginTime?: string | null\n  }\n\n  export type SysLogininforUpdateManyMutationInput = {\n    userName?: NullableStringFieldUpdateOperationsInput | string | null\n    ipaddr?: NullableStringFieldUpdateOperationsInput | string | null\n    loginLocation?: NullableStringFieldUpdateOperationsInput | string | null\n    browser?: NullableStringFieldUpdateOperationsInput | string | null\n    os?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    msg?: NullableStringFieldUpdateOperationsInput | string | null\n    loginTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysLogininforUncheckedUpdateManyInput = {\n    infoId?: IntFieldUpdateOperationsInput | number\n    userName?: NullableStringFieldUpdateOperationsInput | string | null\n    ipaddr?: NullableStringFieldUpdateOperationsInput | string | null\n    loginLocation?: NullableStringFieldUpdateOperationsInput | string | null\n    browser?: NullableStringFieldUpdateOperationsInput | string | null\n    os?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    msg?: NullableStringFieldUpdateOperationsInput | string | null\n    loginTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysMenuCreateInput = {\n    menuName: string\n    parentId?: number | null\n    orderNum?: number | null\n    path?: string | null\n    component?: string | null\n    query?: string | null\n    isFrame?: number | null\n    isCache?: number | null\n    menuType?: string | null\n    visible?: string | null\n    status?: string | null\n    perms?: string | null\n    icon?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    roles?: SysRoleMenuCreateNestedManyWithoutMenuInput\n  }\n\n  export type SysMenuUncheckedCreateInput = {\n    menuId?: number\n    menuName: string\n    parentId?: number | null\n    orderNum?: number | null\n    path?: string | null\n    component?: string | null\n    query?: string | null\n    isFrame?: number | null\n    isCache?: number | null\n    menuType?: string | null\n    visible?: string | null\n    status?: string | null\n    perms?: string | null\n    icon?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    roles?: SysRoleMenuUncheckedCreateNestedManyWithoutMenuInput\n  }\n\n  export type SysMenuUpdateInput = {\n    menuName?: StringFieldUpdateOperationsInput | string\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    path?: NullableStringFieldUpdateOperationsInput | string | null\n    component?: NullableStringFieldUpdateOperationsInput | string | null\n    query?: NullableStringFieldUpdateOperationsInput | string | null\n    isFrame?: NullableIntFieldUpdateOperationsInput | number | null\n    isCache?: NullableIntFieldUpdateOperationsInput | number | null\n    menuType?: NullableStringFieldUpdateOperationsInput | string | null\n    visible?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    perms?: NullableStringFieldUpdateOperationsInput | string | null\n    icon?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    roles?: SysRoleMenuUpdateManyWithoutMenuNestedInput\n  }\n\n  export type SysMenuUncheckedUpdateInput = {\n    menuId?: IntFieldUpdateOperationsInput | number\n    menuName?: StringFieldUpdateOperationsInput | string\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    path?: NullableStringFieldUpdateOperationsInput | string | null\n    component?: NullableStringFieldUpdateOperationsInput | string | null\n    query?: NullableStringFieldUpdateOperationsInput | string | null\n    isFrame?: NullableIntFieldUpdateOperationsInput | number | null\n    isCache?: NullableIntFieldUpdateOperationsInput | number | null\n    menuType?: NullableStringFieldUpdateOperationsInput | string | null\n    visible?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    perms?: NullableStringFieldUpdateOperationsInput | string | null\n    icon?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    roles?: SysRoleMenuUncheckedUpdateManyWithoutMenuNestedInput\n  }\n\n  export type SysMenuCreateManyInput = {\n    menuId?: number\n    menuName: string\n    parentId?: number | null\n    orderNum?: number | null\n    path?: string | null\n    component?: string | null\n    query?: string | null\n    isFrame?: number | null\n    isCache?: number | null\n    menuType?: string | null\n    visible?: string | null\n    status?: string | null\n    perms?: string | null\n    icon?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysMenuUpdateManyMutationInput = {\n    menuName?: StringFieldUpdateOperationsInput | string\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    path?: NullableStringFieldUpdateOperationsInput | string | null\n    component?: NullableStringFieldUpdateOperationsInput | string | null\n    query?: NullableStringFieldUpdateOperationsInput | string | null\n    isFrame?: NullableIntFieldUpdateOperationsInput | number | null\n    isCache?: NullableIntFieldUpdateOperationsInput | number | null\n    menuType?: NullableStringFieldUpdateOperationsInput | string | null\n    visible?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    perms?: NullableStringFieldUpdateOperationsInput | string | null\n    icon?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysMenuUncheckedUpdateManyInput = {\n    menuId?: IntFieldUpdateOperationsInput | number\n    menuName?: StringFieldUpdateOperationsInput | string\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    path?: NullableStringFieldUpdateOperationsInput | string | null\n    component?: NullableStringFieldUpdateOperationsInput | string | null\n    query?: NullableStringFieldUpdateOperationsInput | string | null\n    isFrame?: NullableIntFieldUpdateOperationsInput | number | null\n    isCache?: NullableIntFieldUpdateOperationsInput | number | null\n    menuType?: NullableStringFieldUpdateOperationsInput | string | null\n    visible?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    perms?: NullableStringFieldUpdateOperationsInput | string | null\n    icon?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysNoticeCreateInput = {\n    noticeTitle: string\n    noticeType: string\n    noticeContent?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysNoticeUncheckedCreateInput = {\n    noticeId?: number\n    noticeTitle: string\n    noticeType: string\n    noticeContent?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysNoticeUpdateInput = {\n    noticeTitle?: StringFieldUpdateOperationsInput | string\n    noticeType?: StringFieldUpdateOperationsInput | string\n    noticeContent?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysNoticeUncheckedUpdateInput = {\n    noticeId?: IntFieldUpdateOperationsInput | number\n    noticeTitle?: StringFieldUpdateOperationsInput | string\n    noticeType?: StringFieldUpdateOperationsInput | string\n    noticeContent?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysNoticeCreateManyInput = {\n    noticeId?: number\n    noticeTitle: string\n    noticeType: string\n    noticeContent?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysNoticeUpdateManyMutationInput = {\n    noticeTitle?: StringFieldUpdateOperationsInput | string\n    noticeType?: StringFieldUpdateOperationsInput | string\n    noticeContent?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysNoticeUncheckedUpdateManyInput = {\n    noticeId?: IntFieldUpdateOperationsInput | number\n    noticeTitle?: StringFieldUpdateOperationsInput | string\n    noticeType?: StringFieldUpdateOperationsInput | string\n    noticeContent?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysPostCreateInput = {\n    postCode: string\n    postName: string\n    postSort: number\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    users?: SysUserPostCreateNestedManyWithoutPostInput\n  }\n\n  export type SysPostUncheckedCreateInput = {\n    postId?: number\n    postCode: string\n    postName: string\n    postSort: number\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    users?: SysUserPostUncheckedCreateNestedManyWithoutPostInput\n  }\n\n  export type SysPostUpdateInput = {\n    postCode?: StringFieldUpdateOperationsInput | string\n    postName?: StringFieldUpdateOperationsInput | string\n    postSort?: IntFieldUpdateOperationsInput | number\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserPostUpdateManyWithoutPostNestedInput\n  }\n\n  export type SysPostUncheckedUpdateInput = {\n    postId?: IntFieldUpdateOperationsInput | number\n    postCode?: StringFieldUpdateOperationsInput | string\n    postName?: StringFieldUpdateOperationsInput | string\n    postSort?: IntFieldUpdateOperationsInput | number\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserPostUncheckedUpdateManyWithoutPostNestedInput\n  }\n\n  export type SysPostCreateManyInput = {\n    postId?: number\n    postCode: string\n    postName: string\n    postSort: number\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysPostUpdateManyMutationInput = {\n    postCode?: StringFieldUpdateOperationsInput | string\n    postName?: StringFieldUpdateOperationsInput | string\n    postSort?: IntFieldUpdateOperationsInput | number\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysPostUncheckedUpdateManyInput = {\n    postId?: IntFieldUpdateOperationsInput | number\n    postCode?: StringFieldUpdateOperationsInput | string\n    postName?: StringFieldUpdateOperationsInput | string\n    postSort?: IntFieldUpdateOperationsInput | number\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysUserPostCreateInput = {\n    user: SysUserCreateNestedOneWithoutPostsInput\n    post: SysPostCreateNestedOneWithoutUsersInput\n  }\n\n  export type SysUserPostUncheckedCreateInput = {\n    userId: number\n    postId: number\n  }\n\n  export type SysUserPostUpdateInput = {\n    user?: SysUserUpdateOneRequiredWithoutPostsNestedInput\n    post?: SysPostUpdateOneRequiredWithoutUsersNestedInput\n  }\n\n  export type SysUserPostUncheckedUpdateInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n    postId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserPostCreateManyInput = {\n    userId: number\n    postId: number\n  }\n\n  export type SysUserPostUpdateManyMutationInput = {\n\n  }\n\n  export type SysUserPostUncheckedUpdateManyInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n    postId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysRoleDeptCreateInput = {\n    role: SysRoleCreateNestedOneWithoutDeptsInput\n    dept: SysDeptCreateNestedOneWithoutRolesInput\n  }\n\n  export type SysRoleDeptUncheckedCreateInput = {\n    roleId: number\n    deptId: number\n  }\n\n  export type SysRoleDeptUpdateInput = {\n    role?: SysRoleUpdateOneRequiredWithoutDeptsNestedInput\n    dept?: SysDeptUpdateOneRequiredWithoutRolesNestedInput\n  }\n\n  export type SysRoleDeptUncheckedUpdateInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n    deptId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysRoleDeptCreateManyInput = {\n    roleId: number\n    deptId: number\n  }\n\n  export type SysRoleDeptUpdateManyMutationInput = {\n\n  }\n\n  export type SysRoleDeptUncheckedUpdateManyInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n    deptId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysRoleMenuCreateInput = {\n    menu: SysMenuCreateNestedOneWithoutRolesInput\n    role: SysRoleCreateNestedOneWithoutMenusInput\n  }\n\n  export type SysRoleMenuUncheckedCreateInput = {\n    roleId: number\n    menuId: number\n  }\n\n  export type SysRoleMenuUpdateInput = {\n    menu?: SysMenuUpdateOneRequiredWithoutRolesNestedInput\n    role?: SysRoleUpdateOneRequiredWithoutMenusNestedInput\n  }\n\n  export type SysRoleMenuUncheckedUpdateInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n    menuId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysRoleMenuCreateManyInput = {\n    roleId: number\n    menuId: number\n  }\n\n  export type SysRoleMenuUpdateManyMutationInput = {\n\n  }\n\n  export type SysRoleMenuUncheckedUpdateManyInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n    menuId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserCreateInput = {\n    userName: string\n    nickName: string\n    userType?: string | null\n    email?: string | null\n    phonenumber?: string | null\n    sex?: string | null\n    avatar?: string | null\n    password?: string | null\n    status?: string | null\n    loginIp?: string | null\n    loginDate?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    dept?: SysDeptCreateNestedOneWithoutUsersInput\n    roles?: SysUserRoleCreateNestedManyWithoutUserInput\n    posts?: SysUserPostCreateNestedManyWithoutUserInput\n  }\n\n  export type SysUserUncheckedCreateInput = {\n    userId?: number\n    deptId?: number | null\n    userName: string\n    nickName: string\n    userType?: string | null\n    email?: string | null\n    phonenumber?: string | null\n    sex?: string | null\n    avatar?: string | null\n    password?: string | null\n    status?: string | null\n    loginIp?: string | null\n    loginDate?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    roles?: SysUserRoleUncheckedCreateNestedManyWithoutUserInput\n    posts?: SysUserPostUncheckedCreateNestedManyWithoutUserInput\n  }\n\n  export type SysUserUpdateInput = {\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    dept?: SysDeptUpdateOneWithoutUsersNestedInput\n    roles?: SysUserRoleUpdateManyWithoutUserNestedInput\n    posts?: SysUserPostUpdateManyWithoutUserNestedInput\n  }\n\n  export type SysUserUncheckedUpdateInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n    deptId?: NullableIntFieldUpdateOperationsInput | number | null\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    roles?: SysUserRoleUncheckedUpdateManyWithoutUserNestedInput\n    posts?: SysUserPostUncheckedUpdateManyWithoutUserNestedInput\n  }\n\n  export type SysUserCreateManyInput = {\n    userId?: number\n    deptId?: number | null\n    userName: string\n    nickName: string\n    userType?: string | null\n    email?: string | null\n    phonenumber?: string | null\n    sex?: string | null\n    avatar?: string | null\n    password?: string | null\n    status?: string | null\n    loginIp?: string | null\n    loginDate?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysUserUpdateManyMutationInput = {\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysUserUncheckedUpdateManyInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n    deptId?: NullableIntFieldUpdateOperationsInput | number | null\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysRoleCreateInput = {\n    roleName: string\n    roleKey: string\n    roleSort: number\n    dataScope?: string | null\n    menuCheckStrictly?: number | null\n    deptCheckStrictly?: number | null\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    users?: SysUserRoleCreateNestedManyWithoutRoleInput\n    menus?: SysRoleMenuCreateNestedManyWithoutRoleInput\n    depts?: SysRoleDeptCreateNestedManyWithoutRoleInput\n  }\n\n  export type SysRoleUncheckedCreateInput = {\n    roleId?: number\n    roleName: string\n    roleKey: string\n    roleSort: number\n    dataScope?: string | null\n    menuCheckStrictly?: number | null\n    deptCheckStrictly?: number | null\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    users?: SysUserRoleUncheckedCreateNestedManyWithoutRoleInput\n    menus?: SysRoleMenuUncheckedCreateNestedManyWithoutRoleInput\n    depts?: SysRoleDeptUncheckedCreateNestedManyWithoutRoleInput\n  }\n\n  export type SysRoleUpdateInput = {\n    roleName?: StringFieldUpdateOperationsInput | string\n    roleKey?: StringFieldUpdateOperationsInput | string\n    roleSort?: IntFieldUpdateOperationsInput | number\n    dataScope?: NullableStringFieldUpdateOperationsInput | string | null\n    menuCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    deptCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserRoleUpdateManyWithoutRoleNestedInput\n    menus?: SysRoleMenuUpdateManyWithoutRoleNestedInput\n    depts?: SysRoleDeptUpdateManyWithoutRoleNestedInput\n  }\n\n  export type SysRoleUncheckedUpdateInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n    roleName?: StringFieldUpdateOperationsInput | string\n    roleKey?: StringFieldUpdateOperationsInput | string\n    roleSort?: IntFieldUpdateOperationsInput | number\n    dataScope?: NullableStringFieldUpdateOperationsInput | string | null\n    menuCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    deptCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserRoleUncheckedUpdateManyWithoutRoleNestedInput\n    menus?: SysRoleMenuUncheckedUpdateManyWithoutRoleNestedInput\n    depts?: SysRoleDeptUncheckedUpdateManyWithoutRoleNestedInput\n  }\n\n  export type SysRoleCreateManyInput = {\n    roleId?: number\n    roleName: string\n    roleKey: string\n    roleSort: number\n    dataScope?: string | null\n    menuCheckStrictly?: number | null\n    deptCheckStrictly?: number | null\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysRoleUpdateManyMutationInput = {\n    roleName?: StringFieldUpdateOperationsInput | string\n    roleKey?: StringFieldUpdateOperationsInput | string\n    roleSort?: IntFieldUpdateOperationsInput | number\n    dataScope?: NullableStringFieldUpdateOperationsInput | string | null\n    menuCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    deptCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysRoleUncheckedUpdateManyInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n    roleName?: StringFieldUpdateOperationsInput | string\n    roleKey?: StringFieldUpdateOperationsInput | string\n    roleSort?: IntFieldUpdateOperationsInput | number\n    dataScope?: NullableStringFieldUpdateOperationsInput | string | null\n    menuCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    deptCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysUserRoleCreateInput = {\n    user: SysUserCreateNestedOneWithoutRolesInput\n    role: SysRoleCreateNestedOneWithoutUsersInput\n  }\n\n  export type SysUserRoleUncheckedCreateInput = {\n    userId: number\n    roleId: number\n  }\n\n  export type SysUserRoleUpdateInput = {\n    user?: SysUserUpdateOneRequiredWithoutRolesNestedInput\n    role?: SysRoleUpdateOneRequiredWithoutUsersNestedInput\n  }\n\n  export type SysUserRoleUncheckedUpdateInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n    roleId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserRoleCreateManyInput = {\n    userId: number\n    roleId: number\n  }\n\n  export type SysUserRoleUpdateManyMutationInput = {\n\n  }\n\n  export type SysUserRoleUncheckedUpdateManyInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n    roleId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type IntFilter<$PrismaModel = never> = {\n    equals?: number | IntFieldRefInput<$PrismaModel>\n    in?: number[]\n    notIn?: number[]\n    lt?: number | IntFieldRefInput<$PrismaModel>\n    lte?: number | IntFieldRefInput<$PrismaModel>\n    gt?: number | IntFieldRefInput<$PrismaModel>\n    gte?: number | IntFieldRefInput<$PrismaModel>\n    not?: NestedIntFilter<$PrismaModel> | number\n  }\n\n  export type StringNullableFilter<$PrismaModel = never> = {\n    equals?: string | StringFieldRefInput<$PrismaModel> | null\n    in?: string[] | null\n    notIn?: string[] | null\n    lt?: string | StringFieldRefInput<$PrismaModel>\n    lte?: string | StringFieldRefInput<$PrismaModel>\n    gt?: string | StringFieldRefInput<$PrismaModel>\n    gte?: string | StringFieldRefInput<$PrismaModel>\n    contains?: string | StringFieldRefInput<$PrismaModel>\n    startsWith?: string | StringFieldRefInput<$PrismaModel>\n    endsWith?: string | StringFieldRefInput<$PrismaModel>\n    not?: NestedStringNullableFilter<$PrismaModel> | string | null\n  }\n\n  export type GenTableColumnListRelationFilter = {\n    every?: GenTableColumnWhereInput\n    some?: GenTableColumnWhereInput\n    none?: GenTableColumnWhereInput\n  }\n\n  export type SortOrderInput = {\n    sort: SortOrder\n    nulls?: NullsOrder\n  }\n\n  export type GenTableColumnOrderByRelationAggregateInput = {\n    _count?: SortOrder\n  }\n\n  export type GenTableCountOrderByAggregateInput = {\n    tableId?: SortOrder\n    tableName?: SortOrder\n    tableComment?: SortOrder\n    subTableName?: SortOrder\n    subTableFkName?: SortOrder\n    className?: SortOrder\n    tplCategory?: SortOrder\n    tplWebType?: SortOrder\n    packageName?: SortOrder\n    moduleName?: SortOrder\n    businessName?: SortOrder\n    functionName?: SortOrder\n    functionAuthor?: SortOrder\n    genType?: SortOrder\n    genPath?: SortOrder\n    options?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type GenTableAvgOrderByAggregateInput = {\n    tableId?: SortOrder\n  }\n\n  export type GenTableMaxOrderByAggregateInput = {\n    tableId?: SortOrder\n    tableName?: SortOrder\n    tableComment?: SortOrder\n    subTableName?: SortOrder\n    subTableFkName?: SortOrder\n    className?: SortOrder\n    tplCategory?: SortOrder\n    tplWebType?: SortOrder\n    packageName?: SortOrder\n    moduleName?: SortOrder\n    businessName?: SortOrder\n    functionName?: SortOrder\n    functionAuthor?: SortOrder\n    genType?: SortOrder\n    genPath?: SortOrder\n    options?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type GenTableMinOrderByAggregateInput = {\n    tableId?: SortOrder\n    tableName?: SortOrder\n    tableComment?: SortOrder\n    subTableName?: SortOrder\n    subTableFkName?: SortOrder\n    className?: SortOrder\n    tplCategory?: SortOrder\n    tplWebType?: SortOrder\n    packageName?: SortOrder\n    moduleName?: SortOrder\n    businessName?: SortOrder\n    functionName?: SortOrder\n    functionAuthor?: SortOrder\n    genType?: SortOrder\n    genPath?: SortOrder\n    options?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type GenTableSumOrderByAggregateInput = {\n    tableId?: SortOrder\n  }\n\n  export type IntWithAggregatesFilter<$PrismaModel = never> = {\n    equals?: number | IntFieldRefInput<$PrismaModel>\n    in?: number[]\n    notIn?: number[]\n    lt?: number | IntFieldRefInput<$PrismaModel>\n    lte?: number | IntFieldRefInput<$PrismaModel>\n    gt?: number | IntFieldRefInput<$PrismaModel>\n    gte?: number | IntFieldRefInput<$PrismaModel>\n    not?: NestedIntWithAggregatesFilter<$PrismaModel> | number\n    _count?: NestedIntFilter<$PrismaModel>\n    _avg?: NestedFloatFilter<$PrismaModel>\n    _sum?: NestedIntFilter<$PrismaModel>\n    _min?: NestedIntFilter<$PrismaModel>\n    _max?: NestedIntFilter<$PrismaModel>\n  }\n\n  export type StringNullableWithAggregatesFilter<$PrismaModel = never> = {\n    equals?: string | StringFieldRefInput<$PrismaModel> | null\n    in?: string[] | null\n    notIn?: string[] | null\n    lt?: string | StringFieldRefInput<$PrismaModel>\n    lte?: string | StringFieldRefInput<$PrismaModel>\n    gt?: string | StringFieldRefInput<$PrismaModel>\n    gte?: string | StringFieldRefInput<$PrismaModel>\n    contains?: string | StringFieldRefInput<$PrismaModel>\n    startsWith?: string | StringFieldRefInput<$PrismaModel>\n    endsWith?: string | StringFieldRefInput<$PrismaModel>\n    not?: NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null\n    _count?: NestedIntNullableFilter<$PrismaModel>\n    _min?: NestedStringNullableFilter<$PrismaModel>\n    _max?: NestedStringNullableFilter<$PrismaModel>\n  }\n\n  export type IntNullableFilter<$PrismaModel = never> = {\n    equals?: number | IntFieldRefInput<$PrismaModel> | null\n    in?: number[] | null\n    notIn?: number[] | null\n    lt?: number | IntFieldRefInput<$PrismaModel>\n    lte?: number | IntFieldRefInput<$PrismaModel>\n    gt?: number | IntFieldRefInput<$PrismaModel>\n    gte?: number | IntFieldRefInput<$PrismaModel>\n    not?: NestedIntNullableFilter<$PrismaModel> | number | null\n  }\n\n  export type GenTableNullableRelationFilter = {\n    is?: GenTableWhereInput | null\n    isNot?: GenTableWhereInput | null\n  }\n\n  export type GenTableColumnCountOrderByAggregateInput = {\n    columnId?: SortOrder\n    tableId?: SortOrder\n    columnName?: SortOrder\n    columnComment?: SortOrder\n    columnType?: SortOrder\n    javaType?: SortOrder\n    javaField?: SortOrder\n    isPk?: SortOrder\n    isIncrement?: SortOrder\n    isRequired?: SortOrder\n    isInsert?: SortOrder\n    isEdit?: SortOrder\n    isList?: SortOrder\n    isQuery?: SortOrder\n    queryType?: SortOrder\n    htmlType?: SortOrder\n    dictType?: SortOrder\n    sort?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n  }\n\n  export type GenTableColumnAvgOrderByAggregateInput = {\n    columnId?: SortOrder\n    tableId?: SortOrder\n    sort?: SortOrder\n  }\n\n  export type GenTableColumnMaxOrderByAggregateInput = {\n    columnId?: SortOrder\n    tableId?: SortOrder\n    columnName?: SortOrder\n    columnComment?: SortOrder\n    columnType?: SortOrder\n    javaType?: SortOrder\n    javaField?: SortOrder\n    isPk?: SortOrder\n    isIncrement?: SortOrder\n    isRequired?: SortOrder\n    isInsert?: SortOrder\n    isEdit?: SortOrder\n    isList?: SortOrder\n    isQuery?: SortOrder\n    queryType?: SortOrder\n    htmlType?: SortOrder\n    dictType?: SortOrder\n    sort?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n  }\n\n  export type GenTableColumnMinOrderByAggregateInput = {\n    columnId?: SortOrder\n    tableId?: SortOrder\n    columnName?: SortOrder\n    columnComment?: SortOrder\n    columnType?: SortOrder\n    javaType?: SortOrder\n    javaField?: SortOrder\n    isPk?: SortOrder\n    isIncrement?: SortOrder\n    isRequired?: SortOrder\n    isInsert?: SortOrder\n    isEdit?: SortOrder\n    isList?: SortOrder\n    isQuery?: SortOrder\n    queryType?: SortOrder\n    htmlType?: SortOrder\n    dictType?: SortOrder\n    sort?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n  }\n\n  export type GenTableColumnSumOrderByAggregateInput = {\n    columnId?: SortOrder\n    tableId?: SortOrder\n    sort?: SortOrder\n  }\n\n  export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {\n    equals?: number | IntFieldRefInput<$PrismaModel> | null\n    in?: number[] | null\n    notIn?: number[] | null\n    lt?: number | IntFieldRefInput<$PrismaModel>\n    lte?: number | IntFieldRefInput<$PrismaModel>\n    gt?: number | IntFieldRefInput<$PrismaModel>\n    gte?: number | IntFieldRefInput<$PrismaModel>\n    not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null\n    _count?: NestedIntNullableFilter<$PrismaModel>\n    _avg?: NestedFloatNullableFilter<$PrismaModel>\n    _sum?: NestedIntNullableFilter<$PrismaModel>\n    _min?: NestedIntNullableFilter<$PrismaModel>\n    _max?: NestedIntNullableFilter<$PrismaModel>\n  }\n\n  export type SysConfigCountOrderByAggregateInput = {\n    configId?: SortOrder\n    configName?: SortOrder\n    configKey?: SortOrder\n    configValue?: SortOrder\n    configType?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysConfigAvgOrderByAggregateInput = {\n    configId?: SortOrder\n  }\n\n  export type SysConfigMaxOrderByAggregateInput = {\n    configId?: SortOrder\n    configName?: SortOrder\n    configKey?: SortOrder\n    configValue?: SortOrder\n    configType?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysConfigMinOrderByAggregateInput = {\n    configId?: SortOrder\n    configName?: SortOrder\n    configKey?: SortOrder\n    configValue?: SortOrder\n    configType?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysConfigSumOrderByAggregateInput = {\n    configId?: SortOrder\n  }\n\n  export type SysUserListRelationFilter = {\n    every?: SysUserWhereInput\n    some?: SysUserWhereInput\n    none?: SysUserWhereInput\n  }\n\n  export type SysRoleDeptListRelationFilter = {\n    every?: SysRoleDeptWhereInput\n    some?: SysRoleDeptWhereInput\n    none?: SysRoleDeptWhereInput\n  }\n\n  export type SysUserOrderByRelationAggregateInput = {\n    _count?: SortOrder\n  }\n\n  export type SysRoleDeptOrderByRelationAggregateInput = {\n    _count?: SortOrder\n  }\n\n  export type SysDeptCountOrderByAggregateInput = {\n    deptId?: SortOrder\n    parentId?: SortOrder\n    ancestors?: SortOrder\n    deptName?: SortOrder\n    orderNum?: SortOrder\n    leader?: SortOrder\n    phone?: SortOrder\n    email?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n  }\n\n  export type SysDeptAvgOrderByAggregateInput = {\n    deptId?: SortOrder\n    parentId?: SortOrder\n    orderNum?: SortOrder\n  }\n\n  export type SysDeptMaxOrderByAggregateInput = {\n    deptId?: SortOrder\n    parentId?: SortOrder\n    ancestors?: SortOrder\n    deptName?: SortOrder\n    orderNum?: SortOrder\n    leader?: SortOrder\n    phone?: SortOrder\n    email?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n  }\n\n  export type SysDeptMinOrderByAggregateInput = {\n    deptId?: SortOrder\n    parentId?: SortOrder\n    ancestors?: SortOrder\n    deptName?: SortOrder\n    orderNum?: SortOrder\n    leader?: SortOrder\n    phone?: SortOrder\n    email?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n  }\n\n  export type SysDeptSumOrderByAggregateInput = {\n    deptId?: SortOrder\n    parentId?: SortOrder\n    orderNum?: SortOrder\n  }\n\n  export type SysDictTypeNullableRelationFilter = {\n    is?: SysDictTypeWhereInput | null\n    isNot?: SysDictTypeWhereInput | null\n  }\n\n  export type SysDictDataCountOrderByAggregateInput = {\n    dictCode?: SortOrder\n    dictSort?: SortOrder\n    dictLabel?: SortOrder\n    dictValue?: SortOrder\n    dictType?: SortOrder\n    cssClass?: SortOrder\n    listClass?: SortOrder\n    isDefault?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysDictDataAvgOrderByAggregateInput = {\n    dictCode?: SortOrder\n    dictSort?: SortOrder\n  }\n\n  export type SysDictDataMaxOrderByAggregateInput = {\n    dictCode?: SortOrder\n    dictSort?: SortOrder\n    dictLabel?: SortOrder\n    dictValue?: SortOrder\n    dictType?: SortOrder\n    cssClass?: SortOrder\n    listClass?: SortOrder\n    isDefault?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysDictDataMinOrderByAggregateInput = {\n    dictCode?: SortOrder\n    dictSort?: SortOrder\n    dictLabel?: SortOrder\n    dictValue?: SortOrder\n    dictType?: SortOrder\n    cssClass?: SortOrder\n    listClass?: SortOrder\n    isDefault?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysDictDataSumOrderByAggregateInput = {\n    dictCode?: SortOrder\n    dictSort?: SortOrder\n  }\n\n  export type SysDictDataListRelationFilter = {\n    every?: SysDictDataWhereInput\n    some?: SysDictDataWhereInput\n    none?: SysDictDataWhereInput\n  }\n\n  export type SysDictDataOrderByRelationAggregateInput = {\n    _count?: SortOrder\n  }\n\n  export type SysDictTypeCountOrderByAggregateInput = {\n    dictId?: SortOrder\n    dictName?: SortOrder\n    dictType?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysDictTypeAvgOrderByAggregateInput = {\n    dictId?: SortOrder\n  }\n\n  export type SysDictTypeMaxOrderByAggregateInput = {\n    dictId?: SortOrder\n    dictName?: SortOrder\n    dictType?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysDictTypeMinOrderByAggregateInput = {\n    dictId?: SortOrder\n    dictName?: SortOrder\n    dictType?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysDictTypeSumOrderByAggregateInput = {\n    dictId?: SortOrder\n  }\n\n  export type SysLogininforCountOrderByAggregateInput = {\n    infoId?: SortOrder\n    userName?: SortOrder\n    ipaddr?: SortOrder\n    loginLocation?: SortOrder\n    browser?: SortOrder\n    os?: SortOrder\n    status?: SortOrder\n    msg?: SortOrder\n    loginTime?: SortOrder\n  }\n\n  export type SysLogininforAvgOrderByAggregateInput = {\n    infoId?: SortOrder\n  }\n\n  export type SysLogininforMaxOrderByAggregateInput = {\n    infoId?: SortOrder\n    userName?: SortOrder\n    ipaddr?: SortOrder\n    loginLocation?: SortOrder\n    browser?: SortOrder\n    os?: SortOrder\n    status?: SortOrder\n    msg?: SortOrder\n    loginTime?: SortOrder\n  }\n\n  export type SysLogininforMinOrderByAggregateInput = {\n    infoId?: SortOrder\n    userName?: SortOrder\n    ipaddr?: SortOrder\n    loginLocation?: SortOrder\n    browser?: SortOrder\n    os?: SortOrder\n    status?: SortOrder\n    msg?: SortOrder\n    loginTime?: SortOrder\n  }\n\n  export type SysLogininforSumOrderByAggregateInput = {\n    infoId?: SortOrder\n  }\n\n  export type StringFilter<$PrismaModel = never> = {\n    equals?: string | StringFieldRefInput<$PrismaModel>\n    in?: string[]\n    notIn?: string[]\n    lt?: string | StringFieldRefInput<$PrismaModel>\n    lte?: string | StringFieldRefInput<$PrismaModel>\n    gt?: string | StringFieldRefInput<$PrismaModel>\n    gte?: string | StringFieldRefInput<$PrismaModel>\n    contains?: string | StringFieldRefInput<$PrismaModel>\n    startsWith?: string | StringFieldRefInput<$PrismaModel>\n    endsWith?: string | StringFieldRefInput<$PrismaModel>\n    not?: NestedStringFilter<$PrismaModel> | string\n  }\n\n  export type SysRoleMenuListRelationFilter = {\n    every?: SysRoleMenuWhereInput\n    some?: SysRoleMenuWhereInput\n    none?: SysRoleMenuWhereInput\n  }\n\n  export type SysRoleMenuOrderByRelationAggregateInput = {\n    _count?: SortOrder\n  }\n\n  export type SysMenuCountOrderByAggregateInput = {\n    menuId?: SortOrder\n    menuName?: SortOrder\n    parentId?: SortOrder\n    orderNum?: SortOrder\n    path?: SortOrder\n    component?: SortOrder\n    query?: SortOrder\n    isFrame?: SortOrder\n    isCache?: SortOrder\n    menuType?: SortOrder\n    visible?: SortOrder\n    status?: SortOrder\n    perms?: SortOrder\n    icon?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysMenuAvgOrderByAggregateInput = {\n    menuId?: SortOrder\n    parentId?: SortOrder\n    orderNum?: SortOrder\n    isFrame?: SortOrder\n    isCache?: SortOrder\n  }\n\n  export type SysMenuMaxOrderByAggregateInput = {\n    menuId?: SortOrder\n    menuName?: SortOrder\n    parentId?: SortOrder\n    orderNum?: SortOrder\n    path?: SortOrder\n    component?: SortOrder\n    query?: SortOrder\n    isFrame?: SortOrder\n    isCache?: SortOrder\n    menuType?: SortOrder\n    visible?: SortOrder\n    status?: SortOrder\n    perms?: SortOrder\n    icon?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysMenuMinOrderByAggregateInput = {\n    menuId?: SortOrder\n    menuName?: SortOrder\n    parentId?: SortOrder\n    orderNum?: SortOrder\n    path?: SortOrder\n    component?: SortOrder\n    query?: SortOrder\n    isFrame?: SortOrder\n    isCache?: SortOrder\n    menuType?: SortOrder\n    visible?: SortOrder\n    status?: SortOrder\n    perms?: SortOrder\n    icon?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysMenuSumOrderByAggregateInput = {\n    menuId?: SortOrder\n    parentId?: SortOrder\n    orderNum?: SortOrder\n    isFrame?: SortOrder\n    isCache?: SortOrder\n  }\n\n  export type StringWithAggregatesFilter<$PrismaModel = never> = {\n    equals?: string | StringFieldRefInput<$PrismaModel>\n    in?: string[]\n    notIn?: string[]\n    lt?: string | StringFieldRefInput<$PrismaModel>\n    lte?: string | StringFieldRefInput<$PrismaModel>\n    gt?: string | StringFieldRefInput<$PrismaModel>\n    gte?: string | StringFieldRefInput<$PrismaModel>\n    contains?: string | StringFieldRefInput<$PrismaModel>\n    startsWith?: string | StringFieldRefInput<$PrismaModel>\n    endsWith?: string | StringFieldRefInput<$PrismaModel>\n    not?: NestedStringWithAggregatesFilter<$PrismaModel> | string\n    _count?: NestedIntFilter<$PrismaModel>\n    _min?: NestedStringFilter<$PrismaModel>\n    _max?: NestedStringFilter<$PrismaModel>\n  }\n\n  export type SysNoticeCountOrderByAggregateInput = {\n    noticeId?: SortOrder\n    noticeTitle?: SortOrder\n    noticeType?: SortOrder\n    noticeContent?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysNoticeAvgOrderByAggregateInput = {\n    noticeId?: SortOrder\n  }\n\n  export type SysNoticeMaxOrderByAggregateInput = {\n    noticeId?: SortOrder\n    noticeTitle?: SortOrder\n    noticeType?: SortOrder\n    noticeContent?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysNoticeMinOrderByAggregateInput = {\n    noticeId?: SortOrder\n    noticeTitle?: SortOrder\n    noticeType?: SortOrder\n    noticeContent?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysNoticeSumOrderByAggregateInput = {\n    noticeId?: SortOrder\n  }\n\n  export type SysUserPostListRelationFilter = {\n    every?: SysUserPostWhereInput\n    some?: SysUserPostWhereInput\n    none?: SysUserPostWhereInput\n  }\n\n  export type SysUserPostOrderByRelationAggregateInput = {\n    _count?: SortOrder\n  }\n\n  export type SysPostCountOrderByAggregateInput = {\n    postId?: SortOrder\n    postCode?: SortOrder\n    postName?: SortOrder\n    postSort?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysPostAvgOrderByAggregateInput = {\n    postId?: SortOrder\n    postSort?: SortOrder\n  }\n\n  export type SysPostMaxOrderByAggregateInput = {\n    postId?: SortOrder\n    postCode?: SortOrder\n    postName?: SortOrder\n    postSort?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysPostMinOrderByAggregateInput = {\n    postId?: SortOrder\n    postCode?: SortOrder\n    postName?: SortOrder\n    postSort?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysPostSumOrderByAggregateInput = {\n    postId?: SortOrder\n    postSort?: SortOrder\n  }\n\n  export type SysUserRelationFilter = {\n    is?: SysUserWhereInput\n    isNot?: SysUserWhereInput\n  }\n\n  export type SysPostRelationFilter = {\n    is?: SysPostWhereInput\n    isNot?: SysPostWhereInput\n  }\n\n  export type SysUserPostUserIdPostIdCompoundUniqueInput = {\n    userId: number\n    postId: number\n  }\n\n  export type SysUserPostCountOrderByAggregateInput = {\n    userId?: SortOrder\n    postId?: SortOrder\n  }\n\n  export type SysUserPostAvgOrderByAggregateInput = {\n    userId?: SortOrder\n    postId?: SortOrder\n  }\n\n  export type SysUserPostMaxOrderByAggregateInput = {\n    userId?: SortOrder\n    postId?: SortOrder\n  }\n\n  export type SysUserPostMinOrderByAggregateInput = {\n    userId?: SortOrder\n    postId?: SortOrder\n  }\n\n  export type SysUserPostSumOrderByAggregateInput = {\n    userId?: SortOrder\n    postId?: SortOrder\n  }\n\n  export type SysRoleRelationFilter = {\n    is?: SysRoleWhereInput\n    isNot?: SysRoleWhereInput\n  }\n\n  export type SysDeptRelationFilter = {\n    is?: SysDeptWhereInput\n    isNot?: SysDeptWhereInput\n  }\n\n  export type SysRoleDeptRoleIdDeptIdCompoundUniqueInput = {\n    roleId: number\n    deptId: number\n  }\n\n  export type SysRoleDeptCountOrderByAggregateInput = {\n    roleId?: SortOrder\n    deptId?: SortOrder\n  }\n\n  export type SysRoleDeptAvgOrderByAggregateInput = {\n    roleId?: SortOrder\n    deptId?: SortOrder\n  }\n\n  export type SysRoleDeptMaxOrderByAggregateInput = {\n    roleId?: SortOrder\n    deptId?: SortOrder\n  }\n\n  export type SysRoleDeptMinOrderByAggregateInput = {\n    roleId?: SortOrder\n    deptId?: SortOrder\n  }\n\n  export type SysRoleDeptSumOrderByAggregateInput = {\n    roleId?: SortOrder\n    deptId?: SortOrder\n  }\n\n  export type SysMenuRelationFilter = {\n    is?: SysMenuWhereInput\n    isNot?: SysMenuWhereInput\n  }\n\n  export type SysRoleMenuRoleIdMenuIdCompoundUniqueInput = {\n    roleId: number\n    menuId: number\n  }\n\n  export type SysRoleMenuCountOrderByAggregateInput = {\n    roleId?: SortOrder\n    menuId?: SortOrder\n  }\n\n  export type SysRoleMenuAvgOrderByAggregateInput = {\n    roleId?: SortOrder\n    menuId?: SortOrder\n  }\n\n  export type SysRoleMenuMaxOrderByAggregateInput = {\n    roleId?: SortOrder\n    menuId?: SortOrder\n  }\n\n  export type SysRoleMenuMinOrderByAggregateInput = {\n    roleId?: SortOrder\n    menuId?: SortOrder\n  }\n\n  export type SysRoleMenuSumOrderByAggregateInput = {\n    roleId?: SortOrder\n    menuId?: SortOrder\n  }\n\n  export type SysDeptNullableRelationFilter = {\n    is?: SysDeptWhereInput | null\n    isNot?: SysDeptWhereInput | null\n  }\n\n  export type SysUserRoleListRelationFilter = {\n    every?: SysUserRoleWhereInput\n    some?: SysUserRoleWhereInput\n    none?: SysUserRoleWhereInput\n  }\n\n  export type SysUserRoleOrderByRelationAggregateInput = {\n    _count?: SortOrder\n  }\n\n  export type SysUserCountOrderByAggregateInput = {\n    userId?: SortOrder\n    deptId?: SortOrder\n    userName?: SortOrder\n    nickName?: SortOrder\n    userType?: SortOrder\n    email?: SortOrder\n    phonenumber?: SortOrder\n    sex?: SortOrder\n    avatar?: SortOrder\n    password?: SortOrder\n    status?: SortOrder\n    loginIp?: SortOrder\n    loginDate?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysUserAvgOrderByAggregateInput = {\n    userId?: SortOrder\n    deptId?: SortOrder\n  }\n\n  export type SysUserMaxOrderByAggregateInput = {\n    userId?: SortOrder\n    deptId?: SortOrder\n    userName?: SortOrder\n    nickName?: SortOrder\n    userType?: SortOrder\n    email?: SortOrder\n    phonenumber?: SortOrder\n    sex?: SortOrder\n    avatar?: SortOrder\n    password?: SortOrder\n    status?: SortOrder\n    loginIp?: SortOrder\n    loginDate?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysUserMinOrderByAggregateInput = {\n    userId?: SortOrder\n    deptId?: SortOrder\n    userName?: SortOrder\n    nickName?: SortOrder\n    userType?: SortOrder\n    email?: SortOrder\n    phonenumber?: SortOrder\n    sex?: SortOrder\n    avatar?: SortOrder\n    password?: SortOrder\n    status?: SortOrder\n    loginIp?: SortOrder\n    loginDate?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysUserSumOrderByAggregateInput = {\n    userId?: SortOrder\n    deptId?: SortOrder\n  }\n\n  export type SysRoleCountOrderByAggregateInput = {\n    roleId?: SortOrder\n    roleName?: SortOrder\n    roleKey?: SortOrder\n    roleSort?: SortOrder\n    dataScope?: SortOrder\n    menuCheckStrictly?: SortOrder\n    deptCheckStrictly?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysRoleAvgOrderByAggregateInput = {\n    roleId?: SortOrder\n    roleSort?: SortOrder\n    menuCheckStrictly?: SortOrder\n    deptCheckStrictly?: SortOrder\n  }\n\n  export type SysRoleMaxOrderByAggregateInput = {\n    roleId?: SortOrder\n    roleName?: SortOrder\n    roleKey?: SortOrder\n    roleSort?: SortOrder\n    dataScope?: SortOrder\n    menuCheckStrictly?: SortOrder\n    deptCheckStrictly?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysRoleMinOrderByAggregateInput = {\n    roleId?: SortOrder\n    roleName?: SortOrder\n    roleKey?: SortOrder\n    roleSort?: SortOrder\n    dataScope?: SortOrder\n    menuCheckStrictly?: SortOrder\n    deptCheckStrictly?: SortOrder\n    status?: SortOrder\n    createBy?: SortOrder\n    createTime?: SortOrder\n    updateBy?: SortOrder\n    updateTime?: SortOrder\n    remark?: SortOrder\n  }\n\n  export type SysRoleSumOrderByAggregateInput = {\n    roleId?: SortOrder\n    roleSort?: SortOrder\n    menuCheckStrictly?: SortOrder\n    deptCheckStrictly?: SortOrder\n  }\n\n  export type SysUserRoleUserIdRoleIdCompoundUniqueInput = {\n    userId: number\n    roleId: number\n  }\n\n  export type SysUserRoleCountOrderByAggregateInput = {\n    userId?: SortOrder\n    roleId?: SortOrder\n  }\n\n  export type SysUserRoleAvgOrderByAggregateInput = {\n    userId?: SortOrder\n    roleId?: SortOrder\n  }\n\n  export type SysUserRoleMaxOrderByAggregateInput = {\n    userId?: SortOrder\n    roleId?: SortOrder\n  }\n\n  export type SysUserRoleMinOrderByAggregateInput = {\n    userId?: SortOrder\n    roleId?: SortOrder\n  }\n\n  export type SysUserRoleSumOrderByAggregateInput = {\n    userId?: SortOrder\n    roleId?: SortOrder\n  }\n\n  export type GenTableColumnCreateNestedManyWithoutTableInput = {\n    create?: XOR<GenTableColumnCreateWithoutTableInput, GenTableColumnUncheckedCreateWithoutTableInput> | GenTableColumnCreateWithoutTableInput[] | GenTableColumnUncheckedCreateWithoutTableInput[]\n    connectOrCreate?: GenTableColumnCreateOrConnectWithoutTableInput | GenTableColumnCreateOrConnectWithoutTableInput[]\n    createMany?: GenTableColumnCreateManyTableInputEnvelope\n    connect?: GenTableColumnWhereUniqueInput | GenTableColumnWhereUniqueInput[]\n  }\n\n  export type GenTableColumnUncheckedCreateNestedManyWithoutTableInput = {\n    create?: XOR<GenTableColumnCreateWithoutTableInput, GenTableColumnUncheckedCreateWithoutTableInput> | GenTableColumnCreateWithoutTableInput[] | GenTableColumnUncheckedCreateWithoutTableInput[]\n    connectOrCreate?: GenTableColumnCreateOrConnectWithoutTableInput | GenTableColumnCreateOrConnectWithoutTableInput[]\n    createMany?: GenTableColumnCreateManyTableInputEnvelope\n    connect?: GenTableColumnWhereUniqueInput | GenTableColumnWhereUniqueInput[]\n  }\n\n  export type NullableStringFieldUpdateOperationsInput = {\n    set?: string | null\n  }\n\n  export type GenTableColumnUpdateManyWithoutTableNestedInput = {\n    create?: XOR<GenTableColumnCreateWithoutTableInput, GenTableColumnUncheckedCreateWithoutTableInput> | GenTableColumnCreateWithoutTableInput[] | GenTableColumnUncheckedCreateWithoutTableInput[]\n    connectOrCreate?: GenTableColumnCreateOrConnectWithoutTableInput | GenTableColumnCreateOrConnectWithoutTableInput[]\n    upsert?: GenTableColumnUpsertWithWhereUniqueWithoutTableInput | GenTableColumnUpsertWithWhereUniqueWithoutTableInput[]\n    createMany?: GenTableColumnCreateManyTableInputEnvelope\n    set?: GenTableColumnWhereUniqueInput | GenTableColumnWhereUniqueInput[]\n    disconnect?: GenTableColumnWhereUniqueInput | GenTableColumnWhereUniqueInput[]\n    delete?: GenTableColumnWhereUniqueInput | GenTableColumnWhereUniqueInput[]\n    connect?: GenTableColumnWhereUniqueInput | GenTableColumnWhereUniqueInput[]\n    update?: GenTableColumnUpdateWithWhereUniqueWithoutTableInput | GenTableColumnUpdateWithWhereUniqueWithoutTableInput[]\n    updateMany?: GenTableColumnUpdateManyWithWhereWithoutTableInput | GenTableColumnUpdateManyWithWhereWithoutTableInput[]\n    deleteMany?: GenTableColumnScalarWhereInput | GenTableColumnScalarWhereInput[]\n  }\n\n  export type IntFieldUpdateOperationsInput = {\n    set?: number\n    increment?: number\n    decrement?: number\n    multiply?: number\n    divide?: number\n  }\n\n  export type GenTableColumnUncheckedUpdateManyWithoutTableNestedInput = {\n    create?: XOR<GenTableColumnCreateWithoutTableInput, GenTableColumnUncheckedCreateWithoutTableInput> | GenTableColumnCreateWithoutTableInput[] | GenTableColumnUncheckedCreateWithoutTableInput[]\n    connectOrCreate?: GenTableColumnCreateOrConnectWithoutTableInput | GenTableColumnCreateOrConnectWithoutTableInput[]\n    upsert?: GenTableColumnUpsertWithWhereUniqueWithoutTableInput | GenTableColumnUpsertWithWhereUniqueWithoutTableInput[]\n    createMany?: GenTableColumnCreateManyTableInputEnvelope\n    set?: GenTableColumnWhereUniqueInput | GenTableColumnWhereUniqueInput[]\n    disconnect?: GenTableColumnWhereUniqueInput | GenTableColumnWhereUniqueInput[]\n    delete?: GenTableColumnWhereUniqueInput | GenTableColumnWhereUniqueInput[]\n    connect?: GenTableColumnWhereUniqueInput | GenTableColumnWhereUniqueInput[]\n    update?: GenTableColumnUpdateWithWhereUniqueWithoutTableInput | GenTableColumnUpdateWithWhereUniqueWithoutTableInput[]\n    updateMany?: GenTableColumnUpdateManyWithWhereWithoutTableInput | GenTableColumnUpdateManyWithWhereWithoutTableInput[]\n    deleteMany?: GenTableColumnScalarWhereInput | GenTableColumnScalarWhereInput[]\n  }\n\n  export type GenTableCreateNestedOneWithoutTableColumnsInput = {\n    create?: XOR<GenTableCreateWithoutTableColumnsInput, GenTableUncheckedCreateWithoutTableColumnsInput>\n    connectOrCreate?: GenTableCreateOrConnectWithoutTableColumnsInput\n    connect?: GenTableWhereUniqueInput\n  }\n\n  export type NullableIntFieldUpdateOperationsInput = {\n    set?: number | null\n    increment?: number\n    decrement?: number\n    multiply?: number\n    divide?: number\n  }\n\n  export type GenTableUpdateOneWithoutTableColumnsNestedInput = {\n    create?: XOR<GenTableCreateWithoutTableColumnsInput, GenTableUncheckedCreateWithoutTableColumnsInput>\n    connectOrCreate?: GenTableCreateOrConnectWithoutTableColumnsInput\n    upsert?: GenTableUpsertWithoutTableColumnsInput\n    disconnect?: GenTableWhereInput | boolean\n    delete?: GenTableWhereInput | boolean\n    connect?: GenTableWhereUniqueInput\n    update?: XOR<XOR<GenTableUpdateToOneWithWhereWithoutTableColumnsInput, GenTableUpdateWithoutTableColumnsInput>, GenTableUncheckedUpdateWithoutTableColumnsInput>\n  }\n\n  export type SysUserCreateNestedManyWithoutDeptInput = {\n    create?: XOR<SysUserCreateWithoutDeptInput, SysUserUncheckedCreateWithoutDeptInput> | SysUserCreateWithoutDeptInput[] | SysUserUncheckedCreateWithoutDeptInput[]\n    connectOrCreate?: SysUserCreateOrConnectWithoutDeptInput | SysUserCreateOrConnectWithoutDeptInput[]\n    createMany?: SysUserCreateManyDeptInputEnvelope\n    connect?: SysUserWhereUniqueInput | SysUserWhereUniqueInput[]\n  }\n\n  export type SysRoleDeptCreateNestedManyWithoutDeptInput = {\n    create?: XOR<SysRoleDeptCreateWithoutDeptInput, SysRoleDeptUncheckedCreateWithoutDeptInput> | SysRoleDeptCreateWithoutDeptInput[] | SysRoleDeptUncheckedCreateWithoutDeptInput[]\n    connectOrCreate?: SysRoleDeptCreateOrConnectWithoutDeptInput | SysRoleDeptCreateOrConnectWithoutDeptInput[]\n    createMany?: SysRoleDeptCreateManyDeptInputEnvelope\n    connect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n  }\n\n  export type SysUserUncheckedCreateNestedManyWithoutDeptInput = {\n    create?: XOR<SysUserCreateWithoutDeptInput, SysUserUncheckedCreateWithoutDeptInput> | SysUserCreateWithoutDeptInput[] | SysUserUncheckedCreateWithoutDeptInput[]\n    connectOrCreate?: SysUserCreateOrConnectWithoutDeptInput | SysUserCreateOrConnectWithoutDeptInput[]\n    createMany?: SysUserCreateManyDeptInputEnvelope\n    connect?: SysUserWhereUniqueInput | SysUserWhereUniqueInput[]\n  }\n\n  export type SysRoleDeptUncheckedCreateNestedManyWithoutDeptInput = {\n    create?: XOR<SysRoleDeptCreateWithoutDeptInput, SysRoleDeptUncheckedCreateWithoutDeptInput> | SysRoleDeptCreateWithoutDeptInput[] | SysRoleDeptUncheckedCreateWithoutDeptInput[]\n    connectOrCreate?: SysRoleDeptCreateOrConnectWithoutDeptInput | SysRoleDeptCreateOrConnectWithoutDeptInput[]\n    createMany?: SysRoleDeptCreateManyDeptInputEnvelope\n    connect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n  }\n\n  export type SysUserUpdateManyWithoutDeptNestedInput = {\n    create?: XOR<SysUserCreateWithoutDeptInput, SysUserUncheckedCreateWithoutDeptInput> | SysUserCreateWithoutDeptInput[] | SysUserUncheckedCreateWithoutDeptInput[]\n    connectOrCreate?: SysUserCreateOrConnectWithoutDeptInput | SysUserCreateOrConnectWithoutDeptInput[]\n    upsert?: SysUserUpsertWithWhereUniqueWithoutDeptInput | SysUserUpsertWithWhereUniqueWithoutDeptInput[]\n    createMany?: SysUserCreateManyDeptInputEnvelope\n    set?: SysUserWhereUniqueInput | SysUserWhereUniqueInput[]\n    disconnect?: SysUserWhereUniqueInput | SysUserWhereUniqueInput[]\n    delete?: SysUserWhereUniqueInput | SysUserWhereUniqueInput[]\n    connect?: SysUserWhereUniqueInput | SysUserWhereUniqueInput[]\n    update?: SysUserUpdateWithWhereUniqueWithoutDeptInput | SysUserUpdateWithWhereUniqueWithoutDeptInput[]\n    updateMany?: SysUserUpdateManyWithWhereWithoutDeptInput | SysUserUpdateManyWithWhereWithoutDeptInput[]\n    deleteMany?: SysUserScalarWhereInput | SysUserScalarWhereInput[]\n  }\n\n  export type SysRoleDeptUpdateManyWithoutDeptNestedInput = {\n    create?: XOR<SysRoleDeptCreateWithoutDeptInput, SysRoleDeptUncheckedCreateWithoutDeptInput> | SysRoleDeptCreateWithoutDeptInput[] | SysRoleDeptUncheckedCreateWithoutDeptInput[]\n    connectOrCreate?: SysRoleDeptCreateOrConnectWithoutDeptInput | SysRoleDeptCreateOrConnectWithoutDeptInput[]\n    upsert?: SysRoleDeptUpsertWithWhereUniqueWithoutDeptInput | SysRoleDeptUpsertWithWhereUniqueWithoutDeptInput[]\n    createMany?: SysRoleDeptCreateManyDeptInputEnvelope\n    set?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    disconnect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    delete?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    connect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    update?: SysRoleDeptUpdateWithWhereUniqueWithoutDeptInput | SysRoleDeptUpdateWithWhereUniqueWithoutDeptInput[]\n    updateMany?: SysRoleDeptUpdateManyWithWhereWithoutDeptInput | SysRoleDeptUpdateManyWithWhereWithoutDeptInput[]\n    deleteMany?: SysRoleDeptScalarWhereInput | SysRoleDeptScalarWhereInput[]\n  }\n\n  export type SysUserUncheckedUpdateManyWithoutDeptNestedInput = {\n    create?: XOR<SysUserCreateWithoutDeptInput, SysUserUncheckedCreateWithoutDeptInput> | SysUserCreateWithoutDeptInput[] | SysUserUncheckedCreateWithoutDeptInput[]\n    connectOrCreate?: SysUserCreateOrConnectWithoutDeptInput | SysUserCreateOrConnectWithoutDeptInput[]\n    upsert?: SysUserUpsertWithWhereUniqueWithoutDeptInput | SysUserUpsertWithWhereUniqueWithoutDeptInput[]\n    createMany?: SysUserCreateManyDeptInputEnvelope\n    set?: SysUserWhereUniqueInput | SysUserWhereUniqueInput[]\n    disconnect?: SysUserWhereUniqueInput | SysUserWhereUniqueInput[]\n    delete?: SysUserWhereUniqueInput | SysUserWhereUniqueInput[]\n    connect?: SysUserWhereUniqueInput | SysUserWhereUniqueInput[]\n    update?: SysUserUpdateWithWhereUniqueWithoutDeptInput | SysUserUpdateWithWhereUniqueWithoutDeptInput[]\n    updateMany?: SysUserUpdateManyWithWhereWithoutDeptInput | SysUserUpdateManyWithWhereWithoutDeptInput[]\n    deleteMany?: SysUserScalarWhereInput | SysUserScalarWhereInput[]\n  }\n\n  export type SysRoleDeptUncheckedUpdateManyWithoutDeptNestedInput = {\n    create?: XOR<SysRoleDeptCreateWithoutDeptInput, SysRoleDeptUncheckedCreateWithoutDeptInput> | SysRoleDeptCreateWithoutDeptInput[] | SysRoleDeptUncheckedCreateWithoutDeptInput[]\n    connectOrCreate?: SysRoleDeptCreateOrConnectWithoutDeptInput | SysRoleDeptCreateOrConnectWithoutDeptInput[]\n    upsert?: SysRoleDeptUpsertWithWhereUniqueWithoutDeptInput | SysRoleDeptUpsertWithWhereUniqueWithoutDeptInput[]\n    createMany?: SysRoleDeptCreateManyDeptInputEnvelope\n    set?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    disconnect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    delete?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    connect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    update?: SysRoleDeptUpdateWithWhereUniqueWithoutDeptInput | SysRoleDeptUpdateWithWhereUniqueWithoutDeptInput[]\n    updateMany?: SysRoleDeptUpdateManyWithWhereWithoutDeptInput | SysRoleDeptUpdateManyWithWhereWithoutDeptInput[]\n    deleteMany?: SysRoleDeptScalarWhereInput | SysRoleDeptScalarWhereInput[]\n  }\n\n  export type SysDictTypeCreateNestedOneWithoutDictDatasInput = {\n    create?: XOR<SysDictTypeCreateWithoutDictDatasInput, SysDictTypeUncheckedCreateWithoutDictDatasInput>\n    connectOrCreate?: SysDictTypeCreateOrConnectWithoutDictDatasInput\n    connect?: SysDictTypeWhereUniqueInput\n  }\n\n  export type SysDictTypeUpdateOneWithoutDictDatasNestedInput = {\n    create?: XOR<SysDictTypeCreateWithoutDictDatasInput, SysDictTypeUncheckedCreateWithoutDictDatasInput>\n    connectOrCreate?: SysDictTypeCreateOrConnectWithoutDictDatasInput\n    upsert?: SysDictTypeUpsertWithoutDictDatasInput\n    disconnect?: SysDictTypeWhereInput | boolean\n    delete?: SysDictTypeWhereInput | boolean\n    connect?: SysDictTypeWhereUniqueInput\n    update?: XOR<XOR<SysDictTypeUpdateToOneWithWhereWithoutDictDatasInput, SysDictTypeUpdateWithoutDictDatasInput>, SysDictTypeUncheckedUpdateWithoutDictDatasInput>\n  }\n\n  export type SysDictDataCreateNestedManyWithoutSysDictTypeInput = {\n    create?: XOR<SysDictDataCreateWithoutSysDictTypeInput, SysDictDataUncheckedCreateWithoutSysDictTypeInput> | SysDictDataCreateWithoutSysDictTypeInput[] | SysDictDataUncheckedCreateWithoutSysDictTypeInput[]\n    connectOrCreate?: SysDictDataCreateOrConnectWithoutSysDictTypeInput | SysDictDataCreateOrConnectWithoutSysDictTypeInput[]\n    createMany?: SysDictDataCreateManySysDictTypeInputEnvelope\n    connect?: SysDictDataWhereUniqueInput | SysDictDataWhereUniqueInput[]\n  }\n\n  export type SysDictDataUncheckedCreateNestedManyWithoutSysDictTypeInput = {\n    create?: XOR<SysDictDataCreateWithoutSysDictTypeInput, SysDictDataUncheckedCreateWithoutSysDictTypeInput> | SysDictDataCreateWithoutSysDictTypeInput[] | SysDictDataUncheckedCreateWithoutSysDictTypeInput[]\n    connectOrCreate?: SysDictDataCreateOrConnectWithoutSysDictTypeInput | SysDictDataCreateOrConnectWithoutSysDictTypeInput[]\n    createMany?: SysDictDataCreateManySysDictTypeInputEnvelope\n    connect?: SysDictDataWhereUniqueInput | SysDictDataWhereUniqueInput[]\n  }\n\n  export type SysDictDataUpdateManyWithoutSysDictTypeNestedInput = {\n    create?: XOR<SysDictDataCreateWithoutSysDictTypeInput, SysDictDataUncheckedCreateWithoutSysDictTypeInput> | SysDictDataCreateWithoutSysDictTypeInput[] | SysDictDataUncheckedCreateWithoutSysDictTypeInput[]\n    connectOrCreate?: SysDictDataCreateOrConnectWithoutSysDictTypeInput | SysDictDataCreateOrConnectWithoutSysDictTypeInput[]\n    upsert?: SysDictDataUpsertWithWhereUniqueWithoutSysDictTypeInput | SysDictDataUpsertWithWhereUniqueWithoutSysDictTypeInput[]\n    createMany?: SysDictDataCreateManySysDictTypeInputEnvelope\n    set?: SysDictDataWhereUniqueInput | SysDictDataWhereUniqueInput[]\n    disconnect?: SysDictDataWhereUniqueInput | SysDictDataWhereUniqueInput[]\n    delete?: SysDictDataWhereUniqueInput | SysDictDataWhereUniqueInput[]\n    connect?: SysDictDataWhereUniqueInput | SysDictDataWhereUniqueInput[]\n    update?: SysDictDataUpdateWithWhereUniqueWithoutSysDictTypeInput | SysDictDataUpdateWithWhereUniqueWithoutSysDictTypeInput[]\n    updateMany?: SysDictDataUpdateManyWithWhereWithoutSysDictTypeInput | SysDictDataUpdateManyWithWhereWithoutSysDictTypeInput[]\n    deleteMany?: SysDictDataScalarWhereInput | SysDictDataScalarWhereInput[]\n  }\n\n  export type SysDictDataUncheckedUpdateManyWithoutSysDictTypeNestedInput = {\n    create?: XOR<SysDictDataCreateWithoutSysDictTypeInput, SysDictDataUncheckedCreateWithoutSysDictTypeInput> | SysDictDataCreateWithoutSysDictTypeInput[] | SysDictDataUncheckedCreateWithoutSysDictTypeInput[]\n    connectOrCreate?: SysDictDataCreateOrConnectWithoutSysDictTypeInput | SysDictDataCreateOrConnectWithoutSysDictTypeInput[]\n    upsert?: SysDictDataUpsertWithWhereUniqueWithoutSysDictTypeInput | SysDictDataUpsertWithWhereUniqueWithoutSysDictTypeInput[]\n    createMany?: SysDictDataCreateManySysDictTypeInputEnvelope\n    set?: SysDictDataWhereUniqueInput | SysDictDataWhereUniqueInput[]\n    disconnect?: SysDictDataWhereUniqueInput | SysDictDataWhereUniqueInput[]\n    delete?: SysDictDataWhereUniqueInput | SysDictDataWhereUniqueInput[]\n    connect?: SysDictDataWhereUniqueInput | SysDictDataWhereUniqueInput[]\n    update?: SysDictDataUpdateWithWhereUniqueWithoutSysDictTypeInput | SysDictDataUpdateWithWhereUniqueWithoutSysDictTypeInput[]\n    updateMany?: SysDictDataUpdateManyWithWhereWithoutSysDictTypeInput | SysDictDataUpdateManyWithWhereWithoutSysDictTypeInput[]\n    deleteMany?: SysDictDataScalarWhereInput | SysDictDataScalarWhereInput[]\n  }\n\n  export type SysRoleMenuCreateNestedManyWithoutMenuInput = {\n    create?: XOR<SysRoleMenuCreateWithoutMenuInput, SysRoleMenuUncheckedCreateWithoutMenuInput> | SysRoleMenuCreateWithoutMenuInput[] | SysRoleMenuUncheckedCreateWithoutMenuInput[]\n    connectOrCreate?: SysRoleMenuCreateOrConnectWithoutMenuInput | SysRoleMenuCreateOrConnectWithoutMenuInput[]\n    createMany?: SysRoleMenuCreateManyMenuInputEnvelope\n    connect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n  }\n\n  export type SysRoleMenuUncheckedCreateNestedManyWithoutMenuInput = {\n    create?: XOR<SysRoleMenuCreateWithoutMenuInput, SysRoleMenuUncheckedCreateWithoutMenuInput> | SysRoleMenuCreateWithoutMenuInput[] | SysRoleMenuUncheckedCreateWithoutMenuInput[]\n    connectOrCreate?: SysRoleMenuCreateOrConnectWithoutMenuInput | SysRoleMenuCreateOrConnectWithoutMenuInput[]\n    createMany?: SysRoleMenuCreateManyMenuInputEnvelope\n    connect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n  }\n\n  export type StringFieldUpdateOperationsInput = {\n    set?: string\n  }\n\n  export type SysRoleMenuUpdateManyWithoutMenuNestedInput = {\n    create?: XOR<SysRoleMenuCreateWithoutMenuInput, SysRoleMenuUncheckedCreateWithoutMenuInput> | SysRoleMenuCreateWithoutMenuInput[] | SysRoleMenuUncheckedCreateWithoutMenuInput[]\n    connectOrCreate?: SysRoleMenuCreateOrConnectWithoutMenuInput | SysRoleMenuCreateOrConnectWithoutMenuInput[]\n    upsert?: SysRoleMenuUpsertWithWhereUniqueWithoutMenuInput | SysRoleMenuUpsertWithWhereUniqueWithoutMenuInput[]\n    createMany?: SysRoleMenuCreateManyMenuInputEnvelope\n    set?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    disconnect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    delete?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    connect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    update?: SysRoleMenuUpdateWithWhereUniqueWithoutMenuInput | SysRoleMenuUpdateWithWhereUniqueWithoutMenuInput[]\n    updateMany?: SysRoleMenuUpdateManyWithWhereWithoutMenuInput | SysRoleMenuUpdateManyWithWhereWithoutMenuInput[]\n    deleteMany?: SysRoleMenuScalarWhereInput | SysRoleMenuScalarWhereInput[]\n  }\n\n  export type SysRoleMenuUncheckedUpdateManyWithoutMenuNestedInput = {\n    create?: XOR<SysRoleMenuCreateWithoutMenuInput, SysRoleMenuUncheckedCreateWithoutMenuInput> | SysRoleMenuCreateWithoutMenuInput[] | SysRoleMenuUncheckedCreateWithoutMenuInput[]\n    connectOrCreate?: SysRoleMenuCreateOrConnectWithoutMenuInput | SysRoleMenuCreateOrConnectWithoutMenuInput[]\n    upsert?: SysRoleMenuUpsertWithWhereUniqueWithoutMenuInput | SysRoleMenuUpsertWithWhereUniqueWithoutMenuInput[]\n    createMany?: SysRoleMenuCreateManyMenuInputEnvelope\n    set?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    disconnect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    delete?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    connect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    update?: SysRoleMenuUpdateWithWhereUniqueWithoutMenuInput | SysRoleMenuUpdateWithWhereUniqueWithoutMenuInput[]\n    updateMany?: SysRoleMenuUpdateManyWithWhereWithoutMenuInput | SysRoleMenuUpdateManyWithWhereWithoutMenuInput[]\n    deleteMany?: SysRoleMenuScalarWhereInput | SysRoleMenuScalarWhereInput[]\n  }\n\n  export type SysUserPostCreateNestedManyWithoutPostInput = {\n    create?: XOR<SysUserPostCreateWithoutPostInput, SysUserPostUncheckedCreateWithoutPostInput> | SysUserPostCreateWithoutPostInput[] | SysUserPostUncheckedCreateWithoutPostInput[]\n    connectOrCreate?: SysUserPostCreateOrConnectWithoutPostInput | SysUserPostCreateOrConnectWithoutPostInput[]\n    createMany?: SysUserPostCreateManyPostInputEnvelope\n    connect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n  }\n\n  export type SysUserPostUncheckedCreateNestedManyWithoutPostInput = {\n    create?: XOR<SysUserPostCreateWithoutPostInput, SysUserPostUncheckedCreateWithoutPostInput> | SysUserPostCreateWithoutPostInput[] | SysUserPostUncheckedCreateWithoutPostInput[]\n    connectOrCreate?: SysUserPostCreateOrConnectWithoutPostInput | SysUserPostCreateOrConnectWithoutPostInput[]\n    createMany?: SysUserPostCreateManyPostInputEnvelope\n    connect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n  }\n\n  export type SysUserPostUpdateManyWithoutPostNestedInput = {\n    create?: XOR<SysUserPostCreateWithoutPostInput, SysUserPostUncheckedCreateWithoutPostInput> | SysUserPostCreateWithoutPostInput[] | SysUserPostUncheckedCreateWithoutPostInput[]\n    connectOrCreate?: SysUserPostCreateOrConnectWithoutPostInput | SysUserPostCreateOrConnectWithoutPostInput[]\n    upsert?: SysUserPostUpsertWithWhereUniqueWithoutPostInput | SysUserPostUpsertWithWhereUniqueWithoutPostInput[]\n    createMany?: SysUserPostCreateManyPostInputEnvelope\n    set?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    disconnect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    delete?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    connect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    update?: SysUserPostUpdateWithWhereUniqueWithoutPostInput | SysUserPostUpdateWithWhereUniqueWithoutPostInput[]\n    updateMany?: SysUserPostUpdateManyWithWhereWithoutPostInput | SysUserPostUpdateManyWithWhereWithoutPostInput[]\n    deleteMany?: SysUserPostScalarWhereInput | SysUserPostScalarWhereInput[]\n  }\n\n  export type SysUserPostUncheckedUpdateManyWithoutPostNestedInput = {\n    create?: XOR<SysUserPostCreateWithoutPostInput, SysUserPostUncheckedCreateWithoutPostInput> | SysUserPostCreateWithoutPostInput[] | SysUserPostUncheckedCreateWithoutPostInput[]\n    connectOrCreate?: SysUserPostCreateOrConnectWithoutPostInput | SysUserPostCreateOrConnectWithoutPostInput[]\n    upsert?: SysUserPostUpsertWithWhereUniqueWithoutPostInput | SysUserPostUpsertWithWhereUniqueWithoutPostInput[]\n    createMany?: SysUserPostCreateManyPostInputEnvelope\n    set?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    disconnect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    delete?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    connect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    update?: SysUserPostUpdateWithWhereUniqueWithoutPostInput | SysUserPostUpdateWithWhereUniqueWithoutPostInput[]\n    updateMany?: SysUserPostUpdateManyWithWhereWithoutPostInput | SysUserPostUpdateManyWithWhereWithoutPostInput[]\n    deleteMany?: SysUserPostScalarWhereInput | SysUserPostScalarWhereInput[]\n  }\n\n  export type SysUserCreateNestedOneWithoutPostsInput = {\n    create?: XOR<SysUserCreateWithoutPostsInput, SysUserUncheckedCreateWithoutPostsInput>\n    connectOrCreate?: SysUserCreateOrConnectWithoutPostsInput\n    connect?: SysUserWhereUniqueInput\n  }\n\n  export type SysPostCreateNestedOneWithoutUsersInput = {\n    create?: XOR<SysPostCreateWithoutUsersInput, SysPostUncheckedCreateWithoutUsersInput>\n    connectOrCreate?: SysPostCreateOrConnectWithoutUsersInput\n    connect?: SysPostWhereUniqueInput\n  }\n\n  export type SysUserUpdateOneRequiredWithoutPostsNestedInput = {\n    create?: XOR<SysUserCreateWithoutPostsInput, SysUserUncheckedCreateWithoutPostsInput>\n    connectOrCreate?: SysUserCreateOrConnectWithoutPostsInput\n    upsert?: SysUserUpsertWithoutPostsInput\n    connect?: SysUserWhereUniqueInput\n    update?: XOR<XOR<SysUserUpdateToOneWithWhereWithoutPostsInput, SysUserUpdateWithoutPostsInput>, SysUserUncheckedUpdateWithoutPostsInput>\n  }\n\n  export type SysPostUpdateOneRequiredWithoutUsersNestedInput = {\n    create?: XOR<SysPostCreateWithoutUsersInput, SysPostUncheckedCreateWithoutUsersInput>\n    connectOrCreate?: SysPostCreateOrConnectWithoutUsersInput\n    upsert?: SysPostUpsertWithoutUsersInput\n    connect?: SysPostWhereUniqueInput\n    update?: XOR<XOR<SysPostUpdateToOneWithWhereWithoutUsersInput, SysPostUpdateWithoutUsersInput>, SysPostUncheckedUpdateWithoutUsersInput>\n  }\n\n  export type SysRoleCreateNestedOneWithoutDeptsInput = {\n    create?: XOR<SysRoleCreateWithoutDeptsInput, SysRoleUncheckedCreateWithoutDeptsInput>\n    connectOrCreate?: SysRoleCreateOrConnectWithoutDeptsInput\n    connect?: SysRoleWhereUniqueInput\n  }\n\n  export type SysDeptCreateNestedOneWithoutRolesInput = {\n    create?: XOR<SysDeptCreateWithoutRolesInput, SysDeptUncheckedCreateWithoutRolesInput>\n    connectOrCreate?: SysDeptCreateOrConnectWithoutRolesInput\n    connect?: SysDeptWhereUniqueInput\n  }\n\n  export type SysRoleUpdateOneRequiredWithoutDeptsNestedInput = {\n    create?: XOR<SysRoleCreateWithoutDeptsInput, SysRoleUncheckedCreateWithoutDeptsInput>\n    connectOrCreate?: SysRoleCreateOrConnectWithoutDeptsInput\n    upsert?: SysRoleUpsertWithoutDeptsInput\n    connect?: SysRoleWhereUniqueInput\n    update?: XOR<XOR<SysRoleUpdateToOneWithWhereWithoutDeptsInput, SysRoleUpdateWithoutDeptsInput>, SysRoleUncheckedUpdateWithoutDeptsInput>\n  }\n\n  export type SysDeptUpdateOneRequiredWithoutRolesNestedInput = {\n    create?: XOR<SysDeptCreateWithoutRolesInput, SysDeptUncheckedCreateWithoutRolesInput>\n    connectOrCreate?: SysDeptCreateOrConnectWithoutRolesInput\n    upsert?: SysDeptUpsertWithoutRolesInput\n    connect?: SysDeptWhereUniqueInput\n    update?: XOR<XOR<SysDeptUpdateToOneWithWhereWithoutRolesInput, SysDeptUpdateWithoutRolesInput>, SysDeptUncheckedUpdateWithoutRolesInput>\n  }\n\n  export type SysMenuCreateNestedOneWithoutRolesInput = {\n    create?: XOR<SysMenuCreateWithoutRolesInput, SysMenuUncheckedCreateWithoutRolesInput>\n    connectOrCreate?: SysMenuCreateOrConnectWithoutRolesInput\n    connect?: SysMenuWhereUniqueInput\n  }\n\n  export type SysRoleCreateNestedOneWithoutMenusInput = {\n    create?: XOR<SysRoleCreateWithoutMenusInput, SysRoleUncheckedCreateWithoutMenusInput>\n    connectOrCreate?: SysRoleCreateOrConnectWithoutMenusInput\n    connect?: SysRoleWhereUniqueInput\n  }\n\n  export type SysMenuUpdateOneRequiredWithoutRolesNestedInput = {\n    create?: XOR<SysMenuCreateWithoutRolesInput, SysMenuUncheckedCreateWithoutRolesInput>\n    connectOrCreate?: SysMenuCreateOrConnectWithoutRolesInput\n    upsert?: SysMenuUpsertWithoutRolesInput\n    connect?: SysMenuWhereUniqueInput\n    update?: XOR<XOR<SysMenuUpdateToOneWithWhereWithoutRolesInput, SysMenuUpdateWithoutRolesInput>, SysMenuUncheckedUpdateWithoutRolesInput>\n  }\n\n  export type SysRoleUpdateOneRequiredWithoutMenusNestedInput = {\n    create?: XOR<SysRoleCreateWithoutMenusInput, SysRoleUncheckedCreateWithoutMenusInput>\n    connectOrCreate?: SysRoleCreateOrConnectWithoutMenusInput\n    upsert?: SysRoleUpsertWithoutMenusInput\n    connect?: SysRoleWhereUniqueInput\n    update?: XOR<XOR<SysRoleUpdateToOneWithWhereWithoutMenusInput, SysRoleUpdateWithoutMenusInput>, SysRoleUncheckedUpdateWithoutMenusInput>\n  }\n\n  export type SysDeptCreateNestedOneWithoutUsersInput = {\n    create?: XOR<SysDeptCreateWithoutUsersInput, SysDeptUncheckedCreateWithoutUsersInput>\n    connectOrCreate?: SysDeptCreateOrConnectWithoutUsersInput\n    connect?: SysDeptWhereUniqueInput\n  }\n\n  export type SysUserRoleCreateNestedManyWithoutUserInput = {\n    create?: XOR<SysUserRoleCreateWithoutUserInput, SysUserRoleUncheckedCreateWithoutUserInput> | SysUserRoleCreateWithoutUserInput[] | SysUserRoleUncheckedCreateWithoutUserInput[]\n    connectOrCreate?: SysUserRoleCreateOrConnectWithoutUserInput | SysUserRoleCreateOrConnectWithoutUserInput[]\n    createMany?: SysUserRoleCreateManyUserInputEnvelope\n    connect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n  }\n\n  export type SysUserPostCreateNestedManyWithoutUserInput = {\n    create?: XOR<SysUserPostCreateWithoutUserInput, SysUserPostUncheckedCreateWithoutUserInput> | SysUserPostCreateWithoutUserInput[] | SysUserPostUncheckedCreateWithoutUserInput[]\n    connectOrCreate?: SysUserPostCreateOrConnectWithoutUserInput | SysUserPostCreateOrConnectWithoutUserInput[]\n    createMany?: SysUserPostCreateManyUserInputEnvelope\n    connect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n  }\n\n  export type SysUserRoleUncheckedCreateNestedManyWithoutUserInput = {\n    create?: XOR<SysUserRoleCreateWithoutUserInput, SysUserRoleUncheckedCreateWithoutUserInput> | SysUserRoleCreateWithoutUserInput[] | SysUserRoleUncheckedCreateWithoutUserInput[]\n    connectOrCreate?: SysUserRoleCreateOrConnectWithoutUserInput | SysUserRoleCreateOrConnectWithoutUserInput[]\n    createMany?: SysUserRoleCreateManyUserInputEnvelope\n    connect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n  }\n\n  export type SysUserPostUncheckedCreateNestedManyWithoutUserInput = {\n    create?: XOR<SysUserPostCreateWithoutUserInput, SysUserPostUncheckedCreateWithoutUserInput> | SysUserPostCreateWithoutUserInput[] | SysUserPostUncheckedCreateWithoutUserInput[]\n    connectOrCreate?: SysUserPostCreateOrConnectWithoutUserInput | SysUserPostCreateOrConnectWithoutUserInput[]\n    createMany?: SysUserPostCreateManyUserInputEnvelope\n    connect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n  }\n\n  export type SysDeptUpdateOneWithoutUsersNestedInput = {\n    create?: XOR<SysDeptCreateWithoutUsersInput, SysDeptUncheckedCreateWithoutUsersInput>\n    connectOrCreate?: SysDeptCreateOrConnectWithoutUsersInput\n    upsert?: SysDeptUpsertWithoutUsersInput\n    disconnect?: SysDeptWhereInput | boolean\n    delete?: SysDeptWhereInput | boolean\n    connect?: SysDeptWhereUniqueInput\n    update?: XOR<XOR<SysDeptUpdateToOneWithWhereWithoutUsersInput, SysDeptUpdateWithoutUsersInput>, SysDeptUncheckedUpdateWithoutUsersInput>\n  }\n\n  export type SysUserRoleUpdateManyWithoutUserNestedInput = {\n    create?: XOR<SysUserRoleCreateWithoutUserInput, SysUserRoleUncheckedCreateWithoutUserInput> | SysUserRoleCreateWithoutUserInput[] | SysUserRoleUncheckedCreateWithoutUserInput[]\n    connectOrCreate?: SysUserRoleCreateOrConnectWithoutUserInput | SysUserRoleCreateOrConnectWithoutUserInput[]\n    upsert?: SysUserRoleUpsertWithWhereUniqueWithoutUserInput | SysUserRoleUpsertWithWhereUniqueWithoutUserInput[]\n    createMany?: SysUserRoleCreateManyUserInputEnvelope\n    set?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    disconnect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    delete?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    connect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    update?: SysUserRoleUpdateWithWhereUniqueWithoutUserInput | SysUserRoleUpdateWithWhereUniqueWithoutUserInput[]\n    updateMany?: SysUserRoleUpdateManyWithWhereWithoutUserInput | SysUserRoleUpdateManyWithWhereWithoutUserInput[]\n    deleteMany?: SysUserRoleScalarWhereInput | SysUserRoleScalarWhereInput[]\n  }\n\n  export type SysUserPostUpdateManyWithoutUserNestedInput = {\n    create?: XOR<SysUserPostCreateWithoutUserInput, SysUserPostUncheckedCreateWithoutUserInput> | SysUserPostCreateWithoutUserInput[] | SysUserPostUncheckedCreateWithoutUserInput[]\n    connectOrCreate?: SysUserPostCreateOrConnectWithoutUserInput | SysUserPostCreateOrConnectWithoutUserInput[]\n    upsert?: SysUserPostUpsertWithWhereUniqueWithoutUserInput | SysUserPostUpsertWithWhereUniqueWithoutUserInput[]\n    createMany?: SysUserPostCreateManyUserInputEnvelope\n    set?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    disconnect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    delete?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    connect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    update?: SysUserPostUpdateWithWhereUniqueWithoutUserInput | SysUserPostUpdateWithWhereUniqueWithoutUserInput[]\n    updateMany?: SysUserPostUpdateManyWithWhereWithoutUserInput | SysUserPostUpdateManyWithWhereWithoutUserInput[]\n    deleteMany?: SysUserPostScalarWhereInput | SysUserPostScalarWhereInput[]\n  }\n\n  export type SysUserRoleUncheckedUpdateManyWithoutUserNestedInput = {\n    create?: XOR<SysUserRoleCreateWithoutUserInput, SysUserRoleUncheckedCreateWithoutUserInput> | SysUserRoleCreateWithoutUserInput[] | SysUserRoleUncheckedCreateWithoutUserInput[]\n    connectOrCreate?: SysUserRoleCreateOrConnectWithoutUserInput | SysUserRoleCreateOrConnectWithoutUserInput[]\n    upsert?: SysUserRoleUpsertWithWhereUniqueWithoutUserInput | SysUserRoleUpsertWithWhereUniqueWithoutUserInput[]\n    createMany?: SysUserRoleCreateManyUserInputEnvelope\n    set?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    disconnect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    delete?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    connect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    update?: SysUserRoleUpdateWithWhereUniqueWithoutUserInput | SysUserRoleUpdateWithWhereUniqueWithoutUserInput[]\n    updateMany?: SysUserRoleUpdateManyWithWhereWithoutUserInput | SysUserRoleUpdateManyWithWhereWithoutUserInput[]\n    deleteMany?: SysUserRoleScalarWhereInput | SysUserRoleScalarWhereInput[]\n  }\n\n  export type SysUserPostUncheckedUpdateManyWithoutUserNestedInput = {\n    create?: XOR<SysUserPostCreateWithoutUserInput, SysUserPostUncheckedCreateWithoutUserInput> | SysUserPostCreateWithoutUserInput[] | SysUserPostUncheckedCreateWithoutUserInput[]\n    connectOrCreate?: SysUserPostCreateOrConnectWithoutUserInput | SysUserPostCreateOrConnectWithoutUserInput[]\n    upsert?: SysUserPostUpsertWithWhereUniqueWithoutUserInput | SysUserPostUpsertWithWhereUniqueWithoutUserInput[]\n    createMany?: SysUserPostCreateManyUserInputEnvelope\n    set?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    disconnect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    delete?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    connect?: SysUserPostWhereUniqueInput | SysUserPostWhereUniqueInput[]\n    update?: SysUserPostUpdateWithWhereUniqueWithoutUserInput | SysUserPostUpdateWithWhereUniqueWithoutUserInput[]\n    updateMany?: SysUserPostUpdateManyWithWhereWithoutUserInput | SysUserPostUpdateManyWithWhereWithoutUserInput[]\n    deleteMany?: SysUserPostScalarWhereInput | SysUserPostScalarWhereInput[]\n  }\n\n  export type SysUserRoleCreateNestedManyWithoutRoleInput = {\n    create?: XOR<SysUserRoleCreateWithoutRoleInput, SysUserRoleUncheckedCreateWithoutRoleInput> | SysUserRoleCreateWithoutRoleInput[] | SysUserRoleUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysUserRoleCreateOrConnectWithoutRoleInput | SysUserRoleCreateOrConnectWithoutRoleInput[]\n    createMany?: SysUserRoleCreateManyRoleInputEnvelope\n    connect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n  }\n\n  export type SysRoleMenuCreateNestedManyWithoutRoleInput = {\n    create?: XOR<SysRoleMenuCreateWithoutRoleInput, SysRoleMenuUncheckedCreateWithoutRoleInput> | SysRoleMenuCreateWithoutRoleInput[] | SysRoleMenuUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysRoleMenuCreateOrConnectWithoutRoleInput | SysRoleMenuCreateOrConnectWithoutRoleInput[]\n    createMany?: SysRoleMenuCreateManyRoleInputEnvelope\n    connect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n  }\n\n  export type SysRoleDeptCreateNestedManyWithoutRoleInput = {\n    create?: XOR<SysRoleDeptCreateWithoutRoleInput, SysRoleDeptUncheckedCreateWithoutRoleInput> | SysRoleDeptCreateWithoutRoleInput[] | SysRoleDeptUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysRoleDeptCreateOrConnectWithoutRoleInput | SysRoleDeptCreateOrConnectWithoutRoleInput[]\n    createMany?: SysRoleDeptCreateManyRoleInputEnvelope\n    connect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n  }\n\n  export type SysUserRoleUncheckedCreateNestedManyWithoutRoleInput = {\n    create?: XOR<SysUserRoleCreateWithoutRoleInput, SysUserRoleUncheckedCreateWithoutRoleInput> | SysUserRoleCreateWithoutRoleInput[] | SysUserRoleUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysUserRoleCreateOrConnectWithoutRoleInput | SysUserRoleCreateOrConnectWithoutRoleInput[]\n    createMany?: SysUserRoleCreateManyRoleInputEnvelope\n    connect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n  }\n\n  export type SysRoleMenuUncheckedCreateNestedManyWithoutRoleInput = {\n    create?: XOR<SysRoleMenuCreateWithoutRoleInput, SysRoleMenuUncheckedCreateWithoutRoleInput> | SysRoleMenuCreateWithoutRoleInput[] | SysRoleMenuUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysRoleMenuCreateOrConnectWithoutRoleInput | SysRoleMenuCreateOrConnectWithoutRoleInput[]\n    createMany?: SysRoleMenuCreateManyRoleInputEnvelope\n    connect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n  }\n\n  export type SysRoleDeptUncheckedCreateNestedManyWithoutRoleInput = {\n    create?: XOR<SysRoleDeptCreateWithoutRoleInput, SysRoleDeptUncheckedCreateWithoutRoleInput> | SysRoleDeptCreateWithoutRoleInput[] | SysRoleDeptUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysRoleDeptCreateOrConnectWithoutRoleInput | SysRoleDeptCreateOrConnectWithoutRoleInput[]\n    createMany?: SysRoleDeptCreateManyRoleInputEnvelope\n    connect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n  }\n\n  export type SysUserRoleUpdateManyWithoutRoleNestedInput = {\n    create?: XOR<SysUserRoleCreateWithoutRoleInput, SysUserRoleUncheckedCreateWithoutRoleInput> | SysUserRoleCreateWithoutRoleInput[] | SysUserRoleUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysUserRoleCreateOrConnectWithoutRoleInput | SysUserRoleCreateOrConnectWithoutRoleInput[]\n    upsert?: SysUserRoleUpsertWithWhereUniqueWithoutRoleInput | SysUserRoleUpsertWithWhereUniqueWithoutRoleInput[]\n    createMany?: SysUserRoleCreateManyRoleInputEnvelope\n    set?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    disconnect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    delete?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    connect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    update?: SysUserRoleUpdateWithWhereUniqueWithoutRoleInput | SysUserRoleUpdateWithWhereUniqueWithoutRoleInput[]\n    updateMany?: SysUserRoleUpdateManyWithWhereWithoutRoleInput | SysUserRoleUpdateManyWithWhereWithoutRoleInput[]\n    deleteMany?: SysUserRoleScalarWhereInput | SysUserRoleScalarWhereInput[]\n  }\n\n  export type SysRoleMenuUpdateManyWithoutRoleNestedInput = {\n    create?: XOR<SysRoleMenuCreateWithoutRoleInput, SysRoleMenuUncheckedCreateWithoutRoleInput> | SysRoleMenuCreateWithoutRoleInput[] | SysRoleMenuUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysRoleMenuCreateOrConnectWithoutRoleInput | SysRoleMenuCreateOrConnectWithoutRoleInput[]\n    upsert?: SysRoleMenuUpsertWithWhereUniqueWithoutRoleInput | SysRoleMenuUpsertWithWhereUniqueWithoutRoleInput[]\n    createMany?: SysRoleMenuCreateManyRoleInputEnvelope\n    set?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    disconnect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    delete?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    connect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    update?: SysRoleMenuUpdateWithWhereUniqueWithoutRoleInput | SysRoleMenuUpdateWithWhereUniqueWithoutRoleInput[]\n    updateMany?: SysRoleMenuUpdateManyWithWhereWithoutRoleInput | SysRoleMenuUpdateManyWithWhereWithoutRoleInput[]\n    deleteMany?: SysRoleMenuScalarWhereInput | SysRoleMenuScalarWhereInput[]\n  }\n\n  export type SysRoleDeptUpdateManyWithoutRoleNestedInput = {\n    create?: XOR<SysRoleDeptCreateWithoutRoleInput, SysRoleDeptUncheckedCreateWithoutRoleInput> | SysRoleDeptCreateWithoutRoleInput[] | SysRoleDeptUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysRoleDeptCreateOrConnectWithoutRoleInput | SysRoleDeptCreateOrConnectWithoutRoleInput[]\n    upsert?: SysRoleDeptUpsertWithWhereUniqueWithoutRoleInput | SysRoleDeptUpsertWithWhereUniqueWithoutRoleInput[]\n    createMany?: SysRoleDeptCreateManyRoleInputEnvelope\n    set?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    disconnect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    delete?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    connect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    update?: SysRoleDeptUpdateWithWhereUniqueWithoutRoleInput | SysRoleDeptUpdateWithWhereUniqueWithoutRoleInput[]\n    updateMany?: SysRoleDeptUpdateManyWithWhereWithoutRoleInput | SysRoleDeptUpdateManyWithWhereWithoutRoleInput[]\n    deleteMany?: SysRoleDeptScalarWhereInput | SysRoleDeptScalarWhereInput[]\n  }\n\n  export type SysUserRoleUncheckedUpdateManyWithoutRoleNestedInput = {\n    create?: XOR<SysUserRoleCreateWithoutRoleInput, SysUserRoleUncheckedCreateWithoutRoleInput> | SysUserRoleCreateWithoutRoleInput[] | SysUserRoleUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysUserRoleCreateOrConnectWithoutRoleInput | SysUserRoleCreateOrConnectWithoutRoleInput[]\n    upsert?: SysUserRoleUpsertWithWhereUniqueWithoutRoleInput | SysUserRoleUpsertWithWhereUniqueWithoutRoleInput[]\n    createMany?: SysUserRoleCreateManyRoleInputEnvelope\n    set?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    disconnect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    delete?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    connect?: SysUserRoleWhereUniqueInput | SysUserRoleWhereUniqueInput[]\n    update?: SysUserRoleUpdateWithWhereUniqueWithoutRoleInput | SysUserRoleUpdateWithWhereUniqueWithoutRoleInput[]\n    updateMany?: SysUserRoleUpdateManyWithWhereWithoutRoleInput | SysUserRoleUpdateManyWithWhereWithoutRoleInput[]\n    deleteMany?: SysUserRoleScalarWhereInput | SysUserRoleScalarWhereInput[]\n  }\n\n  export type SysRoleMenuUncheckedUpdateManyWithoutRoleNestedInput = {\n    create?: XOR<SysRoleMenuCreateWithoutRoleInput, SysRoleMenuUncheckedCreateWithoutRoleInput> | SysRoleMenuCreateWithoutRoleInput[] | SysRoleMenuUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysRoleMenuCreateOrConnectWithoutRoleInput | SysRoleMenuCreateOrConnectWithoutRoleInput[]\n    upsert?: SysRoleMenuUpsertWithWhereUniqueWithoutRoleInput | SysRoleMenuUpsertWithWhereUniqueWithoutRoleInput[]\n    createMany?: SysRoleMenuCreateManyRoleInputEnvelope\n    set?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    disconnect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    delete?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    connect?: SysRoleMenuWhereUniqueInput | SysRoleMenuWhereUniqueInput[]\n    update?: SysRoleMenuUpdateWithWhereUniqueWithoutRoleInput | SysRoleMenuUpdateWithWhereUniqueWithoutRoleInput[]\n    updateMany?: SysRoleMenuUpdateManyWithWhereWithoutRoleInput | SysRoleMenuUpdateManyWithWhereWithoutRoleInput[]\n    deleteMany?: SysRoleMenuScalarWhereInput | SysRoleMenuScalarWhereInput[]\n  }\n\n  export type SysRoleDeptUncheckedUpdateManyWithoutRoleNestedInput = {\n    create?: XOR<SysRoleDeptCreateWithoutRoleInput, SysRoleDeptUncheckedCreateWithoutRoleInput> | SysRoleDeptCreateWithoutRoleInput[] | SysRoleDeptUncheckedCreateWithoutRoleInput[]\n    connectOrCreate?: SysRoleDeptCreateOrConnectWithoutRoleInput | SysRoleDeptCreateOrConnectWithoutRoleInput[]\n    upsert?: SysRoleDeptUpsertWithWhereUniqueWithoutRoleInput | SysRoleDeptUpsertWithWhereUniqueWithoutRoleInput[]\n    createMany?: SysRoleDeptCreateManyRoleInputEnvelope\n    set?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    disconnect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    delete?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    connect?: SysRoleDeptWhereUniqueInput | SysRoleDeptWhereUniqueInput[]\n    update?: SysRoleDeptUpdateWithWhereUniqueWithoutRoleInput | SysRoleDeptUpdateWithWhereUniqueWithoutRoleInput[]\n    updateMany?: SysRoleDeptUpdateManyWithWhereWithoutRoleInput | SysRoleDeptUpdateManyWithWhereWithoutRoleInput[]\n    deleteMany?: SysRoleDeptScalarWhereInput | SysRoleDeptScalarWhereInput[]\n  }\n\n  export type SysUserCreateNestedOneWithoutRolesInput = {\n    create?: XOR<SysUserCreateWithoutRolesInput, SysUserUncheckedCreateWithoutRolesInput>\n    connectOrCreate?: SysUserCreateOrConnectWithoutRolesInput\n    connect?: SysUserWhereUniqueInput\n  }\n\n  export type SysRoleCreateNestedOneWithoutUsersInput = {\n    create?: XOR<SysRoleCreateWithoutUsersInput, SysRoleUncheckedCreateWithoutUsersInput>\n    connectOrCreate?: SysRoleCreateOrConnectWithoutUsersInput\n    connect?: SysRoleWhereUniqueInput\n  }\n\n  export type SysUserUpdateOneRequiredWithoutRolesNestedInput = {\n    create?: XOR<SysUserCreateWithoutRolesInput, SysUserUncheckedCreateWithoutRolesInput>\n    connectOrCreate?: SysUserCreateOrConnectWithoutRolesInput\n    upsert?: SysUserUpsertWithoutRolesInput\n    connect?: SysUserWhereUniqueInput\n    update?: XOR<XOR<SysUserUpdateToOneWithWhereWithoutRolesInput, SysUserUpdateWithoutRolesInput>, SysUserUncheckedUpdateWithoutRolesInput>\n  }\n\n  export type SysRoleUpdateOneRequiredWithoutUsersNestedInput = {\n    create?: XOR<SysRoleCreateWithoutUsersInput, SysRoleUncheckedCreateWithoutUsersInput>\n    connectOrCreate?: SysRoleCreateOrConnectWithoutUsersInput\n    upsert?: SysRoleUpsertWithoutUsersInput\n    connect?: SysRoleWhereUniqueInput\n    update?: XOR<XOR<SysRoleUpdateToOneWithWhereWithoutUsersInput, SysRoleUpdateWithoutUsersInput>, SysRoleUncheckedUpdateWithoutUsersInput>\n  }\n\n  export type NestedIntFilter<$PrismaModel = never> = {\n    equals?: number | IntFieldRefInput<$PrismaModel>\n    in?: number[]\n    notIn?: number[]\n    lt?: number | IntFieldRefInput<$PrismaModel>\n    lte?: number | IntFieldRefInput<$PrismaModel>\n    gt?: number | IntFieldRefInput<$PrismaModel>\n    gte?: number | IntFieldRefInput<$PrismaModel>\n    not?: NestedIntFilter<$PrismaModel> | number\n  }\n\n  export type NestedStringNullableFilter<$PrismaModel = never> = {\n    equals?: string | StringFieldRefInput<$PrismaModel> | null\n    in?: string[] | null\n    notIn?: string[] | null\n    lt?: string | StringFieldRefInput<$PrismaModel>\n    lte?: string | StringFieldRefInput<$PrismaModel>\n    gt?: string | StringFieldRefInput<$PrismaModel>\n    gte?: string | StringFieldRefInput<$PrismaModel>\n    contains?: string | StringFieldRefInput<$PrismaModel>\n    startsWith?: string | StringFieldRefInput<$PrismaModel>\n    endsWith?: string | StringFieldRefInput<$PrismaModel>\n    not?: NestedStringNullableFilter<$PrismaModel> | string | null\n  }\n\n  export type NestedIntWithAggregatesFilter<$PrismaModel = never> = {\n    equals?: number | IntFieldRefInput<$PrismaModel>\n    in?: number[]\n    notIn?: number[]\n    lt?: number | IntFieldRefInput<$PrismaModel>\n    lte?: number | IntFieldRefInput<$PrismaModel>\n    gt?: number | IntFieldRefInput<$PrismaModel>\n    gte?: number | IntFieldRefInput<$PrismaModel>\n    not?: NestedIntWithAggregatesFilter<$PrismaModel> | number\n    _count?: NestedIntFilter<$PrismaModel>\n    _avg?: NestedFloatFilter<$PrismaModel>\n    _sum?: NestedIntFilter<$PrismaModel>\n    _min?: NestedIntFilter<$PrismaModel>\n    _max?: NestedIntFilter<$PrismaModel>\n  }\n\n  export type NestedFloatFilter<$PrismaModel = never> = {\n    equals?: number | FloatFieldRefInput<$PrismaModel>\n    in?: number[]\n    notIn?: number[]\n    lt?: number | FloatFieldRefInput<$PrismaModel>\n    lte?: number | FloatFieldRefInput<$PrismaModel>\n    gt?: number | FloatFieldRefInput<$PrismaModel>\n    gte?: number | FloatFieldRefInput<$PrismaModel>\n    not?: NestedFloatFilter<$PrismaModel> | number\n  }\n\n  export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = {\n    equals?: string | StringFieldRefInput<$PrismaModel> | null\n    in?: string[] | null\n    notIn?: string[] | null\n    lt?: string | StringFieldRefInput<$PrismaModel>\n    lte?: string | StringFieldRefInput<$PrismaModel>\n    gt?: string | StringFieldRefInput<$PrismaModel>\n    gte?: string | StringFieldRefInput<$PrismaModel>\n    contains?: string | StringFieldRefInput<$PrismaModel>\n    startsWith?: string | StringFieldRefInput<$PrismaModel>\n    endsWith?: string | StringFieldRefInput<$PrismaModel>\n    not?: NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null\n    _count?: NestedIntNullableFilter<$PrismaModel>\n    _min?: NestedStringNullableFilter<$PrismaModel>\n    _max?: NestedStringNullableFilter<$PrismaModel>\n  }\n\n  export type NestedIntNullableFilter<$PrismaModel = never> = {\n    equals?: number | IntFieldRefInput<$PrismaModel> | null\n    in?: number[] | null\n    notIn?: number[] | null\n    lt?: number | IntFieldRefInput<$PrismaModel>\n    lte?: number | IntFieldRefInput<$PrismaModel>\n    gt?: number | IntFieldRefInput<$PrismaModel>\n    gte?: number | IntFieldRefInput<$PrismaModel>\n    not?: NestedIntNullableFilter<$PrismaModel> | number | null\n  }\n\n  export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = {\n    equals?: number | IntFieldRefInput<$PrismaModel> | null\n    in?: number[] | null\n    notIn?: number[] | null\n    lt?: number | IntFieldRefInput<$PrismaModel>\n    lte?: number | IntFieldRefInput<$PrismaModel>\n    gt?: number | IntFieldRefInput<$PrismaModel>\n    gte?: number | IntFieldRefInput<$PrismaModel>\n    not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null\n    _count?: NestedIntNullableFilter<$PrismaModel>\n    _avg?: NestedFloatNullableFilter<$PrismaModel>\n    _sum?: NestedIntNullableFilter<$PrismaModel>\n    _min?: NestedIntNullableFilter<$PrismaModel>\n    _max?: NestedIntNullableFilter<$PrismaModel>\n  }\n\n  export type NestedFloatNullableFilter<$PrismaModel = never> = {\n    equals?: number | FloatFieldRefInput<$PrismaModel> | null\n    in?: number[] | null\n    notIn?: number[] | null\n    lt?: number | FloatFieldRefInput<$PrismaModel>\n    lte?: number | FloatFieldRefInput<$PrismaModel>\n    gt?: number | FloatFieldRefInput<$PrismaModel>\n    gte?: number | FloatFieldRefInput<$PrismaModel>\n    not?: NestedFloatNullableFilter<$PrismaModel> | number | null\n  }\n\n  export type NestedStringFilter<$PrismaModel = never> = {\n    equals?: string | StringFieldRefInput<$PrismaModel>\n    in?: string[]\n    notIn?: string[]\n    lt?: string | StringFieldRefInput<$PrismaModel>\n    lte?: string | StringFieldRefInput<$PrismaModel>\n    gt?: string | StringFieldRefInput<$PrismaModel>\n    gte?: string | StringFieldRefInput<$PrismaModel>\n    contains?: string | StringFieldRefInput<$PrismaModel>\n    startsWith?: string | StringFieldRefInput<$PrismaModel>\n    endsWith?: string | StringFieldRefInput<$PrismaModel>\n    not?: NestedStringFilter<$PrismaModel> | string\n  }\n\n  export type NestedStringWithAggregatesFilter<$PrismaModel = never> = {\n    equals?: string | StringFieldRefInput<$PrismaModel>\n    in?: string[]\n    notIn?: string[]\n    lt?: string | StringFieldRefInput<$PrismaModel>\n    lte?: string | StringFieldRefInput<$PrismaModel>\n    gt?: string | StringFieldRefInput<$PrismaModel>\n    gte?: string | StringFieldRefInput<$PrismaModel>\n    contains?: string | StringFieldRefInput<$PrismaModel>\n    startsWith?: string | StringFieldRefInput<$PrismaModel>\n    endsWith?: string | StringFieldRefInput<$PrismaModel>\n    not?: NestedStringWithAggregatesFilter<$PrismaModel> | string\n    _count?: NestedIntFilter<$PrismaModel>\n    _min?: NestedStringFilter<$PrismaModel>\n    _max?: NestedStringFilter<$PrismaModel>\n  }\n\n  export type GenTableColumnCreateWithoutTableInput = {\n    columnName?: string | null\n    columnComment?: string | null\n    columnType?: string | null\n    javaType?: string | null\n    javaField?: string | null\n    isPk?: string | null\n    isIncrement?: string | null\n    isRequired?: string | null\n    isInsert?: string | null\n    isEdit?: string | null\n    isList?: string | null\n    isQuery?: string | null\n    queryType?: string | null\n    htmlType?: string | null\n    dictType?: string | null\n    sort?: number | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n  }\n\n  export type GenTableColumnUncheckedCreateWithoutTableInput = {\n    columnId?: number\n    columnName?: string | null\n    columnComment?: string | null\n    columnType?: string | null\n    javaType?: string | null\n    javaField?: string | null\n    isPk?: string | null\n    isIncrement?: string | null\n    isRequired?: string | null\n    isInsert?: string | null\n    isEdit?: string | null\n    isList?: string | null\n    isQuery?: string | null\n    queryType?: string | null\n    htmlType?: string | null\n    dictType?: string | null\n    sort?: number | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n  }\n\n  export type GenTableColumnCreateOrConnectWithoutTableInput = {\n    where: GenTableColumnWhereUniqueInput\n    create: XOR<GenTableColumnCreateWithoutTableInput, GenTableColumnUncheckedCreateWithoutTableInput>\n  }\n\n  export type GenTableColumnCreateManyTableInputEnvelope = {\n    data: GenTableColumnCreateManyTableInput | GenTableColumnCreateManyTableInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type GenTableColumnUpsertWithWhereUniqueWithoutTableInput = {\n    where: GenTableColumnWhereUniqueInput\n    update: XOR<GenTableColumnUpdateWithoutTableInput, GenTableColumnUncheckedUpdateWithoutTableInput>\n    create: XOR<GenTableColumnCreateWithoutTableInput, GenTableColumnUncheckedCreateWithoutTableInput>\n  }\n\n  export type GenTableColumnUpdateWithWhereUniqueWithoutTableInput = {\n    where: GenTableColumnWhereUniqueInput\n    data: XOR<GenTableColumnUpdateWithoutTableInput, GenTableColumnUncheckedUpdateWithoutTableInput>\n  }\n\n  export type GenTableColumnUpdateManyWithWhereWithoutTableInput = {\n    where: GenTableColumnScalarWhereInput\n    data: XOR<GenTableColumnUpdateManyMutationInput, GenTableColumnUncheckedUpdateManyWithoutTableInput>\n  }\n\n  export type GenTableColumnScalarWhereInput = {\n    AND?: GenTableColumnScalarWhereInput | GenTableColumnScalarWhereInput[]\n    OR?: GenTableColumnScalarWhereInput[]\n    NOT?: GenTableColumnScalarWhereInput | GenTableColumnScalarWhereInput[]\n    columnId?: IntFilter<\"GenTableColumn\"> | number\n    tableId?: IntNullableFilter<\"GenTableColumn\"> | number | null\n    columnName?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    columnComment?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    columnType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    javaType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    javaField?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isPk?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isIncrement?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isRequired?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isInsert?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isEdit?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isList?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    isQuery?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    queryType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    htmlType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    dictType?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    sort?: IntNullableFilter<\"GenTableColumn\"> | number | null\n    createBy?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    createTime?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    updateBy?: StringNullableFilter<\"GenTableColumn\"> | string | null\n    updateTime?: StringNullableFilter<\"GenTableColumn\"> | string | null\n  }\n\n  export type GenTableCreateWithoutTableColumnsInput = {\n    tableName?: string | null\n    tableComment?: string | null\n    subTableName?: string | null\n    subTableFkName?: string | null\n    className?: string | null\n    tplCategory?: string | null\n    tplWebType?: string | null\n    packageName?: string | null\n    moduleName?: string | null\n    businessName?: string | null\n    functionName?: string | null\n    functionAuthor?: string | null\n    genType?: string | null\n    genPath?: string | null\n    options?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type GenTableUncheckedCreateWithoutTableColumnsInput = {\n    tableId?: number\n    tableName?: string | null\n    tableComment?: string | null\n    subTableName?: string | null\n    subTableFkName?: string | null\n    className?: string | null\n    tplCategory?: string | null\n    tplWebType?: string | null\n    packageName?: string | null\n    moduleName?: string | null\n    businessName?: string | null\n    functionName?: string | null\n    functionAuthor?: string | null\n    genType?: string | null\n    genPath?: string | null\n    options?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type GenTableCreateOrConnectWithoutTableColumnsInput = {\n    where: GenTableWhereUniqueInput\n    create: XOR<GenTableCreateWithoutTableColumnsInput, GenTableUncheckedCreateWithoutTableColumnsInput>\n  }\n\n  export type GenTableUpsertWithoutTableColumnsInput = {\n    update: XOR<GenTableUpdateWithoutTableColumnsInput, GenTableUncheckedUpdateWithoutTableColumnsInput>\n    create: XOR<GenTableCreateWithoutTableColumnsInput, GenTableUncheckedCreateWithoutTableColumnsInput>\n    where?: GenTableWhereInput\n  }\n\n  export type GenTableUpdateToOneWithWhereWithoutTableColumnsInput = {\n    where?: GenTableWhereInput\n    data: XOR<GenTableUpdateWithoutTableColumnsInput, GenTableUncheckedUpdateWithoutTableColumnsInput>\n  }\n\n  export type GenTableUpdateWithoutTableColumnsInput = {\n    tableName?: NullableStringFieldUpdateOperationsInput | string | null\n    tableComment?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableName?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableFkName?: NullableStringFieldUpdateOperationsInput | string | null\n    className?: NullableStringFieldUpdateOperationsInput | string | null\n    tplCategory?: NullableStringFieldUpdateOperationsInput | string | null\n    tplWebType?: NullableStringFieldUpdateOperationsInput | string | null\n    packageName?: NullableStringFieldUpdateOperationsInput | string | null\n    moduleName?: NullableStringFieldUpdateOperationsInput | string | null\n    businessName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionAuthor?: NullableStringFieldUpdateOperationsInput | string | null\n    genType?: NullableStringFieldUpdateOperationsInput | string | null\n    genPath?: NullableStringFieldUpdateOperationsInput | string | null\n    options?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type GenTableUncheckedUpdateWithoutTableColumnsInput = {\n    tableId?: IntFieldUpdateOperationsInput | number\n    tableName?: NullableStringFieldUpdateOperationsInput | string | null\n    tableComment?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableName?: NullableStringFieldUpdateOperationsInput | string | null\n    subTableFkName?: NullableStringFieldUpdateOperationsInput | string | null\n    className?: NullableStringFieldUpdateOperationsInput | string | null\n    tplCategory?: NullableStringFieldUpdateOperationsInput | string | null\n    tplWebType?: NullableStringFieldUpdateOperationsInput | string | null\n    packageName?: NullableStringFieldUpdateOperationsInput | string | null\n    moduleName?: NullableStringFieldUpdateOperationsInput | string | null\n    businessName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionName?: NullableStringFieldUpdateOperationsInput | string | null\n    functionAuthor?: NullableStringFieldUpdateOperationsInput | string | null\n    genType?: NullableStringFieldUpdateOperationsInput | string | null\n    genPath?: NullableStringFieldUpdateOperationsInput | string | null\n    options?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysUserCreateWithoutDeptInput = {\n    userName: string\n    nickName: string\n    userType?: string | null\n    email?: string | null\n    phonenumber?: string | null\n    sex?: string | null\n    avatar?: string | null\n    password?: string | null\n    status?: string | null\n    loginIp?: string | null\n    loginDate?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    roles?: SysUserRoleCreateNestedManyWithoutUserInput\n    posts?: SysUserPostCreateNestedManyWithoutUserInput\n  }\n\n  export type SysUserUncheckedCreateWithoutDeptInput = {\n    userId?: number\n    userName: string\n    nickName: string\n    userType?: string | null\n    email?: string | null\n    phonenumber?: string | null\n    sex?: string | null\n    avatar?: string | null\n    password?: string | null\n    status?: string | null\n    loginIp?: string | null\n    loginDate?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    roles?: SysUserRoleUncheckedCreateNestedManyWithoutUserInput\n    posts?: SysUserPostUncheckedCreateNestedManyWithoutUserInput\n  }\n\n  export type SysUserCreateOrConnectWithoutDeptInput = {\n    where: SysUserWhereUniqueInput\n    create: XOR<SysUserCreateWithoutDeptInput, SysUserUncheckedCreateWithoutDeptInput>\n  }\n\n  export type SysUserCreateManyDeptInputEnvelope = {\n    data: SysUserCreateManyDeptInput | SysUserCreateManyDeptInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type SysRoleDeptCreateWithoutDeptInput = {\n    role: SysRoleCreateNestedOneWithoutDeptsInput\n  }\n\n  export type SysRoleDeptUncheckedCreateWithoutDeptInput = {\n    roleId: number\n  }\n\n  export type SysRoleDeptCreateOrConnectWithoutDeptInput = {\n    where: SysRoleDeptWhereUniqueInput\n    create: XOR<SysRoleDeptCreateWithoutDeptInput, SysRoleDeptUncheckedCreateWithoutDeptInput>\n  }\n\n  export type SysRoleDeptCreateManyDeptInputEnvelope = {\n    data: SysRoleDeptCreateManyDeptInput | SysRoleDeptCreateManyDeptInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type SysUserUpsertWithWhereUniqueWithoutDeptInput = {\n    where: SysUserWhereUniqueInput\n    update: XOR<SysUserUpdateWithoutDeptInput, SysUserUncheckedUpdateWithoutDeptInput>\n    create: XOR<SysUserCreateWithoutDeptInput, SysUserUncheckedCreateWithoutDeptInput>\n  }\n\n  export type SysUserUpdateWithWhereUniqueWithoutDeptInput = {\n    where: SysUserWhereUniqueInput\n    data: XOR<SysUserUpdateWithoutDeptInput, SysUserUncheckedUpdateWithoutDeptInput>\n  }\n\n  export type SysUserUpdateManyWithWhereWithoutDeptInput = {\n    where: SysUserScalarWhereInput\n    data: XOR<SysUserUpdateManyMutationInput, SysUserUncheckedUpdateManyWithoutDeptInput>\n  }\n\n  export type SysUserScalarWhereInput = {\n    AND?: SysUserScalarWhereInput | SysUserScalarWhereInput[]\n    OR?: SysUserScalarWhereInput[]\n    NOT?: SysUserScalarWhereInput | SysUserScalarWhereInput[]\n    userId?: IntFilter<\"SysUser\"> | number\n    deptId?: IntNullableFilter<\"SysUser\"> | number | null\n    userName?: StringFilter<\"SysUser\"> | string\n    nickName?: StringFilter<\"SysUser\"> | string\n    userType?: StringNullableFilter<\"SysUser\"> | string | null\n    email?: StringNullableFilter<\"SysUser\"> | string | null\n    phonenumber?: StringNullableFilter<\"SysUser\"> | string | null\n    sex?: StringNullableFilter<\"SysUser\"> | string | null\n    avatar?: StringNullableFilter<\"SysUser\"> | string | null\n    password?: StringNullableFilter<\"SysUser\"> | string | null\n    status?: StringNullableFilter<\"SysUser\"> | string | null\n    loginIp?: StringNullableFilter<\"SysUser\"> | string | null\n    loginDate?: StringNullableFilter<\"SysUser\"> | string | null\n    createBy?: StringNullableFilter<\"SysUser\"> | string | null\n    createTime?: StringNullableFilter<\"SysUser\"> | string | null\n    updateBy?: StringNullableFilter<\"SysUser\"> | string | null\n    updateTime?: StringNullableFilter<\"SysUser\"> | string | null\n    remark?: StringNullableFilter<\"SysUser\"> | string | null\n  }\n\n  export type SysRoleDeptUpsertWithWhereUniqueWithoutDeptInput = {\n    where: SysRoleDeptWhereUniqueInput\n    update: XOR<SysRoleDeptUpdateWithoutDeptInput, SysRoleDeptUncheckedUpdateWithoutDeptInput>\n    create: XOR<SysRoleDeptCreateWithoutDeptInput, SysRoleDeptUncheckedCreateWithoutDeptInput>\n  }\n\n  export type SysRoleDeptUpdateWithWhereUniqueWithoutDeptInput = {\n    where: SysRoleDeptWhereUniqueInput\n    data: XOR<SysRoleDeptUpdateWithoutDeptInput, SysRoleDeptUncheckedUpdateWithoutDeptInput>\n  }\n\n  export type SysRoleDeptUpdateManyWithWhereWithoutDeptInput = {\n    where: SysRoleDeptScalarWhereInput\n    data: XOR<SysRoleDeptUpdateManyMutationInput, SysRoleDeptUncheckedUpdateManyWithoutDeptInput>\n  }\n\n  export type SysRoleDeptScalarWhereInput = {\n    AND?: SysRoleDeptScalarWhereInput | SysRoleDeptScalarWhereInput[]\n    OR?: SysRoleDeptScalarWhereInput[]\n    NOT?: SysRoleDeptScalarWhereInput | SysRoleDeptScalarWhereInput[]\n    roleId?: IntFilter<\"SysRoleDept\"> | number\n    deptId?: IntFilter<\"SysRoleDept\"> | number\n  }\n\n  export type SysDictTypeCreateWithoutDictDatasInput = {\n    dictName?: string | null\n    dictType?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysDictTypeUncheckedCreateWithoutDictDatasInput = {\n    dictId?: number\n    dictName?: string | null\n    dictType?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysDictTypeCreateOrConnectWithoutDictDatasInput = {\n    where: SysDictTypeWhereUniqueInput\n    create: XOR<SysDictTypeCreateWithoutDictDatasInput, SysDictTypeUncheckedCreateWithoutDictDatasInput>\n  }\n\n  export type SysDictTypeUpsertWithoutDictDatasInput = {\n    update: XOR<SysDictTypeUpdateWithoutDictDatasInput, SysDictTypeUncheckedUpdateWithoutDictDatasInput>\n    create: XOR<SysDictTypeCreateWithoutDictDatasInput, SysDictTypeUncheckedCreateWithoutDictDatasInput>\n    where?: SysDictTypeWhereInput\n  }\n\n  export type SysDictTypeUpdateToOneWithWhereWithoutDictDatasInput = {\n    where?: SysDictTypeWhereInput\n    data: XOR<SysDictTypeUpdateWithoutDictDatasInput, SysDictTypeUncheckedUpdateWithoutDictDatasInput>\n  }\n\n  export type SysDictTypeUpdateWithoutDictDatasInput = {\n    dictName?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDictTypeUncheckedUpdateWithoutDictDatasInput = {\n    dictId?: IntFieldUpdateOperationsInput | number\n    dictName?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDictDataCreateWithoutSysDictTypeInput = {\n    dictSort?: number | null\n    dictLabel?: string | null\n    dictValue?: string | null\n    cssClass?: string | null\n    listClass?: string | null\n    isDefault?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysDictDataUncheckedCreateWithoutSysDictTypeInput = {\n    dictCode?: number\n    dictSort?: number | null\n    dictLabel?: string | null\n    dictValue?: string | null\n    cssClass?: string | null\n    listClass?: string | null\n    isDefault?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysDictDataCreateOrConnectWithoutSysDictTypeInput = {\n    where: SysDictDataWhereUniqueInput\n    create: XOR<SysDictDataCreateWithoutSysDictTypeInput, SysDictDataUncheckedCreateWithoutSysDictTypeInput>\n  }\n\n  export type SysDictDataCreateManySysDictTypeInputEnvelope = {\n    data: SysDictDataCreateManySysDictTypeInput | SysDictDataCreateManySysDictTypeInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type SysDictDataUpsertWithWhereUniqueWithoutSysDictTypeInput = {\n    where: SysDictDataWhereUniqueInput\n    update: XOR<SysDictDataUpdateWithoutSysDictTypeInput, SysDictDataUncheckedUpdateWithoutSysDictTypeInput>\n    create: XOR<SysDictDataCreateWithoutSysDictTypeInput, SysDictDataUncheckedCreateWithoutSysDictTypeInput>\n  }\n\n  export type SysDictDataUpdateWithWhereUniqueWithoutSysDictTypeInput = {\n    where: SysDictDataWhereUniqueInput\n    data: XOR<SysDictDataUpdateWithoutSysDictTypeInput, SysDictDataUncheckedUpdateWithoutSysDictTypeInput>\n  }\n\n  export type SysDictDataUpdateManyWithWhereWithoutSysDictTypeInput = {\n    where: SysDictDataScalarWhereInput\n    data: XOR<SysDictDataUpdateManyMutationInput, SysDictDataUncheckedUpdateManyWithoutSysDictTypeInput>\n  }\n\n  export type SysDictDataScalarWhereInput = {\n    AND?: SysDictDataScalarWhereInput | SysDictDataScalarWhereInput[]\n    OR?: SysDictDataScalarWhereInput[]\n    NOT?: SysDictDataScalarWhereInput | SysDictDataScalarWhereInput[]\n    dictCode?: IntFilter<\"SysDictData\"> | number\n    dictSort?: IntNullableFilter<\"SysDictData\"> | number | null\n    dictLabel?: StringNullableFilter<\"SysDictData\"> | string | null\n    dictValue?: StringNullableFilter<\"SysDictData\"> | string | null\n    dictType?: StringNullableFilter<\"SysDictData\"> | string | null\n    cssClass?: StringNullableFilter<\"SysDictData\"> | string | null\n    listClass?: StringNullableFilter<\"SysDictData\"> | string | null\n    isDefault?: StringNullableFilter<\"SysDictData\"> | string | null\n    status?: StringNullableFilter<\"SysDictData\"> | string | null\n    createBy?: StringNullableFilter<\"SysDictData\"> | string | null\n    createTime?: StringNullableFilter<\"SysDictData\"> | string | null\n    updateBy?: StringNullableFilter<\"SysDictData\"> | string | null\n    updateTime?: StringNullableFilter<\"SysDictData\"> | string | null\n    remark?: StringNullableFilter<\"SysDictData\"> | string | null\n  }\n\n  export type SysRoleMenuCreateWithoutMenuInput = {\n    role: SysRoleCreateNestedOneWithoutMenusInput\n  }\n\n  export type SysRoleMenuUncheckedCreateWithoutMenuInput = {\n    roleId: number\n  }\n\n  export type SysRoleMenuCreateOrConnectWithoutMenuInput = {\n    where: SysRoleMenuWhereUniqueInput\n    create: XOR<SysRoleMenuCreateWithoutMenuInput, SysRoleMenuUncheckedCreateWithoutMenuInput>\n  }\n\n  export type SysRoleMenuCreateManyMenuInputEnvelope = {\n    data: SysRoleMenuCreateManyMenuInput | SysRoleMenuCreateManyMenuInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type SysRoleMenuUpsertWithWhereUniqueWithoutMenuInput = {\n    where: SysRoleMenuWhereUniqueInput\n    update: XOR<SysRoleMenuUpdateWithoutMenuInput, SysRoleMenuUncheckedUpdateWithoutMenuInput>\n    create: XOR<SysRoleMenuCreateWithoutMenuInput, SysRoleMenuUncheckedCreateWithoutMenuInput>\n  }\n\n  export type SysRoleMenuUpdateWithWhereUniqueWithoutMenuInput = {\n    where: SysRoleMenuWhereUniqueInput\n    data: XOR<SysRoleMenuUpdateWithoutMenuInput, SysRoleMenuUncheckedUpdateWithoutMenuInput>\n  }\n\n  export type SysRoleMenuUpdateManyWithWhereWithoutMenuInput = {\n    where: SysRoleMenuScalarWhereInput\n    data: XOR<SysRoleMenuUpdateManyMutationInput, SysRoleMenuUncheckedUpdateManyWithoutMenuInput>\n  }\n\n  export type SysRoleMenuScalarWhereInput = {\n    AND?: SysRoleMenuScalarWhereInput | SysRoleMenuScalarWhereInput[]\n    OR?: SysRoleMenuScalarWhereInput[]\n    NOT?: SysRoleMenuScalarWhereInput | SysRoleMenuScalarWhereInput[]\n    roleId?: IntFilter<\"SysRoleMenu\"> | number\n    menuId?: IntFilter<\"SysRoleMenu\"> | number\n  }\n\n  export type SysUserPostCreateWithoutPostInput = {\n    user: SysUserCreateNestedOneWithoutPostsInput\n  }\n\n  export type SysUserPostUncheckedCreateWithoutPostInput = {\n    userId: number\n  }\n\n  export type SysUserPostCreateOrConnectWithoutPostInput = {\n    where: SysUserPostWhereUniqueInput\n    create: XOR<SysUserPostCreateWithoutPostInput, SysUserPostUncheckedCreateWithoutPostInput>\n  }\n\n  export type SysUserPostCreateManyPostInputEnvelope = {\n    data: SysUserPostCreateManyPostInput | SysUserPostCreateManyPostInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type SysUserPostUpsertWithWhereUniqueWithoutPostInput = {\n    where: SysUserPostWhereUniqueInput\n    update: XOR<SysUserPostUpdateWithoutPostInput, SysUserPostUncheckedUpdateWithoutPostInput>\n    create: XOR<SysUserPostCreateWithoutPostInput, SysUserPostUncheckedCreateWithoutPostInput>\n  }\n\n  export type SysUserPostUpdateWithWhereUniqueWithoutPostInput = {\n    where: SysUserPostWhereUniqueInput\n    data: XOR<SysUserPostUpdateWithoutPostInput, SysUserPostUncheckedUpdateWithoutPostInput>\n  }\n\n  export type SysUserPostUpdateManyWithWhereWithoutPostInput = {\n    where: SysUserPostScalarWhereInput\n    data: XOR<SysUserPostUpdateManyMutationInput, SysUserPostUncheckedUpdateManyWithoutPostInput>\n  }\n\n  export type SysUserPostScalarWhereInput = {\n    AND?: SysUserPostScalarWhereInput | SysUserPostScalarWhereInput[]\n    OR?: SysUserPostScalarWhereInput[]\n    NOT?: SysUserPostScalarWhereInput | SysUserPostScalarWhereInput[]\n    userId?: IntFilter<\"SysUserPost\"> | number\n    postId?: IntFilter<\"SysUserPost\"> | number\n  }\n\n  export type SysUserCreateWithoutPostsInput = {\n    userName: string\n    nickName: string\n    userType?: string | null\n    email?: string | null\n    phonenumber?: string | null\n    sex?: string | null\n    avatar?: string | null\n    password?: string | null\n    status?: string | null\n    loginIp?: string | null\n    loginDate?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    dept?: SysDeptCreateNestedOneWithoutUsersInput\n    roles?: SysUserRoleCreateNestedManyWithoutUserInput\n  }\n\n  export type SysUserUncheckedCreateWithoutPostsInput = {\n    userId?: number\n    deptId?: number | null\n    userName: string\n    nickName: string\n    userType?: string | null\n    email?: string | null\n    phonenumber?: string | null\n    sex?: string | null\n    avatar?: string | null\n    password?: string | null\n    status?: string | null\n    loginIp?: string | null\n    loginDate?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    roles?: SysUserRoleUncheckedCreateNestedManyWithoutUserInput\n  }\n\n  export type SysUserCreateOrConnectWithoutPostsInput = {\n    where: SysUserWhereUniqueInput\n    create: XOR<SysUserCreateWithoutPostsInput, SysUserUncheckedCreateWithoutPostsInput>\n  }\n\n  export type SysPostCreateWithoutUsersInput = {\n    postCode: string\n    postName: string\n    postSort: number\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysPostUncheckedCreateWithoutUsersInput = {\n    postId?: number\n    postCode: string\n    postName: string\n    postSort: number\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysPostCreateOrConnectWithoutUsersInput = {\n    where: SysPostWhereUniqueInput\n    create: XOR<SysPostCreateWithoutUsersInput, SysPostUncheckedCreateWithoutUsersInput>\n  }\n\n  export type SysUserUpsertWithoutPostsInput = {\n    update: XOR<SysUserUpdateWithoutPostsInput, SysUserUncheckedUpdateWithoutPostsInput>\n    create: XOR<SysUserCreateWithoutPostsInput, SysUserUncheckedCreateWithoutPostsInput>\n    where?: SysUserWhereInput\n  }\n\n  export type SysUserUpdateToOneWithWhereWithoutPostsInput = {\n    where?: SysUserWhereInput\n    data: XOR<SysUserUpdateWithoutPostsInput, SysUserUncheckedUpdateWithoutPostsInput>\n  }\n\n  export type SysUserUpdateWithoutPostsInput = {\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    dept?: SysDeptUpdateOneWithoutUsersNestedInput\n    roles?: SysUserRoleUpdateManyWithoutUserNestedInput\n  }\n\n  export type SysUserUncheckedUpdateWithoutPostsInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n    deptId?: NullableIntFieldUpdateOperationsInput | number | null\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    roles?: SysUserRoleUncheckedUpdateManyWithoutUserNestedInput\n  }\n\n  export type SysPostUpsertWithoutUsersInput = {\n    update: XOR<SysPostUpdateWithoutUsersInput, SysPostUncheckedUpdateWithoutUsersInput>\n    create: XOR<SysPostCreateWithoutUsersInput, SysPostUncheckedCreateWithoutUsersInput>\n    where?: SysPostWhereInput\n  }\n\n  export type SysPostUpdateToOneWithWhereWithoutUsersInput = {\n    where?: SysPostWhereInput\n    data: XOR<SysPostUpdateWithoutUsersInput, SysPostUncheckedUpdateWithoutUsersInput>\n  }\n\n  export type SysPostUpdateWithoutUsersInput = {\n    postCode?: StringFieldUpdateOperationsInput | string\n    postName?: StringFieldUpdateOperationsInput | string\n    postSort?: IntFieldUpdateOperationsInput | number\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysPostUncheckedUpdateWithoutUsersInput = {\n    postId?: IntFieldUpdateOperationsInput | number\n    postCode?: StringFieldUpdateOperationsInput | string\n    postName?: StringFieldUpdateOperationsInput | string\n    postSort?: IntFieldUpdateOperationsInput | number\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysRoleCreateWithoutDeptsInput = {\n    roleName: string\n    roleKey: string\n    roleSort: number\n    dataScope?: string | null\n    menuCheckStrictly?: number | null\n    deptCheckStrictly?: number | null\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    users?: SysUserRoleCreateNestedManyWithoutRoleInput\n    menus?: SysRoleMenuCreateNestedManyWithoutRoleInput\n  }\n\n  export type SysRoleUncheckedCreateWithoutDeptsInput = {\n    roleId?: number\n    roleName: string\n    roleKey: string\n    roleSort: number\n    dataScope?: string | null\n    menuCheckStrictly?: number | null\n    deptCheckStrictly?: number | null\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    users?: SysUserRoleUncheckedCreateNestedManyWithoutRoleInput\n    menus?: SysRoleMenuUncheckedCreateNestedManyWithoutRoleInput\n  }\n\n  export type SysRoleCreateOrConnectWithoutDeptsInput = {\n    where: SysRoleWhereUniqueInput\n    create: XOR<SysRoleCreateWithoutDeptsInput, SysRoleUncheckedCreateWithoutDeptsInput>\n  }\n\n  export type SysDeptCreateWithoutRolesInput = {\n    parentId?: number | null\n    ancestors?: string | null\n    deptName?: string | null\n    orderNum?: number | null\n    leader?: string | null\n    phone?: string | null\n    email?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    users?: SysUserCreateNestedManyWithoutDeptInput\n  }\n\n  export type SysDeptUncheckedCreateWithoutRolesInput = {\n    deptId?: number\n    parentId?: number | null\n    ancestors?: string | null\n    deptName?: string | null\n    orderNum?: number | null\n    leader?: string | null\n    phone?: string | null\n    email?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    users?: SysUserUncheckedCreateNestedManyWithoutDeptInput\n  }\n\n  export type SysDeptCreateOrConnectWithoutRolesInput = {\n    where: SysDeptWhereUniqueInput\n    create: XOR<SysDeptCreateWithoutRolesInput, SysDeptUncheckedCreateWithoutRolesInput>\n  }\n\n  export type SysRoleUpsertWithoutDeptsInput = {\n    update: XOR<SysRoleUpdateWithoutDeptsInput, SysRoleUncheckedUpdateWithoutDeptsInput>\n    create: XOR<SysRoleCreateWithoutDeptsInput, SysRoleUncheckedCreateWithoutDeptsInput>\n    where?: SysRoleWhereInput\n  }\n\n  export type SysRoleUpdateToOneWithWhereWithoutDeptsInput = {\n    where?: SysRoleWhereInput\n    data: XOR<SysRoleUpdateWithoutDeptsInput, SysRoleUncheckedUpdateWithoutDeptsInput>\n  }\n\n  export type SysRoleUpdateWithoutDeptsInput = {\n    roleName?: StringFieldUpdateOperationsInput | string\n    roleKey?: StringFieldUpdateOperationsInput | string\n    roleSort?: IntFieldUpdateOperationsInput | number\n    dataScope?: NullableStringFieldUpdateOperationsInput | string | null\n    menuCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    deptCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserRoleUpdateManyWithoutRoleNestedInput\n    menus?: SysRoleMenuUpdateManyWithoutRoleNestedInput\n  }\n\n  export type SysRoleUncheckedUpdateWithoutDeptsInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n    roleName?: StringFieldUpdateOperationsInput | string\n    roleKey?: StringFieldUpdateOperationsInput | string\n    roleSort?: IntFieldUpdateOperationsInput | number\n    dataScope?: NullableStringFieldUpdateOperationsInput | string | null\n    menuCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    deptCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserRoleUncheckedUpdateManyWithoutRoleNestedInput\n    menus?: SysRoleMenuUncheckedUpdateManyWithoutRoleNestedInput\n  }\n\n  export type SysDeptUpsertWithoutRolesInput = {\n    update: XOR<SysDeptUpdateWithoutRolesInput, SysDeptUncheckedUpdateWithoutRolesInput>\n    create: XOR<SysDeptCreateWithoutRolesInput, SysDeptUncheckedCreateWithoutRolesInput>\n    where?: SysDeptWhereInput\n  }\n\n  export type SysDeptUpdateToOneWithWhereWithoutRolesInput = {\n    where?: SysDeptWhereInput\n    data: XOR<SysDeptUpdateWithoutRolesInput, SysDeptUncheckedUpdateWithoutRolesInput>\n  }\n\n  export type SysDeptUpdateWithoutRolesInput = {\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    ancestors?: NullableStringFieldUpdateOperationsInput | string | null\n    deptName?: NullableStringFieldUpdateOperationsInput | string | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    leader?: NullableStringFieldUpdateOperationsInput | string | null\n    phone?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserUpdateManyWithoutDeptNestedInput\n  }\n\n  export type SysDeptUncheckedUpdateWithoutRolesInput = {\n    deptId?: IntFieldUpdateOperationsInput | number\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    ancestors?: NullableStringFieldUpdateOperationsInput | string | null\n    deptName?: NullableStringFieldUpdateOperationsInput | string | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    leader?: NullableStringFieldUpdateOperationsInput | string | null\n    phone?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserUncheckedUpdateManyWithoutDeptNestedInput\n  }\n\n  export type SysMenuCreateWithoutRolesInput = {\n    menuName: string\n    parentId?: number | null\n    orderNum?: number | null\n    path?: string | null\n    component?: string | null\n    query?: string | null\n    isFrame?: number | null\n    isCache?: number | null\n    menuType?: string | null\n    visible?: string | null\n    status?: string | null\n    perms?: string | null\n    icon?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysMenuUncheckedCreateWithoutRolesInput = {\n    menuId?: number\n    menuName: string\n    parentId?: number | null\n    orderNum?: number | null\n    path?: string | null\n    component?: string | null\n    query?: string | null\n    isFrame?: number | null\n    isCache?: number | null\n    menuType?: string | null\n    visible?: string | null\n    status?: string | null\n    perms?: string | null\n    icon?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysMenuCreateOrConnectWithoutRolesInput = {\n    where: SysMenuWhereUniqueInput\n    create: XOR<SysMenuCreateWithoutRolesInput, SysMenuUncheckedCreateWithoutRolesInput>\n  }\n\n  export type SysRoleCreateWithoutMenusInput = {\n    roleName: string\n    roleKey: string\n    roleSort: number\n    dataScope?: string | null\n    menuCheckStrictly?: number | null\n    deptCheckStrictly?: number | null\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    users?: SysUserRoleCreateNestedManyWithoutRoleInput\n    depts?: SysRoleDeptCreateNestedManyWithoutRoleInput\n  }\n\n  export type SysRoleUncheckedCreateWithoutMenusInput = {\n    roleId?: number\n    roleName: string\n    roleKey: string\n    roleSort: number\n    dataScope?: string | null\n    menuCheckStrictly?: number | null\n    deptCheckStrictly?: number | null\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    users?: SysUserRoleUncheckedCreateNestedManyWithoutRoleInput\n    depts?: SysRoleDeptUncheckedCreateNestedManyWithoutRoleInput\n  }\n\n  export type SysRoleCreateOrConnectWithoutMenusInput = {\n    where: SysRoleWhereUniqueInput\n    create: XOR<SysRoleCreateWithoutMenusInput, SysRoleUncheckedCreateWithoutMenusInput>\n  }\n\n  export type SysMenuUpsertWithoutRolesInput = {\n    update: XOR<SysMenuUpdateWithoutRolesInput, SysMenuUncheckedUpdateWithoutRolesInput>\n    create: XOR<SysMenuCreateWithoutRolesInput, SysMenuUncheckedCreateWithoutRolesInput>\n    where?: SysMenuWhereInput\n  }\n\n  export type SysMenuUpdateToOneWithWhereWithoutRolesInput = {\n    where?: SysMenuWhereInput\n    data: XOR<SysMenuUpdateWithoutRolesInput, SysMenuUncheckedUpdateWithoutRolesInput>\n  }\n\n  export type SysMenuUpdateWithoutRolesInput = {\n    menuName?: StringFieldUpdateOperationsInput | string\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    path?: NullableStringFieldUpdateOperationsInput | string | null\n    component?: NullableStringFieldUpdateOperationsInput | string | null\n    query?: NullableStringFieldUpdateOperationsInput | string | null\n    isFrame?: NullableIntFieldUpdateOperationsInput | number | null\n    isCache?: NullableIntFieldUpdateOperationsInput | number | null\n    menuType?: NullableStringFieldUpdateOperationsInput | string | null\n    visible?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    perms?: NullableStringFieldUpdateOperationsInput | string | null\n    icon?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysMenuUncheckedUpdateWithoutRolesInput = {\n    menuId?: IntFieldUpdateOperationsInput | number\n    menuName?: StringFieldUpdateOperationsInput | string\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    path?: NullableStringFieldUpdateOperationsInput | string | null\n    component?: NullableStringFieldUpdateOperationsInput | string | null\n    query?: NullableStringFieldUpdateOperationsInput | string | null\n    isFrame?: NullableIntFieldUpdateOperationsInput | number | null\n    isCache?: NullableIntFieldUpdateOperationsInput | number | null\n    menuType?: NullableStringFieldUpdateOperationsInput | string | null\n    visible?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    perms?: NullableStringFieldUpdateOperationsInput | string | null\n    icon?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysRoleUpsertWithoutMenusInput = {\n    update: XOR<SysRoleUpdateWithoutMenusInput, SysRoleUncheckedUpdateWithoutMenusInput>\n    create: XOR<SysRoleCreateWithoutMenusInput, SysRoleUncheckedCreateWithoutMenusInput>\n    where?: SysRoleWhereInput\n  }\n\n  export type SysRoleUpdateToOneWithWhereWithoutMenusInput = {\n    where?: SysRoleWhereInput\n    data: XOR<SysRoleUpdateWithoutMenusInput, SysRoleUncheckedUpdateWithoutMenusInput>\n  }\n\n  export type SysRoleUpdateWithoutMenusInput = {\n    roleName?: StringFieldUpdateOperationsInput | string\n    roleKey?: StringFieldUpdateOperationsInput | string\n    roleSort?: IntFieldUpdateOperationsInput | number\n    dataScope?: NullableStringFieldUpdateOperationsInput | string | null\n    menuCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    deptCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserRoleUpdateManyWithoutRoleNestedInput\n    depts?: SysRoleDeptUpdateManyWithoutRoleNestedInput\n  }\n\n  export type SysRoleUncheckedUpdateWithoutMenusInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n    roleName?: StringFieldUpdateOperationsInput | string\n    roleKey?: StringFieldUpdateOperationsInput | string\n    roleSort?: IntFieldUpdateOperationsInput | number\n    dataScope?: NullableStringFieldUpdateOperationsInput | string | null\n    menuCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    deptCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    users?: SysUserRoleUncheckedUpdateManyWithoutRoleNestedInput\n    depts?: SysRoleDeptUncheckedUpdateManyWithoutRoleNestedInput\n  }\n\n  export type SysDeptCreateWithoutUsersInput = {\n    parentId?: number | null\n    ancestors?: string | null\n    deptName?: string | null\n    orderNum?: number | null\n    leader?: string | null\n    phone?: string | null\n    email?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    roles?: SysRoleDeptCreateNestedManyWithoutDeptInput\n  }\n\n  export type SysDeptUncheckedCreateWithoutUsersInput = {\n    deptId?: number\n    parentId?: number | null\n    ancestors?: string | null\n    deptName?: string | null\n    orderNum?: number | null\n    leader?: string | null\n    phone?: string | null\n    email?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    roles?: SysRoleDeptUncheckedCreateNestedManyWithoutDeptInput\n  }\n\n  export type SysDeptCreateOrConnectWithoutUsersInput = {\n    where: SysDeptWhereUniqueInput\n    create: XOR<SysDeptCreateWithoutUsersInput, SysDeptUncheckedCreateWithoutUsersInput>\n  }\n\n  export type SysUserRoleCreateWithoutUserInput = {\n    role: SysRoleCreateNestedOneWithoutUsersInput\n  }\n\n  export type SysUserRoleUncheckedCreateWithoutUserInput = {\n    roleId: number\n  }\n\n  export type SysUserRoleCreateOrConnectWithoutUserInput = {\n    where: SysUserRoleWhereUniqueInput\n    create: XOR<SysUserRoleCreateWithoutUserInput, SysUserRoleUncheckedCreateWithoutUserInput>\n  }\n\n  export type SysUserRoleCreateManyUserInputEnvelope = {\n    data: SysUserRoleCreateManyUserInput | SysUserRoleCreateManyUserInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type SysUserPostCreateWithoutUserInput = {\n    post: SysPostCreateNestedOneWithoutUsersInput\n  }\n\n  export type SysUserPostUncheckedCreateWithoutUserInput = {\n    postId: number\n  }\n\n  export type SysUserPostCreateOrConnectWithoutUserInput = {\n    where: SysUserPostWhereUniqueInput\n    create: XOR<SysUserPostCreateWithoutUserInput, SysUserPostUncheckedCreateWithoutUserInput>\n  }\n\n  export type SysUserPostCreateManyUserInputEnvelope = {\n    data: SysUserPostCreateManyUserInput | SysUserPostCreateManyUserInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type SysDeptUpsertWithoutUsersInput = {\n    update: XOR<SysDeptUpdateWithoutUsersInput, SysDeptUncheckedUpdateWithoutUsersInput>\n    create: XOR<SysDeptCreateWithoutUsersInput, SysDeptUncheckedCreateWithoutUsersInput>\n    where?: SysDeptWhereInput\n  }\n\n  export type SysDeptUpdateToOneWithWhereWithoutUsersInput = {\n    where?: SysDeptWhereInput\n    data: XOR<SysDeptUpdateWithoutUsersInput, SysDeptUncheckedUpdateWithoutUsersInput>\n  }\n\n  export type SysDeptUpdateWithoutUsersInput = {\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    ancestors?: NullableStringFieldUpdateOperationsInput | string | null\n    deptName?: NullableStringFieldUpdateOperationsInput | string | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    leader?: NullableStringFieldUpdateOperationsInput | string | null\n    phone?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    roles?: SysRoleDeptUpdateManyWithoutDeptNestedInput\n  }\n\n  export type SysDeptUncheckedUpdateWithoutUsersInput = {\n    deptId?: IntFieldUpdateOperationsInput | number\n    parentId?: NullableIntFieldUpdateOperationsInput | number | null\n    ancestors?: NullableStringFieldUpdateOperationsInput | string | null\n    deptName?: NullableStringFieldUpdateOperationsInput | string | null\n    orderNum?: NullableIntFieldUpdateOperationsInput | number | null\n    leader?: NullableStringFieldUpdateOperationsInput | string | null\n    phone?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    roles?: SysRoleDeptUncheckedUpdateManyWithoutDeptNestedInput\n  }\n\n  export type SysUserRoleUpsertWithWhereUniqueWithoutUserInput = {\n    where: SysUserRoleWhereUniqueInput\n    update: XOR<SysUserRoleUpdateWithoutUserInput, SysUserRoleUncheckedUpdateWithoutUserInput>\n    create: XOR<SysUserRoleCreateWithoutUserInput, SysUserRoleUncheckedCreateWithoutUserInput>\n  }\n\n  export type SysUserRoleUpdateWithWhereUniqueWithoutUserInput = {\n    where: SysUserRoleWhereUniqueInput\n    data: XOR<SysUserRoleUpdateWithoutUserInput, SysUserRoleUncheckedUpdateWithoutUserInput>\n  }\n\n  export type SysUserRoleUpdateManyWithWhereWithoutUserInput = {\n    where: SysUserRoleScalarWhereInput\n    data: XOR<SysUserRoleUpdateManyMutationInput, SysUserRoleUncheckedUpdateManyWithoutUserInput>\n  }\n\n  export type SysUserRoleScalarWhereInput = {\n    AND?: SysUserRoleScalarWhereInput | SysUserRoleScalarWhereInput[]\n    OR?: SysUserRoleScalarWhereInput[]\n    NOT?: SysUserRoleScalarWhereInput | SysUserRoleScalarWhereInput[]\n    userId?: IntFilter<\"SysUserRole\"> | number\n    roleId?: IntFilter<\"SysUserRole\"> | number\n  }\n\n  export type SysUserPostUpsertWithWhereUniqueWithoutUserInput = {\n    where: SysUserPostWhereUniqueInput\n    update: XOR<SysUserPostUpdateWithoutUserInput, SysUserPostUncheckedUpdateWithoutUserInput>\n    create: XOR<SysUserPostCreateWithoutUserInput, SysUserPostUncheckedCreateWithoutUserInput>\n  }\n\n  export type SysUserPostUpdateWithWhereUniqueWithoutUserInput = {\n    where: SysUserPostWhereUniqueInput\n    data: XOR<SysUserPostUpdateWithoutUserInput, SysUserPostUncheckedUpdateWithoutUserInput>\n  }\n\n  export type SysUserPostUpdateManyWithWhereWithoutUserInput = {\n    where: SysUserPostScalarWhereInput\n    data: XOR<SysUserPostUpdateManyMutationInput, SysUserPostUncheckedUpdateManyWithoutUserInput>\n  }\n\n  export type SysUserRoleCreateWithoutRoleInput = {\n    user: SysUserCreateNestedOneWithoutRolesInput\n  }\n\n  export type SysUserRoleUncheckedCreateWithoutRoleInput = {\n    userId: number\n  }\n\n  export type SysUserRoleCreateOrConnectWithoutRoleInput = {\n    where: SysUserRoleWhereUniqueInput\n    create: XOR<SysUserRoleCreateWithoutRoleInput, SysUserRoleUncheckedCreateWithoutRoleInput>\n  }\n\n  export type SysUserRoleCreateManyRoleInputEnvelope = {\n    data: SysUserRoleCreateManyRoleInput | SysUserRoleCreateManyRoleInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type SysRoleMenuCreateWithoutRoleInput = {\n    menu: SysMenuCreateNestedOneWithoutRolesInput\n  }\n\n  export type SysRoleMenuUncheckedCreateWithoutRoleInput = {\n    menuId: number\n  }\n\n  export type SysRoleMenuCreateOrConnectWithoutRoleInput = {\n    where: SysRoleMenuWhereUniqueInput\n    create: XOR<SysRoleMenuCreateWithoutRoleInput, SysRoleMenuUncheckedCreateWithoutRoleInput>\n  }\n\n  export type SysRoleMenuCreateManyRoleInputEnvelope = {\n    data: SysRoleMenuCreateManyRoleInput | SysRoleMenuCreateManyRoleInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type SysRoleDeptCreateWithoutRoleInput = {\n    dept: SysDeptCreateNestedOneWithoutRolesInput\n  }\n\n  export type SysRoleDeptUncheckedCreateWithoutRoleInput = {\n    deptId: number\n  }\n\n  export type SysRoleDeptCreateOrConnectWithoutRoleInput = {\n    where: SysRoleDeptWhereUniqueInput\n    create: XOR<SysRoleDeptCreateWithoutRoleInput, SysRoleDeptUncheckedCreateWithoutRoleInput>\n  }\n\n  export type SysRoleDeptCreateManyRoleInputEnvelope = {\n    data: SysRoleDeptCreateManyRoleInput | SysRoleDeptCreateManyRoleInput[]\n    skipDuplicates?: boolean\n  }\n\n  export type SysUserRoleUpsertWithWhereUniqueWithoutRoleInput = {\n    where: SysUserRoleWhereUniqueInput\n    update: XOR<SysUserRoleUpdateWithoutRoleInput, SysUserRoleUncheckedUpdateWithoutRoleInput>\n    create: XOR<SysUserRoleCreateWithoutRoleInput, SysUserRoleUncheckedCreateWithoutRoleInput>\n  }\n\n  export type SysUserRoleUpdateWithWhereUniqueWithoutRoleInput = {\n    where: SysUserRoleWhereUniqueInput\n    data: XOR<SysUserRoleUpdateWithoutRoleInput, SysUserRoleUncheckedUpdateWithoutRoleInput>\n  }\n\n  export type SysUserRoleUpdateManyWithWhereWithoutRoleInput = {\n    where: SysUserRoleScalarWhereInput\n    data: XOR<SysUserRoleUpdateManyMutationInput, SysUserRoleUncheckedUpdateManyWithoutRoleInput>\n  }\n\n  export type SysRoleMenuUpsertWithWhereUniqueWithoutRoleInput = {\n    where: SysRoleMenuWhereUniqueInput\n    update: XOR<SysRoleMenuUpdateWithoutRoleInput, SysRoleMenuUncheckedUpdateWithoutRoleInput>\n    create: XOR<SysRoleMenuCreateWithoutRoleInput, SysRoleMenuUncheckedCreateWithoutRoleInput>\n  }\n\n  export type SysRoleMenuUpdateWithWhereUniqueWithoutRoleInput = {\n    where: SysRoleMenuWhereUniqueInput\n    data: XOR<SysRoleMenuUpdateWithoutRoleInput, SysRoleMenuUncheckedUpdateWithoutRoleInput>\n  }\n\n  export type SysRoleMenuUpdateManyWithWhereWithoutRoleInput = {\n    where: SysRoleMenuScalarWhereInput\n    data: XOR<SysRoleMenuUpdateManyMutationInput, SysRoleMenuUncheckedUpdateManyWithoutRoleInput>\n  }\n\n  export type SysRoleDeptUpsertWithWhereUniqueWithoutRoleInput = {\n    where: SysRoleDeptWhereUniqueInput\n    update: XOR<SysRoleDeptUpdateWithoutRoleInput, SysRoleDeptUncheckedUpdateWithoutRoleInput>\n    create: XOR<SysRoleDeptCreateWithoutRoleInput, SysRoleDeptUncheckedCreateWithoutRoleInput>\n  }\n\n  export type SysRoleDeptUpdateWithWhereUniqueWithoutRoleInput = {\n    where: SysRoleDeptWhereUniqueInput\n    data: XOR<SysRoleDeptUpdateWithoutRoleInput, SysRoleDeptUncheckedUpdateWithoutRoleInput>\n  }\n\n  export type SysRoleDeptUpdateManyWithWhereWithoutRoleInput = {\n    where: SysRoleDeptScalarWhereInput\n    data: XOR<SysRoleDeptUpdateManyMutationInput, SysRoleDeptUncheckedUpdateManyWithoutRoleInput>\n  }\n\n  export type SysUserCreateWithoutRolesInput = {\n    userName: string\n    nickName: string\n    userType?: string | null\n    email?: string | null\n    phonenumber?: string | null\n    sex?: string | null\n    avatar?: string | null\n    password?: string | null\n    status?: string | null\n    loginIp?: string | null\n    loginDate?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    dept?: SysDeptCreateNestedOneWithoutUsersInput\n    posts?: SysUserPostCreateNestedManyWithoutUserInput\n  }\n\n  export type SysUserUncheckedCreateWithoutRolesInput = {\n    userId?: number\n    deptId?: number | null\n    userName: string\n    nickName: string\n    userType?: string | null\n    email?: string | null\n    phonenumber?: string | null\n    sex?: string | null\n    avatar?: string | null\n    password?: string | null\n    status?: string | null\n    loginIp?: string | null\n    loginDate?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    posts?: SysUserPostUncheckedCreateNestedManyWithoutUserInput\n  }\n\n  export type SysUserCreateOrConnectWithoutRolesInput = {\n    where: SysUserWhereUniqueInput\n    create: XOR<SysUserCreateWithoutRolesInput, SysUserUncheckedCreateWithoutRolesInput>\n  }\n\n  export type SysRoleCreateWithoutUsersInput = {\n    roleName: string\n    roleKey: string\n    roleSort: number\n    dataScope?: string | null\n    menuCheckStrictly?: number | null\n    deptCheckStrictly?: number | null\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    menus?: SysRoleMenuCreateNestedManyWithoutRoleInput\n    depts?: SysRoleDeptCreateNestedManyWithoutRoleInput\n  }\n\n  export type SysRoleUncheckedCreateWithoutUsersInput = {\n    roleId?: number\n    roleName: string\n    roleKey: string\n    roleSort: number\n    dataScope?: string | null\n    menuCheckStrictly?: number | null\n    deptCheckStrictly?: number | null\n    status?: string\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n    menus?: SysRoleMenuUncheckedCreateNestedManyWithoutRoleInput\n    depts?: SysRoleDeptUncheckedCreateNestedManyWithoutRoleInput\n  }\n\n  export type SysRoleCreateOrConnectWithoutUsersInput = {\n    where: SysRoleWhereUniqueInput\n    create: XOR<SysRoleCreateWithoutUsersInput, SysRoleUncheckedCreateWithoutUsersInput>\n  }\n\n  export type SysUserUpsertWithoutRolesInput = {\n    update: XOR<SysUserUpdateWithoutRolesInput, SysUserUncheckedUpdateWithoutRolesInput>\n    create: XOR<SysUserCreateWithoutRolesInput, SysUserUncheckedCreateWithoutRolesInput>\n    where?: SysUserWhereInput\n  }\n\n  export type SysUserUpdateToOneWithWhereWithoutRolesInput = {\n    where?: SysUserWhereInput\n    data: XOR<SysUserUpdateWithoutRolesInput, SysUserUncheckedUpdateWithoutRolesInput>\n  }\n\n  export type SysUserUpdateWithoutRolesInput = {\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    dept?: SysDeptUpdateOneWithoutUsersNestedInput\n    posts?: SysUserPostUpdateManyWithoutUserNestedInput\n  }\n\n  export type SysUserUncheckedUpdateWithoutRolesInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n    deptId?: NullableIntFieldUpdateOperationsInput | number | null\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    posts?: SysUserPostUncheckedUpdateManyWithoutUserNestedInput\n  }\n\n  export type SysRoleUpsertWithoutUsersInput = {\n    update: XOR<SysRoleUpdateWithoutUsersInput, SysRoleUncheckedUpdateWithoutUsersInput>\n    create: XOR<SysRoleCreateWithoutUsersInput, SysRoleUncheckedCreateWithoutUsersInput>\n    where?: SysRoleWhereInput\n  }\n\n  export type SysRoleUpdateToOneWithWhereWithoutUsersInput = {\n    where?: SysRoleWhereInput\n    data: XOR<SysRoleUpdateWithoutUsersInput, SysRoleUncheckedUpdateWithoutUsersInput>\n  }\n\n  export type SysRoleUpdateWithoutUsersInput = {\n    roleName?: StringFieldUpdateOperationsInput | string\n    roleKey?: StringFieldUpdateOperationsInput | string\n    roleSort?: IntFieldUpdateOperationsInput | number\n    dataScope?: NullableStringFieldUpdateOperationsInput | string | null\n    menuCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    deptCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    menus?: SysRoleMenuUpdateManyWithoutRoleNestedInput\n    depts?: SysRoleDeptUpdateManyWithoutRoleNestedInput\n  }\n\n  export type SysRoleUncheckedUpdateWithoutUsersInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n    roleName?: StringFieldUpdateOperationsInput | string\n    roleKey?: StringFieldUpdateOperationsInput | string\n    roleSort?: IntFieldUpdateOperationsInput | number\n    dataScope?: NullableStringFieldUpdateOperationsInput | string | null\n    menuCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    deptCheckStrictly?: NullableIntFieldUpdateOperationsInput | number | null\n    status?: StringFieldUpdateOperationsInput | string\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    menus?: SysRoleMenuUncheckedUpdateManyWithoutRoleNestedInput\n    depts?: SysRoleDeptUncheckedUpdateManyWithoutRoleNestedInput\n  }\n\n  export type GenTableColumnCreateManyTableInput = {\n    columnId?: number\n    columnName?: string | null\n    columnComment?: string | null\n    columnType?: string | null\n    javaType?: string | null\n    javaField?: string | null\n    isPk?: string | null\n    isIncrement?: string | null\n    isRequired?: string | null\n    isInsert?: string | null\n    isEdit?: string | null\n    isList?: string | null\n    isQuery?: string | null\n    queryType?: string | null\n    htmlType?: string | null\n    dictType?: string | null\n    sort?: number | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n  }\n\n  export type GenTableColumnUpdateWithoutTableInput = {\n    columnName?: NullableStringFieldUpdateOperationsInput | string | null\n    columnComment?: NullableStringFieldUpdateOperationsInput | string | null\n    columnType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaField?: NullableStringFieldUpdateOperationsInput | string | null\n    isPk?: NullableStringFieldUpdateOperationsInput | string | null\n    isIncrement?: NullableStringFieldUpdateOperationsInput | string | null\n    isRequired?: NullableStringFieldUpdateOperationsInput | string | null\n    isInsert?: NullableStringFieldUpdateOperationsInput | string | null\n    isEdit?: NullableStringFieldUpdateOperationsInput | string | null\n    isList?: NullableStringFieldUpdateOperationsInput | string | null\n    isQuery?: NullableStringFieldUpdateOperationsInput | string | null\n    queryType?: NullableStringFieldUpdateOperationsInput | string | null\n    htmlType?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    sort?: NullableIntFieldUpdateOperationsInput | number | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type GenTableColumnUncheckedUpdateWithoutTableInput = {\n    columnId?: IntFieldUpdateOperationsInput | number\n    columnName?: NullableStringFieldUpdateOperationsInput | string | null\n    columnComment?: NullableStringFieldUpdateOperationsInput | string | null\n    columnType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaField?: NullableStringFieldUpdateOperationsInput | string | null\n    isPk?: NullableStringFieldUpdateOperationsInput | string | null\n    isIncrement?: NullableStringFieldUpdateOperationsInput | string | null\n    isRequired?: NullableStringFieldUpdateOperationsInput | string | null\n    isInsert?: NullableStringFieldUpdateOperationsInput | string | null\n    isEdit?: NullableStringFieldUpdateOperationsInput | string | null\n    isList?: NullableStringFieldUpdateOperationsInput | string | null\n    isQuery?: NullableStringFieldUpdateOperationsInput | string | null\n    queryType?: NullableStringFieldUpdateOperationsInput | string | null\n    htmlType?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    sort?: NullableIntFieldUpdateOperationsInput | number | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type GenTableColumnUncheckedUpdateManyWithoutTableInput = {\n    columnId?: IntFieldUpdateOperationsInput | number\n    columnName?: NullableStringFieldUpdateOperationsInput | string | null\n    columnComment?: NullableStringFieldUpdateOperationsInput | string | null\n    columnType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaType?: NullableStringFieldUpdateOperationsInput | string | null\n    javaField?: NullableStringFieldUpdateOperationsInput | string | null\n    isPk?: NullableStringFieldUpdateOperationsInput | string | null\n    isIncrement?: NullableStringFieldUpdateOperationsInput | string | null\n    isRequired?: NullableStringFieldUpdateOperationsInput | string | null\n    isInsert?: NullableStringFieldUpdateOperationsInput | string | null\n    isEdit?: NullableStringFieldUpdateOperationsInput | string | null\n    isList?: NullableStringFieldUpdateOperationsInput | string | null\n    isQuery?: NullableStringFieldUpdateOperationsInput | string | null\n    queryType?: NullableStringFieldUpdateOperationsInput | string | null\n    htmlType?: NullableStringFieldUpdateOperationsInput | string | null\n    dictType?: NullableStringFieldUpdateOperationsInput | string | null\n    sort?: NullableIntFieldUpdateOperationsInput | number | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysUserCreateManyDeptInput = {\n    userId?: number\n    userName: string\n    nickName: string\n    userType?: string | null\n    email?: string | null\n    phonenumber?: string | null\n    sex?: string | null\n    avatar?: string | null\n    password?: string | null\n    status?: string | null\n    loginIp?: string | null\n    loginDate?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysRoleDeptCreateManyDeptInput = {\n    roleId: number\n  }\n\n  export type SysUserUpdateWithoutDeptInput = {\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    roles?: SysUserRoleUpdateManyWithoutUserNestedInput\n    posts?: SysUserPostUpdateManyWithoutUserNestedInput\n  }\n\n  export type SysUserUncheckedUpdateWithoutDeptInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n    roles?: SysUserRoleUncheckedUpdateManyWithoutUserNestedInput\n    posts?: SysUserPostUncheckedUpdateManyWithoutUserNestedInput\n  }\n\n  export type SysUserUncheckedUpdateManyWithoutDeptInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n    userName?: StringFieldUpdateOperationsInput | string\n    nickName?: StringFieldUpdateOperationsInput | string\n    userType?: NullableStringFieldUpdateOperationsInput | string | null\n    email?: NullableStringFieldUpdateOperationsInput | string | null\n    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null\n    sex?: NullableStringFieldUpdateOperationsInput | string | null\n    avatar?: NullableStringFieldUpdateOperationsInput | string | null\n    password?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    loginIp?: NullableStringFieldUpdateOperationsInput | string | null\n    loginDate?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysRoleDeptUpdateWithoutDeptInput = {\n    role?: SysRoleUpdateOneRequiredWithoutDeptsNestedInput\n  }\n\n  export type SysRoleDeptUncheckedUpdateWithoutDeptInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysRoleDeptUncheckedUpdateManyWithoutDeptInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysDictDataCreateManySysDictTypeInput = {\n    dictCode?: number\n    dictSort?: number | null\n    dictLabel?: string | null\n    dictValue?: string | null\n    cssClass?: string | null\n    listClass?: string | null\n    isDefault?: string | null\n    status?: string | null\n    createBy?: string | null\n    createTime?: string | null\n    updateBy?: string | null\n    updateTime?: string | null\n    remark?: string | null\n  }\n\n  export type SysDictDataUpdateWithoutSysDictTypeInput = {\n    dictSort?: NullableIntFieldUpdateOperationsInput | number | null\n    dictLabel?: NullableStringFieldUpdateOperationsInput | string | null\n    dictValue?: NullableStringFieldUpdateOperationsInput | string | null\n    cssClass?: NullableStringFieldUpdateOperationsInput | string | null\n    listClass?: NullableStringFieldUpdateOperationsInput | string | null\n    isDefault?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDictDataUncheckedUpdateWithoutSysDictTypeInput = {\n    dictCode?: IntFieldUpdateOperationsInput | number\n    dictSort?: NullableIntFieldUpdateOperationsInput | number | null\n    dictLabel?: NullableStringFieldUpdateOperationsInput | string | null\n    dictValue?: NullableStringFieldUpdateOperationsInput | string | null\n    cssClass?: NullableStringFieldUpdateOperationsInput | string | null\n    listClass?: NullableStringFieldUpdateOperationsInput | string | null\n    isDefault?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysDictDataUncheckedUpdateManyWithoutSysDictTypeInput = {\n    dictCode?: IntFieldUpdateOperationsInput | number\n    dictSort?: NullableIntFieldUpdateOperationsInput | number | null\n    dictLabel?: NullableStringFieldUpdateOperationsInput | string | null\n    dictValue?: NullableStringFieldUpdateOperationsInput | string | null\n    cssClass?: NullableStringFieldUpdateOperationsInput | string | null\n    listClass?: NullableStringFieldUpdateOperationsInput | string | null\n    isDefault?: NullableStringFieldUpdateOperationsInput | string | null\n    status?: NullableStringFieldUpdateOperationsInput | string | null\n    createBy?: NullableStringFieldUpdateOperationsInput | string | null\n    createTime?: NullableStringFieldUpdateOperationsInput | string | null\n    updateBy?: NullableStringFieldUpdateOperationsInput | string | null\n    updateTime?: NullableStringFieldUpdateOperationsInput | string | null\n    remark?: NullableStringFieldUpdateOperationsInput | string | null\n  }\n\n  export type SysRoleMenuCreateManyMenuInput = {\n    roleId: number\n  }\n\n  export type SysRoleMenuUpdateWithoutMenuInput = {\n    role?: SysRoleUpdateOneRequiredWithoutMenusNestedInput\n  }\n\n  export type SysRoleMenuUncheckedUpdateWithoutMenuInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysRoleMenuUncheckedUpdateManyWithoutMenuInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserPostCreateManyPostInput = {\n    userId: number\n  }\n\n  export type SysUserPostUpdateWithoutPostInput = {\n    user?: SysUserUpdateOneRequiredWithoutPostsNestedInput\n  }\n\n  export type SysUserPostUncheckedUpdateWithoutPostInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserPostUncheckedUpdateManyWithoutPostInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserRoleCreateManyUserInput = {\n    roleId: number\n  }\n\n  export type SysUserPostCreateManyUserInput = {\n    postId: number\n  }\n\n  export type SysUserRoleUpdateWithoutUserInput = {\n    role?: SysRoleUpdateOneRequiredWithoutUsersNestedInput\n  }\n\n  export type SysUserRoleUncheckedUpdateWithoutUserInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserRoleUncheckedUpdateManyWithoutUserInput = {\n    roleId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserPostUpdateWithoutUserInput = {\n    post?: SysPostUpdateOneRequiredWithoutUsersNestedInput\n  }\n\n  export type SysUserPostUncheckedUpdateWithoutUserInput = {\n    postId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserPostUncheckedUpdateManyWithoutUserInput = {\n    postId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserRoleCreateManyRoleInput = {\n    userId: number\n  }\n\n  export type SysRoleMenuCreateManyRoleInput = {\n    menuId: number\n  }\n\n  export type SysRoleDeptCreateManyRoleInput = {\n    deptId: number\n  }\n\n  export type SysUserRoleUpdateWithoutRoleInput = {\n    user?: SysUserUpdateOneRequiredWithoutRolesNestedInput\n  }\n\n  export type SysUserRoleUncheckedUpdateWithoutRoleInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysUserRoleUncheckedUpdateManyWithoutRoleInput = {\n    userId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysRoleMenuUpdateWithoutRoleInput = {\n    menu?: SysMenuUpdateOneRequiredWithoutRolesNestedInput\n  }\n\n  export type SysRoleMenuUncheckedUpdateWithoutRoleInput = {\n    menuId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysRoleMenuUncheckedUpdateManyWithoutRoleInput = {\n    menuId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysRoleDeptUpdateWithoutRoleInput = {\n    dept?: SysDeptUpdateOneRequiredWithoutRolesNestedInput\n  }\n\n  export type SysRoleDeptUncheckedUpdateWithoutRoleInput = {\n    deptId?: IntFieldUpdateOperationsInput | number\n  }\n\n  export type SysRoleDeptUncheckedUpdateManyWithoutRoleInput = {\n    deptId?: IntFieldUpdateOperationsInput | number\n  }\n\n\n\n  /**\n   * Aliases for legacy arg types\n   */\n    /**\n     * @deprecated Use GenTableCountOutputTypeDefaultArgs instead\n     */\n    export type GenTableCountOutputTypeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = GenTableCountOutputTypeDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysDeptCountOutputTypeDefaultArgs instead\n     */\n    export type SysDeptCountOutputTypeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysDeptCountOutputTypeDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysDictTypeCountOutputTypeDefaultArgs instead\n     */\n    export type SysDictTypeCountOutputTypeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysDictTypeCountOutputTypeDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysMenuCountOutputTypeDefaultArgs instead\n     */\n    export type SysMenuCountOutputTypeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysMenuCountOutputTypeDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysPostCountOutputTypeDefaultArgs instead\n     */\n    export type SysPostCountOutputTypeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysPostCountOutputTypeDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysUserCountOutputTypeDefaultArgs instead\n     */\n    export type SysUserCountOutputTypeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysUserCountOutputTypeDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysRoleCountOutputTypeDefaultArgs instead\n     */\n    export type SysRoleCountOutputTypeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysRoleCountOutputTypeDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use GenTableDefaultArgs instead\n     */\n    export type GenTableArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = GenTableDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use GenTableColumnDefaultArgs instead\n     */\n    export type GenTableColumnArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = GenTableColumnDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysConfigDefaultArgs instead\n     */\n    export type SysConfigArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysConfigDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysDeptDefaultArgs instead\n     */\n    export type SysDeptArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysDeptDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysDictDataDefaultArgs instead\n     */\n    export type SysDictDataArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysDictDataDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysDictTypeDefaultArgs instead\n     */\n    export type SysDictTypeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysDictTypeDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysLogininforDefaultArgs instead\n     */\n    export type SysLogininforArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysLogininforDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysMenuDefaultArgs instead\n     */\n    export type SysMenuArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysMenuDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysNoticeDefaultArgs instead\n     */\n    export type SysNoticeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysNoticeDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysPostDefaultArgs instead\n     */\n    export type SysPostArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysPostDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysUserPostDefaultArgs instead\n     */\n    export type SysUserPostArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysUserPostDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysRoleDeptDefaultArgs instead\n     */\n    export type SysRoleDeptArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysRoleDeptDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysRoleMenuDefaultArgs instead\n     */\n    export type SysRoleMenuArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysRoleMenuDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysUserDefaultArgs instead\n     */\n    export type SysUserArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysUserDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysRoleDefaultArgs instead\n     */\n    export type SysRoleArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysRoleDefaultArgs<ExtArgs>\n    /**\n     * @deprecated Use SysUserRoleDefaultArgs instead\n     */\n    export type SysUserRoleArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = SysUserRoleDefaultArgs<ExtArgs>\n\n  /**\n   * Batch Payload for updateMany & deleteMany & createMany\n   */\n\n  export type BatchPayload = {\n    count: number\n  }\n\n  /**\n   * DMMF\n   */\n  export const dmmf: runtime.BaseDMMF\n}"
  },
  {
    "path": "server/src/common/prisma-client/index.js",
    "content": "\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nconst {\n  PrismaClientKnownRequestError,\n  PrismaClientUnknownRequestError,\n  PrismaClientRustPanicError,\n  PrismaClientInitializationError,\n  PrismaClientValidationError,\n  NotFoundError,\n  getPrismaClient,\n  sqltag,\n  empty,\n  join,\n  raw,\n  Decimal,\n  Debug,\n  objectEnumValues,\n  makeStrictEnum,\n  Extensions,\n  warnOnce,\n  defineDmmfProperty,\n  Public,\n  getRuntime\n} = require('./runtime/library.js')\n\n\nconst Prisma = {}\n\nexports.Prisma = Prisma\nexports.$Enums = {}\n\n/**\n * Prisma Client JS version: 5.15.0\n * Query Engine version: 12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\n */\nPrisma.prismaVersion = {\n  client: \"5.15.0\",\n  engine: \"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\"\n}\n\nPrisma.PrismaClientKnownRequestError = PrismaClientKnownRequestError;\nPrisma.PrismaClientUnknownRequestError = PrismaClientUnknownRequestError\nPrisma.PrismaClientRustPanicError = PrismaClientRustPanicError\nPrisma.PrismaClientInitializationError = PrismaClientInitializationError\nPrisma.PrismaClientValidationError = PrismaClientValidationError\nPrisma.NotFoundError = NotFoundError\nPrisma.Decimal = Decimal\n\n/**\n * Re-export of sql-template-tag\n */\nPrisma.sql = sqltag\nPrisma.empty = empty\nPrisma.join = join\nPrisma.raw = raw\nPrisma.validator = Public.validator\n\n/**\n* Extensions\n*/\nPrisma.getExtensionContext = Extensions.getExtensionContext\nPrisma.defineExtension = Extensions.defineExtension\n\n/**\n * Shorthand utilities for JSON filtering\n */\nPrisma.DbNull = objectEnumValues.instances.DbNull\nPrisma.JsonNull = objectEnumValues.instances.JsonNull\nPrisma.AnyNull = objectEnumValues.instances.AnyNull\n\nPrisma.NullTypes = {\n  DbNull: objectEnumValues.classes.DbNull,\n  JsonNull: objectEnumValues.classes.JsonNull,\n  AnyNull: objectEnumValues.classes.AnyNull\n}\n\n\n  const path = require('path')\n\n/**\n * Enums\n */\nexports.Prisma.TransactionIsolationLevel = makeStrictEnum({\n  ReadUncommitted: 'ReadUncommitted',\n  ReadCommitted: 'ReadCommitted',\n  RepeatableRead: 'RepeatableRead',\n  Serializable: 'Serializable'\n});\n\nexports.Prisma.GenTableScalarFieldEnum = {\n  tableId: 'tableId',\n  tableName: 'tableName',\n  tableComment: 'tableComment',\n  subTableName: 'subTableName',\n  subTableFkName: 'subTableFkName',\n  className: 'className',\n  tplCategory: 'tplCategory',\n  tplWebType: 'tplWebType',\n  packageName: 'packageName',\n  moduleName: 'moduleName',\n  businessName: 'businessName',\n  functionName: 'functionName',\n  functionAuthor: 'functionAuthor',\n  genType: 'genType',\n  genPath: 'genPath',\n  options: 'options',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.RelationLoadStrategy = {\n  query: 'query',\n  join: 'join'\n};\n\nexports.Prisma.GenTableColumnScalarFieldEnum = {\n  columnId: 'columnId',\n  tableId: 'tableId',\n  columnName: 'columnName',\n  columnComment: 'columnComment',\n  columnType: 'columnType',\n  javaType: 'javaType',\n  javaField: 'javaField',\n  isPk: 'isPk',\n  isIncrement: 'isIncrement',\n  isRequired: 'isRequired',\n  isInsert: 'isInsert',\n  isEdit: 'isEdit',\n  isList: 'isList',\n  isQuery: 'isQuery',\n  queryType: 'queryType',\n  htmlType: 'htmlType',\n  dictType: 'dictType',\n  sort: 'sort',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime'\n};\n\nexports.Prisma.SysConfigScalarFieldEnum = {\n  configId: 'configId',\n  configName: 'configName',\n  configKey: 'configKey',\n  configValue: 'configValue',\n  configType: 'configType',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysDeptScalarFieldEnum = {\n  deptId: 'deptId',\n  parentId: 'parentId',\n  ancestors: 'ancestors',\n  deptName: 'deptName',\n  orderNum: 'orderNum',\n  leader: 'leader',\n  phone: 'phone',\n  email: 'email',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime'\n};\n\nexports.Prisma.SysDictDataScalarFieldEnum = {\n  dictCode: 'dictCode',\n  dictSort: 'dictSort',\n  dictLabel: 'dictLabel',\n  dictValue: 'dictValue',\n  dictType: 'dictType',\n  cssClass: 'cssClass',\n  listClass: 'listClass',\n  isDefault: 'isDefault',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysDictTypeScalarFieldEnum = {\n  dictId: 'dictId',\n  dictName: 'dictName',\n  dictType: 'dictType',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysLogininforScalarFieldEnum = {\n  infoId: 'infoId',\n  userName: 'userName',\n  ipaddr: 'ipaddr',\n  loginLocation: 'loginLocation',\n  browser: 'browser',\n  os: 'os',\n  status: 'status',\n  msg: 'msg',\n  loginTime: 'loginTime'\n};\n\nexports.Prisma.SysMenuScalarFieldEnum = {\n  menuId: 'menuId',\n  menuName: 'menuName',\n  parentId: 'parentId',\n  orderNum: 'orderNum',\n  path: 'path',\n  component: 'component',\n  query: 'query',\n  isFrame: 'isFrame',\n  isCache: 'isCache',\n  menuType: 'menuType',\n  visible: 'visible',\n  status: 'status',\n  perms: 'perms',\n  icon: 'icon',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysNoticeScalarFieldEnum = {\n  noticeId: 'noticeId',\n  noticeTitle: 'noticeTitle',\n  noticeType: 'noticeType',\n  noticeContent: 'noticeContent',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysPostScalarFieldEnum = {\n  postId: 'postId',\n  postCode: 'postCode',\n  postName: 'postName',\n  postSort: 'postSort',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysUserPostScalarFieldEnum = {\n  userId: 'userId',\n  postId: 'postId'\n};\n\nexports.Prisma.SysRoleDeptScalarFieldEnum = {\n  roleId: 'roleId',\n  deptId: 'deptId'\n};\n\nexports.Prisma.SysRoleMenuScalarFieldEnum = {\n  roleId: 'roleId',\n  menuId: 'menuId'\n};\n\nexports.Prisma.SysUserScalarFieldEnum = {\n  userId: 'userId',\n  deptId: 'deptId',\n  userName: 'userName',\n  nickName: 'nickName',\n  userType: 'userType',\n  email: 'email',\n  phonenumber: 'phonenumber',\n  sex: 'sex',\n  avatar: 'avatar',\n  password: 'password',\n  status: 'status',\n  loginIp: 'loginIp',\n  loginDate: 'loginDate',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysRoleScalarFieldEnum = {\n  roleId: 'roleId',\n  roleName: 'roleName',\n  roleKey: 'roleKey',\n  roleSort: 'roleSort',\n  dataScope: 'dataScope',\n  menuCheckStrictly: 'menuCheckStrictly',\n  deptCheckStrictly: 'deptCheckStrictly',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysUserRoleScalarFieldEnum = {\n  userId: 'userId',\n  roleId: 'roleId'\n};\n\nexports.Prisma.SortOrder = {\n  asc: 'asc',\n  desc: 'desc'\n};\n\nexports.Prisma.NullsOrder = {\n  first: 'first',\n  last: 'last'\n};\n\n\nexports.Prisma.ModelName = {\n  GenTable: 'GenTable',\n  GenTableColumn: 'GenTableColumn',\n  SysConfig: 'SysConfig',\n  SysDept: 'SysDept',\n  SysDictData: 'SysDictData',\n  SysDictType: 'SysDictType',\n  SysLogininfor: 'SysLogininfor',\n  SysMenu: 'SysMenu',\n  SysNotice: 'SysNotice',\n  SysPost: 'SysPost',\n  SysUserPost: 'SysUserPost',\n  SysRoleDept: 'SysRoleDept',\n  SysRoleMenu: 'SysRoleMenu',\n  SysUser: 'SysUser',\n  SysRole: 'SysRole',\n  SysUserRole: 'SysUserRole'\n};\n/**\n * Create the Client\n */\nconst config = {\n  \"generator\": {\n    \"name\": \"client\",\n    \"provider\": {\n      \"fromEnvVar\": null,\n      \"value\": \"prisma-client-js\"\n    },\n    \"output\": {\n      \"value\": \"/Users/carole/project/carole-admin/server/src/common/prisma-client\",\n      \"fromEnvVar\": null\n    },\n    \"config\": {\n      \"engineType\": \"library\"\n    },\n    \"binaryTargets\": [\n      {\n        \"fromEnvVar\": null,\n        \"value\": \"darwin\",\n        \"native\": true\n      }\n    ],\n    \"previewFeatures\": [\n      \"views\",\n      \"relationJoins\",\n      \"prismaSchemaFolder\",\n      \"omitApi\"\n    ],\n    \"isCustomOutput\": true\n  },\n  \"relativeEnvPaths\": {\n    \"rootEnvPath\": null,\n    \"schemaEnvPath\": \"../../.env\"\n  },\n  \"relativePath\": \"../..\",\n  \"clientVersion\": \"5.15.0\",\n  \"engineVersion\": \"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\",\n  \"datasourceNames\": [\n    \"db\"\n  ],\n  \"activeProvider\": \"mysql\",\n  \"postinstall\": true,\n  \"inlineDatasources\": {\n    \"db\": {\n      \"url\": {\n        \"fromEnvVar\": \"DATABASE_URL\",\n        \"value\": null\n      }\n    }\n  },\n  \"inlineSchema\": \"model GenTable {\\n  tableId        Int              @id @default(autoincrement()) @map(\\\"table_id\\\") @db.UnsignedInt\\n  tableName      String?          @default(\\\"\\\") @map(\\\"table_name\\\") @db.VarChar(200)\\n  tableComment   String?          @default(\\\"\\\") @map(\\\"table_comment\\\") @db.VarChar(500)\\n  subTableName   String?          @map(\\\"sub_table_name\\\") @db.VarChar(64)\\n  subTableFkName String?          @map(\\\"sub_table_fk_name\\\") @db.VarChar(64)\\n  className      String?          @default(\\\"\\\") @map(\\\"class_name\\\") @db.VarChar(100)\\n  tplCategory    String?          @default(\\\"crud\\\") @map(\\\"tpl_category\\\") @db.VarChar(200)\\n  tplWebType     String?          @default(\\\"\\\") @map(\\\"tpl_web_type\\\") @db.VarChar(30)\\n  packageName    String?          @map(\\\"package_name\\\") @db.VarChar(100)\\n  moduleName     String?          @map(\\\"module_name\\\") @db.VarChar(30)\\n  businessName   String?          @map(\\\"business_name\\\") @db.VarChar(30)\\n  functionName   String?          @map(\\\"function_name\\\") @db.VarChar(50)\\n  functionAuthor String?          @map(\\\"function_author\\\") @db.VarChar(50)\\n  genType        String?          @default(\\\"0\\\") @map(\\\"gen_type\\\") @db.Char(1)\\n  genPath        String?          @default(\\\"/\\\") @map(\\\"gen_path\\\") @db.VarChar(200)\\n  options        String?          @map(\\\"options\\\") @db.VarChar(1000)\\n  createBy       String?          @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime     String?          @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy       String?          @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime     String?          @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark         String?          @db.VarChar(500)\\n  tableColumns   GenTableColumn[]\\n\\n  @@map(\\\"gen_table\\\")\\n}\\n\\nmodel GenTableColumn {\\n  columnId      Int       @id @default(autoincrement()) @map(\\\"column_id\\\") @db.UnsignedInt\\n  tableId       Int?      @map(\\\"table_id\\\") @db.UnsignedInt\\n  columnName    String?   @map(\\\"column_name\\\") @db.VarChar(200)\\n  columnComment String?   @map(\\\"column_comment\\\") @db.VarChar(500)\\n  columnType    String?   @map(\\\"column_type\\\") @db.VarChar(100)\\n  javaType      String?   @map(\\\"java_type\\\") @db.VarChar(500)\\n  javaField     String?   @map(\\\"java_field\\\") @db.VarChar(200)\\n  isPk          String?   @map(\\\"is_pk\\\") @db.Char(1)\\n  isIncrement   String?   @map(\\\"is_increment\\\") @db.Char(1)\\n  isRequired    String?   @map(\\\"is_required\\\") @db.Char(1)\\n  isInsert      String?   @map(\\\"is_insert\\\") @db.Char(1)\\n  isEdit        String?   @map(\\\"is_edit\\\") @db.Char(1)\\n  isList        String?   @map(\\\"is_list\\\") @db.Char(1)\\n  isQuery       String?   @map(\\\"is_query\\\") @db.Char(1)\\n  queryType     String?   @default(\\\"EQ\\\") @map(\\\"query_type\\\") @db.VarChar(200)\\n  htmlType      String?   @map(\\\"html_type\\\") @db.VarChar(200)\\n  dictType      String?   @default(\\\"\\\") @map(\\\"dict_type\\\") @db.VarChar(200)\\n  sort          Int?      @map(\\\"sort\\\")\\n  createBy      String?   @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime    String?   @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy      String?   @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime    String?   @map(\\\"update_time\\\") @db.VarChar(25)\\n  table         GenTable? @relation(fields: [tableId], references: [tableId])\\n\\n  @@index([tableId])\\n  @@map(\\\"gen_table_column\\\")\\n}\\n\\nmodel SysConfig {\\n  configId    Int     @id @default(autoincrement()) @map(\\\"config_id\\\")\\n  configName  String? @default(\\\"\\\") @map(\\\"config_name\\\") @db.VarChar(100)\\n  configKey   String? @default(\\\"\\\") @map(\\\"config_key\\\") @db.VarChar(100)\\n  configValue String? @default(\\\"\\\") @map(\\\"config_value\\\") @db.VarChar(500)\\n  configType  String? @default(\\\"N\\\") @map(\\\"config_type\\\") @db.Char(1)\\n  createBy    String? @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime  String? @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy    String? @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime  String? @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark      String? @map(\\\"remark\\\") @db.VarChar(500)\\n\\n  @@map(\\\"sys_config\\\")\\n}\\n\\nmodel SysDept {\\n  deptId     Int           @id @default(autoincrement()) @map(\\\"dept_id\\\") @db.UnsignedInt\\n  parentId   Int?          @default(0) @map(\\\"parent_id\\\") @db.UnsignedInt\\n  ancestors  String?       @default(\\\"\\\") @map(\\\"ancestors\\\") @db.VarChar(50)\\n  deptName   String?       @default(\\\"\\\") @map(\\\"dept_name\\\") @db.VarChar(30)\\n  orderNum   Int?          @default(0) @map(\\\"order_num\\\")\\n  leader     String?       @map(\\\"leader\\\") @db.VarChar(20)\\n  phone      String?       @map(\\\"phone\\\") @db.VarChar(11)\\n  email      String?       @map(\\\"email\\\") @db.VarChar(50)\\n  status     String?       @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy   String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy   String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  users      SysUser[]\\n  roles      SysRoleDept[]\\n\\n  @@map(\\\"sys_dept\\\")\\n}\\n\\nmodel SysDictData {\\n  dictCode    Int          @id @default(autoincrement()) @map(\\\"dict_code\\\") @db.UnsignedInt\\n  dictSort    Int?         @default(0) @map(\\\"dict_sort\\\")\\n  dictLabel   String?      @default(\\\"\\\") @map(\\\"dict_label\\\") @db.VarChar(100)\\n  dictValue   String?      @default(\\\"\\\") @map(\\\"dict_value\\\") @db.VarChar(100)\\n  dictType    String?      @default(\\\"\\\") @map(\\\"dict_type\\\") @db.VarChar(100)\\n  cssClass    String?      @map(\\\"css_class\\\") @db.VarChar(100)\\n  listClass   String?      @map(\\\"list_class\\\") @db.VarChar(100)\\n  isDefault   String?      @default(\\\"N\\\") @map(\\\"is_default\\\") @db.Char(1)\\n  status      String?      @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy    String?      @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime  String?      @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy    String?      @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime  String?      @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark      String?      @map(\\\"remark\\\") @db.VarChar(500)\\n  sysDictType SysDictType? @relation(fields: [dictType], references: [dictType])\\n\\n  @@index([dictType])\\n  @@map(\\\"sys_dict_data\\\")\\n}\\n\\nmodel SysDictType {\\n  dictId     Int           @id @default(autoincrement()) @map(\\\"dict_id\\\") @db.UnsignedInt\\n  dictName   String?       @default(\\\"\\\") @map(\\\"dict_name\\\") @db.VarChar(100)\\n  dictType   String?       @unique(map: \\\"dict_type\\\") @default(\\\"\\\") @map(\\\"dict_type\\\") @db.VarChar(100)\\n  status     String?       @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy   String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy   String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark     String?       @map(\\\"remark\\\") @db.VarChar(500)\\n  dictDatas  SysDictData[]\\n\\n  @@map(\\\"sys_dict_type\\\")\\n}\\n\\nmodel SysLogininfor {\\n  infoId        Int     @id @default(autoincrement()) @map(\\\"info_id\\\") @db.UnsignedInt\\n  userName      String? @default(\\\"\\\") @map(\\\"user_name\\\") @db.VarChar(50)\\n  ipaddr        String? @default(\\\"\\\") @map(\\\"ipaddr\\\") @db.VarChar(128)\\n  loginLocation String? @default(\\\"\\\") @map(\\\"login_location\\\") @db.VarChar(255)\\n  browser       String? @default(\\\"\\\") @map(\\\"browser\\\") @db.VarChar(50)\\n  os            String? @default(\\\"\\\") @map(\\\"os\\\") @db.VarChar(50)\\n  status        String? @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  msg           String? @default(\\\"\\\") @map(\\\"msg\\\") @db.VarChar(255)\\n  loginTime     String? @map(\\\"login_time\\\") @db.VarChar(25)\\n\\n  @@index([loginTime], map: \\\"idx_sys_logininfor_lt\\\")\\n  @@index([status], map: \\\"idx_sys_logininfor_s\\\")\\n  @@map(\\\"sys_logininfor\\\")\\n}\\n\\nmodel SysMenu {\\n  menuId     Int           @id @default(autoincrement()) @map(\\\"menu_id\\\") @db.UnsignedInt\\n  menuName   String        @map(\\\"menu_name\\\") @db.VarChar(50)\\n  parentId   Int?          @default(0) @map(\\\"parent_id\\\") @db.UnsignedInt\\n  orderNum   Int?          @default(0) @map(\\\"order_num\\\")\\n  path       String?       @default(\\\"\\\") @map(\\\"path\\\") @db.VarChar(200)\\n  component  String?       @map(\\\"component\\\") @db.VarChar(255)\\n  query      String?       @map(\\\"query\\\") @db.VarChar(255)\\n  isFrame    Int?          @default(0) @map(\\\"is_frame\\\")\\n  isCache    Int?          @default(1) @map(\\\"is_cache\\\")\\n  menuType   String?       @default(\\\"\\\") @map(\\\"menu_type\\\") @db.Char(1)\\n  visible    String?       @default(\\\"1\\\") @map(\\\"visible\\\") @db.Char(1)\\n  status     String?       @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  perms      String?       @map(\\\"perms\\\") @db.VarChar(100)\\n  icon       String?       @default(\\\"#\\\") @map(\\\"icon\\\") @db.VarChar(100)\\n  createBy   String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy   String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark     String?       @default(\\\"\\\") @map(\\\"remark\\\") @db.VarChar(500)\\n  roles      SysRoleMenu[]\\n\\n  @@map(\\\"sys_menu\\\")\\n}\\n\\nmodel SysNotice {\\n  noticeId      Int     @id @default(autoincrement()) @map(\\\"notice_id\\\")\\n  noticeTitle   String  @map(\\\"notice_title\\\") @db.VarChar(50)\\n  noticeType    String  @map(\\\"notice_type\\\") @db.Char(1)\\n  noticeContent String? @map(\\\"notice_content\\\") @db.MediumText\\n  status        String? @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy      String? @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime    String? @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy      String? @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime    String? @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark        String? @map(\\\"remark\\\") @db.VarChar(255)\\n\\n  @@map(\\\"sys_notice\\\")\\n}\\n\\nmodel SysPost {\\n  postId     Int           @id @default(autoincrement()) @map(\\\"post_id\\\") @db.UnsignedInt\\n  postCode   String        @map(\\\"post_code\\\") @db.VarChar(64)\\n  postName   String        @map(\\\"post_name\\\") @db.VarChar(50)\\n  postSort   Int           @map(\\\"post_sort\\\")\\n  status     String        @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy   String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy   String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark     String?       @map(\\\"remark\\\") @db.VarChar(500)\\n  users      SysUserPost[]\\n\\n  @@map(\\\"sys_post\\\")\\n}\\n\\nmodel SysUserPost {\\n  userId Int     @map(\\\"user_id\\\") @db.UnsignedInt\\n  postId Int     @map(\\\"post_id\\\") @db.UnsignedInt\\n  user   SysUser @relation(fields: [userId], references: [userId])\\n  post   SysPost @relation(fields: [postId], references: [postId])\\n\\n  @@id([userId, postId])\\n  @@index([postId])\\n  @@map(\\\"sys_user_post\\\")\\n}\\n\\nmodel SysRoleDept {\\n  roleId Int     @map(\\\"role_id\\\") @db.UnsignedInt\\n  deptId Int     @map(\\\"dept_id\\\") @db.UnsignedInt\\n  role   SysRole @relation(fields: [roleId], references: [roleId])\\n  dept   SysDept @relation(fields: [deptId], references: [deptId])\\n\\n  @@id([roleId, deptId])\\n  @@index([deptId])\\n  @@map(\\\"sys_role_dept\\\")\\n}\\n\\nmodel SysRoleMenu {\\n  roleId Int     @map(\\\"role_id\\\") @db.UnsignedInt\\n  menuId Int     @map(\\\"menu_id\\\") @db.UnsignedInt\\n  menu   SysMenu @relation(fields: [menuId], references: [menuId])\\n  role   SysRole @relation(fields: [roleId], references: [roleId])\\n\\n  @@id([roleId, menuId])\\n  @@index([menuId])\\n  @@map(\\\"sys_role_menu\\\")\\n}\\n\\nmodel SysUser {\\n  userId      Int           @id @default(autoincrement()) @map(\\\"user_id\\\") @db.UnsignedInt\\n  deptId      Int?          @map(\\\"dept_id\\\") @db.UnsignedInt\\n  userName    String        @map(\\\"user_name\\\") @db.VarChar(30)\\n  nickName    String        @map(\\\"nick_name\\\") @db.VarChar(30)\\n  userType    String?       @default(\\\"00\\\") @map(\\\"user_type\\\") @db.VarChar(2)\\n  email       String?       @default(\\\"\\\") @map(\\\"email\\\") @db.VarChar(50)\\n  phonenumber String?       @default(\\\"\\\") @map(\\\"phonenumber\\\") @db.VarChar(11)\\n  sex         String?       @default(\\\"0\\\") @map(\\\"sex\\\") @db.Char(1)\\n  avatar      String?       @default(\\\"\\\") @map(\\\"avatar\\\") @db.VarChar(100)\\n  password    String?       @default(\\\"\\\") @map(\\\"password\\\") @db.VarChar(100)\\n  status      String?       @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  loginIp     String?       @default(\\\"\\\") @map(\\\"login_ip\\\") @db.VarChar(128)\\n  loginDate   String?       @map(\\\"login_date\\\") @db.VarChar(25)\\n  createBy    String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime  String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy    String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime  String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark      String?       @map(\\\"remark\\\") @db.VarChar(500)\\n  dept        SysDept?      @relation(fields: [deptId], references: [deptId])\\n  roles       SysUserRole[]\\n  posts       SysUserPost[]\\n\\n  @@index([deptId])\\n  @@map(\\\"sys_user\\\")\\n}\\n\\nmodel SysRole {\\n  roleId            Int           @id @default(autoincrement()) @map(\\\"role_id\\\") @db.UnsignedInt\\n  roleName          String        @map(\\\"role_name\\\") @db.VarChar(30)\\n  roleKey           String        @map(\\\"role_key\\\") @db.VarChar(100)\\n  roleSort          Int           @map(\\\"role_sort\\\")\\n  dataScope         String?       @default(\\\"5\\\") @map(\\\"data_scope\\\") @db.Char(1)\\n  menuCheckStrictly Int?          @default(1) @map(\\\"menu_check_strictly\\\") @db.TinyInt\\n  deptCheckStrictly Int?          @default(1) @map(\\\"dept_check_strictly\\\") @db.TinyInt\\n  status            String        @default(\\\"1\\\") @map(\\\"status\\\") @db.Char(1)\\n  createBy          String?       @default(\\\"\\\") @map(\\\"create_by\\\") @db.VarChar(64)\\n  createTime        String?       @map(\\\"create_time\\\") @db.VarChar(25)\\n  updateBy          String?       @default(\\\"\\\") @map(\\\"update_by\\\") @db.VarChar(64)\\n  updateTime        String?       @map(\\\"update_time\\\") @db.VarChar(25)\\n  remark            String?       @map(\\\"remark\\\") @db.VarChar(500)\\n  users             SysUserRole[]\\n  menus             SysRoleMenu[]\\n  depts             SysRoleDept[]\\n\\n  @@map(\\\"sys_role\\\")\\n}\\n\\nmodel SysUserRole {\\n  userId Int     @map(\\\"user_id\\\") @db.UnsignedInt\\n  roleId Int     @map(\\\"role_id\\\") @db.UnsignedInt\\n  user   SysUser @relation(fields: [userId], references: [userId])\\n  role   SysRole @relation(fields: [roleId], references: [roleId])\\n\\n  @@id([userId, roleId])\\n  @@index([roleId])\\n  @@map(\\\"sys_user_role\\\")\\n}\\n\\ngenerator client {\\n  provider        = \\\"prisma-client-js\\\"\\n  output          = \\\"./common/prisma-client\\\"\\n  previewFeatures = [\\\"views\\\", \\\"relationJoins\\\", \\\"prismaSchemaFolder\\\", \\\"omitApi\\\"]\\n  //这里可以指定平台引擎，native就是当前系统， 如果需要其他系统的自行添加，或者到目标系统执行npx prisma generate\\n  binaryTargets   = [\\\"native\\\"]\\n  // binaryTargets   = [\\\"native\\\", \\\"windows\\\", \\\"linux-musl\\\",\\\"debian-openssl-3.0.x\\\",\\\"darwin\\\",\\\"darwin-arm64\\\"]\\n}\\n\\ndatasource db {\\n  provider     = \\\"mysql\\\"\\n  url          = env(\\\"DATABASE_URL\\\")\\n  relationMode = \\\"prisma\\\"\\n}\\n\",\n  \"inlineSchemaHash\": \"0b0d574d7aafbd1cd7ba47583488b808df1af0e6a2ca704e20a74708d2aad32a\",\n  \"copyEngine\": true\n}\n\nconst fs = require('fs')\n\nconfig.dirname = __dirname\nif (!fs.existsSync(path.join(__dirname, 'schema.prisma'))) {\n  const alternativePaths = [\n    \"src/common/prisma-client\",\n    \"common/prisma-client\",\n  ]\n  \n  const alternativePath = alternativePaths.find((altPath) => {\n    return fs.existsSync(path.join(process.cwd(), altPath, 'schema.prisma'))\n  }) ?? alternativePaths[0]\n\n  config.dirname = path.join(process.cwd(), alternativePath)\n  config.isBundled = true\n}\n\nconfig.runtimeDataModel = JSON.parse(\"{\\\"models\\\":{\\\"GenTable\\\":{\\\"dbName\\\":\\\"gen_table\\\",\\\"fields\\\":[{\\\"name\\\":\\\"tableId\\\",\\\"dbName\\\":\\\"table_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tableName\\\",\\\"dbName\\\":\\\"table_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tableComment\\\",\\\"dbName\\\":\\\"table_comment\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"subTableName\\\",\\\"dbName\\\":\\\"sub_table_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"subTableFkName\\\",\\\"dbName\\\":\\\"sub_table_fk_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"className\\\",\\\"dbName\\\":\\\"class_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tplCategory\\\",\\\"dbName\\\":\\\"tpl_category\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"crud\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tplWebType\\\",\\\"dbName\\\":\\\"tpl_web_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"packageName\\\",\\\"dbName\\\":\\\"package_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"moduleName\\\",\\\"dbName\\\":\\\"module_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"businessName\\\",\\\"dbName\\\":\\\"business_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"functionName\\\",\\\"dbName\\\":\\\"function_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"functionAuthor\\\",\\\"dbName\\\":\\\"function_author\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"genType\\\",\\\"dbName\\\":\\\"gen_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"0\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"genPath\\\",\\\"dbName\\\":\\\"gen_path\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"/\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"options\\\",\\\"dbName\\\":\\\"options\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tableColumns\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"GenTableColumn\\\",\\\"relationName\\\":\\\"GenTableToGenTableColumn\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"GenTableColumn\\\":{\\\"dbName\\\":\\\"gen_table_column\\\",\\\"fields\\\":[{\\\"name\\\":\\\"columnId\\\",\\\"dbName\\\":\\\"column_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"tableId\\\",\\\"dbName\\\":\\\"table_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"columnName\\\",\\\"dbName\\\":\\\"column_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"columnComment\\\",\\\"dbName\\\":\\\"column_comment\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"columnType\\\",\\\"dbName\\\":\\\"column_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"javaType\\\",\\\"dbName\\\":\\\"java_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"javaField\\\",\\\"dbName\\\":\\\"java_field\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isPk\\\",\\\"dbName\\\":\\\"is_pk\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isIncrement\\\",\\\"dbName\\\":\\\"is_increment\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isRequired\\\",\\\"dbName\\\":\\\"is_required\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isInsert\\\",\\\"dbName\\\":\\\"is_insert\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isEdit\\\",\\\"dbName\\\":\\\"is_edit\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isList\\\",\\\"dbName\\\":\\\"is_list\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isQuery\\\",\\\"dbName\\\":\\\"is_query\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"queryType\\\",\\\"dbName\\\":\\\"query_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"EQ\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"htmlType\\\",\\\"dbName\\\":\\\"html_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictType\\\",\\\"dbName\\\":\\\"dict_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"sort\\\",\\\"dbName\\\":\\\"sort\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"table\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"GenTable\\\",\\\"relationName\\\":\\\"GenTableToGenTableColumn\\\",\\\"relationFromFields\\\":[\\\"tableId\\\"],\\\"relationToFields\\\":[\\\"tableId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysConfig\\\":{\\\"dbName\\\":\\\"sys_config\\\",\\\"fields\\\":[{\\\"name\\\":\\\"configId\\\",\\\"dbName\\\":\\\"config_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"configName\\\",\\\"dbName\\\":\\\"config_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"configKey\\\",\\\"dbName\\\":\\\"config_key\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"configValue\\\",\\\"dbName\\\":\\\"config_value\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"configType\\\",\\\"dbName\\\":\\\"config_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"N\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysDept\\\":{\\\"dbName\\\":\\\"sys_dept\\\",\\\"fields\\\":[{\\\"name\\\":\\\"deptId\\\",\\\"dbName\\\":\\\"dept_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"parentId\\\",\\\"dbName\\\":\\\"parent_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"ancestors\\\",\\\"dbName\\\":\\\"ancestors\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"deptName\\\",\\\"dbName\\\":\\\"dept_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"orderNum\\\",\\\"dbName\\\":\\\"order_num\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"leader\\\",\\\"dbName\\\":\\\"leader\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"phone\\\",\\\"dbName\\\":\\\"phone\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"email\\\",\\\"dbName\\\":\\\"email\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"users\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUser\\\",\\\"relationName\\\":\\\"SysDeptToSysUser\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roles\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRoleDept\\\",\\\"relationName\\\":\\\"SysDeptToSysRoleDept\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysDictData\\\":{\\\"dbName\\\":\\\"sys_dict_data\\\",\\\"fields\\\":[{\\\"name\\\":\\\"dictCode\\\",\\\"dbName\\\":\\\"dict_code\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictSort\\\",\\\"dbName\\\":\\\"dict_sort\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictLabel\\\",\\\"dbName\\\":\\\"dict_label\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictValue\\\",\\\"dbName\\\":\\\"dict_value\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictType\\\",\\\"dbName\\\":\\\"dict_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"cssClass\\\",\\\"dbName\\\":\\\"css_class\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"listClass\\\",\\\"dbName\\\":\\\"list_class\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isDefault\\\",\\\"dbName\\\":\\\"is_default\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"N\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"sysDictType\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysDictType\\\",\\\"relationName\\\":\\\"SysDictDataToSysDictType\\\",\\\"relationFromFields\\\":[\\\"dictType\\\"],\\\"relationToFields\\\":[\\\"dictType\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysDictType\\\":{\\\"dbName\\\":\\\"sys_dict_type\\\",\\\"fields\\\":[{\\\"name\\\":\\\"dictId\\\",\\\"dbName\\\":\\\"dict_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictName\\\",\\\"dbName\\\":\\\"dict_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictType\\\",\\\"dbName\\\":\\\"dict_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":true,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dictDatas\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysDictData\\\",\\\"relationName\\\":\\\"SysDictDataToSysDictType\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysLogininfor\\\":{\\\"dbName\\\":\\\"sys_logininfor\\\",\\\"fields\\\":[{\\\"name\\\":\\\"infoId\\\",\\\"dbName\\\":\\\"info_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"userName\\\",\\\"dbName\\\":\\\"user_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"ipaddr\\\",\\\"dbName\\\":\\\"ipaddr\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"loginLocation\\\",\\\"dbName\\\":\\\"login_location\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"browser\\\",\\\"dbName\\\":\\\"browser\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"os\\\",\\\"dbName\\\":\\\"os\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"msg\\\",\\\"dbName\\\":\\\"msg\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"loginTime\\\",\\\"dbName\\\":\\\"login_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysMenu\\\":{\\\"dbName\\\":\\\"sys_menu\\\",\\\"fields\\\":[{\\\"name\\\":\\\"menuId\\\",\\\"dbName\\\":\\\"menu_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menuName\\\",\\\"dbName\\\":\\\"menu_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"parentId\\\",\\\"dbName\\\":\\\"parent_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"orderNum\\\",\\\"dbName\\\":\\\"order_num\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"path\\\",\\\"dbName\\\":\\\"path\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"component\\\",\\\"dbName\\\":\\\"component\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"query\\\",\\\"dbName\\\":\\\"query\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isFrame\\\",\\\"dbName\\\":\\\"is_frame\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":0,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"isCache\\\",\\\"dbName\\\":\\\"is_cache\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":1,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menuType\\\",\\\"dbName\\\":\\\"menu_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"visible\\\",\\\"dbName\\\":\\\"visible\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"perms\\\",\\\"dbName\\\":\\\"perms\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"icon\\\",\\\"dbName\\\":\\\"icon\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"#\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roles\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRoleMenu\\\",\\\"relationName\\\":\\\"SysMenuToSysRoleMenu\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysNotice\\\":{\\\"dbName\\\":\\\"sys_notice\\\",\\\"fields\\\":[{\\\"name\\\":\\\"noticeId\\\",\\\"dbName\\\":\\\"notice_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"noticeTitle\\\",\\\"dbName\\\":\\\"notice_title\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"noticeType\\\",\\\"dbName\\\":\\\"notice_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"noticeContent\\\",\\\"dbName\\\":\\\"notice_content\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysPost\\\":{\\\"dbName\\\":\\\"sys_post\\\",\\\"fields\\\":[{\\\"name\\\":\\\"postId\\\",\\\"dbName\\\":\\\"post_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"postCode\\\",\\\"dbName\\\":\\\"post_code\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"postName\\\",\\\"dbName\\\":\\\"post_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"postSort\\\",\\\"dbName\\\":\\\"post_sort\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"users\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUserPost\\\",\\\"relationName\\\":\\\"SysPostToSysUserPost\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysUserPost\\\":{\\\"dbName\\\":\\\"sys_user_post\\\",\\\"fields\\\":[{\\\"name\\\":\\\"userId\\\",\\\"dbName\\\":\\\"user_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"postId\\\",\\\"dbName\\\":\\\"post_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"user\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUser\\\",\\\"relationName\\\":\\\"SysUserToSysUserPost\\\",\\\"relationFromFields\\\":[\\\"userId\\\"],\\\"relationToFields\\\":[\\\"userId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"post\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysPost\\\",\\\"relationName\\\":\\\"SysPostToSysUserPost\\\",\\\"relationFromFields\\\":[\\\"postId\\\"],\\\"relationToFields\\\":[\\\"postId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":{\\\"name\\\":null,\\\"fields\\\":[\\\"userId\\\",\\\"postId\\\"]},\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysRoleDept\\\":{\\\"dbName\\\":\\\"sys_role_dept\\\",\\\"fields\\\":[{\\\"name\\\":\\\"roleId\\\",\\\"dbName\\\":\\\"role_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"deptId\\\",\\\"dbName\\\":\\\"dept_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"role\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRole\\\",\\\"relationName\\\":\\\"SysRoleToSysRoleDept\\\",\\\"relationFromFields\\\":[\\\"roleId\\\"],\\\"relationToFields\\\":[\\\"roleId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dept\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysDept\\\",\\\"relationName\\\":\\\"SysDeptToSysRoleDept\\\",\\\"relationFromFields\\\":[\\\"deptId\\\"],\\\"relationToFields\\\":[\\\"deptId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":{\\\"name\\\":null,\\\"fields\\\":[\\\"roleId\\\",\\\"deptId\\\"]},\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysRoleMenu\\\":{\\\"dbName\\\":\\\"sys_role_menu\\\",\\\"fields\\\":[{\\\"name\\\":\\\"roleId\\\",\\\"dbName\\\":\\\"role_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menuId\\\",\\\"dbName\\\":\\\"menu_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menu\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysMenu\\\",\\\"relationName\\\":\\\"SysMenuToSysRoleMenu\\\",\\\"relationFromFields\\\":[\\\"menuId\\\"],\\\"relationToFields\\\":[\\\"menuId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"role\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRole\\\",\\\"relationName\\\":\\\"SysRoleToSysRoleMenu\\\",\\\"relationFromFields\\\":[\\\"roleId\\\"],\\\"relationToFields\\\":[\\\"roleId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":{\\\"name\\\":null,\\\"fields\\\":[\\\"roleId\\\",\\\"menuId\\\"]},\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysUser\\\":{\\\"dbName\\\":\\\"sys_user\\\",\\\"fields\\\":[{\\\"name\\\":\\\"userId\\\",\\\"dbName\\\":\\\"user_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"deptId\\\",\\\"dbName\\\":\\\"dept_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"userName\\\",\\\"dbName\\\":\\\"user_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"nickName\\\",\\\"dbName\\\":\\\"nick_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"userType\\\",\\\"dbName\\\":\\\"user_type\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"00\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"email\\\",\\\"dbName\\\":\\\"email\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"phonenumber\\\",\\\"dbName\\\":\\\"phonenumber\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"sex\\\",\\\"dbName\\\":\\\"sex\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"0\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"avatar\\\",\\\"dbName\\\":\\\"avatar\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"password\\\",\\\"dbName\\\":\\\"password\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"loginIp\\\",\\\"dbName\\\":\\\"login_ip\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"loginDate\\\",\\\"dbName\\\":\\\"login_date\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dept\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysDept\\\",\\\"relationName\\\":\\\"SysDeptToSysUser\\\",\\\"relationFromFields\\\":[\\\"deptId\\\"],\\\"relationToFields\\\":[\\\"deptId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roles\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUserRole\\\",\\\"relationName\\\":\\\"SysUserToSysUserRole\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"posts\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUserPost\\\",\\\"relationName\\\":\\\"SysUserToSysUserPost\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysRole\\\":{\\\"dbName\\\":\\\"sys_role\\\",\\\"fields\\\":[{\\\"name\\\":\\\"roleId\\\",\\\"dbName\\\":\\\"role_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":true,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":{\\\"name\\\":\\\"autoincrement\\\",\\\"args\\\":[]},\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roleName\\\",\\\"dbName\\\":\\\"role_name\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roleKey\\\",\\\"dbName\\\":\\\"role_key\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roleSort\\\",\\\"dbName\\\":\\\"role_sort\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"dataScope\\\",\\\"dbName\\\":\\\"data_scope\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"5\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menuCheckStrictly\\\",\\\"dbName\\\":\\\"menu_check_strictly\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":1,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"deptCheckStrictly\\\",\\\"dbName\\\":\\\"dept_check_strictly\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"Int\\\",\\\"default\\\":1,\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"status\\\",\\\"dbName\\\":\\\"status\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"1\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createBy\\\",\\\"dbName\\\":\\\"create_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"createTime\\\",\\\"dbName\\\":\\\"create_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateBy\\\",\\\"dbName\\\":\\\"update_by\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":true,\\\"type\\\":\\\"String\\\",\\\"default\\\":\\\"\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"updateTime\\\",\\\"dbName\\\":\\\"update_time\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"remark\\\",\\\"dbName\\\":\\\"remark\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":false,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"String\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"users\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUserRole\\\",\\\"relationName\\\":\\\"SysRoleToSysUserRole\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"menus\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRoleMenu\\\",\\\"relationName\\\":\\\"SysRoleToSysRoleMenu\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"depts\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":true,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRoleDept\\\",\\\"relationName\\\":\\\"SysRoleToSysRoleDept\\\",\\\"relationFromFields\\\":[],\\\"relationToFields\\\":[],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":null,\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false},\\\"SysUserRole\\\":{\\\"dbName\\\":\\\"sys_user_role\\\",\\\"fields\\\":[{\\\"name\\\":\\\"userId\\\",\\\"dbName\\\":\\\"user_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"roleId\\\",\\\"dbName\\\":\\\"role_id\\\",\\\"kind\\\":\\\"scalar\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":true,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"Int\\\",\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"user\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysUser\\\",\\\"relationName\\\":\\\"SysUserToSysUserRole\\\",\\\"relationFromFields\\\":[\\\"userId\\\"],\\\"relationToFields\\\":[\\\"userId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false},{\\\"name\\\":\\\"role\\\",\\\"kind\\\":\\\"object\\\",\\\"isList\\\":false,\\\"isRequired\\\":true,\\\"isUnique\\\":false,\\\"isId\\\":false,\\\"isReadOnly\\\":false,\\\"hasDefaultValue\\\":false,\\\"type\\\":\\\"SysRole\\\",\\\"relationName\\\":\\\"SysRoleToSysUserRole\\\",\\\"relationFromFields\\\":[\\\"roleId\\\"],\\\"relationToFields\\\":[\\\"roleId\\\"],\\\"isGenerated\\\":false,\\\"isUpdatedAt\\\":false}],\\\"primaryKey\\\":{\\\"name\\\":null,\\\"fields\\\":[\\\"userId\\\",\\\"roleId\\\"]},\\\"uniqueFields\\\":[],\\\"uniqueIndexes\\\":[],\\\"isGenerated\\\":false}},\\\"enums\\\":{},\\\"types\\\":{}}\")\ndefineDmmfProperty(exports.Prisma, config.runtimeDataModel)\nconfig.engineWasm = undefined\n\n\nconst { warnEnvConflicts } = require('./runtime/library.js')\n\nwarnEnvConflicts({\n    rootEnvPath: config.relativeEnvPaths.rootEnvPath && path.resolve(config.dirname, config.relativeEnvPaths.rootEnvPath),\n    schemaEnvPath: config.relativeEnvPaths.schemaEnvPath && path.resolve(config.dirname, config.relativeEnvPaths.schemaEnvPath)\n})\n\nconst PrismaClient = getPrismaClient(config)\nexports.PrismaClient = PrismaClient\nObject.assign(exports, Prisma)\n\n// file annotations for bundling tools to include these files\npath.join(__dirname, \"libquery_engine-darwin.dylib.node\");\npath.join(process.cwd(), \"src/common/prisma-client/libquery_engine-darwin.dylib.node\")\n// file annotations for bundling tools to include these files\npath.join(__dirname, \"schema.prisma\");\npath.join(process.cwd(), \"src/common/prisma-client/schema.prisma\")\n"
  },
  {
    "path": "server/src/common/prisma-client/package.json",
    "content": "{\n  \"name\": \"prisma-client-3bb0c16fd7cfb0948e3effbc9256bc47bfb1b59de010e278f8fa903ea3ea8fa6\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"browser\": \"index-browser.js\",\n  \"exports\": {\n    \"./package.json\": \"./package.json\",\n    \".\": {\n      \"require\": {\n        \"node\": \"./index.js\",\n        \"edge-light\": \"./wasm.js\",\n        \"workerd\": \"./wasm.js\",\n        \"worker\": \"./wasm.js\",\n        \"browser\": \"./index-browser.js\",\n        \"default\": \"./index.js\"\n      },\n      \"import\": {\n        \"node\": \"./index.js\",\n        \"edge-light\": \"./wasm.js\",\n        \"workerd\": \"./wasm.js\",\n        \"worker\": \"./wasm.js\",\n        \"browser\": \"./index-browser.js\",\n        \"default\": \"./index.js\"\n      },\n      \"default\": \"./index.js\"\n    },\n    \"./edge\": {\n      \"types\": \"./edge.d.ts\",\n      \"require\": \"./edge.js\",\n      \"import\": \"./edge.js\",\n      \"default\": \"./edge.js\"\n    },\n    \"./react-native\": {\n      \"types\": \"./react-native.d.ts\",\n      \"require\": \"./react-native.js\",\n      \"import\": \"./react-native.js\",\n      \"default\": \"./react-native.js\"\n    },\n    \"./extension\": {\n      \"types\": \"./extension.d.ts\",\n      \"require\": \"./extension.js\",\n      \"import\": \"./extension.js\",\n      \"default\": \"./extension.js\"\n    },\n    \"./index-browser\": {\n      \"types\": \"./index.d.ts\",\n      \"require\": \"./index-browser.js\",\n      \"import\": \"./index-browser.js\",\n      \"default\": \"./index-browser.js\"\n    },\n    \"./index\": {\n      \"types\": \"./index.d.ts\",\n      \"require\": \"./index.js\",\n      \"import\": \"./index.js\",\n      \"default\": \"./index.js\"\n    },\n    \"./wasm\": {\n      \"types\": \"./wasm.d.ts\",\n      \"require\": \"./wasm.js\",\n      \"import\": \"./wasm.js\",\n      \"default\": \"./wasm.js\"\n    },\n    \"./runtime/library\": {\n      \"types\": \"./runtime/library.d.ts\",\n      \"require\": \"./runtime/library.js\",\n      \"import\": \"./runtime/library.js\",\n      \"default\": \"./runtime/library.js\"\n    },\n    \"./runtime/binary\": {\n      \"types\": \"./runtime/binary.d.ts\",\n      \"require\": \"./runtime/binary.js\",\n      \"import\": \"./runtime/binary.js\",\n      \"default\": \"./runtime/binary.js\"\n    },\n    \"./generator-build\": {\n      \"require\": \"./generator-build/index.js\",\n      \"import\": \"./generator-build/index.js\",\n      \"default\": \"./generator-build/index.js\"\n    },\n    \"./*\": \"./*\"\n  },\n  \"version\": \"5.15.0\",\n  \"sideEffects\": false\n}"
  },
  {
    "path": "server/src/common/prisma-client/runtime/edge-esm.js",
    "content": "var ia=Object.create;var rr=Object.defineProperty;var oa=Object.getOwnPropertyDescriptor;var sa=Object.getOwnPropertyNames;var aa=Object.getPrototypeOf,ua=Object.prototype.hasOwnProperty;var Pt=(e=>typeof require!=\"undefined\"?require:typeof Proxy!=\"undefined\"?new Proxy(e,{get:(t,r)=>(typeof require!=\"undefined\"?require:t)[r]}):e)(function(e){if(typeof require!=\"undefined\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+e+'\" is not supported')});var Ee=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ae=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),nr=(e,t)=>{for(var r in t)rr(e,r,{get:t[r],enumerable:!0})},Qn=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of sa(t))!ua.call(e,i)&&i!==r&&rr(e,i,{get:()=>t[i],enumerable:!(n=oa(t,i))||n.enumerable});return e};var Ue=(e,t,r)=>(r=e!=null?ia(aa(e)):{},Qn(t||!e||!e.__esModule?rr(r,\"default\",{value:e,enumerable:!0}):r,e)),Gn=e=>Qn(rr({},\"__esModule\",{value:!0}),e);var y,c=Ee(()=>{\"use strict\";y={nextTick:(e,...t)=>{setTimeout(()=>{e(...t)},0)},env:{},version:\"\",cwd:()=>\"/\",stderr:{},argv:[\"/bin/node\"]}});var Hn,b,p=Ee(()=>{\"use strict\";b=(Hn=globalThis.performance)!=null?Hn:(()=>{let e=Date.now();return{now:()=>Date.now()-e}})()});var E,f=Ee(()=>{\"use strict\";E=()=>{};E.prototype=E});var m=Ee(()=>{\"use strict\"});var fi=Ae(rt=>{\"use strict\";d();c();p();f();m();var Zn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),la=Zn(e=>{\"use strict\";e.byteLength=u,e.toByteArray=g,e.fromByteArray=S;var t=[],r=[],n=typeof Uint8Array<\"u\"?Uint8Array:Array,i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";for(o=0,s=i.length;o<s;++o)t[o]=i[o],r[i.charCodeAt(o)]=o;var o,s;r[45]=62,r[95]=63;function a(C){var A=C.length;if(A%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var k=C.indexOf(\"=\");k===-1&&(k=A);var O=k===A?0:4-k%4;return[k,O]}function u(C){var A=a(C),k=A[0],O=A[1];return(k+O)*3/4-O}function l(C,A,k){return(A+k)*3/4-k}function g(C){var A,k=a(C),O=k[0],B=k[1],M=new n(l(C,O,B)),I=0,Z=B>0?O-4:O,L;for(L=0;L<Z;L+=4)A=r[C.charCodeAt(L)]<<18|r[C.charCodeAt(L+1)]<<12|r[C.charCodeAt(L+2)]<<6|r[C.charCodeAt(L+3)],M[I++]=A>>16&255,M[I++]=A>>8&255,M[I++]=A&255;return B===2&&(A=r[C.charCodeAt(L)]<<2|r[C.charCodeAt(L+1)]>>4,M[I++]=A&255),B===1&&(A=r[C.charCodeAt(L)]<<10|r[C.charCodeAt(L+1)]<<4|r[C.charCodeAt(L+2)]>>2,M[I++]=A>>8&255,M[I++]=A&255),M}function h(C){return t[C>>18&63]+t[C>>12&63]+t[C>>6&63]+t[C&63]}function x(C,A,k){for(var O,B=[],M=A;M<k;M+=3)O=(C[M]<<16&16711680)+(C[M+1]<<8&65280)+(C[M+2]&255),B.push(h(O));return B.join(\"\")}function S(C){for(var A,k=C.length,O=k%3,B=[],M=16383,I=0,Z=k-O;I<Z;I+=M)B.push(x(C,I,I+M>Z?Z:I+M));return O===1?(A=C[k-1],B.push(t[A>>2]+t[A<<4&63]+\"==\")):O===2&&(A=(C[k-2]<<8)+C[k-1],B.push(t[A>>10]+t[A>>4&63]+t[A<<2&63]+\"=\")),B.join(\"\")}}),ca=Zn(e=>{e.read=function(t,r,n,i,o){var s,a,u=o*8-i-1,l=(1<<u)-1,g=l>>1,h=-7,x=n?o-1:0,S=n?-1:1,C=t[r+x];for(x+=S,s=C&(1<<-h)-1,C>>=-h,h+=u;h>0;s=s*256+t[r+x],x+=S,h-=8);for(a=s&(1<<-h)-1,s>>=-h,h+=i;h>0;a=a*256+t[r+x],x+=S,h-=8);if(s===0)s=1-g;else{if(s===l)return a?NaN:(C?-1:1)*(1/0);a=a+Math.pow(2,i),s=s-g}return(C?-1:1)*a*Math.pow(2,s-i)},e.write=function(t,r,n,i,o,s){var a,u,l,g=s*8-o-1,h=(1<<g)-1,x=h>>1,S=o===23?Math.pow(2,-24)-Math.pow(2,-77):0,C=i?0:s-1,A=i?1:-1,k=r<0||r===0&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(u=isNaN(r)?1:0,a=h):(a=Math.floor(Math.log(r)/Math.LN2),r*(l=Math.pow(2,-a))<1&&(a--,l*=2),a+x>=1?r+=S/l:r+=S*Math.pow(2,1-x),r*l>=2&&(a++,l/=2),a+x>=h?(u=0,a=h):a+x>=1?(u=(r*l-1)*Math.pow(2,o),a=a+x):(u=r*Math.pow(2,x-1)*Math.pow(2,o),a=0));o>=8;t[n+C]=u&255,C+=A,u/=256,o-=8);for(a=a<<o|u,g+=o;g>0;t[n+C]=a&255,C+=A,a/=256,g-=8);t[n+C-A]|=k*128}}),Qr=la(),et=ca(),Wn=typeof Symbol==\"function\"&&typeof Symbol.for==\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;rt.Buffer=T;rt.SlowBuffer=ha;rt.INSPECT_MAX_BYTES=50;var ir=2147483647;rt.kMaxLength=ir;T.TYPED_ARRAY_SUPPORT=pa();!T.TYPED_ARRAY_SUPPORT&&typeof console<\"u\"&&typeof console.error==\"function\"&&console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");function pa(){try{let e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),e.foo()===42}catch(e){return!1}}Object.defineProperty(T.prototype,\"parent\",{enumerable:!0,get:function(){if(T.isBuffer(this))return this.buffer}});Object.defineProperty(T.prototype,\"offset\",{enumerable:!0,get:function(){if(T.isBuffer(this))return this.byteOffset}});function be(e){if(e>ir)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');let t=new Uint8Array(e);return Object.setPrototypeOf(t,T.prototype),t}function T(e,t,r){if(typeof e==\"number\"){if(typeof t==\"string\")throw new TypeError('The \"string\" argument must be of type string. Received type number');return Wr(e)}return Xn(e,t,r)}T.poolSize=8192;function Xn(e,t,r){if(typeof e==\"string\")return ma(e,t);if(ArrayBuffer.isView(e))return da(e);if(e==null)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(me(e,ArrayBuffer)||e&&me(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer<\"u\"&&(me(e,SharedArrayBuffer)||e&&me(e.buffer,SharedArrayBuffer)))return ti(e,t,r);if(typeof e==\"number\")throw new TypeError('The \"value\" argument must not be of type number. Received type number');let n=e.valueOf&&e.valueOf();if(n!=null&&n!==e)return T.from(n,t,r);let i=ga(e);if(i)return i;if(typeof Symbol<\"u\"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]==\"function\")return T.from(e[Symbol.toPrimitive](\"string\"),t,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}T.from=function(e,t,r){return Xn(e,t,r)};Object.setPrototypeOf(T.prototype,Uint8Array.prototype);Object.setPrototypeOf(T,Uint8Array);function ei(e){if(typeof e!=\"number\")throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function fa(e,t,r){return ei(e),e<=0?be(e):t!==void 0?typeof r==\"string\"?be(e).fill(t,r):be(e).fill(t):be(e)}T.alloc=function(e,t,r){return fa(e,t,r)};function Wr(e){return ei(e),be(e<0?0:Kr(e)|0)}T.allocUnsafe=function(e){return Wr(e)};T.allocUnsafeSlow=function(e){return Wr(e)};function ma(e,t){if((typeof t!=\"string\"||t===\"\")&&(t=\"utf8\"),!T.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);let r=ri(e,t)|0,n=be(r),i=n.write(e,t);return i!==r&&(n=n.slice(0,i)),n}function Gr(e){let t=e.length<0?0:Kr(e.length)|0,r=be(t);for(let n=0;n<t;n+=1)r[n]=e[n]&255;return r}function da(e){if(me(e,Uint8Array)){let t=new Uint8Array(e);return ti(t.buffer,t.byteOffset,t.byteLength)}return Gr(e)}function ti(e,t,r){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw new RangeError('\"length\" is outside of buffer bounds');let n;return t===void 0&&r===void 0?n=new Uint8Array(e):r===void 0?n=new Uint8Array(e,t):n=new Uint8Array(e,t,r),Object.setPrototypeOf(n,T.prototype),n}function ga(e){if(T.isBuffer(e)){let t=Kr(e.length)|0,r=be(t);return r.length===0||e.copy(r,0,0,t),r}if(e.length!==void 0)return typeof e.length!=\"number\"||Yr(e.length)?be(0):Gr(e);if(e.type===\"Buffer\"&&Array.isArray(e.data))return Gr(e.data)}function Kr(e){if(e>=ir)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+ir.toString(16)+\" bytes\");return e|0}function ha(e){return+e!=e&&(e=0),T.alloc(+e)}T.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==T.prototype};T.compare=function(e,t){if(me(e,Uint8Array)&&(e=T.from(e,e.offset,e.byteLength)),me(t,Uint8Array)&&(t=T.from(t,t.offset,t.byteLength)),!T.isBuffer(e)||!T.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let r=e.length,n=t.length;for(let i=0,o=Math.min(r,n);i<o;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0};T.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}};T.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(e.length===0)return T.alloc(0);let r;if(t===void 0)for(t=0,r=0;r<e.length;++r)t+=e[r].length;let n=T.allocUnsafe(t),i=0;for(r=0;r<e.length;++r){let o=e[r];if(me(o,Uint8Array))i+o.length>n.length?(T.isBuffer(o)||(o=T.from(o)),o.copy(n,i)):Uint8Array.prototype.set.call(n,o,i);else if(T.isBuffer(o))o.copy(n,i);else throw new TypeError('\"list\" argument must be an Array of Buffers');i+=o.length}return n};function ri(e,t){if(T.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||me(e,ArrayBuffer))return e.byteLength;if(typeof e!=\"string\")throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let r=e.length,n=arguments.length>2&&arguments[2]===!0;if(!n&&r===0)return 0;let i=!1;for(;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return Hr(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return r*2;case\"hex\":return r>>>1;case\"base64\":return pi(e).length;default:if(i)return n?-1:Hr(e).length;t=(\"\"+t).toLowerCase(),i=!0}}T.byteLength=ri;function ya(e,t,r){let n=!1;if((t===void 0||t<0)&&(t=0),t>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0,t>>>=0,r<=t))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return Ra(this,t,r);case\"utf8\":case\"utf-8\":return ii(this,t,r);case\"ascii\":return Ca(this,t,r);case\"latin1\":case\"binary\":return Aa(this,t,r);case\"base64\":return va(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Sa(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}T.prototype._isBuffer=!0;function Ve(e,t,r){let n=e[t];e[t]=e[r],e[r]=n}T.prototype.swap16=function(){let e=this.length;if(e%2!==0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let t=0;t<e;t+=2)Ve(this,t,t+1);return this};T.prototype.swap32=function(){let e=this.length;if(e%4!==0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let t=0;t<e;t+=4)Ve(this,t,t+3),Ve(this,t+1,t+2);return this};T.prototype.swap64=function(){let e=this.length;if(e%8!==0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let t=0;t<e;t+=8)Ve(this,t,t+7),Ve(this,t+1,t+6),Ve(this,t+2,t+5),Ve(this,t+3,t+4);return this};T.prototype.toString=function(){let e=this.length;return e===0?\"\":arguments.length===0?ii(this,0,e):ya.apply(this,arguments)};T.prototype.toLocaleString=T.prototype.toString;T.prototype.equals=function(e){if(!T.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e?!0:T.compare(this,e)===0};T.prototype.inspect=function(){let e=\"\",t=rt.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,t).replace(/(.{2})/g,\"$1 \").trim(),this.length>t&&(e+=\" ... \"),\"<Buffer \"+e+\">\"};Wn&&(T.prototype[Wn]=T.prototype.inspect);T.prototype.compare=function(e,t,r,n,i){if(me(e,Uint8Array)&&(e=T.from(e,e.offset,e.byteLength)),!T.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(t===void 0&&(t=0),r===void 0&&(r=e?e.length:0),n===void 0&&(n=0),i===void 0&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;let o=i-n,s=r-t,a=Math.min(o,s),u=this.slice(n,i),l=e.slice(t,r);for(let g=0;g<a;++g)if(u[g]!==l[g]){o=u[g],s=l[g];break}return o<s?-1:s<o?1:0};function ni(e,t,r,n,i){if(e.length===0)return-1;if(typeof r==\"string\"?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,Yr(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0)if(i)r=0;else return-1;if(typeof t==\"string\"&&(t=T.from(t,n)),T.isBuffer(t))return t.length===0?-1:Kn(e,t,r,n,i);if(typeof t==\"number\")return t=t&255,typeof Uint8Array.prototype.indexOf==\"function\"?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):Kn(e,[t],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function Kn(e,t,r,n,i){let o=1,s=e.length,a=t.length;if(n!==void 0&&(n=String(n).toLowerCase(),n===\"ucs2\"||n===\"ucs-2\"||n===\"utf16le\"||n===\"utf-16le\")){if(e.length<2||t.length<2)return-1;o=2,s/=2,a/=2,r/=2}function u(g,h){return o===1?g[h]:g.readUInt16BE(h*o)}let l;if(i){let g=-1;for(l=r;l<s;l++)if(u(e,l)===u(t,g===-1?0:l-g)){if(g===-1&&(g=l),l-g+1===a)return g*o}else g!==-1&&(l-=l-g),g=-1}else for(r+a>s&&(r=s-a),l=r;l>=0;l--){let g=!0;for(let h=0;h<a;h++)if(u(e,l+h)!==u(t,h)){g=!1;break}if(g)return l}return-1}T.prototype.includes=function(e,t,r){return this.indexOf(e,t,r)!==-1};T.prototype.indexOf=function(e,t,r){return ni(this,e,t,r,!0)};T.prototype.lastIndexOf=function(e,t,r){return ni(this,e,t,r,!1)};function wa(e,t,r,n){r=Number(r)||0;let i=e.length-r;n?(n=Number(n),n>i&&(n=i)):n=i;let o=t.length;n>o/2&&(n=o/2);let s;for(s=0;s<n;++s){let a=parseInt(t.substr(s*2,2),16);if(Yr(a))return s;e[r+s]=a}return s}function Ea(e,t,r,n){return or(Hr(t,e.length-r),e,r,n)}function ba(e,t,r,n){return or(Oa(t),e,r,n)}function xa(e,t,r,n){return or(pi(t),e,r,n)}function Pa(e,t,r,n){return or(Ma(t,e.length-r),e,r,n)}T.prototype.write=function(e,t,r,n){if(t===void 0)n=\"utf8\",r=this.length,t=0;else if(r===void 0&&typeof t==\"string\")n=t,r=this.length,t=0;else if(isFinite(t))t=t>>>0,isFinite(r)?(r=r>>>0,n===void 0&&(n=\"utf8\")):(n=r,r=void 0);else throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");let i=this.length-t;if((r===void 0||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");let o=!1;for(;;)switch(n){case\"hex\":return wa(this,e,t,r);case\"utf8\":case\"utf-8\":return Ea(this,e,t,r);case\"ascii\":case\"latin1\":case\"binary\":return ba(this,e,t,r);case\"base64\":return xa(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Pa(this,e,t,r);default:if(o)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),o=!0}};T.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function va(e,t,r){return t===0&&r===e.length?Qr.fromByteArray(e):Qr.fromByteArray(e.slice(t,r))}function ii(e,t,r){r=Math.min(e.length,r);let n=[],i=t;for(;i<r;){let o=e[i],s=null,a=o>239?4:o>223?3:o>191?2:1;if(i+a<=r){let u,l,g,h;switch(a){case 1:o<128&&(s=o);break;case 2:u=e[i+1],(u&192)===128&&(h=(o&31)<<6|u&63,h>127&&(s=h));break;case 3:u=e[i+1],l=e[i+2],(u&192)===128&&(l&192)===128&&(h=(o&15)<<12|(u&63)<<6|l&63,h>2047&&(h<55296||h>57343)&&(s=h));break;case 4:u=e[i+1],l=e[i+2],g=e[i+3],(u&192)===128&&(l&192)===128&&(g&192)===128&&(h=(o&15)<<18|(u&63)<<12|(l&63)<<6|g&63,h>65535&&h<1114112&&(s=h))}}s===null?(s=65533,a=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),i+=a}return Ta(n)}var zn=4096;function Ta(e){let t=e.length;if(t<=zn)return String.fromCharCode.apply(String,e);let r=\"\",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=zn));return r}function Ca(e,t,r){let n=\"\";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]&127);return n}function Aa(e,t,r){let n=\"\";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function Ra(e,t,r){let n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);let i=\"\";for(let o=t;o<r;++o)i+=Na[e[o]];return i}function Sa(e,t,r){let n=e.slice(t,r),i=\"\";for(let o=0;o<n.length-1;o+=2)i+=String.fromCharCode(n[o]+n[o+1]*256);return i}T.prototype.slice=function(e,t){let r=this.length;e=~~e,t=t===void 0?r:~~t,e<0?(e+=r,e<0&&(e=0)):e>r&&(e=r),t<0?(t+=r,t<0&&(t=0)):t>r&&(t=r),t<e&&(t=e);let n=this.subarray(e,t);return Object.setPrototypeOf(n,T.prototype),n};function W(e,t,r){if(e%1!==0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>r)throw new RangeError(\"Trying to access beyond buffer length\")}T.prototype.readUintLE=T.prototype.readUIntLE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=this[e],i=1,o=0;for(;++o<t&&(i*=256);)n+=this[e+o]*i;return n};T.prototype.readUintBE=T.prototype.readUIntBE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=this[e+--t],i=1;for(;t>0&&(i*=256);)n+=this[e+--t]*i;return n};T.prototype.readUint8=T.prototype.readUInt8=function(e,t){return e=e>>>0,t||W(e,1,this.length),this[e]};T.prototype.readUint16LE=T.prototype.readUInt16LE=function(e,t){return e=e>>>0,t||W(e,2,this.length),this[e]|this[e+1]<<8};T.prototype.readUint16BE=T.prototype.readUInt16BE=function(e,t){return e=e>>>0,t||W(e,2,this.length),this[e]<<8|this[e+1]};T.prototype.readUint32LE=T.prototype.readUInt32LE=function(e,t){return e=e>>>0,t||W(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216};T.prototype.readUint32BE=T.prototype.readUInt32BE=function(e,t){return e=e>>>0,t||W(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])};T.prototype.readBigUInt64LE=Re(function(e){e=e>>>0,tt(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&vt(e,this.length-8);let n=t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24,i=this[++e]+this[++e]*2**8+this[++e]*2**16+r*2**24;return BigInt(n)+(BigInt(i)<<BigInt(32))});T.prototype.readBigUInt64BE=Re(function(e){e=e>>>0,tt(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&vt(e,this.length-8);let n=t*2**24+this[++e]*2**16+this[++e]*2**8+this[++e],i=this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+r;return(BigInt(n)<<BigInt(32))+BigInt(i)});T.prototype.readIntLE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=this[e],i=1,o=0;for(;++o<t&&(i*=256);)n+=this[e+o]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*t)),n};T.prototype.readIntBE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=t,i=1,o=this[e+--n];for(;n>0&&(i*=256);)o+=this[e+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o};T.prototype.readInt8=function(e,t){return e=e>>>0,t||W(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]};T.prototype.readInt16LE=function(e,t){e=e>>>0,t||W(e,2,this.length);let r=this[e]|this[e+1]<<8;return r&32768?r|4294901760:r};T.prototype.readInt16BE=function(e,t){e=e>>>0,t||W(e,2,this.length);let r=this[e+1]|this[e]<<8;return r&32768?r|4294901760:r};T.prototype.readInt32LE=function(e,t){return e=e>>>0,t||W(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24};T.prototype.readInt32BE=function(e,t){return e=e>>>0,t||W(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]};T.prototype.readBigInt64LE=Re(function(e){e=e>>>0,tt(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&vt(e,this.length-8);let n=this[e+4]+this[e+5]*2**8+this[e+6]*2**16+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24)});T.prototype.readBigInt64BE=Re(function(e){e=e>>>0,tt(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&vt(e,this.length-8);let n=(t<<24)+this[++e]*2**16+this[++e]*2**8+this[++e];return(BigInt(n)<<BigInt(32))+BigInt(this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+r)});T.prototype.readFloatLE=function(e,t){return e=e>>>0,t||W(e,4,this.length),et.read(this,e,!0,23,4)};T.prototype.readFloatBE=function(e,t){return e=e>>>0,t||W(e,4,this.length),et.read(this,e,!1,23,4)};T.prototype.readDoubleLE=function(e,t){return e=e>>>0,t||W(e,8,this.length),et.read(this,e,!0,52,8)};T.prototype.readDoubleBE=function(e,t){return e=e>>>0,t||W(e,8,this.length),et.read(this,e,!1,52,8)};function ie(e,t,r,n,i,o){if(!T.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>i||t<o)throw new RangeError('\"value\" argument is out of bounds');if(r+n>e.length)throw new RangeError(\"Index out of range\")}T.prototype.writeUintLE=T.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t=t>>>0,r=r>>>0,!n){let s=Math.pow(2,8*r)-1;ie(this,e,t,r,s,0)}let i=1,o=0;for(this[t]=e&255;++o<r&&(i*=256);)this[t+o]=e/i&255;return t+r};T.prototype.writeUintBE=T.prototype.writeUIntBE=function(e,t,r,n){if(e=+e,t=t>>>0,r=r>>>0,!n){let s=Math.pow(2,8*r)-1;ie(this,e,t,r,s,0)}let i=r-1,o=1;for(this[t+i]=e&255;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r};T.prototype.writeUint8=T.prototype.writeUInt8=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,1,255,0),this[t]=e&255,t+1};T.prototype.writeUint16LE=T.prototype.writeUInt16LE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,2,65535,0),this[t]=e&255,this[t+1]=e>>>8,t+2};T.prototype.writeUint16BE=T.prototype.writeUInt16BE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=e&255,t+2};T.prototype.writeUint32LE=T.prototype.writeUInt32LE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=e&255,t+4};T.prototype.writeUint32BE=T.prototype.writeUInt32BE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};function oi(e,t,r,n,i){ci(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o=o>>8,e[r++]=o,o=o>>8,e[r++]=o,o=o>>8,e[r++]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,r}function si(e,t,r,n,i){ci(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o=o>>8,e[r+6]=o,o=o>>8,e[r+5]=o,o=o>>8,e[r+4]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s=s>>8,e[r+2]=s,s=s>>8,e[r+1]=s,s=s>>8,e[r]=s,r+8}T.prototype.writeBigUInt64LE=Re(function(e,t=0){return oi(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))});T.prototype.writeBigUInt64BE=Re(function(e,t=0){return si(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))});T.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t=t>>>0,!n){let a=Math.pow(2,8*r-1);ie(this,e,t,r,a-1,-a)}let i=0,o=1,s=0;for(this[t]=e&255;++i<r&&(o*=256);)e<0&&s===0&&this[t+i-1]!==0&&(s=1),this[t+i]=(e/o>>0)-s&255;return t+r};T.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t=t>>>0,!n){let a=Math.pow(2,8*r-1);ie(this,e,t,r,a-1,-a)}let i=r-1,o=1,s=0;for(this[t+i]=e&255;--i>=0&&(o*=256);)e<0&&s===0&&this[t+i+1]!==0&&(s=1),this[t+i]=(e/o>>0)-s&255;return t+r};T.prototype.writeInt8=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=e&255,t+1};T.prototype.writeInt16LE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,2,32767,-32768),this[t]=e&255,this[t+1]=e>>>8,t+2};T.prototype.writeInt16BE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=e&255,t+2};T.prototype.writeInt32LE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,4,2147483647,-2147483648),this[t]=e&255,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4};T.prototype.writeInt32BE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};T.prototype.writeBigInt64LE=Re(function(e,t=0){return oi(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});T.prototype.writeBigInt64BE=Re(function(e,t=0){return si(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});function ai(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function ui(e,t,r,n,i){return t=+t,r=r>>>0,i||ai(e,t,r,4,34028234663852886e22,-34028234663852886e22),et.write(e,t,r,n,23,4),r+4}T.prototype.writeFloatLE=function(e,t,r){return ui(this,e,t,!0,r)};T.prototype.writeFloatBE=function(e,t,r){return ui(this,e,t,!1,r)};function li(e,t,r,n,i){return t=+t,r=r>>>0,i||ai(e,t,r,8,17976931348623157e292,-17976931348623157e292),et.write(e,t,r,n,52,8),r+8}T.prototype.writeDoubleLE=function(e,t,r){return li(this,e,t,!0,r)};T.prototype.writeDoubleBE=function(e,t,r){return li(this,e,t,!1,r)};T.prototype.copy=function(e,t,r,n){if(!T.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(r||(r=0),!n&&n!==0&&(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r||e.length===0||this.length===0)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(r<0||r>=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);let i=n-r;return this===e&&typeof Uint8Array.prototype.copyWithin==\"function\"?this.copyWithin(t,r,n):Uint8Array.prototype.set.call(e,this.subarray(r,n),t),i};T.prototype.fill=function(e,t,r,n){if(typeof e==\"string\"){if(typeof t==\"string\"?(n=t,t=0,r=this.length):typeof r==\"string\"&&(n=r,r=this.length),n!==void 0&&typeof n!=\"string\")throw new TypeError(\"encoding must be a string\");if(typeof n==\"string\"&&!T.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n);if(e.length===1){let o=e.charCodeAt(0);(n===\"utf8\"&&o<128||n===\"latin1\")&&(e=o)}}else typeof e==\"number\"?e=e&255:typeof e==\"boolean\"&&(e=Number(e));if(t<0||this.length<t||this.length<r)throw new RangeError(\"Out of range index\");if(r<=t)return this;t=t>>>0,r=r===void 0?this.length:r>>>0,e||(e=0);let i;if(typeof e==\"number\")for(i=t;i<r;++i)this[i]=e;else{let o=T.isBuffer(e)?e:T.from(e,n),s=o.length;if(s===0)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(i=0;i<r-t;++i)this[i+t]=o[i%s]}return this};var Xe={};function zr(e,t,r){Xe[e]=class extends r{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(n){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:n,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}zr(\"ERR_BUFFER_OUT_OF_BOUNDS\",function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"},RangeError);zr(\"ERR_INVALID_ARG_TYPE\",function(e,t){return`The \"${e}\" argument must be of type number. Received type ${typeof t}`},TypeError);zr(\"ERR_OUT_OF_RANGE\",function(e,t,r){let n=`The value of \"${e}\" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=Yn(String(r)):typeof r==\"bigint\"&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=Yn(i)),i+=\"n\"),n+=` It must be ${t}. Received ${i}`,n},RangeError);function Yn(e){let t=\"\",r=e.length,n=e[0]===\"-\"?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function Ia(e,t,r){tt(t,\"offset\"),(e[t]===void 0||e[t+r]===void 0)&&vt(t,e.length-(r+1))}function ci(e,t,r,n,i,o){if(e>r||e<t){let s=typeof t==\"bigint\"?\"n\":\"\",a;throw o>3?t===0||t===BigInt(0)?a=`>= 0${s} and < 2${s} ** ${(o+1)*8}${s}`:a=`>= -(2${s} ** ${(o+1)*8-1}${s}) and < 2 ** ${(o+1)*8-1}${s}`:a=`>= ${t}${s} and <= ${r}${s}`,new Xe.ERR_OUT_OF_RANGE(\"value\",a,e)}Ia(n,i,o)}function tt(e,t){if(typeof e!=\"number\")throw new Xe.ERR_INVALID_ARG_TYPE(t,\"number\",e)}function vt(e,t,r){throw Math.floor(e)!==e?(tt(e,r),new Xe.ERR_OUT_OF_RANGE(r||\"offset\",\"an integer\",e)):t<0?new Xe.ERR_BUFFER_OUT_OF_BOUNDS:new Xe.ERR_OUT_OF_RANGE(r||\"offset\",`>= ${r?1:0} and <= ${t}`,e)}var Da=/[^+/0-9A-Za-z-_]/g;function ka(e){if(e=e.split(\"=\")[0],e=e.trim().replace(Da,\"\"),e.length<2)return\"\";for(;e.length%4!==0;)e=e+\"=\";return e}function Hr(e,t){t=t||1/0;let r,n=e.length,i=null,o=[];for(let s=0;s<n;++s){if(r=e.charCodeAt(s),r>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}else if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,r&63|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else throw new Error(\"Invalid code point\")}return o}function Oa(e){let t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r)&255);return t}function Ma(e,t){let r,n,i,o=[];for(let s=0;s<e.length&&!((t-=2)<0);++s)r=e.charCodeAt(s),n=r>>8,i=r%256,o.push(i),o.push(n);return o}function pi(e){return Qr.toByteArray(ka(e))}function or(e,t,r,n){let i;for(i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function me(e,t){return e instanceof t||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===t.name}function Yr(e){return e!==e}var Na=function(){let e=\"0123456789abcdef\",t=new Array(256);for(let r=0;r<16;++r){let n=r*16;for(let i=0;i<16;++i)t[n+i]=e[r]+e[i]}return t}();function Re(e){return typeof BigInt>\"u\"?_a:e}function _a(){throw new Error(\"BigInt not supported\")}});var w,d=Ee(()=>{\"use strict\";w=Ue(fi())});function Fa(){return!1}var La,Ba,wi,Ei=Ee(()=>{\"use strict\";d();c();p();f();m();La={},Ba={existsSync:Fa,promises:La},wi=Ba});var ki=Ae((df,Di)=>{\"use strict\";d();c();p();f();m();Di.exports=(en(),Gn(Xr)).format});var Xr={};nr(Xr,{default:()=>Ua,deprecate:()=>Mi,format:()=>_i,inspect:()=>Ni,promisify:()=>Oi});function Oi(e){return(...t)=>new Promise((r,n)=>{e(...t,(i,o)=>{i?n(i):r(o)})})}function Mi(e,t){return(...r)=>(console.warn(t),e(...r))}function Ni(e){return JSON.stringify(e,(t,r)=>typeof r==\"function\"?r.toString():typeof r==\"bigint\"?`${r}n`:r instanceof Error?{...r,message:r.message,stack:r.stack}:r)}var _i,qa,Ua,en=Ee(()=>{\"use strict\";d();c();p();f();m();_i=ki(),qa={promisify:Oi,deprecate:Mi,inspect:Ni,format:_i},Ua=qa});function Ga(...e){return e.join(\"/\")}function Ha(...e){return e.join(\"/\")}var ji,Wa,Ka,Ct,Ji=Ee(()=>{\"use strict\";d();c();p();f();m();ji=\"/\",Wa={sep:ji},Ka={resolve:Ga,posix:Wa,join:Ha,sep:ji},Ct=Ka});var lr,Gi=Ee(()=>{\"use strict\";d();c();p();f();m();lr=class{constructor(){this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),this}emit(t,...r){return this.events[t]?(this.events[t].forEach(n=>{n(...r)}),!0):!1}}});var Wi=Ae((bm,Hi)=>{\"use strict\";d();c();p();f();m();Hi.exports=(e,t=1,r)=>{if(r={indent:\" \",includeEmptyLines:!1,...r},typeof e!=\"string\")throw new TypeError(`Expected \\`input\\` to be a \\`string\\`, got \\`${typeof e}\\``);if(typeof t!=\"number\")throw new TypeError(`Expected \\`count\\` to be a \\`number\\`, got \\`${typeof t}\\``);if(typeof r.indent!=\"string\")throw new TypeError(`Expected \\`options.indent\\` to be a \\`string\\`, got \\`${typeof r.indent}\\``);if(t===0)return e;let n=r.includeEmptyLines?/^/gm:/^(?!\\s*$)/gm;return e.replace(n,r.indent.repeat(t))}});var Yi=Ae((Om,zi)=>{\"use strict\";d();c();p();f();m();zi.exports=({onlyFirst:e=!1}={})=>{let t=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(t,e?void 0:\"g\")}});var Xi=Ae((Bm,Zi)=>{\"use strict\";d();c();p();f();m();var tu=Yi();Zi.exports=e=>typeof e==\"string\"?e.replace(tu(),\"\"):e});var ro=Ae((Nh,su)=>{su.exports={name:\"@prisma/engines-version\",version:\"5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\",main:\"index.js\",types:\"index.d.ts\",license:\"Apache-2.0\",author:\"Tim Suchanek <suchanek@prisma.io>\",prisma:{enginesVersion:\"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\"},repository:{type:\"git\",url:\"https://github.com/prisma/engines-wrapper.git\",directory:\"packages/engines-version\"},devDependencies:{\"@types/node\":\"18.19.33\",typescript:\"4.9.5\"},files:[\"index.js\",\"index.d.ts\"],scripts:{build:\"tsc -d\"}}});var no=Ae(()=>{\"use strict\";d();c();p();f();m()});var Fn=Ae((lR,gs)=>{\"use strict\";d();c();p();f();m();gs.exports=function(){function e(t,r,n,i,o){return t<r||n<r?t>n?n+1:t+1:i===o?r:r+1}return function(t,r){if(t===r)return 0;if(t.length>r.length){var n=t;t=r,r=n}for(var i=t.length,o=r.length;i>0&&t.charCodeAt(i-1)===r.charCodeAt(o-1);)i--,o--;for(var s=0;s<i&&t.charCodeAt(s)===r.charCodeAt(s);)s++;if(i-=s,o-=s,i===0||o<3)return o;var a=0,u,l,g,h,x,S,C,A,k,O,B,M,I=[];for(u=0;u<i;u++)I.push(u+1),I.push(t.charCodeAt(s+u));for(var Z=I.length-1;a<o-3;)for(k=r.charCodeAt(s+(l=a)),O=r.charCodeAt(s+(g=a+1)),B=r.charCodeAt(s+(h=a+2)),M=r.charCodeAt(s+(x=a+3)),S=a+=4,u=0;u<Z;u+=2)C=I[u],A=I[u+1],l=e(C,l,g,k,A),g=e(l,g,h,O,A),h=e(g,h,x,B,A),S=e(h,x,S,M,A),I[u]=S,x=h,h=g,g=l,l=C;for(;a<o;)for(k=r.charCodeAt(s+(l=a)),S=++a,u=0;u<Z;u+=2)C=I[u],I[u]=S=e(C,l,S,k,I[u+1]),l=C;return S}}()});d();c();p();f();m();var gi={};nr(gi,{defineExtension:()=>mi,getExtensionContext:()=>di});d();c();p();f();m();d();c();p();f();m();function mi(e){return typeof e==\"function\"?e:t=>t.$extends(e)}d();c();p();f();m();function di(e){return e}var yi={};nr(yi,{validator:()=>hi});d();c();p();f();m();d();c();p();f();m();function hi(...e){return t=>t}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();var Zr,bi,xi,Pi,vi=!0;typeof y!=\"undefined\"&&({FORCE_COLOR:Zr,NODE_DISABLE_COLORS:bi,NO_COLOR:xi,TERM:Pi}=y.env||{},vi=y.stdout&&y.stdout.isTTY);var $a={enabled:!bi&&xi==null&&Pi!==\"dumb\"&&(Zr!=null&&Zr!==\"0\"||vi)};function V(e,t){let r=new RegExp(`\\\\x1b\\\\[${t}m`,\"g\"),n=`\\x1B[${e}m`,i=`\\x1B[${t}m`;return function(o){return!$a.enabled||o==null?o:n+(~(\"\"+o).indexOf(i)?o.replace(r,i+n):o)+i}}var Jp=V(0,0),sr=V(1,22),ar=V(2,22),Qp=V(3,23),Ti=V(4,24),Gp=V(7,27),Hp=V(8,28),Wp=V(9,29),Kp=V(30,39),nt=V(31,39),Ci=V(32,39),Ai=V(33,39),Ri=V(34,39),zp=V(35,39),Si=V(36,39),Yp=V(37,39),Ii=V(90,39),Zp=V(90,39),Xp=V(40,49),ef=V(41,49),tf=V(42,49),rf=V(43,49),nf=V(44,49),of=V(45,49),sf=V(46,49),af=V(47,49);d();c();p();f();m();var Va=100,Fi=[\"green\",\"yellow\",\"blue\",\"magenta\",\"cyan\",\"red\"],ur=[],Li=Date.now(),ja=0,tn=typeof y!=\"undefined\"?y.env:{},Bi,$i;($i=globalThis.DEBUG)!=null||(globalThis.DEBUG=(Bi=tn.DEBUG)!=null?Bi:\"\");var qi;(qi=globalThis.DEBUG_COLORS)!=null||(globalThis.DEBUG_COLORS=tn.DEBUG_COLORS?tn.DEBUG_COLORS===\"true\":!0);var Tt={enable(e){typeof e==\"string\"&&(globalThis.DEBUG=e)},disable(){let e=globalThis.DEBUG;return globalThis.DEBUG=\"\",e},enabled(e){let t=globalThis.DEBUG.split(\",\").map(i=>i.replace(/[.+?^${}()|[\\]\\\\]/g,\"\\\\$&\")),r=t.some(i=>i===\"\"||i[0]===\"-\"?!1:e.match(RegExp(i.split(\"*\").join(\".*\")+\"$\"))),n=t.some(i=>i===\"\"||i[0]!==\"-\"?!1:e.match(RegExp(i.slice(1).split(\"*\").join(\".*\")+\"$\")));return r&&!n},log:(...e)=>{var o;let[t,r,...n]=e,i;typeof Pt==\"function\"&&typeof y!=\"undefined\"&&typeof y.stderr!=\"undefined\"&&typeof y.stderr.write==\"function\"?i=(...s)=>{var a;try{let u=(en(),Gn(Xr));y.stderr.write(u.format(...s)+`\n`)}catch(u){i=(a=console.warn)!=null?a:console.log}}:i=(o=console.warn)!=null?o:console.log,i(`${t} ${r}`,...n)},formatters:{}};function Ja(e){let t={color:Fi[ja++%Fi.length],enabled:Tt.enabled(e),namespace:e,log:Tt.log,extend:()=>{}},r=(...n)=>{let{enabled:i,namespace:o,color:s,log:a}=t;if(n.length!==0&&ur.push([o,...n]),ur.length>Va&&ur.shift(),Tt.enabled(o)||i){let u=n.map(g=>typeof g==\"string\"?g:Qa(g)),l=`+${Date.now()-Li}ms`;Li=Date.now(),a(o,...u,l)}};return new Proxy(r,{get:(n,i)=>t[i],set:(n,i,o)=>t[i]=o})}var Ui=new Proxy(Ja,{get:(e,t)=>Tt[t],set:(e,t,r)=>Tt[t]=r});function Qa(e,t=2){let r=new Set;return JSON.stringify(e,(n,i)=>{if(typeof i==\"object\"&&i!==null){if(r.has(i))return\"[Circular *]\";r.add(i)}else if(typeof i==\"bigint\")return i.toString();return i},t)}function Vi(){ur.length=0}var re=Ui;d();c();p();f();m();d();c();p();f();m();var Qi=\"library\";function At(e){let t=za();return t||((e==null?void 0:e.config.engineType)===\"library\"?\"library\":(e==null?void 0:e.config.engineType)===\"binary\"?\"binary\":Qi)}function za(){let e=y.env.PRISMA_CLIENT_ENGINE_TYPE;return e===\"library\"?\"library\":e===\"binary\"?\"binary\":void 0}d();c();p();f();m();d();c();p();f();m();var Se;(t=>{let e;(I=>(I.findUnique=\"findUnique\",I.findUniqueOrThrow=\"findUniqueOrThrow\",I.findFirst=\"findFirst\",I.findFirstOrThrow=\"findFirstOrThrow\",I.findMany=\"findMany\",I.create=\"create\",I.createMany=\"createMany\",I.createManyAndReturn=\"createManyAndReturn\",I.update=\"update\",I.updateMany=\"updateMany\",I.upsert=\"upsert\",I.delete=\"delete\",I.deleteMany=\"deleteMany\",I.groupBy=\"groupBy\",I.count=\"count\",I.aggregate=\"aggregate\",I.findRaw=\"findRaw\",I.aggregateRaw=\"aggregateRaw\"))(e=t.ModelAction||(t.ModelAction={}))})(Se||(Se={}));var it={};nr(it,{error:()=>Xa,info:()=>Za,log:()=>Ya,query:()=>eu,should:()=>Ki,tags:()=>Rt,warn:()=>rn});d();c();p();f();m();var Rt={error:nt(\"prisma:error\"),warn:Ai(\"prisma:warn\"),info:Si(\"prisma:info\"),query:Ri(\"prisma:query\")},Ki={warn:()=>!y.env.PRISMA_DISABLE_WARNINGS};function Ya(...e){console.log(...e)}function rn(e,...t){Ki.warn()&&console.warn(`${Rt.warn} ${e}`,...t)}function Za(e,...t){console.info(`${Rt.info} ${e}`,...t)}function Xa(e,...t){console.error(`${Rt.error} ${e}`,...t)}function eu(e,...t){console.log(`${Rt.query} ${e}`,...t)}d();c();p();f();m();function je(e,t){throw new Error(t)}d();c();p();f();m();function nn(e,t){return Object.prototype.hasOwnProperty.call(e,t)}d();c();p();f();m();var on=(e,t)=>e.reduce((r,n)=>(r[t(n)]=n,r),{});d();c();p();f();m();function ot(e,t){let r={};for(let n of Object.keys(e))r[n]=t(e[n],n);return r}d();c();p();f();m();function sn(e,t){if(e.length===0)return;let r=e[0];for(let n=1;n<e.length;n++)t(r,e[n])<0&&(r=e[n]);return r}d();c();p();f();m();function _(e,t){Object.defineProperty(e,\"name\",{value:t,configurable:!0})}d();c();p();f();m();var eo=new Set,cr=(e,t,...r)=>{eo.has(e)||(eo.add(e),rn(t,...r))};d();c();p();f();m();var z=class extends Error{constructor(t,{code:r,clientVersion:n,meta:i,batchRequestIdx:o}){super(t),this.name=\"PrismaClientKnownRequestError\",this.code=r,this.clientVersion=n,this.meta=i,Object.defineProperty(this,\"batchRequestIdx\",{value:o,enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return\"PrismaClientKnownRequestError\"}};_(z,\"PrismaClientKnownRequestError\");var Ie=class extends z{constructor(t,r){super(t,{code:\"P2025\",clientVersion:r}),this.name=\"NotFoundError\"}};_(Ie,\"NotFoundError\");d();c();p();f();m();var G=class e extends Error{constructor(t,r,n){super(t),this.name=\"PrismaClientInitializationError\",this.clientVersion=r,this.errorCode=n,Error.captureStackTrace(e)}get[Symbol.toStringTag](){return\"PrismaClientInitializationError\"}};_(G,\"PrismaClientInitializationError\");d();c();p();f();m();var De=class extends Error{constructor(t,r){super(t),this.name=\"PrismaClientRustPanicError\",this.clientVersion=r}get[Symbol.toStringTag](){return\"PrismaClientRustPanicError\"}};_(De,\"PrismaClientRustPanicError\");d();c();p();f();m();var ae=class extends Error{constructor(t,{clientVersion:r,batchRequestIdx:n}){super(t),this.name=\"PrismaClientUnknownRequestError\",this.clientVersion=r,Object.defineProperty(this,\"batchRequestIdx\",{value:n,writable:!0,enumerable:!1})}get[Symbol.toStringTag](){return\"PrismaClientUnknownRequestError\"}};_(ae,\"PrismaClientUnknownRequestError\");d();c();p();f();m();var ee=class extends Error{constructor(r,{clientVersion:n}){super(r);this.name=\"PrismaClientValidationError\";this.clientVersion=n}get[Symbol.toStringTag](){return\"PrismaClientValidationError\"}};_(ee,\"PrismaClientValidationError\");d();c();p();f();m();var St=class{constructor(t){this._engine=t}prometheus(t){return this._engine.metrics({format:\"prometheus\",...t})}json(t){return this._engine.metrics({format:\"json\",...t})}};d();c();p();f();m();d();c();p();f();m();function It(e){let t;return{get(){return t||(t={value:e()}),t.value}}}function ru(e,t){let r=It(()=>nu(t));Object.defineProperty(e,\"dmmf\",{get:()=>r.get()})}function nu(e){return{datamodel:{models:an(e.models),enums:an(e.enums),types:an(e.types)}}}function an(e){return Object.entries(e).map(([t,r])=>({name:t,...r}))}d();c();p();f();m();var pr=Symbol(),un=new WeakMap,xe=class{constructor(t){t===pr?un.set(this,`Prisma.${this._getName()}`):un.set(this,`new Prisma.${this._getNamespace()}.${this._getName()}()`)}_getName(){return this.constructor.name}toString(){return un.get(this)}},Dt=class extends xe{_getNamespace(){return\"NullTypes\"}},kt=class extends Dt{};cn(kt,\"DbNull\");var Ot=class extends Dt{};cn(Ot,\"JsonNull\");var Mt=class extends Dt{};cn(Mt,\"AnyNull\");var ln={classes:{DbNull:kt,JsonNull:Ot,AnyNull:Mt},instances:{DbNull:new kt(pr),JsonNull:new Ot(pr),AnyNull:new Mt(pr)}};function cn(e,t){Object.defineProperty(e,\"name\",{value:t,configurable:!0})}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();function Nt(e){return{ok:!1,error:e,map(){return Nt(e)},flatMap(){return Nt(e)}}}var pn=class{constructor(){this.registeredErrors=[]}consumeError(t){return this.registeredErrors[t]}registerNewError(t){let r=0;for(;this.registeredErrors[r]!==void 0;)r++;return this.registeredErrors[r]={error:t},r}},fn=e=>{let t=new pn,r=Je(t,e.startTransaction.bind(e)),n={adapterName:e.adapterName,errorRegistry:t,queryRaw:Je(t,e.queryRaw.bind(e)),executeRaw:Je(t,e.executeRaw.bind(e)),provider:e.provider,startTransaction:async(...i)=>(await r(...i)).map(s=>iu(t,s))};return e.getConnectionInfo&&(n.getConnectionInfo=ou(t,e.getConnectionInfo.bind(e))),n},iu=(e,t)=>({adapterName:t.adapterName,provider:t.provider,options:t.options,queryRaw:Je(e,t.queryRaw.bind(t)),executeRaw:Je(e,t.executeRaw.bind(t)),commit:Je(e,t.commit.bind(t)),rollback:Je(e,t.rollback.bind(t))});function Je(e,t){return async(...r)=>{try{return await t(...r)}catch(n){let i=e.registerNewError(n);return Nt({kind:\"GenericJs\",id:i})}}}function ou(e,t){return(...r)=>{try{return t(...r)}catch(n){let i=e.registerNewError(n);return Nt({kind:\"GenericJs\",id:i})}}}var na=Ue(ro());var yk=Ue(no());Gi();Ei();Ji();d();c();p();f();m();var ue=class e{constructor(t,r){if(t.length-1!==r.length)throw t.length===0?new TypeError(\"Expected at least 1 string\"):new TypeError(`Expected ${t.length} strings to have ${t.length-1} values`);let n=r.reduce((s,a)=>s+(a instanceof e?a.values.length:1),0);this.values=new Array(n),this.strings=new Array(n+1),this.strings[0]=t[0];let i=0,o=0;for(;i<r.length;){let s=r[i++],a=t[i];if(s instanceof e){this.strings[o]+=s.strings[0];let u=0;for(;u<s.values.length;)this.values[o++]=s.values[u++],this.strings[o]=s.strings[u];this.strings[o]+=a}else this.values[o++]=s,this.strings[o]=a}}get sql(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`?${this.strings[r++]}`;return n}get statement(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`:${r}${this.strings[r++]}`;return n}get text(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`$${r}${this.strings[r++]}`;return n}inspect(){return{sql:this.sql,statement:this.statement,text:this.text,values:this.values}}};function au(e,t=\",\",r=\"\",n=\"\"){if(e.length===0)throw new TypeError(\"Expected `join([])` to be called with an array of multiple elements, but got an empty array\");return new ue([r,...Array(e.length-1).fill(t),n],e)}function io(e){return new ue([e],[])}var uu=io(\"\");function oo(e,...t){return new ue(e,t)}d();c();p();f();m();d();c();p();f();m();function _t(e){return{getKeys(){return Object.keys(e)},getPropertyValue(t){return e[t]}}}d();c();p();f();m();function ne(e,t){return{getKeys(){return[e]},getPropertyValue(){return t()}}}d();c();p();f();m();d();c();p();f();m();var de=class{constructor(){this._map=new Map}get(t){var r;return(r=this._map.get(t))==null?void 0:r.value}set(t,r){this._map.set(t,{value:r})}getOrCreate(t,r){let n=this._map.get(t);if(n)return n.value;let i=r();return this.set(t,i),i}};function Qe(e){let t=new de;return{getKeys(){return e.getKeys()},getPropertyValue(r){return t.getOrCreate(r,()=>e.getPropertyValue(r))},getPropertyDescriptor(r){var n;return(n=e.getPropertyDescriptor)==null?void 0:n.call(e,r)}}}d();c();p();f();m();d();c();p();f();m();var fr={enumerable:!0,configurable:!0,writable:!0};function mr(e){let t=new Set(e);return{getOwnPropertyDescriptor:()=>fr,has:(r,n)=>t.has(n),set:(r,n,i)=>t.add(n)&&Reflect.set(r,n,i),ownKeys:()=>[...t]}}var so=Symbol.for(\"nodejs.util.inspect.custom\");function ge(e,t){let r=lu(t),n=new Set,i=new Proxy(e,{get(o,s){if(n.has(s))return o[s];let a=r.get(s);return a?a.getPropertyValue(s):o[s]},has(o,s){var u,l;if(n.has(s))return!0;let a=r.get(s);return a?(l=(u=a.has)==null?void 0:u.call(a,s))!=null?l:!0:Reflect.has(o,s)},ownKeys(o){let s=ao(Reflect.ownKeys(o),r),a=ao(Array.from(r.keys()),r);return[...new Set([...s,...a,...n])]},set(o,s,a){var l,g;let u=r.get(s);return((g=(l=u==null?void 0:u.getPropertyDescriptor)==null?void 0:l.call(u,s))==null?void 0:g.writable)===!1?!1:(n.add(s),Reflect.set(o,s,a))},getOwnPropertyDescriptor(o,s){let a=Reflect.getOwnPropertyDescriptor(o,s);if(a&&!a.configurable)return a;let u=r.get(s);return u?u.getPropertyDescriptor?{...fr,...u==null?void 0:u.getPropertyDescriptor(s)}:fr:a},defineProperty(o,s,a){return n.add(s),Reflect.defineProperty(o,s,a)}});return i[so]=function(){let o={...this};return delete o[so],o},i}function lu(e){let t=new Map;for(let r of e){let n=r.getKeys();for(let i of n)t.set(i,r)}return t}function ao(e,t){return e.filter(r=>{var i,o;let n=t.get(r);return(o=(i=n==null?void 0:n.has)==null?void 0:i.call(n,r))!=null?o:!0})}d();c();p();f();m();function st(e){return{getKeys(){return e},has(){return!1},getPropertyValue(){}}}d();c();p();f();m();function dr(e,t){return{batch:e,transaction:(t==null?void 0:t.kind)===\"batch\"?{isolationLevel:t.options.isolationLevel}:void 0}}d();c();p();f();m();d();c();p();f();m();var at=class{constructor(t=0,r){this.context=r;this.lines=[];this.currentLine=\"\";this.currentIndent=0;this.currentIndent=t}write(t){return typeof t==\"string\"?this.currentLine+=t:t.write(this),this}writeJoined(t,r){let n=r.length-1;for(let i=0;i<r.length;i++)this.write(r[i]),i!==n&&this.write(t);return this}writeLine(t){return this.write(t).newLine()}newLine(){this.lines.push(this.indentedCurrentLine()),this.currentLine=\"\",this.marginSymbol=void 0;let t=this.afterNextNewLineCallback;return this.afterNextNewLineCallback=void 0,t==null||t(),this}withIndent(t){return this.indent(),t(this),this.unindent(),this}afterNextNewline(t){return this.afterNextNewLineCallback=t,this}indent(){return this.currentIndent++,this}unindent(){return this.currentIndent>0&&this.currentIndent--,this}addMarginSymbol(t){return this.marginSymbol=t,this}toString(){return this.lines.concat(this.indentedCurrentLine()).join(`\n`)}getCurrentLineLength(){return this.currentLine.length}indentedCurrentLine(){let t=this.currentLine.padStart(this.currentLine.length+2*this.currentIndent);return this.marginSymbol?this.marginSymbol+t.slice(1):t}};d();c();p();f();m();d();c();p();f();m();function uo(e){return e.substring(0,1).toLowerCase()+e.substring(1)}d();c();p();f();m();function ut(e){return e instanceof Date||Object.prototype.toString.call(e)===\"[object Date]\"}function gr(e){return e.toString()!==\"Invalid Date\"}d();c();p();f();m();d();c();p();f();m();var lt=9e15,Ne=1e9,mn=\"0123456789abcdef\",yr=\"2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058\",wr=\"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789\",dn={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-lt,maxE:lt,crypto:!1},fo,Pe,F=!0,br=\"[DecimalError] \",Me=br+\"Invalid argument: \",mo=br+\"Precision limit exceeded\",go=br+\"crypto unavailable\",ho=\"[object Decimal]\",te=Math.floor,H=Math.pow,cu=/^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,pu=/^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,fu=/^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,yo=/^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,pe=1e7,N=7,mu=9007199254740991,du=yr.length-1,gn=wr.length-1,R={toStringTag:ho};R.absoluteValue=R.abs=function(){var e=new this.constructor(this);return e.s<0&&(e.s=1),D(e)};R.ceil=function(){return D(new this.constructor(this),this.e+1,2)};R.clampedTo=R.clamp=function(e,t){var r,n=this,i=n.constructor;if(e=new i(e),t=new i(t),!e.s||!t.s)return new i(NaN);if(e.gt(t))throw Error(Me+t);return r=n.cmp(e),r<0?e:n.cmp(t)>0?t:new i(n)};R.comparedTo=R.cmp=function(e){var t,r,n,i,o=this,s=o.d,a=(e=new o.constructor(e)).d,u=o.s,l=e.s;if(!s||!a)return!u||!l?NaN:u!==l?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-l:0;if(u!==l)return u;if(o.e!==e.e)return o.e>e.e^u<0?1:-1;for(n=s.length,i=a.length,t=0,r=n<i?n:i;t<r;++t)if(s[t]!==a[t])return s[t]>a[t]^u<0?1:-1;return n===i?0:n>i^u<0?1:-1};R.cosine=R.cos=function(){var e,t,r=this,n=r.constructor;return r.d?r.d[0]?(e=n.precision,t=n.rounding,n.precision=e+Math.max(r.e,r.sd())+N,n.rounding=1,r=gu(n,Po(n,r)),n.precision=e,n.rounding=t,D(Pe==2||Pe==3?r.neg():r,e,t,!0)):new n(1):new n(NaN)};R.cubeRoot=R.cbrt=function(){var e,t,r,n,i,o,s,a,u,l,g=this,h=g.constructor;if(!g.isFinite()||g.isZero())return new h(g);for(F=!1,o=g.s*H(g.s*g,1/3),!o||Math.abs(o)==1/0?(r=Y(g.d),e=g.e,(o=(e-r.length+1)%3)&&(r+=o==1||o==-2?\"0\":\"00\"),o=H(r,1/3),e=te((e+1)/3)-(e%3==(e<0?-1:2)),o==1/0?r=\"5e\"+e:(r=o.toExponential(),r=r.slice(0,r.indexOf(\"e\")+1)+e),n=new h(r),n.s=g.s):n=new h(o.toString()),s=(e=h.precision)+3;;)if(a=n,u=a.times(a).times(a),l=u.plus(g),n=q(l.plus(g).times(a),l.plus(u),s+2,1),Y(a.d).slice(0,s)===(r=Y(n.d)).slice(0,s))if(r=r.slice(s-3,s+1),r==\"9999\"||!i&&r==\"4999\"){if(!i&&(D(a,e+1,0),a.times(a).times(a).eq(g))){n=a;break}s+=4,i=1}else{(!+r||!+r.slice(1)&&r.charAt(0)==\"5\")&&(D(n,e+1,1),t=!n.times(n).times(n).eq(g));break}return F=!0,D(n,e,h.rounding,t)};R.decimalPlaces=R.dp=function(){var e,t=this.d,r=NaN;if(t){if(e=t.length-1,r=(e-te(this.e/N))*N,e=t[e],e)for(;e%10==0;e/=10)r--;r<0&&(r=0)}return r};R.dividedBy=R.div=function(e){return q(this,new this.constructor(e))};R.dividedToIntegerBy=R.divToInt=function(e){var t=this,r=t.constructor;return D(q(t,new r(e),0,1,1),r.precision,r.rounding)};R.equals=R.eq=function(e){return this.cmp(e)===0};R.floor=function(){return D(new this.constructor(this),this.e+1,3)};R.greaterThan=R.gt=function(e){return this.cmp(e)>0};R.greaterThanOrEqualTo=R.gte=function(e){var t=this.cmp(e);return t==1||t===0};R.hyperbolicCosine=R.cosh=function(){var e,t,r,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;r=s.precision,n=s.rounding,s.precision=r+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(e=Math.ceil(i/3),t=(1/Pr(4,e)).toString()):(e=16,t=\"2.3283064365386962890625e-10\"),o=ct(s,1,o.times(t),new s(1),!0);for(var u,l=e,g=new s(8);l--;)u=o.times(o),o=a.minus(u.times(g.minus(u.times(g))));return D(o,s.precision=r,s.rounding=n,!0)};R.hyperbolicSine=R.sinh=function(){var e,t,r,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(t=o.precision,r=o.rounding,o.precision=t+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=ct(o,2,i,i,!0);else{e=1.4*Math.sqrt(n),e=e>16?16:e|0,i=i.times(1/Pr(5,e)),i=ct(o,2,i,i,!0);for(var s,a=new o(5),u=new o(16),l=new o(20);e--;)s=i.times(i),i=i.times(a.plus(s.times(u.times(s).plus(l))))}return o.precision=t,o.rounding=r,D(i,t,r,!0)};R.hyperbolicTangent=R.tanh=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+7,n.rounding=1,q(r.sinh(),r.cosh(),n.precision=e,n.rounding=t)):new n(r.s)};R.inverseCosine=R.acos=function(){var e,t=this,r=t.constructor,n=t.abs().cmp(1),i=r.precision,o=r.rounding;return n!==-1?n===0?t.isNeg()?ce(r,i,o):new r(0):new r(NaN):t.isZero()?ce(r,i+4,o).times(.5):(r.precision=i+6,r.rounding=1,t=t.asin(),e=ce(r,i+4,o).times(.5),r.precision=i,r.rounding=o,e.minus(t))};R.inverseHyperbolicCosine=R.acosh=function(){var e,t,r=this,n=r.constructor;return r.lte(1)?new n(r.eq(1)?0:NaN):r.isFinite()?(e=n.precision,t=n.rounding,n.precision=e+Math.max(Math.abs(r.e),r.sd())+4,n.rounding=1,F=!1,r=r.times(r).minus(1).sqrt().plus(r),F=!0,n.precision=e,n.rounding=t,r.ln()):new n(r)};R.inverseHyperbolicSine=R.asinh=function(){var e,t,r=this,n=r.constructor;return!r.isFinite()||r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+2*Math.max(Math.abs(r.e),r.sd())+6,n.rounding=1,F=!1,r=r.times(r).plus(1).sqrt().plus(r),F=!0,n.precision=e,n.rounding=t,r.ln())};R.inverseHyperbolicTangent=R.atanh=function(){var e,t,r,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(e=o.precision,t=o.rounding,n=i.sd(),Math.max(n,e)<2*-i.e-1?D(new o(i),e,t,!0):(o.precision=r=n-i.e,i=q(i.plus(1),new o(1).minus(i),r+e,1),o.precision=e+4,o.rounding=1,i=i.ln(),o.precision=e,o.rounding=t,i.times(.5))):new o(NaN)};R.inverseSine=R.asin=function(){var e,t,r,n,i=this,o=i.constructor;return i.isZero()?new o(i):(t=i.abs().cmp(1),r=o.precision,n=o.rounding,t!==-1?t===0?(e=ce(o,r+4,n).times(.5),e.s=i.s,e):new o(NaN):(o.precision=r+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=r,o.rounding=n,i.times(2)))};R.inverseTangent=R.atan=function(){var e,t,r,n,i,o,s,a,u,l=this,g=l.constructor,h=g.precision,x=g.rounding;if(l.isFinite()){if(l.isZero())return new g(l);if(l.abs().eq(1)&&h+4<=gn)return s=ce(g,h+4,x).times(.25),s.s=l.s,s}else{if(!l.s)return new g(NaN);if(h+4<=gn)return s=ce(g,h+4,x).times(.5),s.s=l.s,s}for(g.precision=a=h+10,g.rounding=1,r=Math.min(28,a/N+2|0),e=r;e;--e)l=l.div(l.times(l).plus(1).sqrt().plus(1));for(F=!1,t=Math.ceil(a/N),n=1,u=l.times(l),s=new g(l),i=l;e!==-1;)if(i=i.times(u),o=s.minus(i.div(n+=2)),i=i.times(u),s=o.plus(i.div(n+=2)),s.d[t]!==void 0)for(e=t;s.d[e]===o.d[e]&&e--;);return r&&(s=s.times(2<<r-1)),F=!0,D(s,g.precision=h,g.rounding=x,!0)};R.isFinite=function(){return!!this.d};R.isInteger=R.isInt=function(){return!!this.d&&te(this.e/N)>this.d.length-2};R.isNaN=function(){return!this.s};R.isNegative=R.isNeg=function(){return this.s<0};R.isPositive=R.isPos=function(){return this.s>0};R.isZero=function(){return!!this.d&&this.d[0]===0};R.lessThan=R.lt=function(e){return this.cmp(e)<0};R.lessThanOrEqualTo=R.lte=function(e){return this.cmp(e)<1};R.logarithm=R.log=function(e){var t,r,n,i,o,s,a,u,l=this,g=l.constructor,h=g.precision,x=g.rounding,S=5;if(e==null)e=new g(10),t=!0;else{if(e=new g(e),r=e.d,e.s<0||!r||!r[0]||e.eq(1))return new g(NaN);t=e.eq(10)}if(r=l.d,l.s<0||!r||!r[0]||l.eq(1))return new g(r&&!r[0]?-1/0:l.s!=1?NaN:r?0:1/0);if(t)if(r.length>1)o=!0;else{for(i=r[0];i%10===0;)i/=10;o=i!==1}if(F=!1,a=h+S,s=Oe(l,a),n=t?Er(g,a+10):Oe(e,a),u=q(s,n,a,1),Ft(u.d,i=h,x))do if(a+=10,s=Oe(l,a),n=t?Er(g,a+10):Oe(e,a),u=q(s,n,a,1),!o){+Y(u.d).slice(i+1,i+15)+1==1e14&&(u=D(u,h+1,0));break}while(Ft(u.d,i+=10,x));return F=!0,D(u,h,x)};R.minus=R.sub=function(e){var t,r,n,i,o,s,a,u,l,g,h,x,S=this,C=S.constructor;if(e=new C(e),!S.d||!e.d)return!S.s||!e.s?e=new C(NaN):S.d?e.s=-e.s:e=new C(e.d||S.s!==e.s?S:NaN),e;if(S.s!=e.s)return e.s=-e.s,S.plus(e);if(l=S.d,x=e.d,a=C.precision,u=C.rounding,!l[0]||!x[0]){if(x[0])e.s=-e.s;else if(l[0])e=new C(S);else return new C(u===3?-0:0);return F?D(e,a,u):e}if(r=te(e.e/N),g=te(S.e/N),l=l.slice(),o=g-r,o){for(h=o<0,h?(t=l,o=-o,s=x.length):(t=x,r=g,s=l.length),n=Math.max(Math.ceil(a/N),s)+2,o>n&&(o=n,t.length=1),t.reverse(),n=o;n--;)t.push(0);t.reverse()}else{for(n=l.length,s=x.length,h=n<s,h&&(s=n),n=0;n<s;n++)if(l[n]!=x[n]){h=l[n]<x[n];break}o=0}for(h&&(t=l,l=x,x=t,e.s=-e.s),s=l.length,n=x.length-s;n>0;--n)l[s++]=0;for(n=x.length;n>o;){if(l[--n]<x[n]){for(i=n;i&&l[--i]===0;)l[i]=pe-1;--l[i],l[n]+=pe}l[n]-=x[n]}for(;l[--s]===0;)l.pop();for(;l[0]===0;l.shift())--r;return l[0]?(e.d=l,e.e=xr(l,r),F?D(e,a,u):e):new C(u===3?-0:0)};R.modulo=R.mod=function(e){var t,r=this,n=r.constructor;return e=new n(e),!r.d||!e.s||e.d&&!e.d[0]?new n(NaN):!e.d||r.d&&!r.d[0]?D(new n(r),n.precision,n.rounding):(F=!1,n.modulo==9?(t=q(r,e.abs(),0,3,1),t.s*=e.s):t=q(r,e,0,n.modulo,1),t=t.times(e),F=!0,r.minus(t))};R.naturalExponential=R.exp=function(){return hn(this)};R.naturalLogarithm=R.ln=function(){return Oe(this)};R.negated=R.neg=function(){var e=new this.constructor(this);return e.s=-e.s,D(e)};R.plus=R.add=function(e){var t,r,n,i,o,s,a,u,l,g,h=this,x=h.constructor;if(e=new x(e),!h.d||!e.d)return!h.s||!e.s?e=new x(NaN):h.d||(e=new x(e.d||h.s===e.s?h:NaN)),e;if(h.s!=e.s)return e.s=-e.s,h.minus(e);if(l=h.d,g=e.d,a=x.precision,u=x.rounding,!l[0]||!g[0])return g[0]||(e=new x(h)),F?D(e,a,u):e;if(o=te(h.e/N),n=te(e.e/N),l=l.slice(),i=o-n,i){for(i<0?(r=l,i=-i,s=g.length):(r=g,n=o,s=l.length),o=Math.ceil(a/N),s=o>s?o+1:s+1,i>s&&(i=s,r.length=1),r.reverse();i--;)r.push(0);r.reverse()}for(s=l.length,i=g.length,s-i<0&&(i=s,r=g,g=l,l=r),t=0;i;)t=(l[--i]=l[i]+g[i]+t)/pe|0,l[i]%=pe;for(t&&(l.unshift(t),++n),s=l.length;l[--s]==0;)l.pop();return e.d=l,e.e=xr(l,n),F?D(e,a,u):e};R.precision=R.sd=function(e){var t,r=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Me+e);return r.d?(t=wo(r.d),e&&r.e+1>t&&(t=r.e+1)):t=NaN,t};R.round=function(){var e=this,t=e.constructor;return D(new t(e),e.e+1,t.rounding)};R.sine=R.sin=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+Math.max(r.e,r.sd())+N,n.rounding=1,r=yu(n,Po(n,r)),n.precision=e,n.rounding=t,D(Pe>2?r.neg():r,e,t,!0)):new n(NaN)};R.squareRoot=R.sqrt=function(){var e,t,r,n,i,o,s=this,a=s.d,u=s.e,l=s.s,g=s.constructor;if(l!==1||!a||!a[0])return new g(!l||l<0&&(!a||a[0])?NaN:a?s:1/0);for(F=!1,l=Math.sqrt(+s),l==0||l==1/0?(t=Y(a),(t.length+u)%2==0&&(t+=\"0\"),l=Math.sqrt(t),u=te((u+1)/2)-(u<0||u%2),l==1/0?t=\"5e\"+u:(t=l.toExponential(),t=t.slice(0,t.indexOf(\"e\")+1)+u),n=new g(t)):n=new g(l.toString()),r=(u=g.precision)+3;;)if(o=n,n=o.plus(q(s,o,r+2,1)).times(.5),Y(o.d).slice(0,r)===(t=Y(n.d)).slice(0,r))if(t=t.slice(r-3,r+1),t==\"9999\"||!i&&t==\"4999\"){if(!i&&(D(o,u+1,0),o.times(o).eq(s))){n=o;break}r+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)==\"5\")&&(D(n,u+1,1),e=!n.times(n).eq(s));break}return F=!0,D(n,u,g.rounding,e)};R.tangent=R.tan=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+10,n.rounding=1,r=r.sin(),r.s=1,r=q(r,new n(1).minus(r.times(r)).sqrt(),e+10,0),n.precision=e,n.rounding=t,D(Pe==2||Pe==4?r.neg():r,e,t,!0)):new n(NaN)};R.times=R.mul=function(e){var t,r,n,i,o,s,a,u,l,g=this,h=g.constructor,x=g.d,S=(e=new h(e)).d;if(e.s*=g.s,!x||!x[0]||!S||!S[0])return new h(!e.s||x&&!x[0]&&!S||S&&!S[0]&&!x?NaN:!x||!S?e.s/0:e.s*0);for(r=te(g.e/N)+te(e.e/N),u=x.length,l=S.length,u<l&&(o=x,x=S,S=o,s=u,u=l,l=s),o=[],s=u+l,n=s;n--;)o.push(0);for(n=l;--n>=0;){for(t=0,i=u+n;i>n;)a=o[i]+S[n]*x[i-n-1]+t,o[i--]=a%pe|0,t=a/pe|0;o[i]=(o[i]+t)%pe|0}for(;!o[--s];)o.pop();return t?++r:o.shift(),e.d=o,e.e=xr(o,r),F?D(e,h.precision,h.rounding):e};R.toBinary=function(e,t){return wn(this,2,e,t)};R.toDecimalPlaces=R.toDP=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(oe(e,0,Ne),t===void 0?t=n.rounding:oe(t,0,8),D(r,e+r.e+1,t))};R.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=he(n,!0):(oe(e,0,Ne),t===void 0?t=i.rounding:oe(t,0,8),n=D(new i(n),e+1,t),r=he(n,!0,e+1)),n.isNeg()&&!n.isZero()?\"-\"+r:r};R.toFixed=function(e,t){var r,n,i=this,o=i.constructor;return e===void 0?r=he(i):(oe(e,0,Ne),t===void 0?t=o.rounding:oe(t,0,8),n=D(new o(i),e+i.e+1,t),r=he(n,!1,e+n.e+1)),i.isNeg()&&!i.isZero()?\"-\"+r:r};R.toFraction=function(e){var t,r,n,i,o,s,a,u,l,g,h,x,S=this,C=S.d,A=S.constructor;if(!C)return new A(S);if(l=r=new A(1),n=u=new A(0),t=new A(n),o=t.e=wo(C)-S.e-1,s=o%N,t.d[0]=H(10,s<0?N+s:s),e==null)e=o>0?t:l;else{if(a=new A(e),!a.isInt()||a.lt(l))throw Error(Me+a);e=a.gt(t)?o>0?t:l:a}for(F=!1,a=new A(Y(C)),g=A.precision,A.precision=o=C.length*N*2;h=q(a,t,0,1,1),i=r.plus(h.times(n)),i.cmp(e)!=1;)r=n,n=i,i=l,l=u.plus(h.times(i)),u=i,i=t,t=a.minus(h.times(i)),a=i;return i=q(e.minus(r),n,0,1,1),u=u.plus(i.times(l)),r=r.plus(i.times(n)),u.s=l.s=S.s,x=q(l,n,o,1).minus(S).abs().cmp(q(u,r,o,1).minus(S).abs())<1?[l,n]:[u,r],A.precision=g,F=!0,x};R.toHexadecimal=R.toHex=function(e,t){return wn(this,16,e,t)};R.toNearest=function(e,t){var r=this,n=r.constructor;if(r=new n(r),e==null){if(!r.d)return r;e=new n(1),t=n.rounding}else{if(e=new n(e),t===void 0?t=n.rounding:oe(t,0,8),!r.d)return e.s?r:e;if(!e.d)return e.s&&(e.s=r.s),e}return e.d[0]?(F=!1,r=q(r,e,0,t,1).times(e),F=!0,D(r)):(e.s=r.s,r=e),r};R.toNumber=function(){return+this};R.toOctal=function(e,t){return wn(this,8,e,t)};R.toPower=R.pow=function(e){var t,r,n,i,o,s,a=this,u=a.constructor,l=+(e=new u(e));if(!a.d||!e.d||!a.d[0]||!e.d[0])return new u(H(+a,l));if(a=new u(a),a.eq(1))return a;if(n=u.precision,o=u.rounding,e.eq(1))return D(a,n,o);if(t=te(e.e/N),t>=e.d.length-1&&(r=l<0?-l:l)<=mu)return i=Eo(u,a,r,n),e.s<0?new u(1).div(i):D(i,n,o);if(s=a.s,s<0){if(t<e.d.length-1)return new u(NaN);if(e.d[t]&1||(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return r=H(+a,l),t=r==0||!isFinite(r)?te(l*(Math.log(\"0.\"+Y(a.d))/Math.LN10+a.e+1)):new u(r+\"\").e,t>u.maxE+1||t<u.minE-1?new u(t>0?s/0:0):(F=!1,u.rounding=a.s=1,r=Math.min(12,(t+\"\").length),i=hn(e.times(Oe(a,n+r)),n),i.d&&(i=D(i,n+5,1),Ft(i.d,n,o)&&(t=n+10,i=D(hn(e.times(Oe(a,t+r)),t),t+5,1),+Y(i.d).slice(n+1,n+15)+1==1e14&&(i=D(i,n+1,0)))),i.s=s,F=!0,u.rounding=o,D(i,n,o))};R.toPrecision=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=he(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(oe(e,1,Ne),t===void 0?t=i.rounding:oe(t,0,8),n=D(new i(n),e,t),r=he(n,e<=n.e||n.e<=i.toExpNeg,e)),n.isNeg()&&!n.isZero()?\"-\"+r:r};R.toSignificantDigits=R.toSD=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(oe(e,1,Ne),t===void 0?t=n.rounding:oe(t,0,8)),D(new n(r),e,t)};R.toString=function(){var e=this,t=e.constructor,r=he(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()&&!e.isZero()?\"-\"+r:r};R.truncated=R.trunc=function(){return D(new this.constructor(this),this.e+1,1)};R.valueOf=R.toJSON=function(){var e=this,t=e.constructor,r=he(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()?\"-\"+r:r};function Y(e){var t,r,n,i=e.length-1,o=\"\",s=e[0];if(i>0){for(o+=s,t=1;t<i;t++)n=e[t]+\"\",r=N-n.length,r&&(o+=ke(r)),o+=n;s=e[t],n=s+\"\",r=N-n.length,r&&(o+=ke(r))}else if(s===0)return\"0\";for(;s%10===0;)s/=10;return o+s}function oe(e,t,r){if(e!==~~e||e<t||e>r)throw Error(Me+e)}function Ft(e,t,r,n){var i,o,s,a;for(o=e[0];o>=10;o/=10)--t;return--t<0?(t+=N,i=0):(i=Math.ceil((t+1)/N),t%=N),o=H(10,N-t),a=e[i]%o|0,n==null?t<3?(t==0?a=a/100|0:t==1&&(a=a/10|0),s=r<4&&a==99999||r>3&&a==49999||a==5e4||a==0):s=(r<4&&a+1==o||r>3&&a+1==o/2)&&(e[i+1]/o/100|0)==H(10,t-2)-1||(a==o/2||a==0)&&(e[i+1]/o/100|0)==0:t<4?(t==0?a=a/1e3|0:t==1?a=a/100|0:t==2&&(a=a/10|0),s=(n||r<4)&&a==9999||!n&&r>3&&a==4999):s=((n||r<4)&&a+1==o||!n&&r>3&&a+1==o/2)&&(e[i+1]/o/1e3|0)==H(10,t-3)-1,s}function hr(e,t,r){for(var n,i=[0],o,s=0,a=e.length;s<a;){for(o=i.length;o--;)i[o]*=t;for(i[0]+=mn.indexOf(e.charAt(s++)),n=0;n<i.length;n++)i[n]>r-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/r|0,i[n]%=r)}return i.reverse()}function gu(e,t){var r,n,i;if(t.isZero())return t;n=t.d.length,n<32?(r=Math.ceil(n/3),i=(1/Pr(4,r)).toString()):(r=16,i=\"2.3283064365386962890625e-10\"),e.precision+=r,t=ct(e,1,t.times(i),new e(1));for(var o=r;o--;){var s=t.times(t);t=s.times(s).minus(s).times(8).plus(1)}return e.precision-=r,t}var q=function(){function e(n,i,o){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*i+a,n[u]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function t(n,i,o,s){var a,u;if(o!=s)u=o>s?1:-1;else for(a=u=0;a<o;a++)if(n[a]!=i[a]){u=n[a]>i[a]?1:-1;break}return u}function r(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,u){var l,g,h,x,S,C,A,k,O,B,M,I,Z,L,Ye,Be,fe,$e,Q,Ce,qe=n.constructor,Ze=n.s==i.s?1:-1,X=n.d,U=i.d;if(!X||!X[0]||!U||!U[0])return new qe(!n.s||!i.s||(X?U&&X[0]==U[0]:!U)?NaN:X&&X[0]==0||!U?Ze*0:Ze/0);for(u?(S=1,g=n.e-i.e):(u=pe,S=N,g=te(n.e/S)-te(i.e/S)),Q=U.length,fe=X.length,O=new qe(Ze),B=O.d=[],h=0;U[h]==(X[h]||0);h++);if(U[h]>(X[h]||0)&&g--,o==null?(L=o=qe.precision,s=qe.rounding):a?L=o+(n.e-i.e)+1:L=o,L<0)B.push(1),C=!0;else{if(L=L/S+2|0,h=0,Q==1){for(x=0,U=U[0],L++;(h<fe||x)&&L--;h++)Ye=x*u+(X[h]||0),B[h]=Ye/U|0,x=Ye%U|0;C=x||h<fe}else{for(x=u/(U[0]+1)|0,x>1&&(U=e(U,x,u),X=e(X,x,u),Q=U.length,fe=X.length),Be=Q,M=X.slice(0,Q),I=M.length;I<Q;)M[I++]=0;Ce=U.slice(),Ce.unshift(0),$e=U[0],U[1]>=u/2&&++$e;do x=0,l=t(U,M,Q,I),l<0?(Z=M[0],Q!=I&&(Z=Z*u+(M[1]||0)),x=Z/$e|0,x>1?(x>=u&&(x=u-1),A=e(U,x,u),k=A.length,I=M.length,l=t(A,M,k,I),l==1&&(x--,r(A,Q<k?Ce:U,k,u))):(x==0&&(l=x=1),A=U.slice()),k=A.length,k<I&&A.unshift(0),r(M,A,I,u),l==-1&&(I=M.length,l=t(U,M,Q,I),l<1&&(x++,r(M,Q<I?Ce:U,I,u))),I=M.length):l===0&&(x++,M=[0]),B[h++]=x,l&&M[0]?M[I++]=X[Be]||0:(M=[X[Be]],I=1);while((Be++<fe||M[0]!==void 0)&&L--);C=M[0]!==void 0}B[0]||B.shift()}if(S==1)O.e=g,fo=C;else{for(h=1,x=B[0];x>=10;x/=10)h++;O.e=h+g*S-1,D(O,a?o+O.e+1:o,s,C)}return O}}();function D(e,t,r,n){var i,o,s,a,u,l,g,h,x,S=e.constructor;e:if(t!=null){if(h=e.d,!h)return e;for(i=1,a=h[0];a>=10;a/=10)i++;if(o=t-i,o<0)o+=N,s=t,g=h[x=0],u=g/H(10,i-s-1)%10|0;else if(x=Math.ceil((o+1)/N),a=h.length,x>=a)if(n){for(;a++<=x;)h.push(0);g=u=0,i=1,o%=N,s=o-N+1}else break e;else{for(g=a=h[x],i=1;a>=10;a/=10)i++;o%=N,s=o-N+i,u=s<0?0:g/H(10,i-s-1)%10|0}if(n=n||t<0||h[x+1]!==void 0||(s<0?g:g%H(10,i-s-1)),l=r<4?(u||n)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||n||r==6&&(o>0?s>0?g/H(10,i-s):0:h[x-1])%10&1||r==(e.s<0?8:7)),t<1||!h[0])return h.length=0,l?(t-=e.e+1,h[0]=H(10,(N-t%N)%N),e.e=-t||0):h[0]=e.e=0,e;if(o==0?(h.length=x,a=1,x--):(h.length=x+1,a=H(10,N-o),h[x]=s>0?(g/H(10,i-s)%H(10,s)|0)*a:0),l)for(;;)if(x==0){for(o=1,s=h[0];s>=10;s/=10)o++;for(s=h[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(e.e++,h[0]==pe&&(h[0]=1));break}else{if(h[x]+=a,h[x]!=pe)break;h[x--]=0,a=1}for(o=h.length;h[--o]===0;)h.pop()}return F&&(e.e>S.maxE?(e.d=null,e.e=NaN):e.e<S.minE&&(e.e=0,e.d=[0])),e}function he(e,t,r){if(!e.isFinite())return xo(e);var n,i=e.e,o=Y(e.d),s=o.length;return t?(r&&(n=r-s)>0?o=o.charAt(0)+\".\"+o.slice(1)+ke(n):s>1&&(o=o.charAt(0)+\".\"+o.slice(1)),o=o+(e.e<0?\"e\":\"e+\")+e.e):i<0?(o=\"0.\"+ke(-i-1)+o,r&&(n=r-s)>0&&(o+=ke(n))):i>=s?(o+=ke(i+1-s),r&&(n=r-i-1)>0&&(o=o+\".\"+ke(n))):((n=i+1)<s&&(o=o.slice(0,n)+\".\"+o.slice(n)),r&&(n=r-s)>0&&(i+1===s&&(o+=\".\"),o+=ke(n))),o}function xr(e,t){var r=e[0];for(t*=N;r>=10;r/=10)t++;return t}function Er(e,t,r){if(t>du)throw F=!0,r&&(e.precision=r),Error(mo);return D(new e(yr),t,1,!0)}function ce(e,t,r){if(t>gn)throw Error(mo);return D(new e(wr),t,r,!0)}function wo(e){var t=e.length-1,r=t*N+1;if(t=e[t],t){for(;t%10==0;t/=10)r--;for(t=e[0];t>=10;t/=10)r++}return r}function ke(e){for(var t=\"\";e--;)t+=\"0\";return t}function Eo(e,t,r,n){var i,o=new e(1),s=Math.ceil(n/N+4);for(F=!1;;){if(r%2&&(o=o.times(t),co(o.d,s)&&(i=!0)),r=te(r/2),r===0){r=o.d.length-1,i&&o.d[r]===0&&++o.d[r];break}t=t.times(t),co(t.d,s)}return F=!0,o}function lo(e){return e.d[e.d.length-1]&1}function bo(e,t,r){for(var n,i=new e(t[0]),o=0;++o<t.length;)if(n=new e(t[o]),n.s)i[r](n)&&(i=n);else{i=n;break}return i}function hn(e,t){var r,n,i,o,s,a,u,l=0,g=0,h=0,x=e.constructor,S=x.rounding,C=x.precision;if(!e.d||!e.d[0]||e.e>17)return new x(e.d?e.d[0]?e.s<0?0:1/0:1:e.s?e.s<0?0:e:NaN);for(t==null?(F=!1,u=C):u=t,a=new x(.03125);e.e>-2;)e=e.times(a),h+=5;for(n=Math.log(H(2,h))/Math.LN10*2+5|0,u+=n,r=o=s=new x(1),x.precision=u;;){if(o=D(o.times(e),u,1),r=r.times(++g),a=s.plus(q(o,r,u,1)),Y(a.d).slice(0,u)===Y(s.d).slice(0,u)){for(i=h;i--;)s=D(s.times(s),u,1);if(t==null)if(l<3&&Ft(s.d,u-n,S,l))x.precision=u+=10,r=o=a=new x(1),g=0,l++;else return D(s,x.precision=C,S,F=!0);else return x.precision=C,s}s=a}}function Oe(e,t){var r,n,i,o,s,a,u,l,g,h,x,S=1,C=10,A=e,k=A.d,O=A.constructor,B=O.rounding,M=O.precision;if(A.s<0||!k||!k[0]||!A.e&&k[0]==1&&k.length==1)return new O(k&&!k[0]?-1/0:A.s!=1?NaN:k?0:A);if(t==null?(F=!1,g=M):g=t,O.precision=g+=C,r=Y(k),n=r.charAt(0),Math.abs(o=A.e)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)A=A.times(e),r=Y(A.d),n=r.charAt(0),S++;o=A.e,n>1?(A=new O(\"0.\"+r),o++):A=new O(n+\".\"+r.slice(1))}else return l=Er(O,g+2,M).times(o+\"\"),A=Oe(new O(n+\".\"+r.slice(1)),g-C).plus(l),O.precision=M,t==null?D(A,M,B,F=!0):A;for(h=A,u=s=A=q(A.minus(1),A.plus(1),g,1),x=D(A.times(A),g,1),i=3;;){if(s=D(s.times(x),g,1),l=u.plus(q(s,new O(i),g,1)),Y(l.d).slice(0,g)===Y(u.d).slice(0,g))if(u=u.times(2),o!==0&&(u=u.plus(Er(O,g+2,M).times(o+\"\"))),u=q(u,new O(S),g,1),t==null)if(Ft(u.d,g-C,B,a))O.precision=g+=C,l=s=A=q(h.minus(1),h.plus(1),g,1),x=D(A.times(A),g,1),i=a=1;else return D(u,O.precision=M,B,F=!0);else return O.precision=M,u;u=l,i+=2}}function xo(e){return String(e.s*e.s/0)}function yn(e,t){var r,n,i;for((r=t.indexOf(\".\"))>-1&&(t=t.replace(\".\",\"\")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;n++);for(i=t.length;t.charCodeAt(i-1)===48;--i);if(t=t.slice(n,i),t){if(i-=n,e.e=r=r-n-1,e.d=[],n=(r+1)%N,r<0&&(n+=N),n<i){for(n&&e.d.push(+t.slice(0,n)),i-=N;n<i;)e.d.push(+t.slice(n,n+=N));t=t.slice(n),n=N-t.length}else n-=i;for(;n--;)t+=\"0\";e.d.push(+t),F&&(e.e>e.constructor.maxE?(e.d=null,e.e=NaN):e.e<e.constructor.minE&&(e.e=0,e.d=[0]))}else e.e=0,e.d=[0];return e}function hu(e,t){var r,n,i,o,s,a,u,l,g;if(t.indexOf(\"_\")>-1){if(t=t.replace(/(\\d)_(?=\\d)/g,\"$1\"),yo.test(t))return yn(e,t)}else if(t===\"Infinity\"||t===\"NaN\")return+t||(e.s=NaN),e.e=NaN,e.d=null,e;if(pu.test(t))r=16,t=t.toLowerCase();else if(cu.test(t))r=2;else if(fu.test(t))r=8;else throw Error(Me+t);for(o=t.search(/p/i),o>0?(u=+t.slice(o+1),t=t.substring(2,o)):t=t.slice(2),o=t.indexOf(\".\"),s=o>=0,n=e.constructor,s&&(t=t.replace(\".\",\"\"),a=t.length,o=a-o,i=Eo(n,new n(r),o,o*2)),l=hr(t,r,pe),g=l.length-1,o=g;l[o]===0;--o)l.pop();return o<0?new n(e.s*0):(e.e=xr(l,g),e.d=l,F=!1,s&&(e=q(e,i,a*4)),u&&(e=e.times(Math.abs(u)<54?H(2,u):Ge.pow(2,u))),F=!0,e)}function yu(e,t){var r,n=t.d.length;if(n<3)return t.isZero()?t:ct(e,2,t,t);r=1.4*Math.sqrt(n),r=r>16?16:r|0,t=t.times(1/Pr(5,r)),t=ct(e,2,t,t);for(var i,o=new e(5),s=new e(16),a=new e(20);r--;)i=t.times(t),t=t.times(o.plus(i.times(s.times(i).minus(a))));return t}function ct(e,t,r,n,i){var o,s,a,u,l=1,g=e.precision,h=Math.ceil(g/N);for(F=!1,u=r.times(r),a=new e(n);;){if(s=q(a.times(u),new e(t++*t++),g,1),a=i?n.plus(s):n.minus(s),n=q(s.times(u),new e(t++*t++),g,1),s=a.plus(n),s.d[h]!==void 0){for(o=h;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,l++}return F=!0,s.d.length=h+1,s}function Pr(e,t){for(var r=e;--t;)r*=e;return r}function Po(e,t){var r,n=t.s<0,i=ce(e,e.precision,1),o=i.times(.5);if(t=t.abs(),t.lte(o))return Pe=n?4:1,t;if(r=t.divToInt(i),r.isZero())Pe=n?3:2;else{if(t=t.minus(r.times(i)),t.lte(o))return Pe=lo(r)?n?2:3:n?4:1,t;Pe=lo(r)?n?1:4:n?3:2}return t.minus(i).abs()}function wn(e,t,r,n){var i,o,s,a,u,l,g,h,x,S=e.constructor,C=r!==void 0;if(C?(oe(r,1,Ne),n===void 0?n=S.rounding:oe(n,0,8)):(r=S.precision,n=S.rounding),!e.isFinite())g=xo(e);else{for(g=he(e),s=g.indexOf(\".\"),C?(i=2,t==16?r=r*4-3:t==8&&(r=r*3-2)):i=t,s>=0&&(g=g.replace(\".\",\"\"),x=new S(1),x.e=g.length-s,x.d=hr(he(x),10,i),x.e=x.d.length),h=hr(g,10,i),o=u=h.length;h[--u]==0;)h.pop();if(!h[0])g=C?\"0p+0\":\"0\";else{if(s<0?o--:(e=new S(e),e.d=h,e.e=o,e=q(e,x,r,n,0,i),h=e.d,o=e.e,l=fo),s=h[r],a=i/2,l=l||h[r+1]!==void 0,l=n<4?(s!==void 0||l)&&(n===0||n===(e.s<0?3:2)):s>a||s===a&&(n===4||l||n===6&&h[r-1]&1||n===(e.s<0?8:7)),h.length=r,l)for(;++h[--r]>i-1;)h[r]=0,r||(++o,h.unshift(1));for(u=h.length;!h[u-1];--u);for(s=0,g=\"\";s<u;s++)g+=mn.charAt(h[s]);if(C){if(u>1)if(t==16||t==8){for(s=t==16?4:3,--u;u%s;u++)g+=\"0\";for(h=hr(g,i,t),u=h.length;!h[u-1];--u);for(s=1,g=\"1.\";s<u;s++)g+=mn.charAt(h[s])}else g=g.charAt(0)+\".\"+g.slice(1);g=g+(o<0?\"p\":\"p+\")+o}else if(o<0){for(;++o;)g=\"0\"+g;g=\"0.\"+g}else if(++o>u)for(o-=u;o--;)g+=\"0\";else o<u&&(g=g.slice(0,o)+\".\"+g.slice(o))}g=(t==16?\"0x\":t==2?\"0b\":t==8?\"0o\":\"\")+g}return e.s<0?\"-\"+g:g}function co(e,t){if(e.length>t)return e.length=t,!0}function wu(e){return new this(e).abs()}function Eu(e){return new this(e).acos()}function bu(e){return new this(e).acosh()}function xu(e,t){return new this(e).plus(t)}function Pu(e){return new this(e).asin()}function vu(e){return new this(e).asinh()}function Tu(e){return new this(e).atan()}function Cu(e){return new this(e).atanh()}function Au(e,t){e=new this(e),t=new this(t);var r,n=this.precision,i=this.rounding,o=n+4;return!e.s||!t.s?r=new this(NaN):!e.d&&!t.d?(r=ce(this,o,1).times(t.s>0?.25:.75),r.s=e.s):!t.d||e.isZero()?(r=t.s<0?ce(this,n,i):new this(0),r.s=e.s):!e.d||t.isZero()?(r=ce(this,o,1).times(.5),r.s=e.s):t.s<0?(this.precision=o,this.rounding=1,r=this.atan(q(e,t,o,1)),t=ce(this,o,1),this.precision=n,this.rounding=i,r=e.s<0?r.minus(t):r.plus(t)):r=this.atan(q(e,t,o,1)),r}function Ru(e){return new this(e).cbrt()}function Su(e){return D(e=new this(e),e.e+1,2)}function Iu(e,t,r){return new this(e).clamp(t,r)}function Du(e){if(!e||typeof e!=\"object\")throw Error(br+\"Object expected\");var t,r,n,i=e.defaults===!0,o=[\"precision\",1,Ne,\"rounding\",0,8,\"toExpNeg\",-lt,0,\"toExpPos\",0,lt,\"maxE\",0,lt,\"minE\",-lt,0,\"modulo\",0,9];for(t=0;t<o.length;t+=3)if(r=o[t],i&&(this[r]=dn[r]),(n=e[r])!==void 0)if(te(n)===n&&n>=o[t+1]&&n<=o[t+2])this[r]=n;else throw Error(Me+r+\": \"+n);if(r=\"crypto\",i&&(this[r]=dn[r]),(n=e[r])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto!=\"undefined\"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[r]=!0;else throw Error(go);else this[r]=!1;else throw Error(Me+r+\": \"+n);return this}function ku(e){return new this(e).cos()}function Ou(e){return new this(e).cosh()}function vo(e){var t,r,n;function i(o){var s,a,u,l=this;if(!(l instanceof i))return new i(o);if(l.constructor=i,po(o)){l.s=o.s,F?!o.d||o.e>i.maxE?(l.e=NaN,l.d=null):o.e<i.minE?(l.e=0,l.d=[0]):(l.e=o.e,l.d=o.d.slice()):(l.e=o.e,l.d=o.d?o.d.slice():o.d);return}if(u=typeof o,u===\"number\"){if(o===0){l.s=1/o<0?-1:1,l.e=0,l.d=[0];return}if(o<0?(o=-o,l.s=-1):l.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;F?s>i.maxE?(l.e=NaN,l.d=null):s<i.minE?(l.e=0,l.d=[0]):(l.e=s,l.d=[o]):(l.e=s,l.d=[o]);return}else if(o*0!==0){o||(l.s=NaN),l.e=NaN,l.d=null;return}return yn(l,o.toString())}else if(u!==\"string\")throw Error(Me+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),l.s=-1):(a===43&&(o=o.slice(1)),l.s=1),yo.test(o)?yn(l,o):hu(l,o)}if(i.prototype=R,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Du,i.clone=vo,i.isDecimal=po,i.abs=wu,i.acos=Eu,i.acosh=bu,i.add=xu,i.asin=Pu,i.asinh=vu,i.atan=Tu,i.atanh=Cu,i.atan2=Au,i.cbrt=Ru,i.ceil=Su,i.clamp=Iu,i.cos=ku,i.cosh=Ou,i.div=Mu,i.exp=Nu,i.floor=_u,i.hypot=Fu,i.ln=Lu,i.log=Bu,i.log10=qu,i.log2=$u,i.max=Uu,i.min=Vu,i.mod=ju,i.mul=Ju,i.pow=Qu,i.random=Gu,i.round=Hu,i.sign=Wu,i.sin=Ku,i.sinh=zu,i.sqrt=Yu,i.sub=Zu,i.sum=Xu,i.tan=el,i.tanh=tl,i.trunc=rl,e===void 0&&(e={}),e&&e.defaults!==!0)for(n=[\"precision\",\"rounding\",\"toExpNeg\",\"toExpPos\",\"maxE\",\"minE\",\"modulo\",\"crypto\"],t=0;t<n.length;)e.hasOwnProperty(r=n[t++])||(e[r]=this[r]);return i.config(e),i}function Mu(e,t){return new this(e).div(t)}function Nu(e){return new this(e).exp()}function _u(e){return D(e=new this(e),e.e+1,3)}function Fu(){var e,t,r=new this(0);for(F=!1,e=0;e<arguments.length;)if(t=new this(arguments[e++]),t.d)r.d&&(r=r.plus(t.times(t)));else{if(t.s)return F=!0,new this(1/0);r=t}return F=!0,r.sqrt()}function po(e){return e instanceof Ge||e&&e.toStringTag===ho||!1}function Lu(e){return new this(e).ln()}function Bu(e,t){return new this(e).log(t)}function $u(e){return new this(e).log(2)}function qu(e){return new this(e).log(10)}function Uu(){return bo(this,arguments,\"lt\")}function Vu(){return bo(this,arguments,\"gt\")}function ju(e,t){return new this(e).mod(t)}function Ju(e,t){return new this(e).mul(t)}function Qu(e,t){return new this(e).pow(t)}function Gu(e){var t,r,n,i,o=0,s=new this(1),a=[];if(e===void 0?e=this.precision:oe(e,1,Ne),n=Math.ceil(e/N),this.crypto)if(crypto.getRandomValues)for(t=crypto.getRandomValues(new Uint32Array(n));o<n;)i=t[o],i>=429e7?t[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(t=crypto.randomBytes(n*=4);o<n;)i=t[o]+(t[o+1]<<8)+(t[o+2]<<16)+((t[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(t,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(go);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],e%=N,n&&e&&(i=H(10,N-e),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<0)r=0,a=[0];else{for(r=-1;a[0]===0;r-=N)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<N&&(r-=N-n)}return s.e=r,s.d=a,s}function Hu(e){return D(e=new this(e),e.e+1,this.rounding)}function Wu(e){return e=new this(e),e.d?e.d[0]?e.s:0*e.s:e.s||NaN}function Ku(e){return new this(e).sin()}function zu(e){return new this(e).sinh()}function Yu(e){return new this(e).sqrt()}function Zu(e,t){return new this(e).sub(t)}function Xu(){var e=0,t=arguments,r=new this(t[e]);for(F=!1;r.s&&++e<t.length;)r=r.plus(t[e]);return F=!0,D(r,this.precision,this.rounding)}function el(e){return new this(e).tan()}function tl(e){return new this(e).tanh()}function rl(e){return D(e=new this(e),e.e+1,1)}R[Symbol.for(\"nodejs.util.inspect.custom\")]=R.toString;R[Symbol.toStringTag]=\"Decimal\";var Ge=R.constructor=vo(dn);yr=new Ge(yr);wr=new Ge(wr);var ve=Ge;function pt(e){return Ge.isDecimal(e)?!0:e!==null&&typeof e==\"object\"&&typeof e.s==\"number\"&&typeof e.e==\"number\"&&typeof e.toFixed==\"function\"&&Array.isArray(e.d)}d();c();p();f();m();var Lt=class{constructor(t,r,n,i,o){this.modelName=t,this.name=r,this.typeName=n,this.isList=i,this.isEnum=o}_toGraphQLInputType(){let t=this.isList?\"List\":\"\",r=this.isEnum?\"Enum\":\"\";return`${t}${r}${this.typeName}FieldRefInput<${this.modelName}>`}};function ft(e){return e instanceof Lt}d();c();p();f();m();d();c();p();f();m();var vr=class{constructor(t){this.value=t}write(t){t.write(this.value)}markAsError(){this.value.markAsError()}};d();c();p();f();m();var Tr=e=>e,Cr={bold:Tr,red:Tr,green:Tr,dim:Tr,enabled:!1},To={bold:sr,red:nt,green:Ci,dim:ar,enabled:!0},mt={write(e){e.writeLine(\",\")}};d();c();p();f();m();var ye=class{constructor(t){this.contents=t;this.isUnderlined=!1;this.color=t=>t}underline(){return this.isUnderlined=!0,this}setColor(t){return this.color=t,this}write(t){let r=t.getCurrentLineLength();t.write(this.color(this.contents)),this.isUnderlined&&t.afterNextNewline(()=>{t.write(\" \".repeat(r)).writeLine(this.color(\"~\".repeat(this.contents.length)))})}};d();c();p();f();m();var _e=class{constructor(){this.hasError=!1}markAsError(){return this.hasError=!0,this}};var dt=class extends _e{constructor(){super(...arguments);this.items=[]}addItem(r){return this.items.push(new vr(r)),this}getField(r){return this.items[r]}getPrintWidth(){return this.items.length===0?2:Math.max(...this.items.map(n=>n.value.getPrintWidth()))+2}write(r){if(this.items.length===0){this.writeEmpty(r);return}this.writeWithItems(r)}writeEmpty(r){let n=new ye(\"[]\");this.hasError&&n.setColor(r.context.colors.red).underline(),r.write(n)}writeWithItems(r){let{colors:n}=r.context;r.writeLine(\"[\").withIndent(()=>r.writeJoined(mt,this.items).newLine()).write(\"]\"),this.hasError&&r.afterNextNewline(()=>{r.writeLine(n.red(\"~\".repeat(this.getPrintWidth())))})}asObject(){}};d();c();p();f();m();var Co=\": \",Ar=class{constructor(t,r){this.name=t;this.value=r;this.hasError=!1}markAsError(){this.hasError=!0}getPrintWidth(){return this.name.length+this.value.getPrintWidth()+Co.length}write(t){let r=new ye(this.name);this.hasError&&r.underline().setColor(t.context.colors.red),t.write(r).write(Co).write(this.value)}};d();c();p();f();m();var Rr=class e extends _e{constructor(){super(...arguments);this.fields={};this.suggestions=[]}addField(r){this.fields[r.name]=r}addSuggestion(r){this.suggestions.push(r)}getField(r){return this.fields[r]}getDeepField(r){let[n,...i]=r,o=this.getField(n);if(!o)return;let s=o;for(let a of i){let u;if(s.value instanceof e?u=s.value.getField(a):s.value instanceof dt&&(u=s.value.getField(Number(a))),!u)return;s=u}return s}getDeepFieldValue(r){var n;return r.length===0?this:(n=this.getDeepField(r))==null?void 0:n.value}hasField(r){return!!this.getField(r)}removeAllFields(){this.fields={}}removeField(r){delete this.fields[r]}getFields(){return this.fields}isEmpty(){return Object.keys(this.fields).length===0}getFieldValue(r){var n;return(n=this.getField(r))==null?void 0:n.value}getDeepSubSelectionValue(r){let n=this;for(let i of r){if(!(n instanceof e))return;let o=n.getSubSelectionValue(i);if(!o)return;n=o}return n}getDeepSelectionParent(r){let n=this.getSelectionParent();if(!n)return;let i=n;for(let o of r){let s=i.value.getFieldValue(o);if(!s||!(s instanceof e))return;let a=s.getSelectionParent();if(!a)return;i=a}return i}getSelectionParent(){var i,o;let r=(i=this.getField(\"select\"))==null?void 0:i.value.asObject();if(r)return{kind:\"select\",value:r};let n=(o=this.getField(\"include\"))==null?void 0:o.value.asObject();if(n)return{kind:\"include\",value:n}}getSubSelectionValue(r){var n;return(n=this.getSelectionParent())==null?void 0:n.value.fields[r].value}getPrintWidth(){let r=Object.values(this.fields);return r.length==0?2:Math.max(...r.map(i=>i.getPrintWidth()))+2}write(r){let n=Object.values(this.fields);if(n.length===0&&this.suggestions.length===0){this.writeEmpty(r);return}this.writeWithContents(r,n)}asObject(){return this}writeEmpty(r){let n=new ye(\"{}\");this.hasError&&n.setColor(r.context.colors.red).underline(),r.write(n)}writeWithContents(r,n){r.writeLine(\"{\").withIndent(()=>{r.writeJoined(mt,[...n,...this.suggestions]).newLine()}),r.write(\"}\"),this.hasError&&r.afterNextNewline(()=>{r.writeLine(r.context.colors.red(\"~\".repeat(this.getPrintWidth())))})}};d();c();p();f();m();var K=class extends _e{constructor(r){super();this.text=r}getPrintWidth(){return this.text.length}write(r){let n=new ye(this.text);this.hasError&&n.underline().setColor(r.context.colors.red),r.write(n)}asObject(){}};var En=class{constructor(t){this.errorMessages=[];this.arguments=t}write(t){t.write(this.arguments)}addErrorMessage(t){this.errorMessages.push(t)}renderAllMessages(t){return this.errorMessages.map(r=>r(t)).join(`\n`)}};function Sr(e){return new En(Ao(e))}function Ao(e){let t=new Rr;for(let[r,n]of Object.entries(e)){let i=new Ar(r,Ro(n));t.addField(i)}return t}function Ro(e){if(typeof e==\"string\")return new K(JSON.stringify(e));if(typeof e==\"number\"||typeof e==\"boolean\")return new K(String(e));if(typeof e==\"bigint\")return new K(`${e}n`);if(e===null)return new K(\"null\");if(e===void 0)return new K(\"undefined\");if(pt(e))return new K(`new Prisma.Decimal(\"${e.toFixed()}\")`);if(e instanceof Uint8Array)return w.Buffer.isBuffer(e)?new K(`Buffer.alloc(${e.byteLength})`):new K(`new Uint8Array(${e.byteLength})`);if(e instanceof Date){let t=gr(e)?e.toISOString():\"Invalid Date\";return new K(`new Date(\"${t}\")`)}return e instanceof xe?new K(`Prisma.${e._getName()}`):ft(e)?new K(`prisma.${uo(e.modelName)}.$fields.${e.name}`):Array.isArray(e)?il(e):typeof e==\"object\"?Ao(e):new K(Object.prototype.toString.call(e))}function il(e){let t=new dt;for(let r of e)t.addItem(Ro(r));return t}function So(e){if(e===void 0)return\"\";let t=Sr(e);return new at(0,{colors:Cr}).write(t).toString()}d();c();p();f();m();var ol=\"P2037\";function Bt({error:e,user_facing_error:t},r,n){return t.error_code?new z(sl(t,n),{code:t.error_code,clientVersion:r,meta:t.meta,batchRequestIdx:t.batch_request_idx}):new ae(e,{clientVersion:r,batchRequestIdx:t.batch_request_idx})}function sl(e,t){let r=e.message;return(t===\"postgresql\"||t===\"postgres\"||t===\"mysql\")&&e.error_code===ol&&(r+=`\nPrisma Accelerate has built-in connection pooling to prevent such errors: https://pris.ly/client/error-accelerate`),r}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();var bn=class{getLocation(){return null}};function Fe(e){return typeof $EnabledCallSite==\"function\"&&e!==\"minimal\"?new $EnabledCallSite:new bn}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();var Io={_avg:!0,_count:!0,_sum:!0,_min:!0,_max:!0};function gt(e={}){let t=ul(e);return Object.entries(t).reduce((n,[i,o])=>(Io[i]!==void 0?n.select[i]={select:o}:n[i]=o,n),{select:{}})}function ul(e={}){return typeof e._count==\"boolean\"?{...e,_count:{_all:e._count}}:e}function Ir(e={}){return t=>(typeof e._count==\"boolean\"&&(t._count=t._count._all),t)}function Do(e,t){let r=Ir(e);return t({action:\"aggregate\",unpacker:r,argsMapper:gt})(e)}d();c();p();f();m();function ll(e={}){let{select:t,...r}=e;return typeof t==\"object\"?gt({...r,_count:t}):gt({...r,_count:{_all:!0}})}function cl(e={}){return typeof e.select==\"object\"?t=>Ir(e)(t)._count:t=>Ir(e)(t)._count._all}function ko(e,t){return t({action:\"count\",unpacker:cl(e),argsMapper:ll})(e)}d();c();p();f();m();function pl(e={}){let t=gt(e);if(Array.isArray(t.by))for(let r of t.by)typeof r==\"string\"&&(t.select[r]=!0);else typeof t.by==\"string\"&&(t.select[t.by]=!0);return t}function fl(e={}){return t=>(typeof(e==null?void 0:e._count)==\"boolean\"&&t.forEach(r=>{r._count=r._count._all}),t)}function Oo(e,t){return t({action:\"groupBy\",unpacker:fl(e),argsMapper:pl})(e)}function Mo(e,t,r){if(t===\"aggregate\")return n=>Do(n,r);if(t===\"count\")return n=>ko(n,r);if(t===\"groupBy\")return n=>Oo(n,r)}d();c();p();f();m();function No(e,t){let r=t.fields.filter(i=>!i.relationName),n=on(r,i=>i.name);return new Proxy({},{get(i,o){if(o in i||typeof o==\"symbol\")return i[o];let s=n[o];if(s)return new Lt(e,o,s.type,s.isList,s.kind===\"enum\")},...mr(Object.keys(n))})}d();c();p();f();m();d();c();p();f();m();var _o=e=>Array.isArray(e)?e:e.split(\".\"),xn=(e,t)=>_o(t).reduce((r,n)=>r&&r[n],e),Fo=(e,t,r)=>_o(t).reduceRight((n,i,o,s)=>Object.assign({},xn(e,s.slice(0,o)),{[i]:n}),r);function ml(e,t){return e===void 0||t===void 0?[]:[...t,\"select\",e]}function dl(e,t,r){return t===void 0?e!=null?e:{}:Fo(t,r,e||!0)}function Pn(e,t,r,n,i,o){let a=e._runtimeDataModel.models[t].fields.reduce((u,l)=>({...u,[l.name]:l}),{});return u=>{let l=Fe(e._errorFormat),g=ml(n,i),h=dl(u,o,g),x=r({dataPath:g,callsite:l})(h),S=gl(e,t);return new Proxy(x,{get(C,A){if(!S.includes(A))return C[A];let O=[a[A].type,r,A],B=[g,h];return Pn(e,...O,...B)},...mr([...S,...Object.getOwnPropertyNames(x)])})}}function gl(e,t){return e._runtimeDataModel.models[t].fields.filter(r=>r.kind===\"object\").map(r=>r.name)}d();c();p();f();m();d();c();p();f();m();var hl=Ue(Wi());var yl={red:nt,gray:Ii,dim:ar,bold:sr,underline:Ti,highlightSource:e=>e.highlight()},wl={red:e=>e,gray:e=>e,dim:e=>e,bold:e=>e,underline:e=>e,highlightSource:e=>e};function El({message:e,originalMethod:t,isPanic:r,callArguments:n}){return{functionName:`prisma.${t}()`,message:e,isPanic:r!=null?r:!1,callArguments:n}}function bl({functionName:e,location:t,message:r,isPanic:n,contextLines:i,callArguments:o},s){let a=[\"\"],u=t?\" in\":\":\";if(n?(a.push(s.red(`Oops, an unknown error occurred! This is ${s.bold(\"on us\")}, you did nothing wrong.`)),a.push(s.red(`It occurred in the ${s.bold(`\\`${e}\\``)} invocation${u}`))):a.push(s.red(`Invalid ${s.bold(`\\`${e}\\``)} invocation${u}`)),t&&a.push(s.underline(xl(t))),i){a.push(\"\");let l=[i.toString()];o&&(l.push(o),l.push(s.dim(\")\"))),a.push(l.join(\"\")),o&&a.push(\"\")}else a.push(\"\"),o&&a.push(o),a.push(\"\");return a.push(r),a.join(`\n`)}function xl(e){let t=[e.fileName];return e.lineNumber&&t.push(String(e.lineNumber)),e.columnNumber&&t.push(String(e.columnNumber)),t.join(\":\")}function ht(e){let t=e.showColors?yl:wl,r;return typeof $getTemplateParameters!=\"undefined\"?r=$getTemplateParameters(e,t):r=El(e),bl(r,t)}function Lo(e,t,r,n){return e===Se.ModelAction.findFirstOrThrow||e===Se.ModelAction.findUniqueOrThrow?Pl(t,r,n):n}function Pl(e,t,r){return async n=>{if(\"rejectOnNotFound\"in n.args){let o=ht({originalMethod:n.clientMethod,callsite:n.callsite,message:\"'rejectOnNotFound' option is not supported\"});throw new ee(o,{clientVersion:t})}return await r(n).catch(o=>{throw o instanceof z&&o.code===\"P2025\"?new Ie(`No ${e} found`,t):o})}}d();c();p();f();m();function we(e){return e.replace(/^./,t=>t.toLowerCase())}var vl=[\"findUnique\",\"findUniqueOrThrow\",\"findFirst\",\"findFirstOrThrow\",\"create\",\"update\",\"upsert\",\"delete\"],Tl=[\"aggregate\",\"count\",\"groupBy\"];function vn(e,t){var i;let r=(i=e._extensions.getAllModelExtensions(t))!=null?i:{},n=[Cl(e,t),Rl(e,t),_t(r),ne(\"name\",()=>t),ne(\"$name\",()=>t),ne(\"$parent\",()=>e._appliedParent)];return ge({},n)}function Cl(e,t){let r=we(t),n=Object.keys(Se.ModelAction).concat(\"count\");return{getKeys(){return n},getPropertyValue(i){let o=i,s=u=>e._request(u);s=Lo(o,t,e._clientVersion,s);let a=u=>l=>{let g=Fe(e._errorFormat);return e._createPrismaPromise(h=>{let x={args:l,dataPath:[],action:o,model:t,clientMethod:`${r}.${i}`,jsModelName:r,transaction:h,callsite:g};return s({...x,...u})})};return vl.includes(o)?Pn(e,t,a):Al(i)?Mo(e,i,a):a({})}}}function Al(e){return Tl.includes(e)}function Rl(e,t){return Qe(ne(\"fields\",()=>{let r=e._runtimeDataModel.models[t];return No(t,r)}))}d();c();p();f();m();function Bo(e){return e.replace(/^./,t=>t.toUpperCase())}var Tn=Symbol();function $t(e){let t=[Sl(e),ne(Tn,()=>e),ne(\"$parent\",()=>e._appliedParent)],r=e._extensions.getAllClientExtensions();return r&&t.push(_t(r)),ge(e,t)}function Sl(e){let t=Object.keys(e._runtimeDataModel.models),r=t.map(we),n=[...new Set(t.concat(r))];return Qe({getKeys(){return n},getPropertyValue(i){let o=Bo(i);if(e._runtimeDataModel.models[o]!==void 0)return vn(e,o);if(e._runtimeDataModel.models[i]!==void 0)return vn(e,i)},getPropertyDescriptor(i){if(!r.includes(i))return{enumerable:!1}}})}function $o(e){return e[Tn]?e[Tn]:e}function qo(e){var r;if(typeof e==\"function\")return e(this);if((r=e.client)!=null&&r.__AccelerateEngine){let n=e.client.__AccelerateEngine;this._originalClient._engine=new n(this._originalClient._accelerateEngineConfig)}let t=Object.create(this._originalClient,{_extensions:{value:this._extensions.append(e)},_appliedParent:{value:this,configurable:!0},$use:{value:void 0},$on:{value:void 0}});return $t(t)}d();c();p();f();m();d();c();p();f();m();function Uo({result:e,modelName:t,select:r,omit:n,extensions:i}){let o=i.getAllComputedFields(t);if(!o)return e;let s=[],a=[];for(let u of Object.values(o)){if(n){if(n[u.name])continue;let l=u.needs.filter(g=>n[g]);l.length>0&&a.push(st(l))}else if(r){if(!r[u.name])continue;let l=u.needs.filter(g=>!r[g]);l.length>0&&a.push(st(l))}Il(e,u.needs)&&s.push(Dl(u,ge(e,s)))}return s.length>0||a.length>0?ge(e,[...s,...a]):e}function Il(e,t){return t.every(r=>nn(e,r))}function Dl(e,t){return Qe(ne(e.name,()=>e.compute(t)))}d();c();p();f();m();function Dr({visitor:e,result:t,args:r,runtimeDataModel:n,modelName:i}){var s;if(Array.isArray(t)){for(let a=0;a<t.length;a++)t[a]=Dr({result:t[a],args:r,modelName:i,runtimeDataModel:n,visitor:e});return t}let o=(s=e(t,i,r))!=null?s:t;return r.include&&Vo({includeOrSelect:r.include,result:o,parentModelName:i,runtimeDataModel:n,visitor:e}),r.select&&Vo({includeOrSelect:r.select,result:o,parentModelName:i,runtimeDataModel:n,visitor:e}),o}function Vo({includeOrSelect:e,result:t,parentModelName:r,runtimeDataModel:n,visitor:i}){for(let[o,s]of Object.entries(e)){if(!s||t[o]==null)continue;let u=n.models[r].fields.find(g=>g.name===o);if(!u||u.kind!==\"object\"||!u.relationName)continue;let l=typeof s==\"object\"?s:{};t[o]=Dr({visitor:i,result:t[o],args:l,modelName:u.type,runtimeDataModel:n})}}function jo({result:e,modelName:t,args:r,extensions:n,runtimeDataModel:i}){return n.isEmpty()||e==null||typeof e!=\"object\"||!i.models[t]?e:Dr({result:e,args:r!=null?r:{},modelName:t,runtimeDataModel:i,visitor:(s,a,u)=>Uo({result:s,modelName:we(a),select:u.select,omit:u.omit,extensions:n})})}d();c();p();f();m();d();c();p();f();m();function Jo(e){if(e instanceof ue)return kl(e);if(Array.isArray(e)){let r=[e[0]];for(let n=1;n<e.length;n++)r[n]=qt(e[n]);return r}let t={};for(let r in e)t[r]=qt(e[r]);return t}function kl(e){return new ue(e.strings,e.values)}function qt(e){if(typeof e!=\"object\"||e==null||e instanceof xe||ft(e))return e;if(pt(e))return new ve(e.toFixed());if(ut(e))return new Date(+e);if(ArrayBuffer.isView(e))return e.slice(0);if(Array.isArray(e)){let t=e.length,r;for(r=Array(t);t--;)r[t]=qt(e[t]);return r}if(typeof e==\"object\"){let t={};for(let r in e)r===\"__proto__\"?Object.defineProperty(t,r,{value:qt(e[r]),configurable:!0,enumerable:!0,writable:!0}):t[r]=qt(e[r]);return t}je(e,\"Unknown value\")}function Go(e,t,r,n=0){return e._createPrismaPromise(i=>{var s,a;let o=t.customDataProxyFetch;return\"transaction\"in t&&i!==void 0&&(((s=t.transaction)==null?void 0:s.kind)===\"batch\"&&t.transaction.lock.then(),t.transaction=i),n===r.length?e._executeRequest(t):r[n]({model:t.model,operation:t.model?t.action:t.clientMethod,args:Jo((a=t.args)!=null?a:{}),__internalParams:t,query:(u,l=t)=>{let g=l.customDataProxyFetch;return l.customDataProxyFetch=zo(o,g),l.args=u,Go(e,l,r,n+1)}})})}function Ho(e,t){let{jsModelName:r,action:n,clientMethod:i}=t,o=r?n:i;if(e._extensions.isEmpty())return e._executeRequest(t);let s=e._extensions.getAllQueryCallbacks(r!=null?r:\"$none\",o);return Go(e,t,s)}function Wo(e){return t=>{let r={requests:t},n=t[0].extensions.getAllBatchQueryCallbacks();return n.length?Ko(r,n,0,e):e(r)}}function Ko(e,t,r,n){if(r===t.length)return n(e);let i=e.customDataProxyFetch,o=e.requests[0].transaction;return t[r]({args:{queries:e.requests.map(s=>({model:s.modelName,operation:s.action,args:s.args})),transaction:o?{isolationLevel:o.kind===\"batch\"?o.isolationLevel:void 0}:void 0},__internalParams:e,query(s,a=e){let u=a.customDataProxyFetch;return a.customDataProxyFetch=zo(i,u),Ko(a,t,r+1,n)}})}var Qo=e=>e;function zo(e=Qo,t=Qo){return r=>e(t(r))}d();c();p();f();m();d();c();p();f();m();function Zo(e,t,r){let n=we(r);return!t.result||!(t.result.$allModels||t.result[n])?e:Ol({...e,...Yo(t.name,e,t.result.$allModels),...Yo(t.name,e,t.result[n])})}function Ol(e){let t=new de,r=(n,i)=>t.getOrCreate(n,()=>i.has(n)?[n]:(i.add(n),e[n]?e[n].needs.flatMap(o=>r(o,i)):[n]));return ot(e,n=>({...n,needs:r(n.name,new Set)}))}function Yo(e,t,r){return r?ot(r,({needs:n,compute:i},o)=>({name:o,needs:n?Object.keys(n).filter(s=>n[s]):[],compute:Ml(t,o,i)})):{}}function Ml(e,t,r){var i;let n=(i=e==null?void 0:e[t])==null?void 0:i.compute;return n?o=>r({...o,[t]:n(o)}):r}function Xo(e,t){if(!t)return e;let r={...e};for(let n of Object.values(t))if(e[n.name])for(let i of n.needs)r[i]=!0;return r}function es(e,t){if(!t)return e;let r={...e};for(let n of Object.values(t))if(!e[n.name])for(let i of n.needs)delete r[i];return r}var kr=class{constructor(t,r){this.extension=t;this.previous=r;this.computedFieldsCache=new de;this.modelExtensionsCache=new de;this.queryCallbacksCache=new de;this.clientExtensions=It(()=>{var t,r;return this.extension.client?{...(r=this.previous)==null?void 0:r.getAllClientExtensions(),...this.extension.client}:(t=this.previous)==null?void 0:t.getAllClientExtensions()});this.batchCallbacks=It(()=>{var n,i,o;let t=(i=(n=this.previous)==null?void 0:n.getAllBatchQueryCallbacks())!=null?i:[],r=(o=this.extension.query)==null?void 0:o.$__internalBatch;return r?t.concat(r):t})}getAllComputedFields(t){return this.computedFieldsCache.getOrCreate(t,()=>{var r;return Zo((r=this.previous)==null?void 0:r.getAllComputedFields(t),this.extension,t)})}getAllClientExtensions(){return this.clientExtensions.get()}getAllModelExtensions(t){return this.modelExtensionsCache.getOrCreate(t,()=>{var n,i;let r=we(t);return!this.extension.model||!(this.extension.model[r]||this.extension.model.$allModels)?(n=this.previous)==null?void 0:n.getAllModelExtensions(t):{...(i=this.previous)==null?void 0:i.getAllModelExtensions(t),...this.extension.model.$allModels,...this.extension.model[r]}})}getAllQueryCallbacks(t,r){return this.queryCallbacksCache.getOrCreate(`${t}:${r}`,()=>{var s,a;let n=(a=(s=this.previous)==null?void 0:s.getAllQueryCallbacks(t,r))!=null?a:[],i=[],o=this.extension.query;return!o||!(o[t]||o.$allModels||o[r]||o.$allOperations)?n:(o[t]!==void 0&&(o[t][r]!==void 0&&i.push(o[t][r]),o[t].$allOperations!==void 0&&i.push(o[t].$allOperations)),t!==\"$none\"&&o.$allModels!==void 0&&(o.$allModels[r]!==void 0&&i.push(o.$allModels[r]),o.$allModels.$allOperations!==void 0&&i.push(o.$allModels.$allOperations)),o[r]!==void 0&&i.push(o[r]),o.$allOperations!==void 0&&i.push(o.$allOperations),n.concat(i))})}getAllBatchQueryCallbacks(){return this.batchCallbacks.get()}},Or=class e{constructor(t){this.head=t}static empty(){return new e}static single(t){return new e(new kr(t))}isEmpty(){return this.head===void 0}append(t){return new e(new kr(t,this.head))}getAllComputedFields(t){var r;return(r=this.head)==null?void 0:r.getAllComputedFields(t)}getAllClientExtensions(){var t;return(t=this.head)==null?void 0:t.getAllClientExtensions()}getAllModelExtensions(t){var r;return(r=this.head)==null?void 0:r.getAllModelExtensions(t)}getAllQueryCallbacks(t,r){var n,i;return(i=(n=this.head)==null?void 0:n.getAllQueryCallbacks(t,r))!=null?i:[]}getAllBatchQueryCallbacks(){var t,r;return(r=(t=this.head)==null?void 0:t.getAllBatchQueryCallbacks())!=null?r:[]}};d();c();p();f();m();var ts=re(\"prisma:client\"),rs={Vercel:\"vercel\",\"Netlify CI\":\"netlify\"};function ns({postinstall:e,ciName:t,clientVersion:r}){if(ts(\"checkPlatformCaching:postinstall\",e),ts(\"checkPlatformCaching:ciName\",t),e===!0&&t&&t in rs){let n=`Prisma has detected that this project was built on ${t}, which caches dependencies. This leads to an outdated Prisma Client because Prisma's auto-generation isn't triggered. To fix this, make sure to run the \\`prisma generate\\` command during the build process.\n\nLearn how: https://pris.ly/d/${rs[t]}-build`;throw console.error(n),new G(n,r)}}d();c();p();f();m();function is(e,t){return e?e.datasources?e.datasources:e.datasourceUrl?{[t[0]]:{url:e.datasourceUrl}}:{}:{}}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();var Nl=\"Cloudflare-Workers\",_l=\"node\";function os(){var e,t,r;return typeof Netlify==\"object\"?\"netlify\":typeof EdgeRuntime==\"string\"?\"edge-light\":((e=globalThis.navigator)==null?void 0:e.userAgent)===Nl?\"workerd\":globalThis.Deno?\"deno\":globalThis.__lagon__?\"lagon\":((r=(t=globalThis.process)==null?void 0:t.release)==null?void 0:r.name)===_l?\"node\":globalThis.Bun?\"bun\":globalThis.fastly?\"fastly\":\"unknown\"}var Fl={node:\"Node.js\",workerd:\"Cloudflare Workers\",deno:\"Deno and Deno Deploy\",netlify:\"Netlify Edge Functions\",\"edge-light\":\"Vercel Edge Functions or Edge Middleware\"};function Cn(){let e=os();return{id:e,prettyName:Fl[e]||e,isEdge:[\"workerd\",\"deno\",\"netlify\",\"edge-light\"].includes(e)}}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();function yt({inlineDatasources:e,overrideDatasources:t,env:r,clientVersion:n}){var u,l;let i,o=Object.keys(e)[0],s=(u=e[o])==null?void 0:u.url,a=(l=t[o])==null?void 0:l.url;if(o===void 0?i=void 0:a?i=a:s!=null&&s.value?i=s.value:s!=null&&s.fromEnvVar&&(i=r[s.fromEnvVar]),(s==null?void 0:s.fromEnvVar)!==void 0&&i===void 0)throw Cn().id===\"workerd\"?new G(`error: Environment variable not found: ${s.fromEnvVar}.\n\nIn Cloudflare module Workers, environment variables are available only in the Worker's \\`env\\` parameter of \\`fetch\\`.\nTo solve this, provide the connection string directly: https://pris.ly/d/cloudflare-datasource-url`,n):new G(`error: Environment variable not found: ${s.fromEnvVar}.`,n);if(i===void 0)throw new G(\"error: Missing URL environment variable, value, or override.\",n);return i}d();c();p();f();m();d();c();p();f();m();var Mr=class extends Error{constructor(t,r){super(t),this.clientVersion=r.clientVersion,this.cause=r.cause}get[Symbol.toStringTag](){return this.name}};var se=class extends Mr{constructor(t,r){var n;super(t,r),this.isRetryable=(n=r.isRetryable)!=null?n:!0}};d();c();p();f();m();d();c();p();f();m();function $(e,t){return{...e,isRetryable:t}}var wt=class extends se{constructor(r){super(\"This request must be retried\",$(r,!0));this.name=\"ForcedRetryError\";this.code=\"P5001\"}};_(wt,\"ForcedRetryError\");d();c();p();f();m();var He=class extends se{constructor(r,n){super(r,$(n,!1));this.name=\"InvalidDatasourceError\";this.code=\"P6001\"}};_(He,\"InvalidDatasourceError\");d();c();p();f();m();var We=class extends se{constructor(r,n){super(r,$(n,!1));this.name=\"NotImplementedYetError\";this.code=\"P5004\"}};_(We,\"NotImplementedYetError\");d();c();p();f();m();d();c();p();f();m();var j=class extends se{constructor(t,r){super(t,r),this.response=r.response;let n=this.response.headers.get(\"prisma-request-id\");if(n){let i=`(The request id was: ${n})`;this.message=this.message+\" \"+i}}};var Ke=class extends j{constructor(r){super(\"Schema needs to be uploaded\",$(r,!0));this.name=\"SchemaMissingError\";this.code=\"P5005\"}};_(Ke,\"SchemaMissingError\");d();c();p();f();m();d();c();p();f();m();var An=\"This request could not be understood by the server\",Ut=class extends j{constructor(r,n,i){super(n||An,$(r,!1));this.name=\"BadRequestError\";this.code=\"P5000\";i&&(this.code=i)}};_(Ut,\"BadRequestError\");d();c();p();f();m();var Vt=class extends j{constructor(r,n){super(\"Engine not started: healthcheck timeout\",$(r,!0));this.name=\"HealthcheckTimeoutError\";this.code=\"P5013\";this.logs=n}};_(Vt,\"HealthcheckTimeoutError\");d();c();p();f();m();var jt=class extends j{constructor(r,n,i){super(n,$(r,!0));this.name=\"EngineStartupError\";this.code=\"P5014\";this.logs=i}};_(jt,\"EngineStartupError\");d();c();p();f();m();var Jt=class extends j{constructor(r){super(\"Engine version is not supported\",$(r,!1));this.name=\"EngineVersionNotSupportedError\";this.code=\"P5012\"}};_(Jt,\"EngineVersionNotSupportedError\");d();c();p();f();m();var Rn=\"Request timed out\",Qt=class extends j{constructor(r,n=Rn){super(n,$(r,!1));this.name=\"GatewayTimeoutError\";this.code=\"P5009\"}};_(Qt,\"GatewayTimeoutError\");d();c();p();f();m();var Ll=\"Interactive transaction error\",Gt=class extends j{constructor(r,n=Ll){super(n,$(r,!1));this.name=\"InteractiveTransactionError\";this.code=\"P5015\"}};_(Gt,\"InteractiveTransactionError\");d();c();p();f();m();var Bl=\"Request parameters are invalid\",Ht=class extends j{constructor(r,n=Bl){super(n,$(r,!1));this.name=\"InvalidRequestError\";this.code=\"P5011\"}};_(Ht,\"InvalidRequestError\");d();c();p();f();m();var Sn=\"Requested resource does not exist\",Wt=class extends j{constructor(r,n=Sn){super(n,$(r,!1));this.name=\"NotFoundError\";this.code=\"P5003\"}};_(Wt,\"NotFoundError\");d();c();p();f();m();var In=\"Unknown server error\",Et=class extends j{constructor(r,n,i){super(n||In,$(r,!0));this.name=\"ServerError\";this.code=\"P5006\";this.logs=i}};_(Et,\"ServerError\");d();c();p();f();m();var Dn=\"Unauthorized, check your connection string\",Kt=class extends j{constructor(r,n=Dn){super(n,$(r,!1));this.name=\"UnauthorizedError\";this.code=\"P5007\"}};_(Kt,\"UnauthorizedError\");d();c();p();f();m();var kn=\"Usage exceeded, retry again later\",zt=class extends j{constructor(r,n=kn){super(n,$(r,!0));this.name=\"UsageExceededError\";this.code=\"P5008\"}};_(zt,\"UsageExceededError\");async function $l(e){let t;try{t=await e.text()}catch(r){return{type:\"EmptyError\"}}try{let r=JSON.parse(t);if(typeof r==\"string\")switch(r){case\"InternalDataProxyError\":return{type:\"DataProxyError\",body:r};default:return{type:\"UnknownTextError\",body:r}}if(typeof r==\"object\"&&r!==null){if(\"is_panic\"in r&&\"message\"in r&&\"error_code\"in r)return{type:\"QueryEngineError\",body:r};if(\"EngineNotStarted\"in r||\"InteractiveTransactionMisrouted\"in r||\"InvalidRequestError\"in r){let n=Object.values(r)[0].reason;return typeof n==\"string\"&&![\"SchemaMissing\",\"EngineVersionNotSupported\"].includes(n)?{type:\"UnknownJsonError\",body:r}:{type:\"DataProxyError\",body:r}}}return{type:\"UnknownJsonError\",body:r}}catch(r){return t===\"\"?{type:\"EmptyError\"}:{type:\"UnknownTextError\",body:t}}}async function Yt(e,t){if(e.ok)return;let r={clientVersion:t,response:e},n=await $l(e);if(n.type===\"QueryEngineError\")throw new z(n.body.message,{code:n.body.error_code,clientVersion:t});if(n.type===\"DataProxyError\"){if(n.body===\"InternalDataProxyError\")throw new Et(r,\"Internal Data Proxy error\");if(\"EngineNotStarted\"in n.body){if(n.body.EngineNotStarted.reason===\"SchemaMissing\")return new Ke(r);if(n.body.EngineNotStarted.reason===\"EngineVersionNotSupported\")throw new Jt(r);if(\"EngineStartupError\"in n.body.EngineNotStarted.reason){let{msg:i,logs:o}=n.body.EngineNotStarted.reason.EngineStartupError;throw new jt(r,i,o)}if(\"KnownEngineStartupError\"in n.body.EngineNotStarted.reason){let{msg:i,error_code:o}=n.body.EngineNotStarted.reason.KnownEngineStartupError;throw new G(i,t,o)}if(\"HealthcheckTimeout\"in n.body.EngineNotStarted.reason){let{logs:i}=n.body.EngineNotStarted.reason.HealthcheckTimeout;throw new Vt(r,i)}}if(\"InteractiveTransactionMisrouted\"in n.body){let i={IDParseError:\"Could not parse interactive transaction ID\",NoQueryEngineFoundError:\"Could not find Query Engine for the specified host and transaction ID\",TransactionStartError:\"Could not start interactive transaction\"};throw new Gt(r,i[n.body.InteractiveTransactionMisrouted.reason])}if(\"InvalidRequestError\"in n.body)throw new Ht(r,n.body.InvalidRequestError.reason)}if(e.status===401||e.status===403)throw new Kt(r,bt(Dn,n));if(e.status===404)return new Wt(r,bt(Sn,n));if(e.status===429)throw new zt(r,bt(kn,n));if(e.status===504)throw new Qt(r,bt(Rn,n));if(e.status>=500)throw new Et(r,bt(In,n));if(e.status>=400)throw new Ut(r,bt(An,n))}function bt(e,t){return t.type===\"EmptyError\"?e:`${e}: ${JSON.stringify(t)}`}d();c();p();f();m();function ss(e){let t=Math.pow(2,e)*50,r=Math.ceil(Math.random()*t)-Math.ceil(t/2),n=t+r;return new Promise(i=>setTimeout(()=>i(n),n))}d();c();p();f();m();var Te=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";function as(e){let t=new TextEncoder().encode(e),r=\"\",n=t.byteLength,i=n%3,o=n-i,s,a,u,l,g;for(let h=0;h<o;h=h+3)g=t[h]<<16|t[h+1]<<8|t[h+2],s=(g&16515072)>>18,a=(g&258048)>>12,u=(g&4032)>>6,l=g&63,r+=Te[s]+Te[a]+Te[u]+Te[l];return i==1?(g=t[o],s=(g&252)>>2,a=(g&3)<<4,r+=Te[s]+Te[a]+\"==\"):i==2&&(g=t[o]<<8|t[o+1],s=(g&64512)>>10,a=(g&1008)>>4,u=(g&15)<<2,r+=Te[s]+Te[a]+Te[u]+\"=\"),r}d();c();p();f();m();function us(e){var r;if(!!((r=e.generator)!=null&&r.previewFeatures.some(n=>n.toLowerCase().includes(\"metrics\"))))throw new G(\"The `metrics` preview feature is not yet available with Accelerate.\\nPlease remove `metrics` from the `previewFeatures` in your schema.\\n\\nMore information about Accelerate: https://pris.ly/d/accelerate\",e.clientVersion)}d();c();p();f();m();function ql(e){return e[0]*1e3+e[1]/1e6}function ls(e){return new Date(ql(e))}d();c();p();f();m();var cs={\"@prisma/debug\":\"workspace:*\",\"@prisma/engines-version\":\"5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\",\"@prisma/fetch-engine\":\"workspace:*\",\"@prisma/get-platform\":\"workspace:*\"};d();c();p();f();m();d();c();p();f();m();var Zt=class extends se{constructor(r,n){super(`Cannot fetch data from service:\n${r}`,$(n,!0));this.name=\"RequestError\";this.code=\"P5010\"}};_(Zt,\"RequestError\");async function ze(e,t,r=n=>n){var i;let n=t.clientVersion;try{return typeof fetch==\"function\"?await r(fetch)(e,t):await r(On)(e,t)}catch(o){let s=(i=o.message)!=null?i:\"Unknown error\";throw new Zt(s,{clientVersion:n})}}function Vl(e){return{...e.headers,\"Content-Type\":\"application/json\"}}function jl(e){return{method:e.method,headers:Vl(e)}}function Jl(e,t){return{text:()=>Promise.resolve(w.Buffer.concat(e).toString()),json:()=>Promise.resolve().then(()=>JSON.parse(w.Buffer.concat(e).toString())),ok:t.statusCode>=200&&t.statusCode<=299,status:t.statusCode,url:t.url,headers:new Mn(t.headers)}}async function On(e,t={}){let r=Ql(\"https\"),n=jl(t),i=[],{origin:o}=new URL(e);return new Promise((s,a)=>{var l;let u=r.request(e,n,g=>{let{statusCode:h,headers:{location:x}}=g;h>=301&&h<=399&&x&&(x.startsWith(\"http\")===!1?s(On(`${o}${x}`,t)):s(On(x,t))),g.on(\"data\",S=>i.push(S)),g.on(\"end\",()=>s(Jl(i,g))),g.on(\"error\",a)});u.on(\"error\",a),u.end((l=t.body)!=null?l:\"\")})}var Ql=typeof Pt!=\"undefined\"?Pt:()=>{},Mn=class{constructor(t={}){this.headers=new Map;for(let[r,n]of Object.entries(t))if(typeof n==\"string\")this.headers.set(r,n);else if(Array.isArray(n))for(let i of n)this.headers.set(r,i)}append(t,r){this.headers.set(t,r)}delete(t){this.headers.delete(t)}get(t){var r;return(r=this.headers.get(t))!=null?r:null}has(t){return this.headers.has(t)}set(t,r){this.headers.set(t,r)}forEach(t,r){for(let[n,i]of this.headers)t.call(r,i,n,this)}};var Gl=/^[1-9][0-9]*\\.[0-9]+\\.[0-9]+$/,ps=re(\"prisma:client:dataproxyEngine\");async function Hl(e,t){var s,a,u;let r=cs[\"@prisma/engines-version\"],n=(s=t.clientVersion)!=null?s:\"unknown\";if(y.env.PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION)return y.env.PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION;if(e.includes(\"accelerate\")&&n!==\"0.0.0\"&&n!==\"in-memory\")return n;let[i,o]=(a=n==null?void 0:n.split(\"-\"))!=null?a:[];if(o===void 0&&Gl.test(i))return i;if(o!==void 0||n===\"0.0.0\"||n===\"in-memory\"){if(e.startsWith(\"localhost\")||e.startsWith(\"127.0.0.1\"))return\"0.0.0\";let[l]=(u=r.split(\"-\"))!=null?u:[],[g,h,x]=l.split(\".\"),S=Wl(`<=${g}.${h}.${x}`),C=await ze(S,{clientVersion:n});if(!C.ok)throw new Error(`Failed to fetch stable Prisma version, unpkg.com status ${C.status} ${C.statusText}, response body: ${await C.text()||\"<empty body>\"}`);let A=await C.text();ps(\"length of body fetched from unpkg.com\",A.length);let k;try{k=JSON.parse(A)}catch(O){throw console.error(\"JSON.parse error: body fetched from unpkg.com: \",A),O}return k.version}throw new We(\"Only `major.minor.patch` versions are supported by Accelerate.\",{clientVersion:n})}async function fs(e,t){let r=await Hl(e,t);return ps(\"version\",r),r}function Wl(e){return encodeURI(`https://unpkg.com/prisma@${e}/package.json`)}var ms=3,Nn=re(\"prisma:client:dataproxyEngine\"),_n=class{constructor({apiKey:t,tracingHelper:r,logLevel:n,logQueries:i,engineHash:o}){this.apiKey=t,this.tracingHelper=r,this.logLevel=n,this.logQueries=i,this.engineHash=o}build({traceparent:t,interactiveTransaction:r}={}){let n={Authorization:`Bearer ${this.apiKey}`,\"Prisma-Engine-Hash\":this.engineHash};this.tracingHelper.isEnabled()&&(n.traceparent=t!=null?t:this.tracingHelper.getTraceParent()),r&&(n[\"X-transaction-id\"]=r.id);let i=this.buildCaptureSettings();return i.length>0&&(n[\"X-capture-telemetry\"]=i.join(\", \")),n}buildCaptureSettings(){let t=[];return this.tracingHelper.isEnabled()&&t.push(\"tracing\"),this.logLevel&&t.push(this.logLevel),this.logQueries&&t.push(\"query\"),t}},Xt=class{constructor(t){this.name=\"DataProxyEngine\";us(t),this.config=t,this.env={...t.env,...typeof y!=\"undefined\"?y.env:{}},this.inlineSchema=as(t.inlineSchema),this.inlineDatasources=t.inlineDatasources,this.inlineSchemaHash=t.inlineSchemaHash,this.clientVersion=t.clientVersion,this.engineHash=t.engineVersion,this.logEmitter=t.logEmitter,this.tracingHelper=t.tracingHelper}apiKey(){return this.headerBuilder.apiKey}version(){return this.engineHash}async start(){this.startPromise!==void 0&&await this.startPromise,this.startPromise=(async()=>{let[t,r]=this.extractHostAndApiKey();this.host=t,this.headerBuilder=new _n({apiKey:r,tracingHelper:this.tracingHelper,logLevel:this.config.logLevel,logQueries:this.config.logQueries,engineHash:this.engineHash}),this.remoteClientVersion=await fs(t,this.config),Nn(\"host\",this.host)})(),await this.startPromise}async stop(){}propagateResponseExtensions(t){var r,n;(r=t==null?void 0:t.logs)!=null&&r.length&&t.logs.forEach(i=>{switch(i.level){case\"debug\":case\"error\":case\"trace\":case\"warn\":case\"info\":break;case\"query\":{let o=typeof i.attributes.query==\"string\"?i.attributes.query:\"\";if(!this.tracingHelper.isEnabled()){let[s]=o.split(\"/* traceparent\");o=s}this.logEmitter.emit(\"query\",{query:o,timestamp:ls(i.timestamp),duration:Number(i.attributes.duration_ms),params:i.attributes.params,target:i.attributes.target})}}}),(n=t==null?void 0:t.traces)!=null&&n.length&&this.tracingHelper.createEngineSpan({span:!0,spans:t.traces})}onBeforeExit(){throw new Error('\"beforeExit\" hook is not applicable to the remote query engine')}async url(t){return await this.start(),`https://${this.host}/${this.remoteClientVersion}/${this.inlineSchemaHash}/${t}`}async uploadSchema(){let t={name:\"schemaUpload\",internal:!0};return this.tracingHelper.runInChildSpan(t,async()=>{let r=await ze(await this.url(\"schema\"),{method:\"PUT\",headers:this.headerBuilder.build(),body:this.inlineSchema,clientVersion:this.clientVersion});r.ok||Nn(\"schema response status\",r.status);let n=await Yt(r,this.clientVersion);if(n)throw this.logEmitter.emit(\"warn\",{message:`Error while uploading schema: ${n.message}`,timestamp:new Date,target:\"\"}),n;this.logEmitter.emit(\"info\",{message:`Schema (re)uploaded (hash: ${this.inlineSchemaHash})`,timestamp:new Date,target:\"\"})})}request(t,{traceparent:r,interactiveTransaction:n,customDataProxyFetch:i}){return this.requestInternal({body:t,traceparent:r,interactiveTransaction:n,customDataProxyFetch:i})}async requestBatch(t,{traceparent:r,transaction:n,customDataProxyFetch:i}){let o=(n==null?void 0:n.kind)===\"itx\"?n.options:void 0,s=dr(t,n),{batchResult:a,elapsed:u}=await this.requestInternal({body:s,customDataProxyFetch:i,interactiveTransaction:o,traceparent:r});return a.map(l=>\"errors\"in l&&l.errors.length>0?Bt(l.errors[0],this.clientVersion,this.config.activeProvider):{data:l,elapsed:u})}requestInternal({body:t,traceparent:r,customDataProxyFetch:n,interactiveTransaction:i}){return this.withRetry({actionGerund:\"querying\",callback:async({logHttpCall:o})=>{let s=i?`${i.payload.endpoint}/graphql`:await this.url(\"graphql\");o(s);let a=await ze(s,{method:\"POST\",headers:this.headerBuilder.build({traceparent:r,interactiveTransaction:i}),body:JSON.stringify(t),clientVersion:this.clientVersion},n);a.ok||Nn(\"graphql response status\",a.status),await this.handleError(await Yt(a,this.clientVersion));let u=await a.json(),l=u.extensions;if(l&&this.propagateResponseExtensions(l),u.errors)throw u.errors.length===1?Bt(u.errors[0],this.config.clientVersion,this.config.activeProvider):new ae(u.errors,{clientVersion:this.config.clientVersion});return u}})}async transaction(t,r,n){let i={start:\"starting\",commit:\"committing\",rollback:\"rolling back\"};return this.withRetry({actionGerund:`${i[t]} transaction`,callback:async({logHttpCall:o})=>{if(t===\"start\"){let s=JSON.stringify({max_wait:n.maxWait,timeout:n.timeout,isolation_level:n.isolationLevel}),a=await this.url(\"transaction/start\");o(a);let u=await ze(a,{method:\"POST\",headers:this.headerBuilder.build({traceparent:r.traceparent}),body:s,clientVersion:this.clientVersion});await this.handleError(await Yt(u,this.clientVersion));let l=await u.json(),g=l.extensions;g&&this.propagateResponseExtensions(g);let h=l.id,x=l[\"data-proxy\"].endpoint;return{id:h,payload:{endpoint:x}}}else{let s=`${n.payload.endpoint}/${t}`;o(s);let a=await ze(s,{method:\"POST\",headers:this.headerBuilder.build({traceparent:r.traceparent}),clientVersion:this.clientVersion});await this.handleError(await Yt(a,this.clientVersion));let l=(await a.json()).extensions;l&&this.propagateResponseExtensions(l);return}}})}extractHostAndApiKey(){let t={clientVersion:this.clientVersion},r=Object.keys(this.inlineDatasources)[0],n=yt({inlineDatasources:this.inlineDatasources,overrideDatasources:this.config.overrideDatasources,clientVersion:this.clientVersion,env:this.env}),i;try{i=new URL(n)}catch(l){throw new He(`Error validating datasource \\`${r}\\`: the URL must start with the protocol \\`prisma://\\``,t)}let{protocol:o,host:s,searchParams:a}=i;if(o!==\"prisma:\")throw new He(`Error validating datasource \\`${r}\\`: the URL must start with the protocol \\`prisma://\\``,t);let u=a.get(\"api_key\");if(u===null||u.length<1)throw new He(`Error validating datasource \\`${r}\\`: the URL must contain a valid API key`,t);return[s,u]}metrics(){throw new We(\"Metrics are not yet supported for Accelerate\",{clientVersion:this.clientVersion})}async withRetry(t){var r;for(let n=0;;n++){let i=o=>{this.logEmitter.emit(\"info\",{message:`Calling ${o} (n=${n})`,timestamp:new Date,target:\"\"})};try{return await t.callback({logHttpCall:i})}catch(o){if(!(o instanceof se)||!o.isRetryable)throw o;if(n>=ms)throw o instanceof wt?o.cause:o;this.logEmitter.emit(\"warn\",{message:`Attempt ${n+1}/${ms} failed for ${t.actionGerund}: ${(r=o.message)!=null?r:\"(unknown)\"}`,timestamp:new Date,target:\"\"});let s=await ss(n);this.logEmitter.emit(\"warn\",{message:`Retrying after ${s}ms`,timestamp:new Date,target:\"\"})}}}async handleError(t){if(t instanceof Ke)throw await this.uploadSchema(),new wt({clientVersion:this.clientVersion,cause:t});if(t)throw t}applyPendingMigrations(){throw new Error(\"Method not implemented.\")}};function ds({copyEngine:e=!0},t){let r;try{r=yt({inlineDatasources:t.inlineDatasources,overrideDatasources:t.overrideDatasources,env:{...t.env,...y.env},clientVersion:t.clientVersion})}catch(u){}e&&(r!=null&&r.startsWith(\"prisma://\"))&&cr(\"recommend--no-engine\",\"In production, we recommend using `prisma generate --no-engine` (See: `prisma generate --help`)\");let n=At(t.generator),i=!!(r!=null&&r.startsWith(\"prisma://\")||!e),o=!!t.adapter,s=n===\"library\",a=n===\"binary\";if(i&&o||o){let u;throw u=[\"Prisma Client was configured to use the `adapter` option but it was imported via its `/edge` endpoint.\",\"Please either remove the `/edge` endpoint or remove the `adapter` from the Prisma Client constructor.\"],new ee(u.join(`\n`),{clientVersion:t.clientVersion})}if(i)return new Xt(t);throw new ee(\"Invalid client engine type, please use `library` or `binary`\",{clientVersion:t.clientVersion})}d();c();p();f();m();function Nr({generator:e}){var t;return(t=e==null?void 0:e.previewFeatures)!=null?t:[]}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();var bs=Ue(Fn());d();c();p();f();m();function ws(e,t){let r=Es(e),n=Kl(r),i=Yl(n);i?_r(i,t):t.addErrorMessage(()=>\"Unknown error\")}function Es(e){return e.errors.flatMap(t=>t.kind===\"Union\"?Es(t):[t])}function Kl(e){let t=new Map,r=[];for(let n of e){if(n.kind!==\"InvalidArgumentType\"){r.push(n);continue}let i=`${n.selectionPath.join(\".\")}:${n.argumentPath.join(\".\")}`,o=t.get(i);o?t.set(i,{...n,argument:{...n.argument,typeNames:zl(o.argument.typeNames,n.argument.typeNames)}}):t.set(i,n)}return r.push(...t.values()),r}function zl(e,t){return[...new Set(e.concat(t))]}function Yl(e){return sn(e,(t,r)=>{let n=hs(t),i=hs(r);return n!==i?n-i:ys(t)-ys(r)})}function hs(e){let t=0;return Array.isArray(e.selectionPath)&&(t+=e.selectionPath.length),Array.isArray(e.argumentPath)&&(t+=e.argumentPath.length),t}function ys(e){switch(e.kind){case\"InvalidArgumentValue\":case\"ValueTooLarge\":return 20;case\"InvalidArgumentType\":return 10;case\"RequiredArgumentMissing\":return-10;default:return 0}}d();c();p();f();m();var le=class{constructor(t,r){this.name=t;this.value=r;this.isRequired=!1}makeRequired(){return this.isRequired=!0,this}write(t){let{colors:{green:r}}=t.context;t.addMarginSymbol(r(this.isRequired?\"+\":\"?\")),t.write(r(this.name)),this.isRequired||t.write(r(\"?\")),t.write(r(\": \")),typeof this.value==\"string\"?t.write(r(this.value)):t.write(this.value)}};d();c();p();f();m();var Fr=class{constructor(){this.fields=[]}addField(t,r){return this.fields.push({write(n){let{green:i,dim:o}=n.context.colors;n.write(i(o(`${t}: ${r}`))).addMarginSymbol(i(o(\"+\")))}}),this}write(t){let{colors:{green:r}}=t.context;t.writeLine(r(\"{\")).withIndent(()=>{t.writeJoined(mt,this.fields).newLine()}).write(r(\"}\")).addMarginSymbol(r(\"+\"))}};function _r(e,t){switch(e.kind){case\"MutuallyExclusiveFields\":Zl(e,t);break;case\"IncludeOnScalar\":Xl(e,t);break;case\"EmptySelection\":ec(e,t);break;case\"UnknownSelectionField\":nc(e,t);break;case\"UnknownArgument\":ic(e,t);break;case\"UnknownInputField\":oc(e,t);break;case\"RequiredArgumentMissing\":sc(e,t);break;case\"InvalidArgumentType\":ac(e,t);break;case\"InvalidArgumentValue\":uc(e,t);break;case\"ValueTooLarge\":lc(e,t);break;case\"SomeFieldsMissing\":cc(e,t);break;case\"TooManyFieldsGiven\":pc(e,t);break;case\"Union\":ws(e,t);break;default:throw new Error(\"not implemented: \"+e.kind)}}function Zl(e,t){var n,i,o;let r=(n=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:n.asObject();r&&((i=r.getField(e.firstField))==null||i.markAsError(),(o=r.getField(e.secondField))==null||o.markAsError()),t.addErrorMessage(s=>`Please ${s.bold(\"either\")} use ${s.green(`\\`${e.firstField}\\``)} or ${s.green(`\\`${e.secondField}\\``)}, but ${s.red(\"not both\")} at the same time.`)}function Xl(e,t){var s,a;let[r,n]=Lr(e.selectionPath),i=e.outputType,o=(s=t.arguments.getDeepSelectionParent(r))==null?void 0:s.value;if(o&&((a=o.getField(n))==null||a.markAsError(),i))for(let u of i.fields)u.isRelation&&o.addSuggestion(new le(u.name,\"true\"));t.addErrorMessage(u=>{let l=`Invalid scalar field ${u.red(`\\`${n}\\``)} for ${u.bold(\"include\")} statement`;return i?l+=` on model ${u.bold(i.name)}. ${er(u)}`:l+=\".\",l+=`\nNote that ${u.bold(\"include\")} statements only accept relation fields.`,l})}function ec(e,t){var n,i;let r=(n=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:n.asObject();if(r){let o=(i=r.getField(\"omit\"))==null?void 0:i.value.asObject();if(o){tc(e,t,o);return}}rc(e,t)}function tc(e,t,r){r.removeAllFields();for(let n of e.outputType.fields)r.addSuggestion(new le(n.name,\"false\"));t.addErrorMessage(n=>`The ${n.red(\"omit\")} statement includes every field of the model ${n.bold(e.outputType.name)}. At least one field must be included in the result`)}function rc(e,t){var o,s;let r=e.outputType,n=(o=t.arguments.getDeepSelectionParent(e.selectionPath))==null?void 0:o.value,i=(s=n==null?void 0:n.isEmpty())!=null?s:!1;n&&(n.removeAllFields(),vs(n,r)),t.addErrorMessage(a=>i?`The ${a.red(\"`select`\")} statement for type ${a.bold(r.name)} must not be empty. ${er(a)}`:`The ${a.red(\"`select`\")} statement for type ${a.bold(r.name)} needs ${a.bold(\"at least one truthy value\")}.`)}function nc(e,t){var s,a,u,l,g,h,x;let[r,n]=Lr(e.selectionPath),i=(s=t.arguments.getDeepSubSelectionValue(r))==null?void 0:s.asObject(),o;if(i){let S=(a=i.getFieldValue(\"select\"))==null?void 0:a.asObject(),C=(u=i.getFieldValue(\"include\"))==null?void 0:u.asObject(),A=(l=i.getFieldValue(\"omit\"))==null?void 0:l.asObject();S!=null&&S.hasField(n)?(o=\"select\",(g=S.getField(n))==null||g.markAsError(),vs(S,e.outputType)):C!=null&&C.hasField(n)?(o=\"include\",(h=C.getField(n))==null||h.markAsError(),fc(C,e.outputType)):A!=null&&A.hasField(n)&&(o=\"omit\",(x=A.getField(n))==null||x.markAsError(),mc(A,e.outputType))}t.addErrorMessage(S=>{let C=[`Unknown field ${S.red(`\\`${n}\\``)}`];return o&&C.push(`for ${S.bold(o)} statement`),C.push(`on model ${S.bold(`\\`${e.outputType.name}\\``)}.`),C.push(er(S)),C.join(\" \")})}function ic(e,t){var i,o;let r=e.argumentPath[0],n=(i=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:i.asObject();n&&((o=n.getField(r))==null||o.markAsError(),dc(n,e.arguments)),t.addErrorMessage(s=>xs(s,r,e.arguments.map(a=>a.name)))}function oc(e,t){var o,s,a;let[r,n]=Lr(e.argumentPath),i=(o=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:o.asObject();if(i){(s=i.getDeepField(e.argumentPath))==null||s.markAsError();let u=(a=i.getDeepFieldValue(r))==null?void 0:a.asObject();u&&Ts(u,e.inputType)}t.addErrorMessage(u=>xs(u,n,e.inputType.fields.map(l=>l.name)))}function xs(e,t,r){let n=[`Unknown argument \\`${e.red(t)}\\`.`],i=hc(t,r);return i&&n.push(`Did you mean \\`${e.green(i)}\\`?`),r.length>0&&n.push(er(e)),n.join(\" \")}function sc(e,t){var u,l;let r;t.addErrorMessage(g=>(r==null?void 0:r.value)instanceof K&&r.value.text===\"null\"?`Argument \\`${g.green(o)}\\` must not be ${g.red(\"null\")}.`:`Argument \\`${g.green(o)}\\` is missing.`);let n=(u=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:u.asObject();if(!n)return;let[i,o]=Lr(e.argumentPath),s=new Fr,a=(l=n.getDeepFieldValue(i))==null?void 0:l.asObject();if(a)if(r=a.getField(o),r&&a.removeField(o),e.inputTypes.length===1&&e.inputTypes[0].kind===\"object\"){for(let g of e.inputTypes[0].fields)s.addField(g.name,g.typeNames.join(\" | \"));a.addSuggestion(new le(o,s).makeRequired())}else{let g=e.inputTypes.map(Ps).join(\" | \");a.addSuggestion(new le(o,g).makeRequired())}}function Ps(e){return e.kind===\"list\"?`${Ps(e.elementType)}[]`:e.name}function ac(e,t){var i,o;let r=e.argument.name,n=(i=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:i.asObject();n&&((o=n.getDeepFieldValue(e.argumentPath))==null||o.markAsError()),t.addErrorMessage(s=>{let a=Br(\"or\",e.argument.typeNames.map(u=>s.green(u)));return`Argument \\`${s.bold(r)}\\`: Invalid value provided. Expected ${a}, provided ${s.red(e.inferredType)}.`})}function uc(e,t){var i,o;let r=e.argument.name,n=(i=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:i.asObject();n&&((o=n.getDeepFieldValue(e.argumentPath))==null||o.markAsError()),t.addErrorMessage(s=>{let a=[`Invalid value for argument \\`${s.bold(r)}\\``];if(e.underlyingError&&a.push(`: ${e.underlyingError}`),a.push(\".\"),e.argument.typeNames.length>0){let u=Br(\"or\",e.argument.typeNames.map(l=>s.green(l)));a.push(` Expected ${u}.`)}return a.join(\"\")})}function lc(e,t){var o;let r=e.argument.name,n=(o=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:o.asObject(),i;if(n){let s=n.getDeepField(e.argumentPath),a=s==null?void 0:s.value;a==null||a.markAsError(),a instanceof K&&(i=a.text)}t.addErrorMessage(s=>{let a=[\"Unable to fit value\"];return i&&a.push(s.red(i)),a.push(`into a 64-bit signed integer for field \\`${s.bold(r)}\\``),a.join(\" \")})}function cc(e,t){var i,o;let r=e.argumentPath[e.argumentPath.length-1],n=(i=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:i.asObject();if(n){let s=(o=n.getDeepFieldValue(e.argumentPath))==null?void 0:o.asObject();s&&Ts(s,e.inputType)}t.addErrorMessage(s=>{let a=[`Argument \\`${s.bold(r)}\\` of type ${s.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1?e.constraints.requiredFields?a.push(`${s.green(\"at least one of\")} ${Br(\"or\",e.constraints.requiredFields.map(u=>`\\`${s.bold(u)}\\``))} arguments.`):a.push(`${s.green(\"at least one\")} argument.`):a.push(`${s.green(`at least ${e.constraints.minFieldCount}`)} arguments.`),a.push(er(s)),a.join(\" \")})}function pc(e,t){var o,s;let r=e.argumentPath[e.argumentPath.length-1],n=(o=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:o.asObject(),i=[];if(n){let a=(s=n.getDeepFieldValue(e.argumentPath))==null?void 0:s.asObject();a&&(a.markAsError(),i=Object.keys(a.getFields()))}t.addErrorMessage(a=>{let u=[`Argument \\`${a.bold(r)}\\` of type ${a.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1&&e.constraints.maxFieldCount==1?u.push(`${a.green(\"exactly one\")} argument,`):e.constraints.maxFieldCount==1?u.push(`${a.green(\"at most one\")} argument,`):u.push(`${a.green(`at most ${e.constraints.maxFieldCount}`)} arguments,`),u.push(`but you provided ${Br(\"and\",i.map(l=>a.red(l)))}. Please choose`),e.constraints.maxFieldCount===1?u.push(\"one.\"):u.push(`${e.constraints.maxFieldCount}.`),u.join(\" \")})}function vs(e,t){for(let r of t.fields)e.hasField(r.name)||e.addSuggestion(new le(r.name,\"true\"))}function fc(e,t){for(let r of t.fields)r.isRelation&&!e.hasField(r.name)&&e.addSuggestion(new le(r.name,\"true\"))}function mc(e,t){for(let r of t.fields)!e.hasField(r.name)&&!r.isRelation&&e.addSuggestion(new le(r.name,\"true\"))}function dc(e,t){for(let r of t)e.hasField(r.name)||e.addSuggestion(new le(r.name,r.typeNames.join(\" | \")))}function Ts(e,t){if(t.kind===\"object\")for(let r of t.fields)e.hasField(r.name)||e.addSuggestion(new le(r.name,r.typeNames.join(\" | \")))}function Lr(e){let t=[...e],r=t.pop();if(!r)throw new Error(\"unexpected empty path\");return[t,r]}function er({green:e,enabled:t}){return\"Available options are \"+(t?`listed in ${e(\"green\")}`:\"marked with ?\")+\".\"}function Br(e,t){if(t.length===1)return t[0];let r=[...t],n=r.pop();return`${r.join(\", \")} ${e} ${n}`}var gc=3;function hc(e,t){let r=1/0,n;for(let i of t){let o=(0,bs.default)(e,i);o>gc||o<r&&(r=o,n=i)}return n}function $r({args:e,errors:t,errorFormat:r,callsite:n,originalMethod:i,clientVersion:o}){let s=Sr(e);for(let h of t)_r(h,s);let a=r===\"pretty\"?To:Cr,u=s.renderAllMessages(a),l=new at(0,{colors:a}).write(s).toString(),g=ht({message:u,callsite:n,originalMethod:i,showColors:r===\"pretty\",callArguments:l});throw new ee(g,{clientVersion:o})}var yc={findUnique:\"findUnique\",findUniqueOrThrow:\"findUniqueOrThrow\",findFirst:\"findFirst\",findFirstOrThrow:\"findFirstOrThrow\",findMany:\"findMany\",count:\"aggregate\",create:\"createOne\",createMany:\"createMany\",createManyAndReturn:\"createManyAndReturn\",update:\"updateOne\",updateMany:\"updateMany\",upsert:\"upsertOne\",delete:\"deleteOne\",deleteMany:\"deleteMany\",executeRaw:\"executeRaw\",queryRaw:\"queryRaw\",aggregate:\"aggregate\",groupBy:\"groupBy\",runCommandRaw:\"runCommandRaw\",findRaw:\"findRaw\",aggregateRaw:\"aggregateRaw\"};function Cs({modelName:e,action:t,args:r,runtimeDataModel:n,extensions:i,callsite:o,clientMethod:s,errorFormat:a,clientVersion:u,previewFeatures:l}){let g=new Ln({runtimeDataModel:n,modelName:e,action:t,rootArgs:r,callsite:o,extensions:i,selectionPath:[],argumentPath:[],originalMethod:s,errorFormat:a,clientVersion:u,previewFeatures:l});return{modelName:e,action:yc[t],query:Bn(r,g)}}function Bn({select:e,include:t,...r}={},n){let i;return n.isPreviewFeatureOn(\"omitApi\")&&(i=r.omit,delete r.omit),{arguments:Rs(r,n),selection:wc(e,t,i,n)}}function wc(e,t,r,n){return e?(t?n.throwValidationError({kind:\"MutuallyExclusiveFields\",firstField:\"include\",secondField:\"select\",selectionPath:n.getSelectionPath()}):r&&n.isPreviewFeatureOn(\"omitApi\")&&n.throwValidationError({kind:\"MutuallyExclusiveFields\",firstField:\"omit\",secondField:\"select\",selectionPath:n.getSelectionPath()}),Pc(e,n)):Ec(n,t,r)}function Ec(e,t,r){let n={};return e.model&&!e.isRawAction()&&(n.$composites=!0,n.$scalars=!0),t&&bc(n,t,e),r&&e.isPreviewFeatureOn(\"omitApi\")&&xc(n,r,e),n}function bc(e,t,r){for(let[n,i]of Object.entries(t)){let o=r.findField(n);o&&(o==null?void 0:o.kind)!==\"object\"&&r.throwValidationError({kind:\"IncludeOnScalar\",selectionPath:r.getSelectionPath().concat(n),outputType:r.getOutputTypeDescription()}),i===!0?e[n]=!0:typeof i==\"object\"&&(e[n]=Bn(i,r.nestSelection(n)))}}function xc(e,t,r){let n=r.getComputedFields(),i=es(t,n);for(let[o,s]of Object.entries(i)){let a=r.findField(o);n!=null&&n[o]&&!a||(e[o]=!s)}}function Pc(e,t){let r={},n=t.getComputedFields(),i=Xo(e,n);for(let[o,s]of Object.entries(i)){let a=t.findField(o);n!=null&&n[o]&&!a||(s===!0?r[o]=!0:typeof s==\"object\"&&(r[o]=Bn(s,t.nestSelection(o))))}return r}function As(e,t){if(e===null)return null;if(typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\")return e;if(typeof e==\"bigint\")return{$type:\"BigInt\",value:String(e)};if(ut(e)){if(gr(e))return{$type:\"DateTime\",value:e.toISOString()};t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:t.getSelectionPath(),argumentPath:t.getArgumentPath(),argument:{name:t.getArgumentName(),typeNames:[\"Date\"]},underlyingError:\"Provided Date object is invalid\"})}if(ft(e))return{$type:\"FieldRef\",value:{_ref:e.name,_container:e.modelName}};if(Array.isArray(e))return vc(e,t);if(ArrayBuffer.isView(e))return{$type:\"Bytes\",value:w.Buffer.from(e).toString(\"base64\")};if(Tc(e))return e.values;if(pt(e))return{$type:\"Decimal\",value:e.toFixed()};if(e instanceof xe){if(e!==ln.instances[e._getName()])throw new Error(\"Invalid ObjectEnumValue\");return{$type:\"Enum\",value:e._getName()}}if(Cc(e))return e.toJSON();if(typeof e==\"object\")return Rs(e,t);t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:t.getSelectionPath(),argumentPath:t.getArgumentPath(),argument:{name:t.getArgumentName(),typeNames:[]},underlyingError:`We could not serialize ${Object.prototype.toString.call(e)} value. Serialize the object to JSON or implement a \".toJSON()\" method on it`})}function Rs(e,t){if(e.$type)return{$type:\"Raw\",value:e};let r={};for(let n in e){let i=e[n];i!==void 0&&(r[n]=As(i,t.nestArgument(n)))}return r}function vc(e,t){let r=[];for(let n=0;n<e.length;n++){let i=t.nestArgument(String(n)),o=e[n];o===void 0&&t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:i.getSelectionPath(),argumentPath:i.getArgumentPath(),argument:{name:`${t.getArgumentName()}[${n}]`,typeNames:[]},underlyingError:\"Can not use `undefined` value within array. Use `null` or filter out `undefined` values\"}),r.push(As(o,i))}return r}function Tc(e){return typeof e==\"object\"&&e!==null&&e.__prismaRawParameters__===!0}function Cc(e){return typeof e==\"object\"&&e!==null&&typeof e.toJSON==\"function\"}var Ln=class e{constructor(t){this.params=t;this.params.modelName&&(this.model=this.params.runtimeDataModel.models[this.params.modelName])}throwValidationError(t){var r;$r({errors:[t],originalMethod:this.params.originalMethod,args:(r=this.params.rootArgs)!=null?r:{},callsite:this.params.callsite,errorFormat:this.params.errorFormat,clientVersion:this.params.clientVersion})}getSelectionPath(){return this.params.selectionPath}getArgumentPath(){return this.params.argumentPath}getArgumentName(){return this.params.argumentPath[this.params.argumentPath.length-1]}getOutputTypeDescription(){if(!(!this.params.modelName||!this.model))return{name:this.params.modelName,fields:this.model.fields.map(t=>({name:t.name,typeName:\"boolean\",isRelation:t.kind===\"object\"}))}}isRawAction(){return[\"executeRaw\",\"queryRaw\",\"runCommandRaw\",\"findRaw\",\"aggregateRaw\"].includes(this.params.action)}isPreviewFeatureOn(t){return this.params.previewFeatures.includes(t)}getComputedFields(){if(this.params.modelName)return this.params.extensions.getAllComputedFields(this.params.modelName)}findField(t){var r;return(r=this.model)==null?void 0:r.fields.find(n=>n.name===t)}nestSelection(t){let r=this.findField(t),n=(r==null?void 0:r.kind)===\"object\"?r.type:void 0;return new e({...this.params,modelName:n,selectionPath:this.params.selectionPath.concat(t)})}nestArgument(t){return new e({...this.params,argumentPath:this.params.argumentPath.concat(t)})}};d();c();p();f();m();var Ss=e=>({command:e});d();c();p();f();m();d();c();p();f();m();var Is=e=>e.strings.reduce((t,r,n)=>`${t}@P${n}${r}`);d();c();p();f();m();function tr(e){try{return Ds(e,\"fast\")}catch(t){return Ds(e,\"slow\")}}function Ds(e,t){return JSON.stringify(e.map(r=>Ac(r,t)))}function Ac(e,t){return typeof e==\"bigint\"?{prisma__type:\"bigint\",prisma__value:e.toString()}:ut(e)?{prisma__type:\"date\",prisma__value:e.toJSON()}:ve.isDecimal(e)?{prisma__type:\"decimal\",prisma__value:e.toJSON()}:w.Buffer.isBuffer(e)?{prisma__type:\"bytes\",prisma__value:e.toString(\"base64\")}:Rc(e)||ArrayBuffer.isView(e)?{prisma__type:\"bytes\",prisma__value:w.Buffer.from(e).toString(\"base64\")}:typeof e==\"object\"&&t===\"slow\"?Os(e):e}function Rc(e){return e instanceof ArrayBuffer||e instanceof SharedArrayBuffer?!0:typeof e==\"object\"&&e!==null?e[Symbol.toStringTag]===\"ArrayBuffer\"||e[Symbol.toStringTag]===\"SharedArrayBuffer\":!1}function Os(e){if(typeof e!=\"object\"||e===null)return e;if(typeof e.toJSON==\"function\")return e.toJSON();if(Array.isArray(e))return e.map(ks);let t={};for(let r of Object.keys(e))t[r]=ks(e[r]);return t}function ks(e){return typeof e==\"bigint\"?e.toString():Os(e)}var Sc=/^(\\s*alter\\s)/i,Ms=re(\"prisma:client\");function $n(e,t,r,n){if(!(e!==\"postgresql\"&&e!==\"cockroachdb\")&&r.length>0&&Sc.exec(t))throw new Error(`Running ALTER using ${n} is not supported\nUsing the example below you can still execute your query with Prisma, but please note that it is vulnerable to SQL injection attacks and requires you to take care of input sanitization.\n\nExample:\n  await prisma.$executeRawUnsafe(\\`ALTER USER prisma WITH PASSWORD '\\${password}'\\`)\n\nMore Information: https://pris.ly/d/execute-raw\n`)}var qn=({clientMethod:e,activeProvider:t})=>r=>{let n=\"\",i;if(Array.isArray(r)){let[o,...s]=r;n=o,i={values:tr(s||[]),__prismaRawParameters__:!0}}else switch(t){case\"sqlite\":case\"mysql\":{n=r.sql,i={values:tr(r.values),__prismaRawParameters__:!0};break}case\"cockroachdb\":case\"postgresql\":case\"postgres\":{n=r.text,i={values:tr(r.values),__prismaRawParameters__:!0};break}case\"sqlserver\":{n=Is(r),i={values:tr(r.values),__prismaRawParameters__:!0};break}default:throw new Error(`The ${t} provider does not support ${e}`)}return i!=null&&i.values?Ms(`prisma.${e}(${n}, ${i.values})`):Ms(`prisma.${e}(${n})`),{query:n,parameters:i}},Ns={requestArgsToMiddlewareArgs(e){return[e.strings,...e.values]},middlewareArgsToRequestArgs(e){let[t,...r]=e;return new ue(t,r)}},_s={requestArgsToMiddlewareArgs(e){return[e]},middlewareArgsToRequestArgs(e){return e[0]}};d();c();p();f();m();function Un(e){return function(r){let n,i=(o=e)=>{try{return o===void 0||(o==null?void 0:o.kind)===\"itx\"?n!=null?n:n=Fs(r(o)):Fs(r(o))}catch(s){return Promise.reject(s)}};return{then(o,s){return i().then(o,s)},catch(o){return i().catch(o)},finally(o){return i().finally(o)},requestTransaction(o){let s=i(o);return s.requestTransaction?s.requestTransaction(o):s},[Symbol.toStringTag]:\"PrismaPromise\"}}}function Fs(e){return typeof e.then==\"function\"?e:Promise.resolve(e)}d();c();p();f();m();var Ls={isEnabled(){return!1},getTraceParent(){return\"00-10-10-00\"},async createEngineSpan(){},getActiveContext(){},runInChildSpan(e,t){return t()}},Vn=class{isEnabled(){return this.getGlobalTracingHelper().isEnabled()}getTraceParent(t){return this.getGlobalTracingHelper().getTraceParent(t)}createEngineSpan(t){return this.getGlobalTracingHelper().createEngineSpan(t)}getActiveContext(){return this.getGlobalTracingHelper().getActiveContext()}runInChildSpan(t,r){return this.getGlobalTracingHelper().runInChildSpan(t,r)}getGlobalTracingHelper(){var t,r;return(r=(t=globalThis.PRISMA_INSTRUMENTATION)==null?void 0:t.helper)!=null?r:Ls}};function Bs(e){return e.includes(\"tracing\")?new Vn:Ls}d();c();p();f();m();function $s(e,t=()=>{}){let r,n=new Promise(i=>r=i);return{then(i){return--e===0&&r(t()),i==null?void 0:i(n)}}}d();c();p();f();m();var Ic=[\"$connect\",\"$disconnect\",\"$on\",\"$transaction\",\"$use\",\"$extends\"],qs=Ic;d();c();p();f();m();function Us(e){return typeof e==\"string\"?e:e.reduce((t,r)=>{let n=typeof r==\"string\"?r:r.level;return n===\"query\"?t:t&&(r===\"info\"||t===\"info\")?\"info\":n},void 0)}d();c();p();f();m();var qr=class{constructor(){this._middlewares=[]}use(t){this._middlewares.push(t)}get(t){return this._middlewares[t]}has(t){return!!this._middlewares[t]}length(){return this._middlewares.length}};d();c();p();f();m();var js=Ue(Xi());d();c();p();f();m();function Ur(e){return typeof e.batchRequestIdx==\"number\"}d();c();p();f();m();function Vr(e){return e===null?e:Array.isArray(e)?e.map(Vr):typeof e==\"object\"?Dc(e)?kc(e):ot(e,Vr):e}function Dc(e){return e!==null&&typeof e==\"object\"&&typeof e.$type==\"string\"}function kc({$type:e,value:t}){switch(e){case\"BigInt\":return BigInt(t);case\"Bytes\":return w.Buffer.from(t,\"base64\");case\"DateTime\":return new Date(t);case\"Decimal\":return new ve(t);case\"Json\":return JSON.parse(t);default:je(t,\"Unknown tagged value\")}}d();c();p();f();m();function Vs(e){if(e.action!==\"findUnique\"&&e.action!==\"findUniqueOrThrow\")return;let t=[];return e.modelName&&t.push(e.modelName),e.query.arguments&&t.push(jn(e.query.arguments)),t.push(jn(e.query.selection)),t.join(\"\")}function jn(e){return`(${Object.keys(e).sort().map(r=>{let n=e[r];return typeof n==\"object\"&&n!==null?`(${r} ${jn(n)})`:r}).join(\" \")})`}d();c();p();f();m();var Oc={aggregate:!1,aggregateRaw:!1,createMany:!0,createManyAndReturn:!0,createOne:!0,deleteMany:!0,deleteOne:!0,executeRaw:!0,findFirst:!1,findFirstOrThrow:!1,findMany:!1,findRaw:!1,findUnique:!1,findUniqueOrThrow:!1,groupBy:!1,queryRaw:!1,runCommandRaw:!0,updateMany:!0,updateOne:!0,upsertOne:!0};function Jn(e){return Oc[e]}d();c();p();f();m();var jr=class{constructor(t){this.options=t;this.tickActive=!1;this.batches={}}request(t){let r=this.options.batchBy(t);return r?(this.batches[r]||(this.batches[r]=[],this.tickActive||(this.tickActive=!0,y.nextTick(()=>{this.dispatchBatches(),this.tickActive=!1}))),new Promise((n,i)=>{this.batches[r].push({request:t,resolve:n,reject:i})})):this.options.singleLoader(t)}dispatchBatches(){for(let t in this.batches){let r=this.batches[t];delete this.batches[t],r.length===1?this.options.singleLoader(r[0].request).then(n=>{n instanceof Error?r[0].reject(n):r[0].resolve(n)}).catch(n=>{r[0].reject(n)}):(r.sort((n,i)=>this.options.batchOrder(n.request,i.request)),this.options.batchLoader(r.map(n=>n.request)).then(n=>{if(n instanceof Error)for(let i=0;i<r.length;i++)r[i].reject(n);else for(let i=0;i<r.length;i++){let o=n[i];o instanceof Error?r[i].reject(o):r[i].resolve(o)}}).catch(n=>{for(let i=0;i<r.length;i++)r[i].reject(n)}))}}get[Symbol.toStringTag](){return\"DataLoader\"}};var Mc=re(\"prisma:client:request_handler\"),Jr=class{constructor(t,r){this.logEmitter=r,this.client=t,this.dataloader=new jr({batchLoader:Wo(async({requests:n,customDataProxyFetch:i})=>{let{transaction:o,otelParentCtx:s}=n[0],a=n.map(h=>h.protocolQuery),u=this.client._tracingHelper.getTraceParent(s),l=n.some(h=>Jn(h.protocolQuery.action));return(await this.client._engine.requestBatch(a,{traceparent:u,transaction:Nc(o),containsWrite:l,customDataProxyFetch:i})).map((h,x)=>{if(h instanceof Error)return h;try{return this.mapQueryEngineResult(n[x],h)}catch(S){return S}})}),singleLoader:async n=>{var s;let i=((s=n.transaction)==null?void 0:s.kind)===\"itx\"?Js(n.transaction):void 0,o=await this.client._engine.request(n.protocolQuery,{traceparent:this.client._tracingHelper.getTraceParent(),interactiveTransaction:i,isWrite:Jn(n.protocolQuery.action),customDataProxyFetch:n.customDataProxyFetch});return this.mapQueryEngineResult(n,o)},batchBy:n=>{var i;return(i=n.transaction)!=null&&i.id?`transaction-${n.transaction.id}`:Vs(n.protocolQuery)},batchOrder(n,i){var o,s;return((o=n.transaction)==null?void 0:o.kind)===\"batch\"&&((s=i.transaction)==null?void 0:s.kind)===\"batch\"?n.transaction.index-i.transaction.index:0}})}async request(t){try{return await this.dataloader.request(t)}catch(r){let{clientMethod:n,callsite:i,transaction:o,args:s,modelName:a}=t;this.handleAndLogRequestError({error:r,clientMethod:n,callsite:i,transaction:o,args:s,modelName:a})}}mapQueryEngineResult({dataPath:t,unpacker:r},n){let i=n==null?void 0:n.data,o=n==null?void 0:n.elapsed,s=this.unpack(i,t,r);return y.env.PRISMA_CLIENT_GET_TIME?{data:s,elapsed:o}:s}handleAndLogRequestError(t){try{this.handleRequestError(t)}catch(r){throw this.logEmitter&&this.logEmitter.emit(\"error\",{message:r.message,target:t.clientMethod,timestamp:new Date}),r}}handleRequestError({error:t,clientMethod:r,callsite:n,transaction:i,args:o,modelName:s}){if(Mc(t),_c(t,i)||t instanceof Ie)throw t;if(t instanceof z&&Fc(t)){let u=Qs(t.meta);$r({args:o,errors:[u],callsite:n,errorFormat:this.client._errorFormat,originalMethod:r,clientVersion:this.client._clientVersion})}let a=t.message;if(n&&(a=ht({callsite:n,originalMethod:r,isPanic:t.isPanic,showColors:this.client._errorFormat===\"pretty\",message:a})),a=this.sanitizeMessage(a),t.code){let u=s?{modelName:s,...t.meta}:t.meta;throw new z(a,{code:t.code,clientVersion:this.client._clientVersion,meta:u,batchRequestIdx:t.batchRequestIdx})}else{if(t.isPanic)throw new De(a,this.client._clientVersion);if(t instanceof ae)throw new ae(a,{clientVersion:this.client._clientVersion,batchRequestIdx:t.batchRequestIdx});if(t instanceof G)throw new G(a,this.client._clientVersion);if(t instanceof De)throw new De(a,this.client._clientVersion)}throw t.clientVersion=this.client._clientVersion,t}sanitizeMessage(t){return this.client._errorFormat&&this.client._errorFormat!==\"pretty\"?(0,js.default)(t):t}unpack(t,r,n){if(!t||(t.data&&(t=t.data),!t))return t;let i=Object.values(t)[0],o=r.filter(a=>a!==\"select\"&&a!==\"include\"),s=Vr(xn(i,o));return n?n(s):s}get[Symbol.toStringTag](){return\"RequestHandler\"}};function Nc(e){if(e){if(e.kind===\"batch\")return{kind:\"batch\",options:{isolationLevel:e.isolationLevel}};if(e.kind===\"itx\")return{kind:\"itx\",options:Js(e)};je(e,\"Unknown transaction kind\")}}function Js(e){return{id:e.id,payload:e.payload}}function _c(e,t){return Ur(e)&&(t==null?void 0:t.kind)===\"batch\"&&e.batchRequestIdx!==t.index}function Fc(e){return e.code===\"P2009\"||e.code===\"P2012\"}function Qs(e){if(e.kind===\"Union\")return{kind:\"Union\",errors:e.errors.map(Qs)};if(Array.isArray(e.selectionPath)){let[,...t]=e.selectionPath;return{...e,selectionPath:t}}return e}d();c();p();f();m();var Gs=\"5.15.0\";var Hs=Gs;d();c();p();f();m();function Ws(e){return e.map(t=>{let r={};for(let n of Object.keys(t))r[n]=Ks(t[n]);return r})}function Ks({prisma__type:e,prisma__value:t}){switch(e){case\"bigint\":return BigInt(t);case\"bytes\":return w.Buffer.from(t,\"base64\");case\"decimal\":return new ve(t);case\"datetime\":case\"date\":return new Date(t);case\"time\":return new Date(`1970-01-01T${t}Z`);case\"array\":return t.map(Ks);default:return t}}d();c();p();f();m();var Xs=Ue(Fn());d();c();p();f();m();var J=class extends Error{constructor(t){super(t+`\nRead more at https://pris.ly/d/client-constructor`),this.name=\"PrismaClientConstructorValidationError\"}get[Symbol.toStringTag](){return\"PrismaClientConstructorValidationError\"}};_(J,\"PrismaClientConstructorValidationError\");var zs=[\"datasources\",\"datasourceUrl\",\"errorFormat\",\"adapter\",\"log\",\"transactionOptions\",\"__internal\"],Ys=[\"pretty\",\"colorless\",\"minimal\"],Zs=[\"info\",\"query\",\"warn\",\"error\"],Bc={datasources:(e,{datasourceNames:t})=>{if(e){if(typeof e!=\"object\"||Array.isArray(e))throw new J(`Invalid value ${JSON.stringify(e)} for \"datasources\" provided to PrismaClient constructor`);for(let[r,n]of Object.entries(e)){if(!t.includes(r)){let i=xt(r,t)||` Available datasources: ${t.join(\", \")}`;throw new J(`Unknown datasource ${r} provided to PrismaClient constructor.${i}`)}if(typeof n!=\"object\"||Array.isArray(n))throw new J(`Invalid value ${JSON.stringify(e)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`);if(n&&typeof n==\"object\")for(let[i,o]of Object.entries(n)){if(i!==\"url\")throw new J(`Invalid value ${JSON.stringify(e)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`);if(typeof o!=\"string\")throw new J(`Invalid value ${JSON.stringify(o)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`)}}}},adapter:(e,t)=>{if(e===null)return;if(e===void 0)throw new J('\"adapter\" property must not be undefined, use null to conditionally disable driver adapters.');if(!Nr(t).includes(\"driverAdapters\"))throw new J('\"adapter\" property can only be provided to PrismaClient constructor when \"driverAdapters\" preview feature is enabled.');if(At()===\"binary\")throw new J('Cannot use a driver adapter with the \"binary\" Query Engine. Please use the \"library\" Query Engine.')},datasourceUrl:e=>{if(typeof e!=\"undefined\"&&typeof e!=\"string\")throw new J(`Invalid value ${JSON.stringify(e)} for \"datasourceUrl\" provided to PrismaClient constructor.\nExpected string or undefined.`)},errorFormat:e=>{if(e){if(typeof e!=\"string\")throw new J(`Invalid value ${JSON.stringify(e)} for \"errorFormat\" provided to PrismaClient constructor.`);if(!Ys.includes(e)){let t=xt(e,Ys);throw new J(`Invalid errorFormat ${e} provided to PrismaClient constructor.${t}`)}}},log:e=>{if(!e)return;if(!Array.isArray(e))throw new J(`Invalid value ${JSON.stringify(e)} for \"log\" provided to PrismaClient constructor.`);function t(r){if(typeof r==\"string\"&&!Zs.includes(r)){let n=xt(r,Zs);throw new J(`Invalid log level \"${r}\" provided to PrismaClient constructor.${n}`)}}for(let r of e){t(r);let n={level:t,emit:i=>{let o=[\"stdout\",\"event\"];if(!o.includes(i)){let s=xt(i,o);throw new J(`Invalid value ${JSON.stringify(i)} for \"emit\" in logLevel provided to PrismaClient constructor.${s}`)}}};if(r&&typeof r==\"object\")for(let[i,o]of Object.entries(r))if(n[i])n[i](o);else throw new J(`Invalid property ${i} for \"log\" provided to PrismaClient constructor`)}},transactionOptions:e=>{if(!e)return;let t=e.maxWait;if(t!=null&&t<=0)throw new J(`Invalid value ${t} for maxWait in \"transactionOptions\" provided to PrismaClient constructor. maxWait needs to be greater than 0`);let r=e.timeout;if(r!=null&&r<=0)throw new J(`Invalid value ${r} for timeout in \"transactionOptions\" provided to PrismaClient constructor. timeout needs to be greater than 0`)},__internal:e=>{if(!e)return;let t=[\"debug\",\"engine\",\"configOverride\"];if(typeof e!=\"object\")throw new J(`Invalid value ${JSON.stringify(e)} for \"__internal\" to PrismaClient constructor`);for(let[r]of Object.entries(e))if(!t.includes(r)){let n=xt(r,t);throw new J(`Invalid property ${JSON.stringify(r)} for \"__internal\" provided to PrismaClient constructor.${n}`)}}};function ea(e,t){for(let[r,n]of Object.entries(e)){if(!zs.includes(r)){let i=xt(r,zs);throw new J(`Unknown property ${r} provided to PrismaClient constructor.${i}`)}Bc[r](n,t)}if(e.datasourceUrl&&e.datasources)throw new J('Can not use \"datasourceUrl\" and \"datasources\" options at the same time. Pick one of them')}function xt(e,t){if(t.length===0||typeof e!=\"string\")return\"\";let r=$c(e,t);return r?` Did you mean \"${r}\"?`:\"\"}function $c(e,t){if(t.length===0)return null;let r=t.map(i=>({value:i,distance:(0,Xs.default)(e,i)}));r.sort((i,o)=>i.distance<o.distance?-1:1);let n=r[0];return n.distance<3?n.value:null}d();c();p();f();m();function ta(e){return e.length===0?Promise.resolve([]):new Promise((t,r)=>{let n=new Array(e.length),i=null,o=!1,s=0,a=()=>{o||(s++,s===e.length&&(o=!0,i?r(i):t(n)))},u=l=>{o||(o=!0,r(l))};for(let l=0;l<e.length;l++)e[l].then(g=>{n[l]=g,a()},g=>{if(!Ur(g)){u(g);return}g.batchRequestIdx===l?u(g):(i||(i=g),a())})})}var Le=re(\"prisma:client\");typeof globalThis==\"object\"&&(globalThis.NODE_CLIENT=!0);var qc={requestArgsToMiddlewareArgs:e=>e,middlewareArgsToRequestArgs:e=>e},Uc=Symbol.for(\"prisma.client.transaction.id\"),Vc={id:0,nextId(){return++this.id}};function jc(e){class t{constructor(n){this._originalClient=this;this._middlewares=new qr;this._createPrismaPromise=Un();this.$extends=qo;var u,l,g,h,x,S,C,A,k,O,B,M,I,Z;e=(g=(l=(u=n==null?void 0:n.__internal)==null?void 0:u.configOverride)==null?void 0:l.call(u,e))!=null?g:e,ns(e),n&&ea(n,e);let i=n!=null&&n.adapter?fn(n.adapter):void 0,o=new lr().on(\"error\",()=>{});this._extensions=Or.empty(),this._previewFeatures=Nr(e),this._clientVersion=(h=e.clientVersion)!=null?h:Hs,this._activeProvider=e.activeProvider,this._tracingHelper=Bs(this._previewFeatures);let s={rootEnvPath:e.relativeEnvPaths.rootEnvPath&&Ct.resolve(e.dirname,e.relativeEnvPaths.rootEnvPath),schemaEnvPath:e.relativeEnvPaths.schemaEnvPath&&Ct.resolve(e.dirname,e.relativeEnvPaths.schemaEnvPath)},a=(x=e.injectableEdgeEnv)==null?void 0:x.call(e);try{let L=n!=null?n:{},Ye=(S=L.__internal)!=null?S:{},Be=Ye.debug===!0;Be&&re.enable(\"prisma:client\");let fe=Ct.resolve(e.dirname,e.relativePath);wi.existsSync(fe)||(fe=e.dirname),Le(\"dirname\",e.dirname),Le(\"relativePath\",e.relativePath),Le(\"cwd\",fe);let $e=Ye.engine||{};if(L.errorFormat?this._errorFormat=L.errorFormat:y.env.NODE_ENV===\"production\"?this._errorFormat=\"minimal\":y.env.NO_COLOR?this._errorFormat=\"colorless\":this._errorFormat=\"colorless\",this._runtimeDataModel=e.runtimeDataModel,this._engineConfig={cwd:fe,dirname:e.dirname,enableDebugLogs:Be,allowTriggerPanic:$e.allowTriggerPanic,datamodelPath:Ct.join(e.dirname,(C=e.filename)!=null?C:\"schema.prisma\"),prismaPath:(A=$e.binaryPath)!=null?A:void 0,engineEndpoint:$e.endpoint,generator:e.generator,showColors:this._errorFormat===\"pretty\",logLevel:L.log&&Us(L.log),logQueries:L.log&&!!(typeof L.log==\"string\"?L.log===\"query\":L.log.find(Q=>typeof Q==\"string\"?Q===\"query\":Q.level===\"query\")),env:(k=a==null?void 0:a.parsed)!=null?k:{},flags:[],engineWasm:e.engineWasm,clientVersion:e.clientVersion,engineVersion:e.engineVersion,previewFeatures:this._previewFeatures,activeProvider:e.activeProvider,inlineSchema:e.inlineSchema,overrideDatasources:is(L,e.datasourceNames),inlineDatasources:e.inlineDatasources,inlineSchemaHash:e.inlineSchemaHash,tracingHelper:this._tracingHelper,transactionOptions:{maxWait:(B=(O=L.transactionOptions)==null?void 0:O.maxWait)!=null?B:2e3,timeout:(I=(M=L.transactionOptions)==null?void 0:M.timeout)!=null?I:5e3,isolationLevel:(Z=L.transactionOptions)==null?void 0:Z.isolationLevel},logEmitter:o,isBundled:e.isBundled,adapter:i},this._accelerateEngineConfig={...this._engineConfig,accelerateUtils:{resolveDatasourceUrl:yt,getBatchRequestPayload:dr,prismaGraphQLToJSError:Bt,PrismaClientUnknownRequestError:ae,PrismaClientInitializationError:G,PrismaClientKnownRequestError:z,debug:re(\"prisma:client:accelerateEngine\"),engineVersion:na.version,clientVersion:e.clientVersion}},Le(\"clientVersion\",e.clientVersion),this._engine=ds(e,this._engineConfig),this._requestHandler=new Jr(this,o),L.log)for(let Q of L.log){let Ce=typeof Q==\"string\"?Q:Q.emit===\"stdout\"?Q.level:null;Ce&&this.$on(Ce,qe=>{var Ze;it.log(`${(Ze=it.tags[Ce])!=null?Ze:\"\"}`,qe.message||qe.query)})}this._metrics=new St(this._engine)}catch(L){throw L.clientVersion=this._clientVersion,L}return this._appliedParent=$t(this)}get[Symbol.toStringTag](){return\"PrismaClient\"}$use(n){this._middlewares.use(n)}$on(n,i){n===\"beforeExit\"?this._engine.onBeforeExit(i):n&&this._engineConfig.logEmitter.on(n,i)}$connect(){try{return this._engine.start()}catch(n){throw n.clientVersion=this._clientVersion,n}}async $disconnect(){try{await this._engine.stop()}catch(n){throw n.clientVersion=this._clientVersion,n}finally{Vi()}}$executeRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:\"executeRaw\",args:o,transaction:n,clientMethod:i,argsMapper:qn({clientMethod:i,activeProvider:a}),callsite:Fe(this._errorFormat),dataPath:[],middlewareArgsMapper:s})}$executeRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0){let[s,a]=ra(n,i);return $n(this._activeProvider,s.text,s.values,Array.isArray(n)?\"prisma.$executeRaw`<SQL>`\":\"prisma.$executeRaw(sql`<SQL>`)\"),this.$executeRawInternal(o,\"$executeRaw\",s,a)}throw new ee(\"`$executeRaw` is a tag function, please use it like the following:\\n```\\nconst result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`\\n```\\n\\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#executeraw\\n\",{clientVersion:this._clientVersion})})}$executeRawUnsafe(n,...i){return this._createPrismaPromise(o=>($n(this._activeProvider,n,i,\"prisma.$executeRawUnsafe(<SQL>, [...values])\"),this.$executeRawInternal(o,\"$executeRawUnsafe\",[n,...i])))}$runCommandRaw(n){if(e.activeProvider!==\"mongodb\")throw new ee(`The ${e.activeProvider} provider does not support $runCommandRaw. Use the mongodb provider.`,{clientVersion:this._clientVersion});return this._createPrismaPromise(i=>this._request({args:n,clientMethod:\"$runCommandRaw\",dataPath:[],action:\"runCommandRaw\",argsMapper:Ss,callsite:Fe(this._errorFormat),transaction:i}))}async $queryRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:\"queryRaw\",args:o,transaction:n,clientMethod:i,argsMapper:qn({clientMethod:i,activeProvider:a}),callsite:Fe(this._errorFormat),dataPath:[],middlewareArgsMapper:s}).then(Ws)}$queryRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0)return this.$queryRawInternal(o,\"$queryRaw\",...ra(n,i));throw new ee(\"`$queryRaw` is a tag function, please use it like the following:\\n```\\nconst result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`\\n```\\n\\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#queryraw\\n\",{clientVersion:this._clientVersion})})}$queryRawUnsafe(n,...i){return this._createPrismaPromise(o=>this.$queryRawInternal(o,\"$queryRawUnsafe\",[n,...i]))}_transactionWithArray({promises:n,options:i}){let o=Vc.nextId(),s=$s(n.length),a=n.map((u,l)=>{var x,S,C;if((u==null?void 0:u[Symbol.toStringTag])!==\"PrismaPromise\")throw new Error(\"All elements of the array need to be Prisma Client promises. Hint: Please make sure you are not awaiting the Prisma client calls you intended to pass in the $transaction function.\");let g=(x=i==null?void 0:i.isolationLevel)!=null?x:this._engineConfig.transactionOptions.isolationLevel,h={kind:\"batch\",id:o,index:l,isolationLevel:g,lock:s};return(C=(S=u.requestTransaction)==null?void 0:S.call(u,h))!=null?C:u});return ta(a)}async _transactionWithCallback({callback:n,options:i}){var l,g,h;let o={traceparent:this._tracingHelper.getTraceParent()},s={maxWait:(l=i==null?void 0:i.maxWait)!=null?l:this._engineConfig.transactionOptions.maxWait,timeout:(g=i==null?void 0:i.timeout)!=null?g:this._engineConfig.transactionOptions.timeout,isolationLevel:(h=i==null?void 0:i.isolationLevel)!=null?h:this._engineConfig.transactionOptions.isolationLevel},a=await this._engine.transaction(\"start\",o,s),u;try{let x={kind:\"itx\",...a};u=await n(this._createItxClient(x)),await this._engine.transaction(\"commit\",o,a)}catch(x){throw await this._engine.transaction(\"rollback\",o,a).catch(()=>{}),x}return u}_createItxClient(n){return $t(ge($o(this),[ne(\"_appliedParent\",()=>this._appliedParent._createItxClient(n)),ne(\"_createPrismaPromise\",()=>Un(n)),ne(Uc,()=>n.id),st(qs)]))}$transaction(n,i){var a;let o;typeof n==\"function\"?((a=this._engineConfig.adapter)==null?void 0:a.adapterName)===\"@prisma/adapter-d1\"?o=()=>{throw new Error(\"Cloudflare D1 does not support interactive transactions. We recommend you to refactor your queries with that limitation in mind, and use batch transactions with `prisma.$transactions([])` where applicable.\")}:o=()=>this._transactionWithCallback({callback:n,options:i}):o=()=>this._transactionWithArray({promises:n,options:i});let s={name:\"transaction\",attributes:{method:\"$transaction\"}};return this._tracingHelper.runInChildSpan(s,o)}_request(n){var l;n.otelParentCtx=this._tracingHelper.getActiveContext();let i=(l=n.middlewareArgsMapper)!=null?l:qc,o={args:i.requestArgsToMiddlewareArgs(n.args),dataPath:n.dataPath,runInTransaction:!!n.transaction,action:n.action,model:n.model},s={middleware:{name:\"middleware\",middleware:!0,attributes:{method:\"$use\"},active:!1},operation:{name:\"operation\",attributes:{method:o.action,model:o.model,name:o.model?`${o.model}.${o.action}`:o.action}}},a=-1,u=async g=>{let h=this._middlewares.get(++a);if(h)return this._tracingHelper.runInChildSpan(s.middleware,O=>h(g,B=>(O==null||O.end(),u(B))));let{runInTransaction:x,args:S,...C}=g,A={...n,...C};S&&(A.args=i.middlewareArgsToRequestArgs(S)),n.transaction!==void 0&&x===!1&&delete A.transaction;let k=await Ho(this,A);return A.model?jo({result:k,modelName:A.model,args:A.args,extensions:this._extensions,runtimeDataModel:this._runtimeDataModel}):k};return this._tracingHelper.runInChildSpan(s.operation,()=>u(o))}async _executeRequest({args:n,clientMethod:i,dataPath:o,callsite:s,action:a,model:u,argsMapper:l,transaction:g,unpacker:h,otelParentCtx:x,customDataProxyFetch:S}){try{n=l?l(n):n;let C={name:\"serialize\"},A=this._tracingHelper.runInChildSpan(C,()=>Cs({modelName:u,runtimeDataModel:this._runtimeDataModel,action:a,args:n,clientMethod:i,callsite:s,extensions:this._extensions,errorFormat:this._errorFormat,clientVersion:this._clientVersion,previewFeatures:this._previewFeatures}));return re.enabled(\"prisma:client\")&&(Le(\"Prisma Client call:\"),Le(`prisma.${i}(${So(n)})`),Le(\"Generated request:\"),Le(JSON.stringify(A,null,2)+`\n`)),(g==null?void 0:g.kind)===\"batch\"&&await g.lock,this._requestHandler.request({protocolQuery:A,modelName:u,action:a,clientMethod:i,dataPath:o,callsite:s,args:n,extensions:this._extensions,transaction:g,unpacker:h,otelParentCtx:x,otelChildCtx:this._tracingHelper.getActiveContext(),customDataProxyFetch:S})}catch(C){throw C.clientVersion=this._clientVersion,C}}get $metrics(){if(!this._hasPreviewFlag(\"metrics\"))throw new ee(\"`metrics` preview feature must be enabled in order to access metrics API\",{clientVersion:this._clientVersion});return this._metrics}_hasPreviewFlag(n){var i;return!!((i=this._engineConfig.previewFeatures)!=null&&i.includes(n))}$applyPendingMigrations(){return this._engine.applyPendingMigrations()}}return t}function ra(e,t){return Jc(e)?[new ue(e,t),Ns]:[e,_s]}function Jc(e){return Array.isArray(e)&&Array.isArray(e.raw)}d();c();p();f();m();var Qc=new Set([\"toJSON\",\"$$typeof\",\"asymmetricMatch\",Symbol.iterator,Symbol.toStringTag,Symbol.isConcatSpreadable,Symbol.toPrimitive]);function Gc(e){return new Proxy(e,{get(t,r){if(r in t)return t[r];if(!Qc.has(r))throw new TypeError(`Invalid enum value: ${String(r)}`)}})}d();c();p();f();m();var export_warnEnvConflicts=void 0;export{Ui as Debug,ve as Decimal,gi as Extensions,St as MetricsClient,Ie as NotFoundError,G as PrismaClientInitializationError,z as PrismaClientKnownRequestError,De as PrismaClientRustPanicError,ae as PrismaClientUnknownRequestError,ee as PrismaClientValidationError,yi as Public,ue as Sql,ru as defineDmmfProperty,uu as empty,jc as getPrismaClient,Cn as getRuntime,au as join,Gc as makeStrictEnum,ln as objectEnumValues,io as raw,oo as sqltag,export_warnEnvConflicts as warnEnvConflicts,cr as warnOnce};\n//# sourceMappingURL=edge-esm.js.map\n"
  },
  {
    "path": "server/src/common/prisma-client/runtime/edge.js",
    "content": "\"use strict\";var la=Object.create;var nr=Object.defineProperty;var ca=Object.getOwnPropertyDescriptor;var pa=Object.getOwnPropertyNames;var fa=Object.getPrototypeOf,ma=Object.prototype.hasOwnProperty;var be=(e,t)=>()=>(e&&(t=e(e=0)),t);var Se=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),vt=(e,t)=>{for(var r in t)nr(e,r,{get:t[r],enumerable:!0})},zn=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of pa(t))!ma.call(e,i)&&i!==r&&nr(e,i,{get:()=>t[i],enumerable:!(n=ca(t,i))||n.enumerable});return e};var Ue=(e,t,r)=>(r=e!=null?la(fa(e)):{},zn(t||!e||!e.__esModule?nr(r,\"default\",{value:e,enumerable:!0}):r,e)),Gr=e=>zn(nr({},\"__esModule\",{value:!0}),e);var y,c=be(()=>{\"use strict\";y={nextTick:(e,...t)=>{setTimeout(()=>{e(...t)},0)},env:{},version:\"\",cwd:()=>\"/\",stderr:{},argv:[\"/bin/node\"]}});var Yn,b,p=be(()=>{\"use strict\";b=(Yn=globalThis.performance)!=null?Yn:(()=>{let e=Date.now();return{now:()=>Date.now()-e}})()});var E,f=be(()=>{\"use strict\";E=()=>{};E.prototype=E});var m=be(()=>{\"use strict\"});var hi=Se(rt=>{\"use strict\";d();c();p();f();m();var ri=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),da=ri(e=>{\"use strict\";e.byteLength=u,e.toByteArray=g,e.fromByteArray=S;var t=[],r=[],n=typeof Uint8Array<\"u\"?Uint8Array:Array,i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";for(o=0,s=i.length;o<s;++o)t[o]=i[o],r[i.charCodeAt(o)]=o;var o,s;r[45]=62,r[95]=63;function a(C){var A=C.length;if(A%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var k=C.indexOf(\"=\");k===-1&&(k=A);var O=k===A?0:4-k%4;return[k,O]}function u(C){var A=a(C),k=A[0],O=A[1];return(k+O)*3/4-O}function l(C,A,k){return(A+k)*3/4-k}function g(C){var A,k=a(C),O=k[0],B=k[1],M=new n(l(C,O,B)),I=0,X=B>0?O-4:O,L;for(L=0;L<X;L+=4)A=r[C.charCodeAt(L)]<<18|r[C.charCodeAt(L+1)]<<12|r[C.charCodeAt(L+2)]<<6|r[C.charCodeAt(L+3)],M[I++]=A>>16&255,M[I++]=A>>8&255,M[I++]=A&255;return B===2&&(A=r[C.charCodeAt(L)]<<2|r[C.charCodeAt(L+1)]>>4,M[I++]=A&255),B===1&&(A=r[C.charCodeAt(L)]<<10|r[C.charCodeAt(L+1)]<<4|r[C.charCodeAt(L+2)]>>2,M[I++]=A>>8&255,M[I++]=A&255),M}function h(C){return t[C>>18&63]+t[C>>12&63]+t[C>>6&63]+t[C&63]}function x(C,A,k){for(var O,B=[],M=A;M<k;M+=3)O=(C[M]<<16&16711680)+(C[M+1]<<8&65280)+(C[M+2]&255),B.push(h(O));return B.join(\"\")}function S(C){for(var A,k=C.length,O=k%3,B=[],M=16383,I=0,X=k-O;I<X;I+=M)B.push(x(C,I,I+M>X?X:I+M));return O===1?(A=C[k-1],B.push(t[A>>2]+t[A<<4&63]+\"==\")):O===2&&(A=(C[k-2]<<8)+C[k-1],B.push(t[A>>10]+t[A>>4&63]+t[A<<2&63]+\"=\")),B.join(\"\")}}),ga=ri(e=>{e.read=function(t,r,n,i,o){var s,a,u=o*8-i-1,l=(1<<u)-1,g=l>>1,h=-7,x=n?o-1:0,S=n?-1:1,C=t[r+x];for(x+=S,s=C&(1<<-h)-1,C>>=-h,h+=u;h>0;s=s*256+t[r+x],x+=S,h-=8);for(a=s&(1<<-h)-1,s>>=-h,h+=i;h>0;a=a*256+t[r+x],x+=S,h-=8);if(s===0)s=1-g;else{if(s===l)return a?NaN:(C?-1:1)*(1/0);a=a+Math.pow(2,i),s=s-g}return(C?-1:1)*a*Math.pow(2,s-i)},e.write=function(t,r,n,i,o,s){var a,u,l,g=s*8-o-1,h=(1<<g)-1,x=h>>1,S=o===23?Math.pow(2,-24)-Math.pow(2,-77):0,C=i?0:s-1,A=i?1:-1,k=r<0||r===0&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(u=isNaN(r)?1:0,a=h):(a=Math.floor(Math.log(r)/Math.LN2),r*(l=Math.pow(2,-a))<1&&(a--,l*=2),a+x>=1?r+=S/l:r+=S*Math.pow(2,1-x),r*l>=2&&(a++,l/=2),a+x>=h?(u=0,a=h):a+x>=1?(u=(r*l-1)*Math.pow(2,o),a=a+x):(u=r*Math.pow(2,x-1)*Math.pow(2,o),a=0));o>=8;t[n+C]=u&255,C+=A,u/=256,o-=8);for(a=a<<o|u,g+=o;g>0;t[n+C]=a&255,C+=A,a/=256,g-=8);t[n+C-A]|=k*128}}),Hr=da(),et=ga(),Zn=typeof Symbol==\"function\"&&typeof Symbol.for==\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;rt.Buffer=T;rt.SlowBuffer=xa;rt.INSPECT_MAX_BYTES=50;var ir=2147483647;rt.kMaxLength=ir;T.TYPED_ARRAY_SUPPORT=ha();!T.TYPED_ARRAY_SUPPORT&&typeof console<\"u\"&&typeof console.error==\"function\"&&console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");function ha(){try{let e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),e.foo()===42}catch(e){return!1}}Object.defineProperty(T.prototype,\"parent\",{enumerable:!0,get:function(){if(T.isBuffer(this))return this.buffer}});Object.defineProperty(T.prototype,\"offset\",{enumerable:!0,get:function(){if(T.isBuffer(this))return this.byteOffset}});function xe(e){if(e>ir)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');let t=new Uint8Array(e);return Object.setPrototypeOf(t,T.prototype),t}function T(e,t,r){if(typeof e==\"number\"){if(typeof t==\"string\")throw new TypeError('The \"string\" argument must be of type string. Received type number');return zr(e)}return ni(e,t,r)}T.poolSize=8192;function ni(e,t,r){if(typeof e==\"string\")return wa(e,t);if(ArrayBuffer.isView(e))return Ea(e);if(e==null)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(me(e,ArrayBuffer)||e&&me(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer<\"u\"&&(me(e,SharedArrayBuffer)||e&&me(e.buffer,SharedArrayBuffer)))return oi(e,t,r);if(typeof e==\"number\")throw new TypeError('The \"value\" argument must not be of type number. Received type number');let n=e.valueOf&&e.valueOf();if(n!=null&&n!==e)return T.from(n,t,r);let i=ba(e);if(i)return i;if(typeof Symbol<\"u\"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]==\"function\")return T.from(e[Symbol.toPrimitive](\"string\"),t,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}T.from=function(e,t,r){return ni(e,t,r)};Object.setPrototypeOf(T.prototype,Uint8Array.prototype);Object.setPrototypeOf(T,Uint8Array);function ii(e){if(typeof e!=\"number\")throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function ya(e,t,r){return ii(e),e<=0?xe(e):t!==void 0?typeof r==\"string\"?xe(e).fill(t,r):xe(e).fill(t):xe(e)}T.alloc=function(e,t,r){return ya(e,t,r)};function zr(e){return ii(e),xe(e<0?0:Yr(e)|0)}T.allocUnsafe=function(e){return zr(e)};T.allocUnsafeSlow=function(e){return zr(e)};function wa(e,t){if((typeof t!=\"string\"||t===\"\")&&(t=\"utf8\"),!T.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);let r=si(e,t)|0,n=xe(r),i=n.write(e,t);return i!==r&&(n=n.slice(0,i)),n}function Wr(e){let t=e.length<0?0:Yr(e.length)|0,r=xe(t);for(let n=0;n<t;n+=1)r[n]=e[n]&255;return r}function Ea(e){if(me(e,Uint8Array)){let t=new Uint8Array(e);return oi(t.buffer,t.byteOffset,t.byteLength)}return Wr(e)}function oi(e,t,r){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw new RangeError('\"length\" is outside of buffer bounds');let n;return t===void 0&&r===void 0?n=new Uint8Array(e):r===void 0?n=new Uint8Array(e,t):n=new Uint8Array(e,t,r),Object.setPrototypeOf(n,T.prototype),n}function ba(e){if(T.isBuffer(e)){let t=Yr(e.length)|0,r=xe(t);return r.length===0||e.copy(r,0,0,t),r}if(e.length!==void 0)return typeof e.length!=\"number\"||Xr(e.length)?xe(0):Wr(e);if(e.type===\"Buffer\"&&Array.isArray(e.data))return Wr(e.data)}function Yr(e){if(e>=ir)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+ir.toString(16)+\" bytes\");return e|0}function xa(e){return+e!=e&&(e=0),T.alloc(+e)}T.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==T.prototype};T.compare=function(e,t){if(me(e,Uint8Array)&&(e=T.from(e,e.offset,e.byteLength)),me(t,Uint8Array)&&(t=T.from(t,t.offset,t.byteLength)),!T.isBuffer(e)||!T.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let r=e.length,n=t.length;for(let i=0,o=Math.min(r,n);i<o;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0};T.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}};T.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(e.length===0)return T.alloc(0);let r;if(t===void 0)for(t=0,r=0;r<e.length;++r)t+=e[r].length;let n=T.allocUnsafe(t),i=0;for(r=0;r<e.length;++r){let o=e[r];if(me(o,Uint8Array))i+o.length>n.length?(T.isBuffer(o)||(o=T.from(o)),o.copy(n,i)):Uint8Array.prototype.set.call(n,o,i);else if(T.isBuffer(o))o.copy(n,i);else throw new TypeError('\"list\" argument must be an Array of Buffers');i+=o.length}return n};function si(e,t){if(T.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||me(e,ArrayBuffer))return e.byteLength;if(typeof e!=\"string\")throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let r=e.length,n=arguments.length>2&&arguments[2]===!0;if(!n&&r===0)return 0;let i=!1;for(;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return Kr(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return r*2;case\"hex\":return r>>>1;case\"base64\":return gi(e).length;default:if(i)return n?-1:Kr(e).length;t=(\"\"+t).toLowerCase(),i=!0}}T.byteLength=si;function Pa(e,t,r){let n=!1;if((t===void 0||t<0)&&(t=0),t>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0,t>>>=0,r<=t))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return Oa(this,t,r);case\"utf8\":case\"utf-8\":return ui(this,t,r);case\"ascii\":return Da(this,t,r);case\"latin1\":case\"binary\":return ka(this,t,r);case\"base64\":return Sa(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Ma(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}T.prototype._isBuffer=!0;function Ve(e,t,r){let n=e[t];e[t]=e[r],e[r]=n}T.prototype.swap16=function(){let e=this.length;if(e%2!==0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let t=0;t<e;t+=2)Ve(this,t,t+1);return this};T.prototype.swap32=function(){let e=this.length;if(e%4!==0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let t=0;t<e;t+=4)Ve(this,t,t+3),Ve(this,t+1,t+2);return this};T.prototype.swap64=function(){let e=this.length;if(e%8!==0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let t=0;t<e;t+=8)Ve(this,t,t+7),Ve(this,t+1,t+6),Ve(this,t+2,t+5),Ve(this,t+3,t+4);return this};T.prototype.toString=function(){let e=this.length;return e===0?\"\":arguments.length===0?ui(this,0,e):Pa.apply(this,arguments)};T.prototype.toLocaleString=T.prototype.toString;T.prototype.equals=function(e){if(!T.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e?!0:T.compare(this,e)===0};T.prototype.inspect=function(){let e=\"\",t=rt.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,t).replace(/(.{2})/g,\"$1 \").trim(),this.length>t&&(e+=\" ... \"),\"<Buffer \"+e+\">\"};Zn&&(T.prototype[Zn]=T.prototype.inspect);T.prototype.compare=function(e,t,r,n,i){if(me(e,Uint8Array)&&(e=T.from(e,e.offset,e.byteLength)),!T.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(t===void 0&&(t=0),r===void 0&&(r=e?e.length:0),n===void 0&&(n=0),i===void 0&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;let o=i-n,s=r-t,a=Math.min(o,s),u=this.slice(n,i),l=e.slice(t,r);for(let g=0;g<a;++g)if(u[g]!==l[g]){o=u[g],s=l[g];break}return o<s?-1:s<o?1:0};function ai(e,t,r,n,i){if(e.length===0)return-1;if(typeof r==\"string\"?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,Xr(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0)if(i)r=0;else return-1;if(typeof t==\"string\"&&(t=T.from(t,n)),T.isBuffer(t))return t.length===0?-1:Xn(e,t,r,n,i);if(typeof t==\"number\")return t=t&255,typeof Uint8Array.prototype.indexOf==\"function\"?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):Xn(e,[t],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function Xn(e,t,r,n,i){let o=1,s=e.length,a=t.length;if(n!==void 0&&(n=String(n).toLowerCase(),n===\"ucs2\"||n===\"ucs-2\"||n===\"utf16le\"||n===\"utf-16le\")){if(e.length<2||t.length<2)return-1;o=2,s/=2,a/=2,r/=2}function u(g,h){return o===1?g[h]:g.readUInt16BE(h*o)}let l;if(i){let g=-1;for(l=r;l<s;l++)if(u(e,l)===u(t,g===-1?0:l-g)){if(g===-1&&(g=l),l-g+1===a)return g*o}else g!==-1&&(l-=l-g),g=-1}else for(r+a>s&&(r=s-a),l=r;l>=0;l--){let g=!0;for(let h=0;h<a;h++)if(u(e,l+h)!==u(t,h)){g=!1;break}if(g)return l}return-1}T.prototype.includes=function(e,t,r){return this.indexOf(e,t,r)!==-1};T.prototype.indexOf=function(e,t,r){return ai(this,e,t,r,!0)};T.prototype.lastIndexOf=function(e,t,r){return ai(this,e,t,r,!1)};function va(e,t,r,n){r=Number(r)||0;let i=e.length-r;n?(n=Number(n),n>i&&(n=i)):n=i;let o=t.length;n>o/2&&(n=o/2);let s;for(s=0;s<n;++s){let a=parseInt(t.substr(s*2,2),16);if(Xr(a))return s;e[r+s]=a}return s}function Ta(e,t,r,n){return or(Kr(t,e.length-r),e,r,n)}function Ca(e,t,r,n){return or(La(t),e,r,n)}function Aa(e,t,r,n){return or(gi(t),e,r,n)}function Ra(e,t,r,n){return or(Ba(t,e.length-r),e,r,n)}T.prototype.write=function(e,t,r,n){if(t===void 0)n=\"utf8\",r=this.length,t=0;else if(r===void 0&&typeof t==\"string\")n=t,r=this.length,t=0;else if(isFinite(t))t=t>>>0,isFinite(r)?(r=r>>>0,n===void 0&&(n=\"utf8\")):(n=r,r=void 0);else throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");let i=this.length-t;if((r===void 0||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");let o=!1;for(;;)switch(n){case\"hex\":return va(this,e,t,r);case\"utf8\":case\"utf-8\":return Ta(this,e,t,r);case\"ascii\":case\"latin1\":case\"binary\":return Ca(this,e,t,r);case\"base64\":return Aa(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Ra(this,e,t,r);default:if(o)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),o=!0}};T.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function Sa(e,t,r){return t===0&&r===e.length?Hr.fromByteArray(e):Hr.fromByteArray(e.slice(t,r))}function ui(e,t,r){r=Math.min(e.length,r);let n=[],i=t;for(;i<r;){let o=e[i],s=null,a=o>239?4:o>223?3:o>191?2:1;if(i+a<=r){let u,l,g,h;switch(a){case 1:o<128&&(s=o);break;case 2:u=e[i+1],(u&192)===128&&(h=(o&31)<<6|u&63,h>127&&(s=h));break;case 3:u=e[i+1],l=e[i+2],(u&192)===128&&(l&192)===128&&(h=(o&15)<<12|(u&63)<<6|l&63,h>2047&&(h<55296||h>57343)&&(s=h));break;case 4:u=e[i+1],l=e[i+2],g=e[i+3],(u&192)===128&&(l&192)===128&&(g&192)===128&&(h=(o&15)<<18|(u&63)<<12|(l&63)<<6|g&63,h>65535&&h<1114112&&(s=h))}}s===null?(s=65533,a=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),i+=a}return Ia(n)}var ei=4096;function Ia(e){let t=e.length;if(t<=ei)return String.fromCharCode.apply(String,e);let r=\"\",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=ei));return r}function Da(e,t,r){let n=\"\";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]&127);return n}function ka(e,t,r){let n=\"\";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function Oa(e,t,r){let n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);let i=\"\";for(let o=t;o<r;++o)i+=$a[e[o]];return i}function Ma(e,t,r){let n=e.slice(t,r),i=\"\";for(let o=0;o<n.length-1;o+=2)i+=String.fromCharCode(n[o]+n[o+1]*256);return i}T.prototype.slice=function(e,t){let r=this.length;e=~~e,t=t===void 0?r:~~t,e<0?(e+=r,e<0&&(e=0)):e>r&&(e=r),t<0?(t+=r,t<0&&(t=0)):t>r&&(t=r),t<e&&(t=e);let n=this.subarray(e,t);return Object.setPrototypeOf(n,T.prototype),n};function W(e,t,r){if(e%1!==0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>r)throw new RangeError(\"Trying to access beyond buffer length\")}T.prototype.readUintLE=T.prototype.readUIntLE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=this[e],i=1,o=0;for(;++o<t&&(i*=256);)n+=this[e+o]*i;return n};T.prototype.readUintBE=T.prototype.readUIntBE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=this[e+--t],i=1;for(;t>0&&(i*=256);)n+=this[e+--t]*i;return n};T.prototype.readUint8=T.prototype.readUInt8=function(e,t){return e=e>>>0,t||W(e,1,this.length),this[e]};T.prototype.readUint16LE=T.prototype.readUInt16LE=function(e,t){return e=e>>>0,t||W(e,2,this.length),this[e]|this[e+1]<<8};T.prototype.readUint16BE=T.prototype.readUInt16BE=function(e,t){return e=e>>>0,t||W(e,2,this.length),this[e]<<8|this[e+1]};T.prototype.readUint32LE=T.prototype.readUInt32LE=function(e,t){return e=e>>>0,t||W(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216};T.prototype.readUint32BE=T.prototype.readUInt32BE=function(e,t){return e=e>>>0,t||W(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])};T.prototype.readBigUInt64LE=Ie(function(e){e=e>>>0,tt(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&Tt(e,this.length-8);let n=t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24,i=this[++e]+this[++e]*2**8+this[++e]*2**16+r*2**24;return BigInt(n)+(BigInt(i)<<BigInt(32))});T.prototype.readBigUInt64BE=Ie(function(e){e=e>>>0,tt(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&Tt(e,this.length-8);let n=t*2**24+this[++e]*2**16+this[++e]*2**8+this[++e],i=this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+r;return(BigInt(n)<<BigInt(32))+BigInt(i)});T.prototype.readIntLE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=this[e],i=1,o=0;for(;++o<t&&(i*=256);)n+=this[e+o]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*t)),n};T.prototype.readIntBE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=t,i=1,o=this[e+--n];for(;n>0&&(i*=256);)o+=this[e+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o};T.prototype.readInt8=function(e,t){return e=e>>>0,t||W(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]};T.prototype.readInt16LE=function(e,t){e=e>>>0,t||W(e,2,this.length);let r=this[e]|this[e+1]<<8;return r&32768?r|4294901760:r};T.prototype.readInt16BE=function(e,t){e=e>>>0,t||W(e,2,this.length);let r=this[e+1]|this[e]<<8;return r&32768?r|4294901760:r};T.prototype.readInt32LE=function(e,t){return e=e>>>0,t||W(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24};T.prototype.readInt32BE=function(e,t){return e=e>>>0,t||W(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]};T.prototype.readBigInt64LE=Ie(function(e){e=e>>>0,tt(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&Tt(e,this.length-8);let n=this[e+4]+this[e+5]*2**8+this[e+6]*2**16+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24)});T.prototype.readBigInt64BE=Ie(function(e){e=e>>>0,tt(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&Tt(e,this.length-8);let n=(t<<24)+this[++e]*2**16+this[++e]*2**8+this[++e];return(BigInt(n)<<BigInt(32))+BigInt(this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+r)});T.prototype.readFloatLE=function(e,t){return e=e>>>0,t||W(e,4,this.length),et.read(this,e,!0,23,4)};T.prototype.readFloatBE=function(e,t){return e=e>>>0,t||W(e,4,this.length),et.read(this,e,!1,23,4)};T.prototype.readDoubleLE=function(e,t){return e=e>>>0,t||W(e,8,this.length),et.read(this,e,!0,52,8)};T.prototype.readDoubleBE=function(e,t){return e=e>>>0,t||W(e,8,this.length),et.read(this,e,!1,52,8)};function ie(e,t,r,n,i,o){if(!T.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>i||t<o)throw new RangeError('\"value\" argument is out of bounds');if(r+n>e.length)throw new RangeError(\"Index out of range\")}T.prototype.writeUintLE=T.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t=t>>>0,r=r>>>0,!n){let s=Math.pow(2,8*r)-1;ie(this,e,t,r,s,0)}let i=1,o=0;for(this[t]=e&255;++o<r&&(i*=256);)this[t+o]=e/i&255;return t+r};T.prototype.writeUintBE=T.prototype.writeUIntBE=function(e,t,r,n){if(e=+e,t=t>>>0,r=r>>>0,!n){let s=Math.pow(2,8*r)-1;ie(this,e,t,r,s,0)}let i=r-1,o=1;for(this[t+i]=e&255;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r};T.prototype.writeUint8=T.prototype.writeUInt8=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,1,255,0),this[t]=e&255,t+1};T.prototype.writeUint16LE=T.prototype.writeUInt16LE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,2,65535,0),this[t]=e&255,this[t+1]=e>>>8,t+2};T.prototype.writeUint16BE=T.prototype.writeUInt16BE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=e&255,t+2};T.prototype.writeUint32LE=T.prototype.writeUInt32LE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=e&255,t+4};T.prototype.writeUint32BE=T.prototype.writeUInt32BE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};function li(e,t,r,n,i){di(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o=o>>8,e[r++]=o,o=o>>8,e[r++]=o,o=o>>8,e[r++]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,r}function ci(e,t,r,n,i){di(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o=o>>8,e[r+6]=o,o=o>>8,e[r+5]=o,o=o>>8,e[r+4]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s=s>>8,e[r+2]=s,s=s>>8,e[r+1]=s,s=s>>8,e[r]=s,r+8}T.prototype.writeBigUInt64LE=Ie(function(e,t=0){return li(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))});T.prototype.writeBigUInt64BE=Ie(function(e,t=0){return ci(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))});T.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t=t>>>0,!n){let a=Math.pow(2,8*r-1);ie(this,e,t,r,a-1,-a)}let i=0,o=1,s=0;for(this[t]=e&255;++i<r&&(o*=256);)e<0&&s===0&&this[t+i-1]!==0&&(s=1),this[t+i]=(e/o>>0)-s&255;return t+r};T.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t=t>>>0,!n){let a=Math.pow(2,8*r-1);ie(this,e,t,r,a-1,-a)}let i=r-1,o=1,s=0;for(this[t+i]=e&255;--i>=0&&(o*=256);)e<0&&s===0&&this[t+i+1]!==0&&(s=1),this[t+i]=(e/o>>0)-s&255;return t+r};T.prototype.writeInt8=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=e&255,t+1};T.prototype.writeInt16LE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,2,32767,-32768),this[t]=e&255,this[t+1]=e>>>8,t+2};T.prototype.writeInt16BE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=e&255,t+2};T.prototype.writeInt32LE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,4,2147483647,-2147483648),this[t]=e&255,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4};T.prototype.writeInt32BE=function(e,t,r){return e=+e,t=t>>>0,r||ie(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};T.prototype.writeBigInt64LE=Ie(function(e,t=0){return li(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});T.prototype.writeBigInt64BE=Ie(function(e,t=0){return ci(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});function pi(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function fi(e,t,r,n,i){return t=+t,r=r>>>0,i||pi(e,t,r,4,34028234663852886e22,-34028234663852886e22),et.write(e,t,r,n,23,4),r+4}T.prototype.writeFloatLE=function(e,t,r){return fi(this,e,t,!0,r)};T.prototype.writeFloatBE=function(e,t,r){return fi(this,e,t,!1,r)};function mi(e,t,r,n,i){return t=+t,r=r>>>0,i||pi(e,t,r,8,17976931348623157e292,-17976931348623157e292),et.write(e,t,r,n,52,8),r+8}T.prototype.writeDoubleLE=function(e,t,r){return mi(this,e,t,!0,r)};T.prototype.writeDoubleBE=function(e,t,r){return mi(this,e,t,!1,r)};T.prototype.copy=function(e,t,r,n){if(!T.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(r||(r=0),!n&&n!==0&&(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r||e.length===0||this.length===0)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(r<0||r>=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);let i=n-r;return this===e&&typeof Uint8Array.prototype.copyWithin==\"function\"?this.copyWithin(t,r,n):Uint8Array.prototype.set.call(e,this.subarray(r,n),t),i};T.prototype.fill=function(e,t,r,n){if(typeof e==\"string\"){if(typeof t==\"string\"?(n=t,t=0,r=this.length):typeof r==\"string\"&&(n=r,r=this.length),n!==void 0&&typeof n!=\"string\")throw new TypeError(\"encoding must be a string\");if(typeof n==\"string\"&&!T.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n);if(e.length===1){let o=e.charCodeAt(0);(n===\"utf8\"&&o<128||n===\"latin1\")&&(e=o)}}else typeof e==\"number\"?e=e&255:typeof e==\"boolean\"&&(e=Number(e));if(t<0||this.length<t||this.length<r)throw new RangeError(\"Out of range index\");if(r<=t)return this;t=t>>>0,r=r===void 0?this.length:r>>>0,e||(e=0);let i;if(typeof e==\"number\")for(i=t;i<r;++i)this[i]=e;else{let o=T.isBuffer(e)?e:T.from(e,n),s=o.length;if(s===0)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(i=0;i<r-t;++i)this[i+t]=o[i%s]}return this};var Xe={};function Zr(e,t,r){Xe[e]=class extends r{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(n){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:n,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}Zr(\"ERR_BUFFER_OUT_OF_BOUNDS\",function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"},RangeError);Zr(\"ERR_INVALID_ARG_TYPE\",function(e,t){return`The \"${e}\" argument must be of type number. Received type ${typeof t}`},TypeError);Zr(\"ERR_OUT_OF_RANGE\",function(e,t,r){let n=`The value of \"${e}\" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=ti(String(r)):typeof r==\"bigint\"&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=ti(i)),i+=\"n\"),n+=` It must be ${t}. Received ${i}`,n},RangeError);function ti(e){let t=\"\",r=e.length,n=e[0]===\"-\"?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function Na(e,t,r){tt(t,\"offset\"),(e[t]===void 0||e[t+r]===void 0)&&Tt(t,e.length-(r+1))}function di(e,t,r,n,i,o){if(e>r||e<t){let s=typeof t==\"bigint\"?\"n\":\"\",a;throw o>3?t===0||t===BigInt(0)?a=`>= 0${s} and < 2${s} ** ${(o+1)*8}${s}`:a=`>= -(2${s} ** ${(o+1)*8-1}${s}) and < 2 ** ${(o+1)*8-1}${s}`:a=`>= ${t}${s} and <= ${r}${s}`,new Xe.ERR_OUT_OF_RANGE(\"value\",a,e)}Na(n,i,o)}function tt(e,t){if(typeof e!=\"number\")throw new Xe.ERR_INVALID_ARG_TYPE(t,\"number\",e)}function Tt(e,t,r){throw Math.floor(e)!==e?(tt(e,r),new Xe.ERR_OUT_OF_RANGE(r||\"offset\",\"an integer\",e)):t<0?new Xe.ERR_BUFFER_OUT_OF_BOUNDS:new Xe.ERR_OUT_OF_RANGE(r||\"offset\",`>= ${r?1:0} and <= ${t}`,e)}var _a=/[^+/0-9A-Za-z-_]/g;function Fa(e){if(e=e.split(\"=\")[0],e=e.trim().replace(_a,\"\"),e.length<2)return\"\";for(;e.length%4!==0;)e=e+\"=\";return e}function Kr(e,t){t=t||1/0;let r,n=e.length,i=null,o=[];for(let s=0;s<n;++s){if(r=e.charCodeAt(s),r>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}else if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,r&63|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else throw new Error(\"Invalid code point\")}return o}function La(e){let t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r)&255);return t}function Ba(e,t){let r,n,i,o=[];for(let s=0;s<e.length&&!((t-=2)<0);++s)r=e.charCodeAt(s),n=r>>8,i=r%256,o.push(i),o.push(n);return o}function gi(e){return Hr.toByteArray(Fa(e))}function or(e,t,r,n){let i;for(i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function me(e,t){return e instanceof t||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===t.name}function Xr(e){return e!==e}var $a=function(){let e=\"0123456789abcdef\",t=new Array(256);for(let r=0;r<16;++r){let n=r*16;for(let i=0;i<16;++i)t[n+i]=e[r]+e[i]}return t}();function Ie(e){return typeof BigInt>\"u\"?qa:e}function qa(){throw new Error(\"BigInt not supported\")}});var w,d=be(()=>{\"use strict\";w=Ue(hi())});function Ua(){return!1}var Va,ja,bi,xi=be(()=>{\"use strict\";d();c();p();f();m();Va={},ja={existsSync:Ua,promises:Va},bi=ja});var Mi=Se((df,Oi)=>{\"use strict\";d();c();p();f();m();Oi.exports=(on(),Gr(nn)).format});var nn={};vt(nn,{default:()=>Ga,deprecate:()=>_i,format:()=>Li,inspect:()=>Fi,promisify:()=>Ni});function Ni(e){return(...t)=>new Promise((r,n)=>{e(...t,(i,o)=>{i?n(i):r(o)})})}function _i(e,t){return(...r)=>(console.warn(t),e(...r))}function Fi(e){return JSON.stringify(e,(t,r)=>typeof r==\"function\"?r.toString():typeof r==\"bigint\"?`${r}n`:r instanceof Error?{...r,message:r.message,stack:r.stack}:r)}var Li,Qa,Ga,on=be(()=>{\"use strict\";d();c();p();f();m();Li=Mi(),Qa={promisify:Ni,deprecate:_i,inspect:Fi,format:Li},Ga=Qa});function Ya(...e){return e.join(\"/\")}function Za(...e){return e.join(\"/\")}var Ji,Xa,eu,At,Qi=be(()=>{\"use strict\";d();c();p();f();m();Ji=\"/\",Xa={sep:Ji},eu={resolve:Ya,posix:Xa,join:Za,sep:Ji},At=eu});var lr,Hi=be(()=>{\"use strict\";d();c();p();f();m();lr=class{constructor(){this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),this}emit(t,...r){return this.events[t]?(this.events[t].forEach(n=>{n(...r)}),!0):!1}}});var Ki=Se((Em,Wi)=>{\"use strict\";d();c();p();f();m();Wi.exports=(e,t=1,r)=>{if(r={indent:\" \",includeEmptyLines:!1,...r},typeof e!=\"string\")throw new TypeError(`Expected \\`input\\` to be a \\`string\\`, got \\`${typeof e}\\``);if(typeof t!=\"number\")throw new TypeError(`Expected \\`count\\` to be a \\`number\\`, got \\`${typeof t}\\``);if(typeof r.indent!=\"string\")throw new TypeError(`Expected \\`options.indent\\` to be a \\`string\\`, got \\`${typeof r.indent}\\``);if(t===0)return e;let n=r.includeEmptyLines?/^/gm:/^(?!\\s*$)/gm;return e.replace(n,r.indent.repeat(t))}});var Zi=Se((km,Yi)=>{\"use strict\";d();c();p();f();m();Yi.exports=({onlyFirst:e=!1}={})=>{let t=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(t,e?void 0:\"g\")}});var eo=Se((Lm,Xi)=>{\"use strict\";d();c();p();f();m();var su=Zi();Xi.exports=e=>typeof e==\"string\"?e.replace(su(),\"\"):e});var io=Se((Mh,cu)=>{cu.exports={name:\"@prisma/engines-version\",version:\"5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\",main:\"index.js\",types:\"index.d.ts\",license:\"Apache-2.0\",author:\"Tim Suchanek <suchanek@prisma.io>\",prisma:{enginesVersion:\"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\"},repository:{type:\"git\",url:\"https://github.com/prisma/engines-wrapper.git\",directory:\"packages/engines-version\"},devDependencies:{\"@types/node\":\"18.19.33\",typescript:\"4.9.5\"},files:[\"index.js\",\"index.d.ts\"],scripts:{build:\"tsc -d\"}}});var oo=Se(()=>{\"use strict\";d();c();p();f();m()});var Un=Se((aR,ys)=>{\"use strict\";d();c();p();f();m();ys.exports=function(){function e(t,r,n,i,o){return t<r||n<r?t>n?n+1:t+1:i===o?r:r+1}return function(t,r){if(t===r)return 0;if(t.length>r.length){var n=t;t=r,r=n}for(var i=t.length,o=r.length;i>0&&t.charCodeAt(i-1)===r.charCodeAt(o-1);)i--,o--;for(var s=0;s<i&&t.charCodeAt(s)===r.charCodeAt(s);)s++;if(i-=s,o-=s,i===0||o<3)return o;var a=0,u,l,g,h,x,S,C,A,k,O,B,M,I=[];for(u=0;u<i;u++)I.push(u+1),I.push(t.charCodeAt(s+u));for(var X=I.length-1;a<o-3;)for(k=r.charCodeAt(s+(l=a)),O=r.charCodeAt(s+(g=a+1)),B=r.charCodeAt(s+(h=a+2)),M=r.charCodeAt(s+(x=a+3)),S=a+=4,u=0;u<X;u+=2)C=I[u],A=I[u+1],l=e(C,l,g,k,A),g=e(l,g,h,O,A),h=e(g,h,x,B,A),S=e(h,x,S,M,A),I[u]=S,x=h,h=g,g=l,l=C;for(;a<o;)for(k=r.charCodeAt(s+(l=a)),S=++a,u=0;u<X;u+=2)C=I[u],I[u]=S=e(C,l,S,k,I[u+1]),l=C;return S}}()});var Hc={};vt(Hc,{Debug:()=>an,Decimal:()=>ye,Extensions:()=>en,MetricsClient:()=>st,NotFoundError:()=>Pe,PrismaClientInitializationError:()=>G,PrismaClientKnownRequestError:()=>K,PrismaClientRustPanicError:()=>ve,PrismaClientUnknownRequestError:()=>oe,PrismaClientValidationError:()=>Y,Public:()=>tn,Sql:()=>se,defineDmmfProperty:()=>no,empty:()=>ao,getPrismaClient:()=>sa,getRuntime:()=>Mr,join:()=>so,makeStrictEnum:()=>aa,objectEnumValues:()=>pr,raw:()=>yn,sqltag:()=>wn,warnEnvConflicts:()=>void 0,warnOnce:()=>It});module.exports=Gr(Hc);d();c();p();f();m();var en={};vt(en,{defineExtension:()=>yi,getExtensionContext:()=>wi});d();c();p();f();m();d();c();p();f();m();function yi(e){return typeof e==\"function\"?e:t=>t.$extends(e)}d();c();p();f();m();function wi(e){return e}var tn={};vt(tn,{validator:()=>Ei});d();c();p();f();m();d();c();p();f();m();function Ei(...e){return t=>t}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();var rn,Pi,vi,Ti,Ci=!0;typeof y!=\"undefined\"&&({FORCE_COLOR:rn,NODE_DISABLE_COLORS:Pi,NO_COLOR:vi,TERM:Ti}=y.env||{},Ci=y.stdout&&y.stdout.isTTY);var Ja={enabled:!Pi&&vi==null&&Ti!==\"dumb\"&&(rn!=null&&rn!==\"0\"||Ci)};function V(e,t){let r=new RegExp(`\\\\x1b\\\\[${t}m`,\"g\"),n=`\\x1B[${e}m`,i=`\\x1B[${t}m`;return function(o){return!Ja.enabled||o==null?o:n+(~(\"\"+o).indexOf(i)?o.replace(r,i+n):o)+i}}var Jp=V(0,0),sr=V(1,22),ar=V(2,22),Qp=V(3,23),Ai=V(4,24),Gp=V(7,27),Hp=V(8,28),Wp=V(9,29),Kp=V(30,39),nt=V(31,39),Ri=V(32,39),Si=V(33,39),Ii=V(34,39),zp=V(35,39),Di=V(36,39),Yp=V(37,39),ki=V(90,39),Zp=V(90,39),Xp=V(40,49),ef=V(41,49),tf=V(42,49),rf=V(43,49),nf=V(44,49),of=V(45,49),sf=V(46,49),af=V(47,49);d();c();p();f();m();var Ha=100,Bi=[\"green\",\"yellow\",\"blue\",\"magenta\",\"cyan\",\"red\"],ur=[],$i=Date.now(),Wa=0,sn=typeof y!=\"undefined\"?y.env:{},qi,Ui;(Ui=globalThis.DEBUG)!=null||(globalThis.DEBUG=(qi=sn.DEBUG)!=null?qi:\"\");var Vi;(Vi=globalThis.DEBUG_COLORS)!=null||(globalThis.DEBUG_COLORS=sn.DEBUG_COLORS?sn.DEBUG_COLORS===\"true\":!0);var Ct={enable(e){typeof e==\"string\"&&(globalThis.DEBUG=e)},disable(){let e=globalThis.DEBUG;return globalThis.DEBUG=\"\",e},enabled(e){let t=globalThis.DEBUG.split(\",\").map(i=>i.replace(/[.+?^${}()|[\\]\\\\]/g,\"\\\\$&\")),r=t.some(i=>i===\"\"||i[0]===\"-\"?!1:e.match(RegExp(i.split(\"*\").join(\".*\")+\"$\"))),n=t.some(i=>i===\"\"||i[0]!==\"-\"?!1:e.match(RegExp(i.slice(1).split(\"*\").join(\".*\")+\"$\")));return r&&!n},log:(...e)=>{var o;let[t,r,...n]=e,i;typeof require==\"function\"&&typeof y!=\"undefined\"&&typeof y.stderr!=\"undefined\"&&typeof y.stderr.write==\"function\"?i=(...s)=>{var a;try{let u=(on(),Gr(nn));y.stderr.write(u.format(...s)+`\n`)}catch(u){i=(a=console.warn)!=null?a:console.log}}:i=(o=console.warn)!=null?o:console.log,i(`${t} ${r}`,...n)},formatters:{}};function Ka(e){let t={color:Bi[Wa++%Bi.length],enabled:Ct.enabled(e),namespace:e,log:Ct.log,extend:()=>{}},r=(...n)=>{let{enabled:i,namespace:o,color:s,log:a}=t;if(n.length!==0&&ur.push([o,...n]),ur.length>Ha&&ur.shift(),Ct.enabled(o)||i){let u=n.map(g=>typeof g==\"string\"?g:za(g)),l=`+${Date.now()-$i}ms`;$i=Date.now(),a(o,...u,l)}};return new Proxy(r,{get:(n,i)=>t[i],set:(n,i,o)=>t[i]=o})}var an=new Proxy(Ka,{get:(e,t)=>Ct[t],set:(e,t,r)=>Ct[t]=r});function za(e,t=2){let r=new Set;return JSON.stringify(e,(n,i)=>{if(typeof i==\"object\"&&i!==null){if(r.has(i))return\"[Circular *]\";r.add(i)}else if(typeof i==\"bigint\")return i.toString();return i},t)}function ji(){ur.length=0}var re=an;d();c();p();f();m();d();c();p();f();m();var Gi=\"library\";function Rt(e){let t=tu();return t||((e==null?void 0:e.config.engineType)===\"library\"?\"library\":(e==null?void 0:e.config.engineType)===\"binary\"?\"binary\":Gi)}function tu(){let e=y.env.PRISMA_CLIENT_ENGINE_TYPE;return e===\"library\"?\"library\":e===\"binary\"?\"binary\":void 0}d();c();p();f();m();d();c();p();f();m();var De;(t=>{let e;(I=>(I.findUnique=\"findUnique\",I.findUniqueOrThrow=\"findUniqueOrThrow\",I.findFirst=\"findFirst\",I.findFirstOrThrow=\"findFirstOrThrow\",I.findMany=\"findMany\",I.create=\"create\",I.createMany=\"createMany\",I.createManyAndReturn=\"createManyAndReturn\",I.update=\"update\",I.updateMany=\"updateMany\",I.upsert=\"upsert\",I.delete=\"delete\",I.deleteMany=\"deleteMany\",I.groupBy=\"groupBy\",I.count=\"count\",I.aggregate=\"aggregate\",I.findRaw=\"findRaw\",I.aggregateRaw=\"aggregateRaw\"))(e=t.ModelAction||(t.ModelAction={}))})(De||(De={}));var it={};vt(it,{error:()=>iu,info:()=>nu,log:()=>ru,query:()=>ou,should:()=>zi,tags:()=>St,warn:()=>un});d();c();p();f();m();var St={error:nt(\"prisma:error\"),warn:Si(\"prisma:warn\"),info:Di(\"prisma:info\"),query:Ii(\"prisma:query\")},zi={warn:()=>!y.env.PRISMA_DISABLE_WARNINGS};function ru(...e){console.log(...e)}function un(e,...t){zi.warn()&&console.warn(`${St.warn} ${e}`,...t)}function nu(e,...t){console.info(`${St.info} ${e}`,...t)}function iu(e,...t){console.error(`${St.error} ${e}`,...t)}function ou(e,...t){console.log(`${St.query} ${e}`,...t)}d();c();p();f();m();function je(e,t){throw new Error(t)}d();c();p();f();m();function ln(e,t){return Object.prototype.hasOwnProperty.call(e,t)}d();c();p();f();m();var cn=(e,t)=>e.reduce((r,n)=>(r[t(n)]=n,r),{});d();c();p();f();m();function ot(e,t){let r={};for(let n of Object.keys(e))r[n]=t(e[n],n);return r}d();c();p();f();m();function pn(e,t){if(e.length===0)return;let r=e[0];for(let n=1;n<e.length;n++)t(r,e[n])<0&&(r=e[n]);return r}d();c();p();f();m();function _(e,t){Object.defineProperty(e,\"name\",{value:t,configurable:!0})}d();c();p();f();m();var to=new Set,It=(e,t,...r)=>{to.has(e)||(to.add(e),un(t,...r))};d();c();p();f();m();var K=class extends Error{constructor(t,{code:r,clientVersion:n,meta:i,batchRequestIdx:o}){super(t),this.name=\"PrismaClientKnownRequestError\",this.code=r,this.clientVersion=n,this.meta=i,Object.defineProperty(this,\"batchRequestIdx\",{value:o,enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return\"PrismaClientKnownRequestError\"}};_(K,\"PrismaClientKnownRequestError\");var Pe=class extends K{constructor(t,r){super(t,{code:\"P2025\",clientVersion:r}),this.name=\"NotFoundError\"}};_(Pe,\"NotFoundError\");d();c();p();f();m();var G=class e extends Error{constructor(t,r,n){super(t),this.name=\"PrismaClientInitializationError\",this.clientVersion=r,this.errorCode=n,Error.captureStackTrace(e)}get[Symbol.toStringTag](){return\"PrismaClientInitializationError\"}};_(G,\"PrismaClientInitializationError\");d();c();p();f();m();var ve=class extends Error{constructor(t,r){super(t),this.name=\"PrismaClientRustPanicError\",this.clientVersion=r}get[Symbol.toStringTag](){return\"PrismaClientRustPanicError\"}};_(ve,\"PrismaClientRustPanicError\");d();c();p();f();m();var oe=class extends Error{constructor(t,{clientVersion:r,batchRequestIdx:n}){super(t),this.name=\"PrismaClientUnknownRequestError\",this.clientVersion=r,Object.defineProperty(this,\"batchRequestIdx\",{value:n,writable:!0,enumerable:!1})}get[Symbol.toStringTag](){return\"PrismaClientUnknownRequestError\"}};_(oe,\"PrismaClientUnknownRequestError\");d();c();p();f();m();var Y=class extends Error{constructor(r,{clientVersion:n}){super(r);this.name=\"PrismaClientValidationError\";this.clientVersion=n}get[Symbol.toStringTag](){return\"PrismaClientValidationError\"}};_(Y,\"PrismaClientValidationError\");d();c();p();f();m();var st=class{constructor(t){this._engine=t}prometheus(t){return this._engine.metrics({format:\"prometheus\",...t})}json(t){return this._engine.metrics({format:\"json\",...t})}};d();c();p();f();m();d();c();p();f();m();function Dt(e){let t;return{get(){return t||(t={value:e()}),t.value}}}function no(e,t){let r=Dt(()=>au(t));Object.defineProperty(e,\"dmmf\",{get:()=>r.get()})}function au(e){return{datamodel:{models:fn(e.models),enums:fn(e.enums),types:fn(e.types)}}}function fn(e){return Object.entries(e).map(([t,r])=>({name:t,...r}))}d();c();p();f();m();var cr=Symbol(),mn=new WeakMap,Te=class{constructor(t){t===cr?mn.set(this,`Prisma.${this._getName()}`):mn.set(this,`new Prisma.${this._getNamespace()}.${this._getName()}()`)}_getName(){return this.constructor.name}toString(){return mn.get(this)}},kt=class extends Te{_getNamespace(){return\"NullTypes\"}},Ot=class extends kt{};dn(Ot,\"DbNull\");var Mt=class extends kt{};dn(Mt,\"JsonNull\");var Nt=class extends kt{};dn(Nt,\"AnyNull\");var pr={classes:{DbNull:Ot,JsonNull:Mt,AnyNull:Nt},instances:{DbNull:new Ot(cr),JsonNull:new Mt(cr),AnyNull:new Nt(cr)}};function dn(e,t){Object.defineProperty(e,\"name\",{value:t,configurable:!0})}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();function _t(e){return{ok:!1,error:e,map(){return _t(e)},flatMap(){return _t(e)}}}var gn=class{constructor(){this.registeredErrors=[]}consumeError(t){return this.registeredErrors[t]}registerNewError(t){let r=0;for(;this.registeredErrors[r]!==void 0;)r++;return this.registeredErrors[r]={error:t},r}},hn=e=>{let t=new gn,r=Je(t,e.startTransaction.bind(e)),n={adapterName:e.adapterName,errorRegistry:t,queryRaw:Je(t,e.queryRaw.bind(e)),executeRaw:Je(t,e.executeRaw.bind(e)),provider:e.provider,startTransaction:async(...i)=>(await r(...i)).map(s=>uu(t,s))};return e.getConnectionInfo&&(n.getConnectionInfo=lu(t,e.getConnectionInfo.bind(e))),n},uu=(e,t)=>({adapterName:t.adapterName,provider:t.provider,options:t.options,queryRaw:Je(e,t.queryRaw.bind(t)),executeRaw:Je(e,t.executeRaw.bind(t)),commit:Je(e,t.commit.bind(t)),rollback:Je(e,t.rollback.bind(t))});function Je(e,t){return async(...r)=>{try{return await t(...r)}catch(n){let i=e.registerNewError(n);return _t({kind:\"GenericJs\",id:i})}}}function lu(e,t){return(...r)=>{try{return t(...r)}catch(n){let i=e.registerNewError(n);return _t({kind:\"GenericJs\",id:i})}}}var oa=Ue(io());var gk=Ue(oo());Hi();xi();Qi();d();c();p();f();m();var se=class e{constructor(t,r){if(t.length-1!==r.length)throw t.length===0?new TypeError(\"Expected at least 1 string\"):new TypeError(`Expected ${t.length} strings to have ${t.length-1} values`);let n=r.reduce((s,a)=>s+(a instanceof e?a.values.length:1),0);this.values=new Array(n),this.strings=new Array(n+1),this.strings[0]=t[0];let i=0,o=0;for(;i<r.length;){let s=r[i++],a=t[i];if(s instanceof e){this.strings[o]+=s.strings[0];let u=0;for(;u<s.values.length;)this.values[o++]=s.values[u++],this.strings[o]=s.strings[u];this.strings[o]+=a}else this.values[o++]=s,this.strings[o]=a}}get sql(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`?${this.strings[r++]}`;return n}get statement(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`:${r}${this.strings[r++]}`;return n}get text(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`$${r}${this.strings[r++]}`;return n}inspect(){return{sql:this.sql,statement:this.statement,text:this.text,values:this.values}}};function so(e,t=\",\",r=\"\",n=\"\"){if(e.length===0)throw new TypeError(\"Expected `join([])` to be called with an array of multiple elements, but got an empty array\");return new se([r,...Array(e.length-1).fill(t),n],e)}function yn(e){return new se([e],[])}var ao=yn(\"\");function wn(e,...t){return new se(e,t)}d();c();p();f();m();d();c();p();f();m();function Ft(e){return{getKeys(){return Object.keys(e)},getPropertyValue(t){return e[t]}}}d();c();p();f();m();function ne(e,t){return{getKeys(){return[e]},getPropertyValue(){return t()}}}d();c();p();f();m();d();c();p();f();m();var de=class{constructor(){this._map=new Map}get(t){var r;return(r=this._map.get(t))==null?void 0:r.value}set(t,r){this._map.set(t,{value:r})}getOrCreate(t,r){let n=this._map.get(t);if(n)return n.value;let i=r();return this.set(t,i),i}};function Qe(e){let t=new de;return{getKeys(){return e.getKeys()},getPropertyValue(r){return t.getOrCreate(r,()=>e.getPropertyValue(r))},getPropertyDescriptor(r){var n;return(n=e.getPropertyDescriptor)==null?void 0:n.call(e,r)}}}d();c();p();f();m();d();c();p();f();m();var fr={enumerable:!0,configurable:!0,writable:!0};function mr(e){let t=new Set(e);return{getOwnPropertyDescriptor:()=>fr,has:(r,n)=>t.has(n),set:(r,n,i)=>t.add(n)&&Reflect.set(r,n,i),ownKeys:()=>[...t]}}var uo=Symbol.for(\"nodejs.util.inspect.custom\");function ge(e,t){let r=pu(t),n=new Set,i=new Proxy(e,{get(o,s){if(n.has(s))return o[s];let a=r.get(s);return a?a.getPropertyValue(s):o[s]},has(o,s){var u,l;if(n.has(s))return!0;let a=r.get(s);return a?(l=(u=a.has)==null?void 0:u.call(a,s))!=null?l:!0:Reflect.has(o,s)},ownKeys(o){let s=lo(Reflect.ownKeys(o),r),a=lo(Array.from(r.keys()),r);return[...new Set([...s,...a,...n])]},set(o,s,a){var l,g;let u=r.get(s);return((g=(l=u==null?void 0:u.getPropertyDescriptor)==null?void 0:l.call(u,s))==null?void 0:g.writable)===!1?!1:(n.add(s),Reflect.set(o,s,a))},getOwnPropertyDescriptor(o,s){let a=Reflect.getOwnPropertyDescriptor(o,s);if(a&&!a.configurable)return a;let u=r.get(s);return u?u.getPropertyDescriptor?{...fr,...u==null?void 0:u.getPropertyDescriptor(s)}:fr:a},defineProperty(o,s,a){return n.add(s),Reflect.defineProperty(o,s,a)}});return i[uo]=function(){let o={...this};return delete o[uo],o},i}function pu(e){let t=new Map;for(let r of e){let n=r.getKeys();for(let i of n)t.set(i,r)}return t}function lo(e,t){return e.filter(r=>{var i,o;let n=t.get(r);return(o=(i=n==null?void 0:n.has)==null?void 0:i.call(n,r))!=null?o:!0})}d();c();p();f();m();function at(e){return{getKeys(){return e},has(){return!1},getPropertyValue(){}}}d();c();p();f();m();function dr(e,t){return{batch:e,transaction:(t==null?void 0:t.kind)===\"batch\"?{isolationLevel:t.options.isolationLevel}:void 0}}d();c();p();f();m();d();c();p();f();m();var ut=class{constructor(t=0,r){this.context=r;this.lines=[];this.currentLine=\"\";this.currentIndent=0;this.currentIndent=t}write(t){return typeof t==\"string\"?this.currentLine+=t:t.write(this),this}writeJoined(t,r){let n=r.length-1;for(let i=0;i<r.length;i++)this.write(r[i]),i!==n&&this.write(t);return this}writeLine(t){return this.write(t).newLine()}newLine(){this.lines.push(this.indentedCurrentLine()),this.currentLine=\"\",this.marginSymbol=void 0;let t=this.afterNextNewLineCallback;return this.afterNextNewLineCallback=void 0,t==null||t(),this}withIndent(t){return this.indent(),t(this),this.unindent(),this}afterNextNewline(t){return this.afterNextNewLineCallback=t,this}indent(){return this.currentIndent++,this}unindent(){return this.currentIndent>0&&this.currentIndent--,this}addMarginSymbol(t){return this.marginSymbol=t,this}toString(){return this.lines.concat(this.indentedCurrentLine()).join(`\n`)}getCurrentLineLength(){return this.currentLine.length}indentedCurrentLine(){let t=this.currentLine.padStart(this.currentLine.length+2*this.currentIndent);return this.marginSymbol?this.marginSymbol+t.slice(1):t}};d();c();p();f();m();d();c();p();f();m();function co(e){return e.substring(0,1).toLowerCase()+e.substring(1)}d();c();p();f();m();function lt(e){return e instanceof Date||Object.prototype.toString.call(e)===\"[object Date]\"}function gr(e){return e.toString()!==\"Invalid Date\"}d();c();p();f();m();d();c();p();f();m();var ct=9e15,Ne=1e9,En=\"0123456789abcdef\",yr=\"2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058\",wr=\"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789\",bn={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-ct,maxE:ct,crypto:!1},go,Ce,F=!0,br=\"[DecimalError] \",Me=br+\"Invalid argument: \",ho=br+\"Precision limit exceeded\",yo=br+\"crypto unavailable\",wo=\"[object Decimal]\",te=Math.floor,H=Math.pow,fu=/^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,mu=/^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,du=/^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,Eo=/^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,pe=1e7,N=7,gu=9007199254740991,hu=yr.length-1,xn=wr.length-1,R={toStringTag:wo};R.absoluteValue=R.abs=function(){var e=new this.constructor(this);return e.s<0&&(e.s=1),D(e)};R.ceil=function(){return D(new this.constructor(this),this.e+1,2)};R.clampedTo=R.clamp=function(e,t){var r,n=this,i=n.constructor;if(e=new i(e),t=new i(t),!e.s||!t.s)return new i(NaN);if(e.gt(t))throw Error(Me+t);return r=n.cmp(e),r<0?e:n.cmp(t)>0?t:new i(n)};R.comparedTo=R.cmp=function(e){var t,r,n,i,o=this,s=o.d,a=(e=new o.constructor(e)).d,u=o.s,l=e.s;if(!s||!a)return!u||!l?NaN:u!==l?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-l:0;if(u!==l)return u;if(o.e!==e.e)return o.e>e.e^u<0?1:-1;for(n=s.length,i=a.length,t=0,r=n<i?n:i;t<r;++t)if(s[t]!==a[t])return s[t]>a[t]^u<0?1:-1;return n===i?0:n>i^u<0?1:-1};R.cosine=R.cos=function(){var e,t,r=this,n=r.constructor;return r.d?r.d[0]?(e=n.precision,t=n.rounding,n.precision=e+Math.max(r.e,r.sd())+N,n.rounding=1,r=yu(n,To(n,r)),n.precision=e,n.rounding=t,D(Ce==2||Ce==3?r.neg():r,e,t,!0)):new n(1):new n(NaN)};R.cubeRoot=R.cbrt=function(){var e,t,r,n,i,o,s,a,u,l,g=this,h=g.constructor;if(!g.isFinite()||g.isZero())return new h(g);for(F=!1,o=g.s*H(g.s*g,1/3),!o||Math.abs(o)==1/0?(r=Z(g.d),e=g.e,(o=(e-r.length+1)%3)&&(r+=o==1||o==-2?\"0\":\"00\"),o=H(r,1/3),e=te((e+1)/3)-(e%3==(e<0?-1:2)),o==1/0?r=\"5e\"+e:(r=o.toExponential(),r=r.slice(0,r.indexOf(\"e\")+1)+e),n=new h(r),n.s=g.s):n=new h(o.toString()),s=(e=h.precision)+3;;)if(a=n,u=a.times(a).times(a),l=u.plus(g),n=q(l.plus(g).times(a),l.plus(u),s+2,1),Z(a.d).slice(0,s)===(r=Z(n.d)).slice(0,s))if(r=r.slice(s-3,s+1),r==\"9999\"||!i&&r==\"4999\"){if(!i&&(D(a,e+1,0),a.times(a).times(a).eq(g))){n=a;break}s+=4,i=1}else{(!+r||!+r.slice(1)&&r.charAt(0)==\"5\")&&(D(n,e+1,1),t=!n.times(n).times(n).eq(g));break}return F=!0,D(n,e,h.rounding,t)};R.decimalPlaces=R.dp=function(){var e,t=this.d,r=NaN;if(t){if(e=t.length-1,r=(e-te(this.e/N))*N,e=t[e],e)for(;e%10==0;e/=10)r--;r<0&&(r=0)}return r};R.dividedBy=R.div=function(e){return q(this,new this.constructor(e))};R.dividedToIntegerBy=R.divToInt=function(e){var t=this,r=t.constructor;return D(q(t,new r(e),0,1,1),r.precision,r.rounding)};R.equals=R.eq=function(e){return this.cmp(e)===0};R.floor=function(){return D(new this.constructor(this),this.e+1,3)};R.greaterThan=R.gt=function(e){return this.cmp(e)>0};R.greaterThanOrEqualTo=R.gte=function(e){var t=this.cmp(e);return t==1||t===0};R.hyperbolicCosine=R.cosh=function(){var e,t,r,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;r=s.precision,n=s.rounding,s.precision=r+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(e=Math.ceil(i/3),t=(1/Pr(4,e)).toString()):(e=16,t=\"2.3283064365386962890625e-10\"),o=pt(s,1,o.times(t),new s(1),!0);for(var u,l=e,g=new s(8);l--;)u=o.times(o),o=a.minus(u.times(g.minus(u.times(g))));return D(o,s.precision=r,s.rounding=n,!0)};R.hyperbolicSine=R.sinh=function(){var e,t,r,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(t=o.precision,r=o.rounding,o.precision=t+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=pt(o,2,i,i,!0);else{e=1.4*Math.sqrt(n),e=e>16?16:e|0,i=i.times(1/Pr(5,e)),i=pt(o,2,i,i,!0);for(var s,a=new o(5),u=new o(16),l=new o(20);e--;)s=i.times(i),i=i.times(a.plus(s.times(u.times(s).plus(l))))}return o.precision=t,o.rounding=r,D(i,t,r,!0)};R.hyperbolicTangent=R.tanh=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+7,n.rounding=1,q(r.sinh(),r.cosh(),n.precision=e,n.rounding=t)):new n(r.s)};R.inverseCosine=R.acos=function(){var e,t=this,r=t.constructor,n=t.abs().cmp(1),i=r.precision,o=r.rounding;return n!==-1?n===0?t.isNeg()?ce(r,i,o):new r(0):new r(NaN):t.isZero()?ce(r,i+4,o).times(.5):(r.precision=i+6,r.rounding=1,t=t.asin(),e=ce(r,i+4,o).times(.5),r.precision=i,r.rounding=o,e.minus(t))};R.inverseHyperbolicCosine=R.acosh=function(){var e,t,r=this,n=r.constructor;return r.lte(1)?new n(r.eq(1)?0:NaN):r.isFinite()?(e=n.precision,t=n.rounding,n.precision=e+Math.max(Math.abs(r.e),r.sd())+4,n.rounding=1,F=!1,r=r.times(r).minus(1).sqrt().plus(r),F=!0,n.precision=e,n.rounding=t,r.ln()):new n(r)};R.inverseHyperbolicSine=R.asinh=function(){var e,t,r=this,n=r.constructor;return!r.isFinite()||r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+2*Math.max(Math.abs(r.e),r.sd())+6,n.rounding=1,F=!1,r=r.times(r).plus(1).sqrt().plus(r),F=!0,n.precision=e,n.rounding=t,r.ln())};R.inverseHyperbolicTangent=R.atanh=function(){var e,t,r,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(e=o.precision,t=o.rounding,n=i.sd(),Math.max(n,e)<2*-i.e-1?D(new o(i),e,t,!0):(o.precision=r=n-i.e,i=q(i.plus(1),new o(1).minus(i),r+e,1),o.precision=e+4,o.rounding=1,i=i.ln(),o.precision=e,o.rounding=t,i.times(.5))):new o(NaN)};R.inverseSine=R.asin=function(){var e,t,r,n,i=this,o=i.constructor;return i.isZero()?new o(i):(t=i.abs().cmp(1),r=o.precision,n=o.rounding,t!==-1?t===0?(e=ce(o,r+4,n).times(.5),e.s=i.s,e):new o(NaN):(o.precision=r+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=r,o.rounding=n,i.times(2)))};R.inverseTangent=R.atan=function(){var e,t,r,n,i,o,s,a,u,l=this,g=l.constructor,h=g.precision,x=g.rounding;if(l.isFinite()){if(l.isZero())return new g(l);if(l.abs().eq(1)&&h+4<=xn)return s=ce(g,h+4,x).times(.25),s.s=l.s,s}else{if(!l.s)return new g(NaN);if(h+4<=xn)return s=ce(g,h+4,x).times(.5),s.s=l.s,s}for(g.precision=a=h+10,g.rounding=1,r=Math.min(28,a/N+2|0),e=r;e;--e)l=l.div(l.times(l).plus(1).sqrt().plus(1));for(F=!1,t=Math.ceil(a/N),n=1,u=l.times(l),s=new g(l),i=l;e!==-1;)if(i=i.times(u),o=s.minus(i.div(n+=2)),i=i.times(u),s=o.plus(i.div(n+=2)),s.d[t]!==void 0)for(e=t;s.d[e]===o.d[e]&&e--;);return r&&(s=s.times(2<<r-1)),F=!0,D(s,g.precision=h,g.rounding=x,!0)};R.isFinite=function(){return!!this.d};R.isInteger=R.isInt=function(){return!!this.d&&te(this.e/N)>this.d.length-2};R.isNaN=function(){return!this.s};R.isNegative=R.isNeg=function(){return this.s<0};R.isPositive=R.isPos=function(){return this.s>0};R.isZero=function(){return!!this.d&&this.d[0]===0};R.lessThan=R.lt=function(e){return this.cmp(e)<0};R.lessThanOrEqualTo=R.lte=function(e){return this.cmp(e)<1};R.logarithm=R.log=function(e){var t,r,n,i,o,s,a,u,l=this,g=l.constructor,h=g.precision,x=g.rounding,S=5;if(e==null)e=new g(10),t=!0;else{if(e=new g(e),r=e.d,e.s<0||!r||!r[0]||e.eq(1))return new g(NaN);t=e.eq(10)}if(r=l.d,l.s<0||!r||!r[0]||l.eq(1))return new g(r&&!r[0]?-1/0:l.s!=1?NaN:r?0:1/0);if(t)if(r.length>1)o=!0;else{for(i=r[0];i%10===0;)i/=10;o=i!==1}if(F=!1,a=h+S,s=Oe(l,a),n=t?Er(g,a+10):Oe(e,a),u=q(s,n,a,1),Lt(u.d,i=h,x))do if(a+=10,s=Oe(l,a),n=t?Er(g,a+10):Oe(e,a),u=q(s,n,a,1),!o){+Z(u.d).slice(i+1,i+15)+1==1e14&&(u=D(u,h+1,0));break}while(Lt(u.d,i+=10,x));return F=!0,D(u,h,x)};R.minus=R.sub=function(e){var t,r,n,i,o,s,a,u,l,g,h,x,S=this,C=S.constructor;if(e=new C(e),!S.d||!e.d)return!S.s||!e.s?e=new C(NaN):S.d?e.s=-e.s:e=new C(e.d||S.s!==e.s?S:NaN),e;if(S.s!=e.s)return e.s=-e.s,S.plus(e);if(l=S.d,x=e.d,a=C.precision,u=C.rounding,!l[0]||!x[0]){if(x[0])e.s=-e.s;else if(l[0])e=new C(S);else return new C(u===3?-0:0);return F?D(e,a,u):e}if(r=te(e.e/N),g=te(S.e/N),l=l.slice(),o=g-r,o){for(h=o<0,h?(t=l,o=-o,s=x.length):(t=x,r=g,s=l.length),n=Math.max(Math.ceil(a/N),s)+2,o>n&&(o=n,t.length=1),t.reverse(),n=o;n--;)t.push(0);t.reverse()}else{for(n=l.length,s=x.length,h=n<s,h&&(s=n),n=0;n<s;n++)if(l[n]!=x[n]){h=l[n]<x[n];break}o=0}for(h&&(t=l,l=x,x=t,e.s=-e.s),s=l.length,n=x.length-s;n>0;--n)l[s++]=0;for(n=x.length;n>o;){if(l[--n]<x[n]){for(i=n;i&&l[--i]===0;)l[i]=pe-1;--l[i],l[n]+=pe}l[n]-=x[n]}for(;l[--s]===0;)l.pop();for(;l[0]===0;l.shift())--r;return l[0]?(e.d=l,e.e=xr(l,r),F?D(e,a,u):e):new C(u===3?-0:0)};R.modulo=R.mod=function(e){var t,r=this,n=r.constructor;return e=new n(e),!r.d||!e.s||e.d&&!e.d[0]?new n(NaN):!e.d||r.d&&!r.d[0]?D(new n(r),n.precision,n.rounding):(F=!1,n.modulo==9?(t=q(r,e.abs(),0,3,1),t.s*=e.s):t=q(r,e,0,n.modulo,1),t=t.times(e),F=!0,r.minus(t))};R.naturalExponential=R.exp=function(){return Pn(this)};R.naturalLogarithm=R.ln=function(){return Oe(this)};R.negated=R.neg=function(){var e=new this.constructor(this);return e.s=-e.s,D(e)};R.plus=R.add=function(e){var t,r,n,i,o,s,a,u,l,g,h=this,x=h.constructor;if(e=new x(e),!h.d||!e.d)return!h.s||!e.s?e=new x(NaN):h.d||(e=new x(e.d||h.s===e.s?h:NaN)),e;if(h.s!=e.s)return e.s=-e.s,h.minus(e);if(l=h.d,g=e.d,a=x.precision,u=x.rounding,!l[0]||!g[0])return g[0]||(e=new x(h)),F?D(e,a,u):e;if(o=te(h.e/N),n=te(e.e/N),l=l.slice(),i=o-n,i){for(i<0?(r=l,i=-i,s=g.length):(r=g,n=o,s=l.length),o=Math.ceil(a/N),s=o>s?o+1:s+1,i>s&&(i=s,r.length=1),r.reverse();i--;)r.push(0);r.reverse()}for(s=l.length,i=g.length,s-i<0&&(i=s,r=g,g=l,l=r),t=0;i;)t=(l[--i]=l[i]+g[i]+t)/pe|0,l[i]%=pe;for(t&&(l.unshift(t),++n),s=l.length;l[--s]==0;)l.pop();return e.d=l,e.e=xr(l,n),F?D(e,a,u):e};R.precision=R.sd=function(e){var t,r=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Me+e);return r.d?(t=bo(r.d),e&&r.e+1>t&&(t=r.e+1)):t=NaN,t};R.round=function(){var e=this,t=e.constructor;return D(new t(e),e.e+1,t.rounding)};R.sine=R.sin=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+Math.max(r.e,r.sd())+N,n.rounding=1,r=Eu(n,To(n,r)),n.precision=e,n.rounding=t,D(Ce>2?r.neg():r,e,t,!0)):new n(NaN)};R.squareRoot=R.sqrt=function(){var e,t,r,n,i,o,s=this,a=s.d,u=s.e,l=s.s,g=s.constructor;if(l!==1||!a||!a[0])return new g(!l||l<0&&(!a||a[0])?NaN:a?s:1/0);for(F=!1,l=Math.sqrt(+s),l==0||l==1/0?(t=Z(a),(t.length+u)%2==0&&(t+=\"0\"),l=Math.sqrt(t),u=te((u+1)/2)-(u<0||u%2),l==1/0?t=\"5e\"+u:(t=l.toExponential(),t=t.slice(0,t.indexOf(\"e\")+1)+u),n=new g(t)):n=new g(l.toString()),r=(u=g.precision)+3;;)if(o=n,n=o.plus(q(s,o,r+2,1)).times(.5),Z(o.d).slice(0,r)===(t=Z(n.d)).slice(0,r))if(t=t.slice(r-3,r+1),t==\"9999\"||!i&&t==\"4999\"){if(!i&&(D(o,u+1,0),o.times(o).eq(s))){n=o;break}r+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)==\"5\")&&(D(n,u+1,1),e=!n.times(n).eq(s));break}return F=!0,D(n,u,g.rounding,e)};R.tangent=R.tan=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+10,n.rounding=1,r=r.sin(),r.s=1,r=q(r,new n(1).minus(r.times(r)).sqrt(),e+10,0),n.precision=e,n.rounding=t,D(Ce==2||Ce==4?r.neg():r,e,t,!0)):new n(NaN)};R.times=R.mul=function(e){var t,r,n,i,o,s,a,u,l,g=this,h=g.constructor,x=g.d,S=(e=new h(e)).d;if(e.s*=g.s,!x||!x[0]||!S||!S[0])return new h(!e.s||x&&!x[0]&&!S||S&&!S[0]&&!x?NaN:!x||!S?e.s/0:e.s*0);for(r=te(g.e/N)+te(e.e/N),u=x.length,l=S.length,u<l&&(o=x,x=S,S=o,s=u,u=l,l=s),o=[],s=u+l,n=s;n--;)o.push(0);for(n=l;--n>=0;){for(t=0,i=u+n;i>n;)a=o[i]+S[n]*x[i-n-1]+t,o[i--]=a%pe|0,t=a/pe|0;o[i]=(o[i]+t)%pe|0}for(;!o[--s];)o.pop();return t?++r:o.shift(),e.d=o,e.e=xr(o,r),F?D(e,h.precision,h.rounding):e};R.toBinary=function(e,t){return Tn(this,2,e,t)};R.toDecimalPlaces=R.toDP=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(ae(e,0,Ne),t===void 0?t=n.rounding:ae(t,0,8),D(r,e+r.e+1,t))};R.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=he(n,!0):(ae(e,0,Ne),t===void 0?t=i.rounding:ae(t,0,8),n=D(new i(n),e+1,t),r=he(n,!0,e+1)),n.isNeg()&&!n.isZero()?\"-\"+r:r};R.toFixed=function(e,t){var r,n,i=this,o=i.constructor;return e===void 0?r=he(i):(ae(e,0,Ne),t===void 0?t=o.rounding:ae(t,0,8),n=D(new o(i),e+i.e+1,t),r=he(n,!1,e+n.e+1)),i.isNeg()&&!i.isZero()?\"-\"+r:r};R.toFraction=function(e){var t,r,n,i,o,s,a,u,l,g,h,x,S=this,C=S.d,A=S.constructor;if(!C)return new A(S);if(l=r=new A(1),n=u=new A(0),t=new A(n),o=t.e=bo(C)-S.e-1,s=o%N,t.d[0]=H(10,s<0?N+s:s),e==null)e=o>0?t:l;else{if(a=new A(e),!a.isInt()||a.lt(l))throw Error(Me+a);e=a.gt(t)?o>0?t:l:a}for(F=!1,a=new A(Z(C)),g=A.precision,A.precision=o=C.length*N*2;h=q(a,t,0,1,1),i=r.plus(h.times(n)),i.cmp(e)!=1;)r=n,n=i,i=l,l=u.plus(h.times(i)),u=i,i=t,t=a.minus(h.times(i)),a=i;return i=q(e.minus(r),n,0,1,1),u=u.plus(i.times(l)),r=r.plus(i.times(n)),u.s=l.s=S.s,x=q(l,n,o,1).minus(S).abs().cmp(q(u,r,o,1).minus(S).abs())<1?[l,n]:[u,r],A.precision=g,F=!0,x};R.toHexadecimal=R.toHex=function(e,t){return Tn(this,16,e,t)};R.toNearest=function(e,t){var r=this,n=r.constructor;if(r=new n(r),e==null){if(!r.d)return r;e=new n(1),t=n.rounding}else{if(e=new n(e),t===void 0?t=n.rounding:ae(t,0,8),!r.d)return e.s?r:e;if(!e.d)return e.s&&(e.s=r.s),e}return e.d[0]?(F=!1,r=q(r,e,0,t,1).times(e),F=!0,D(r)):(e.s=r.s,r=e),r};R.toNumber=function(){return+this};R.toOctal=function(e,t){return Tn(this,8,e,t)};R.toPower=R.pow=function(e){var t,r,n,i,o,s,a=this,u=a.constructor,l=+(e=new u(e));if(!a.d||!e.d||!a.d[0]||!e.d[0])return new u(H(+a,l));if(a=new u(a),a.eq(1))return a;if(n=u.precision,o=u.rounding,e.eq(1))return D(a,n,o);if(t=te(e.e/N),t>=e.d.length-1&&(r=l<0?-l:l)<=gu)return i=xo(u,a,r,n),e.s<0?new u(1).div(i):D(i,n,o);if(s=a.s,s<0){if(t<e.d.length-1)return new u(NaN);if(e.d[t]&1||(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return r=H(+a,l),t=r==0||!isFinite(r)?te(l*(Math.log(\"0.\"+Z(a.d))/Math.LN10+a.e+1)):new u(r+\"\").e,t>u.maxE+1||t<u.minE-1?new u(t>0?s/0:0):(F=!1,u.rounding=a.s=1,r=Math.min(12,(t+\"\").length),i=Pn(e.times(Oe(a,n+r)),n),i.d&&(i=D(i,n+5,1),Lt(i.d,n,o)&&(t=n+10,i=D(Pn(e.times(Oe(a,t+r)),t),t+5,1),+Z(i.d).slice(n+1,n+15)+1==1e14&&(i=D(i,n+1,0)))),i.s=s,F=!0,u.rounding=o,D(i,n,o))};R.toPrecision=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=he(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(ae(e,1,Ne),t===void 0?t=i.rounding:ae(t,0,8),n=D(new i(n),e,t),r=he(n,e<=n.e||n.e<=i.toExpNeg,e)),n.isNeg()&&!n.isZero()?\"-\"+r:r};R.toSignificantDigits=R.toSD=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(ae(e,1,Ne),t===void 0?t=n.rounding:ae(t,0,8)),D(new n(r),e,t)};R.toString=function(){var e=this,t=e.constructor,r=he(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()&&!e.isZero()?\"-\"+r:r};R.truncated=R.trunc=function(){return D(new this.constructor(this),this.e+1,1)};R.valueOf=R.toJSON=function(){var e=this,t=e.constructor,r=he(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()?\"-\"+r:r};function Z(e){var t,r,n,i=e.length-1,o=\"\",s=e[0];if(i>0){for(o+=s,t=1;t<i;t++)n=e[t]+\"\",r=N-n.length,r&&(o+=ke(r)),o+=n;s=e[t],n=s+\"\",r=N-n.length,r&&(o+=ke(r))}else if(s===0)return\"0\";for(;s%10===0;)s/=10;return o+s}function ae(e,t,r){if(e!==~~e||e<t||e>r)throw Error(Me+e)}function Lt(e,t,r,n){var i,o,s,a;for(o=e[0];o>=10;o/=10)--t;return--t<0?(t+=N,i=0):(i=Math.ceil((t+1)/N),t%=N),o=H(10,N-t),a=e[i]%o|0,n==null?t<3?(t==0?a=a/100|0:t==1&&(a=a/10|0),s=r<4&&a==99999||r>3&&a==49999||a==5e4||a==0):s=(r<4&&a+1==o||r>3&&a+1==o/2)&&(e[i+1]/o/100|0)==H(10,t-2)-1||(a==o/2||a==0)&&(e[i+1]/o/100|0)==0:t<4?(t==0?a=a/1e3|0:t==1?a=a/100|0:t==2&&(a=a/10|0),s=(n||r<4)&&a==9999||!n&&r>3&&a==4999):s=((n||r<4)&&a+1==o||!n&&r>3&&a+1==o/2)&&(e[i+1]/o/1e3|0)==H(10,t-3)-1,s}function hr(e,t,r){for(var n,i=[0],o,s=0,a=e.length;s<a;){for(o=i.length;o--;)i[o]*=t;for(i[0]+=En.indexOf(e.charAt(s++)),n=0;n<i.length;n++)i[n]>r-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/r|0,i[n]%=r)}return i.reverse()}function yu(e,t){var r,n,i;if(t.isZero())return t;n=t.d.length,n<32?(r=Math.ceil(n/3),i=(1/Pr(4,r)).toString()):(r=16,i=\"2.3283064365386962890625e-10\"),e.precision+=r,t=pt(e,1,t.times(i),new e(1));for(var o=r;o--;){var s=t.times(t);t=s.times(s).minus(s).times(8).plus(1)}return e.precision-=r,t}var q=function(){function e(n,i,o){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*i+a,n[u]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function t(n,i,o,s){var a,u;if(o!=s)u=o>s?1:-1;else for(a=u=0;a<o;a++)if(n[a]!=i[a]){u=n[a]>i[a]?1:-1;break}return u}function r(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,u){var l,g,h,x,S,C,A,k,O,B,M,I,X,L,Ye,Be,fe,$e,Q,Re,qe=n.constructor,Ze=n.s==i.s?1:-1,ee=n.d,U=i.d;if(!ee||!ee[0]||!U||!U[0])return new qe(!n.s||!i.s||(ee?U&&ee[0]==U[0]:!U)?NaN:ee&&ee[0]==0||!U?Ze*0:Ze/0);for(u?(S=1,g=n.e-i.e):(u=pe,S=N,g=te(n.e/S)-te(i.e/S)),Q=U.length,fe=ee.length,O=new qe(Ze),B=O.d=[],h=0;U[h]==(ee[h]||0);h++);if(U[h]>(ee[h]||0)&&g--,o==null?(L=o=qe.precision,s=qe.rounding):a?L=o+(n.e-i.e)+1:L=o,L<0)B.push(1),C=!0;else{if(L=L/S+2|0,h=0,Q==1){for(x=0,U=U[0],L++;(h<fe||x)&&L--;h++)Ye=x*u+(ee[h]||0),B[h]=Ye/U|0,x=Ye%U|0;C=x||h<fe}else{for(x=u/(U[0]+1)|0,x>1&&(U=e(U,x,u),ee=e(ee,x,u),Q=U.length,fe=ee.length),Be=Q,M=ee.slice(0,Q),I=M.length;I<Q;)M[I++]=0;Re=U.slice(),Re.unshift(0),$e=U[0],U[1]>=u/2&&++$e;do x=0,l=t(U,M,Q,I),l<0?(X=M[0],Q!=I&&(X=X*u+(M[1]||0)),x=X/$e|0,x>1?(x>=u&&(x=u-1),A=e(U,x,u),k=A.length,I=M.length,l=t(A,M,k,I),l==1&&(x--,r(A,Q<k?Re:U,k,u))):(x==0&&(l=x=1),A=U.slice()),k=A.length,k<I&&A.unshift(0),r(M,A,I,u),l==-1&&(I=M.length,l=t(U,M,Q,I),l<1&&(x++,r(M,Q<I?Re:U,I,u))),I=M.length):l===0&&(x++,M=[0]),B[h++]=x,l&&M[0]?M[I++]=ee[Be]||0:(M=[ee[Be]],I=1);while((Be++<fe||M[0]!==void 0)&&L--);C=M[0]!==void 0}B[0]||B.shift()}if(S==1)O.e=g,go=C;else{for(h=1,x=B[0];x>=10;x/=10)h++;O.e=h+g*S-1,D(O,a?o+O.e+1:o,s,C)}return O}}();function D(e,t,r,n){var i,o,s,a,u,l,g,h,x,S=e.constructor;e:if(t!=null){if(h=e.d,!h)return e;for(i=1,a=h[0];a>=10;a/=10)i++;if(o=t-i,o<0)o+=N,s=t,g=h[x=0],u=g/H(10,i-s-1)%10|0;else if(x=Math.ceil((o+1)/N),a=h.length,x>=a)if(n){for(;a++<=x;)h.push(0);g=u=0,i=1,o%=N,s=o-N+1}else break e;else{for(g=a=h[x],i=1;a>=10;a/=10)i++;o%=N,s=o-N+i,u=s<0?0:g/H(10,i-s-1)%10|0}if(n=n||t<0||h[x+1]!==void 0||(s<0?g:g%H(10,i-s-1)),l=r<4?(u||n)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||n||r==6&&(o>0?s>0?g/H(10,i-s):0:h[x-1])%10&1||r==(e.s<0?8:7)),t<1||!h[0])return h.length=0,l?(t-=e.e+1,h[0]=H(10,(N-t%N)%N),e.e=-t||0):h[0]=e.e=0,e;if(o==0?(h.length=x,a=1,x--):(h.length=x+1,a=H(10,N-o),h[x]=s>0?(g/H(10,i-s)%H(10,s)|0)*a:0),l)for(;;)if(x==0){for(o=1,s=h[0];s>=10;s/=10)o++;for(s=h[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(e.e++,h[0]==pe&&(h[0]=1));break}else{if(h[x]+=a,h[x]!=pe)break;h[x--]=0,a=1}for(o=h.length;h[--o]===0;)h.pop()}return F&&(e.e>S.maxE?(e.d=null,e.e=NaN):e.e<S.minE&&(e.e=0,e.d=[0])),e}function he(e,t,r){if(!e.isFinite())return vo(e);var n,i=e.e,o=Z(e.d),s=o.length;return t?(r&&(n=r-s)>0?o=o.charAt(0)+\".\"+o.slice(1)+ke(n):s>1&&(o=o.charAt(0)+\".\"+o.slice(1)),o=o+(e.e<0?\"e\":\"e+\")+e.e):i<0?(o=\"0.\"+ke(-i-1)+o,r&&(n=r-s)>0&&(o+=ke(n))):i>=s?(o+=ke(i+1-s),r&&(n=r-i-1)>0&&(o=o+\".\"+ke(n))):((n=i+1)<s&&(o=o.slice(0,n)+\".\"+o.slice(n)),r&&(n=r-s)>0&&(i+1===s&&(o+=\".\"),o+=ke(n))),o}function xr(e,t){var r=e[0];for(t*=N;r>=10;r/=10)t++;return t}function Er(e,t,r){if(t>hu)throw F=!0,r&&(e.precision=r),Error(ho);return D(new e(yr),t,1,!0)}function ce(e,t,r){if(t>xn)throw Error(ho);return D(new e(wr),t,r,!0)}function bo(e){var t=e.length-1,r=t*N+1;if(t=e[t],t){for(;t%10==0;t/=10)r--;for(t=e[0];t>=10;t/=10)r++}return r}function ke(e){for(var t=\"\";e--;)t+=\"0\";return t}function xo(e,t,r,n){var i,o=new e(1),s=Math.ceil(n/N+4);for(F=!1;;){if(r%2&&(o=o.times(t),fo(o.d,s)&&(i=!0)),r=te(r/2),r===0){r=o.d.length-1,i&&o.d[r]===0&&++o.d[r];break}t=t.times(t),fo(t.d,s)}return F=!0,o}function po(e){return e.d[e.d.length-1]&1}function Po(e,t,r){for(var n,i=new e(t[0]),o=0;++o<t.length;)if(n=new e(t[o]),n.s)i[r](n)&&(i=n);else{i=n;break}return i}function Pn(e,t){var r,n,i,o,s,a,u,l=0,g=0,h=0,x=e.constructor,S=x.rounding,C=x.precision;if(!e.d||!e.d[0]||e.e>17)return new x(e.d?e.d[0]?e.s<0?0:1/0:1:e.s?e.s<0?0:e:NaN);for(t==null?(F=!1,u=C):u=t,a=new x(.03125);e.e>-2;)e=e.times(a),h+=5;for(n=Math.log(H(2,h))/Math.LN10*2+5|0,u+=n,r=o=s=new x(1),x.precision=u;;){if(o=D(o.times(e),u,1),r=r.times(++g),a=s.plus(q(o,r,u,1)),Z(a.d).slice(0,u)===Z(s.d).slice(0,u)){for(i=h;i--;)s=D(s.times(s),u,1);if(t==null)if(l<3&&Lt(s.d,u-n,S,l))x.precision=u+=10,r=o=a=new x(1),g=0,l++;else return D(s,x.precision=C,S,F=!0);else return x.precision=C,s}s=a}}function Oe(e,t){var r,n,i,o,s,a,u,l,g,h,x,S=1,C=10,A=e,k=A.d,O=A.constructor,B=O.rounding,M=O.precision;if(A.s<0||!k||!k[0]||!A.e&&k[0]==1&&k.length==1)return new O(k&&!k[0]?-1/0:A.s!=1?NaN:k?0:A);if(t==null?(F=!1,g=M):g=t,O.precision=g+=C,r=Z(k),n=r.charAt(0),Math.abs(o=A.e)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)A=A.times(e),r=Z(A.d),n=r.charAt(0),S++;o=A.e,n>1?(A=new O(\"0.\"+r),o++):A=new O(n+\".\"+r.slice(1))}else return l=Er(O,g+2,M).times(o+\"\"),A=Oe(new O(n+\".\"+r.slice(1)),g-C).plus(l),O.precision=M,t==null?D(A,M,B,F=!0):A;for(h=A,u=s=A=q(A.minus(1),A.plus(1),g,1),x=D(A.times(A),g,1),i=3;;){if(s=D(s.times(x),g,1),l=u.plus(q(s,new O(i),g,1)),Z(l.d).slice(0,g)===Z(u.d).slice(0,g))if(u=u.times(2),o!==0&&(u=u.plus(Er(O,g+2,M).times(o+\"\"))),u=q(u,new O(S),g,1),t==null)if(Lt(u.d,g-C,B,a))O.precision=g+=C,l=s=A=q(h.minus(1),h.plus(1),g,1),x=D(A.times(A),g,1),i=a=1;else return D(u,O.precision=M,B,F=!0);else return O.precision=M,u;u=l,i+=2}}function vo(e){return String(e.s*e.s/0)}function vn(e,t){var r,n,i;for((r=t.indexOf(\".\"))>-1&&(t=t.replace(\".\",\"\")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;n++);for(i=t.length;t.charCodeAt(i-1)===48;--i);if(t=t.slice(n,i),t){if(i-=n,e.e=r=r-n-1,e.d=[],n=(r+1)%N,r<0&&(n+=N),n<i){for(n&&e.d.push(+t.slice(0,n)),i-=N;n<i;)e.d.push(+t.slice(n,n+=N));t=t.slice(n),n=N-t.length}else n-=i;for(;n--;)t+=\"0\";e.d.push(+t),F&&(e.e>e.constructor.maxE?(e.d=null,e.e=NaN):e.e<e.constructor.minE&&(e.e=0,e.d=[0]))}else e.e=0,e.d=[0];return e}function wu(e,t){var r,n,i,o,s,a,u,l,g;if(t.indexOf(\"_\")>-1){if(t=t.replace(/(\\d)_(?=\\d)/g,\"$1\"),Eo.test(t))return vn(e,t)}else if(t===\"Infinity\"||t===\"NaN\")return+t||(e.s=NaN),e.e=NaN,e.d=null,e;if(mu.test(t))r=16,t=t.toLowerCase();else if(fu.test(t))r=2;else if(du.test(t))r=8;else throw Error(Me+t);for(o=t.search(/p/i),o>0?(u=+t.slice(o+1),t=t.substring(2,o)):t=t.slice(2),o=t.indexOf(\".\"),s=o>=0,n=e.constructor,s&&(t=t.replace(\".\",\"\"),a=t.length,o=a-o,i=xo(n,new n(r),o,o*2)),l=hr(t,r,pe),g=l.length-1,o=g;l[o]===0;--o)l.pop();return o<0?new n(e.s*0):(e.e=xr(l,g),e.d=l,F=!1,s&&(e=q(e,i,a*4)),u&&(e=e.times(Math.abs(u)<54?H(2,u):Ge.pow(2,u))),F=!0,e)}function Eu(e,t){var r,n=t.d.length;if(n<3)return t.isZero()?t:pt(e,2,t,t);r=1.4*Math.sqrt(n),r=r>16?16:r|0,t=t.times(1/Pr(5,r)),t=pt(e,2,t,t);for(var i,o=new e(5),s=new e(16),a=new e(20);r--;)i=t.times(t),t=t.times(o.plus(i.times(s.times(i).minus(a))));return t}function pt(e,t,r,n,i){var o,s,a,u,l=1,g=e.precision,h=Math.ceil(g/N);for(F=!1,u=r.times(r),a=new e(n);;){if(s=q(a.times(u),new e(t++*t++),g,1),a=i?n.plus(s):n.minus(s),n=q(s.times(u),new e(t++*t++),g,1),s=a.plus(n),s.d[h]!==void 0){for(o=h;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,l++}return F=!0,s.d.length=h+1,s}function Pr(e,t){for(var r=e;--t;)r*=e;return r}function To(e,t){var r,n=t.s<0,i=ce(e,e.precision,1),o=i.times(.5);if(t=t.abs(),t.lte(o))return Ce=n?4:1,t;if(r=t.divToInt(i),r.isZero())Ce=n?3:2;else{if(t=t.minus(r.times(i)),t.lte(o))return Ce=po(r)?n?2:3:n?4:1,t;Ce=po(r)?n?1:4:n?3:2}return t.minus(i).abs()}function Tn(e,t,r,n){var i,o,s,a,u,l,g,h,x,S=e.constructor,C=r!==void 0;if(C?(ae(r,1,Ne),n===void 0?n=S.rounding:ae(n,0,8)):(r=S.precision,n=S.rounding),!e.isFinite())g=vo(e);else{for(g=he(e),s=g.indexOf(\".\"),C?(i=2,t==16?r=r*4-3:t==8&&(r=r*3-2)):i=t,s>=0&&(g=g.replace(\".\",\"\"),x=new S(1),x.e=g.length-s,x.d=hr(he(x),10,i),x.e=x.d.length),h=hr(g,10,i),o=u=h.length;h[--u]==0;)h.pop();if(!h[0])g=C?\"0p+0\":\"0\";else{if(s<0?o--:(e=new S(e),e.d=h,e.e=o,e=q(e,x,r,n,0,i),h=e.d,o=e.e,l=go),s=h[r],a=i/2,l=l||h[r+1]!==void 0,l=n<4?(s!==void 0||l)&&(n===0||n===(e.s<0?3:2)):s>a||s===a&&(n===4||l||n===6&&h[r-1]&1||n===(e.s<0?8:7)),h.length=r,l)for(;++h[--r]>i-1;)h[r]=0,r||(++o,h.unshift(1));for(u=h.length;!h[u-1];--u);for(s=0,g=\"\";s<u;s++)g+=En.charAt(h[s]);if(C){if(u>1)if(t==16||t==8){for(s=t==16?4:3,--u;u%s;u++)g+=\"0\";for(h=hr(g,i,t),u=h.length;!h[u-1];--u);for(s=1,g=\"1.\";s<u;s++)g+=En.charAt(h[s])}else g=g.charAt(0)+\".\"+g.slice(1);g=g+(o<0?\"p\":\"p+\")+o}else if(o<0){for(;++o;)g=\"0\"+g;g=\"0.\"+g}else if(++o>u)for(o-=u;o--;)g+=\"0\";else o<u&&(g=g.slice(0,o)+\".\"+g.slice(o))}g=(t==16?\"0x\":t==2?\"0b\":t==8?\"0o\":\"\")+g}return e.s<0?\"-\"+g:g}function fo(e,t){if(e.length>t)return e.length=t,!0}function bu(e){return new this(e).abs()}function xu(e){return new this(e).acos()}function Pu(e){return new this(e).acosh()}function vu(e,t){return new this(e).plus(t)}function Tu(e){return new this(e).asin()}function Cu(e){return new this(e).asinh()}function Au(e){return new this(e).atan()}function Ru(e){return new this(e).atanh()}function Su(e,t){e=new this(e),t=new this(t);var r,n=this.precision,i=this.rounding,o=n+4;return!e.s||!t.s?r=new this(NaN):!e.d&&!t.d?(r=ce(this,o,1).times(t.s>0?.25:.75),r.s=e.s):!t.d||e.isZero()?(r=t.s<0?ce(this,n,i):new this(0),r.s=e.s):!e.d||t.isZero()?(r=ce(this,o,1).times(.5),r.s=e.s):t.s<0?(this.precision=o,this.rounding=1,r=this.atan(q(e,t,o,1)),t=ce(this,o,1),this.precision=n,this.rounding=i,r=e.s<0?r.minus(t):r.plus(t)):r=this.atan(q(e,t,o,1)),r}function Iu(e){return new this(e).cbrt()}function Du(e){return D(e=new this(e),e.e+1,2)}function ku(e,t,r){return new this(e).clamp(t,r)}function Ou(e){if(!e||typeof e!=\"object\")throw Error(br+\"Object expected\");var t,r,n,i=e.defaults===!0,o=[\"precision\",1,Ne,\"rounding\",0,8,\"toExpNeg\",-ct,0,\"toExpPos\",0,ct,\"maxE\",0,ct,\"minE\",-ct,0,\"modulo\",0,9];for(t=0;t<o.length;t+=3)if(r=o[t],i&&(this[r]=bn[r]),(n=e[r])!==void 0)if(te(n)===n&&n>=o[t+1]&&n<=o[t+2])this[r]=n;else throw Error(Me+r+\": \"+n);if(r=\"crypto\",i&&(this[r]=bn[r]),(n=e[r])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto!=\"undefined\"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[r]=!0;else throw Error(yo);else this[r]=!1;else throw Error(Me+r+\": \"+n);return this}function Mu(e){return new this(e).cos()}function Nu(e){return new this(e).cosh()}function Co(e){var t,r,n;function i(o){var s,a,u,l=this;if(!(l instanceof i))return new i(o);if(l.constructor=i,mo(o)){l.s=o.s,F?!o.d||o.e>i.maxE?(l.e=NaN,l.d=null):o.e<i.minE?(l.e=0,l.d=[0]):(l.e=o.e,l.d=o.d.slice()):(l.e=o.e,l.d=o.d?o.d.slice():o.d);return}if(u=typeof o,u===\"number\"){if(o===0){l.s=1/o<0?-1:1,l.e=0,l.d=[0];return}if(o<0?(o=-o,l.s=-1):l.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;F?s>i.maxE?(l.e=NaN,l.d=null):s<i.minE?(l.e=0,l.d=[0]):(l.e=s,l.d=[o]):(l.e=s,l.d=[o]);return}else if(o*0!==0){o||(l.s=NaN),l.e=NaN,l.d=null;return}return vn(l,o.toString())}else if(u!==\"string\")throw Error(Me+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),l.s=-1):(a===43&&(o=o.slice(1)),l.s=1),Eo.test(o)?vn(l,o):wu(l,o)}if(i.prototype=R,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Ou,i.clone=Co,i.isDecimal=mo,i.abs=bu,i.acos=xu,i.acosh=Pu,i.add=vu,i.asin=Tu,i.asinh=Cu,i.atan=Au,i.atanh=Ru,i.atan2=Su,i.cbrt=Iu,i.ceil=Du,i.clamp=ku,i.cos=Mu,i.cosh=Nu,i.div=_u,i.exp=Fu,i.floor=Lu,i.hypot=Bu,i.ln=$u,i.log=qu,i.log10=Vu,i.log2=Uu,i.max=ju,i.min=Ju,i.mod=Qu,i.mul=Gu,i.pow=Hu,i.random=Wu,i.round=Ku,i.sign=zu,i.sin=Yu,i.sinh=Zu,i.sqrt=Xu,i.sub=el,i.sum=tl,i.tan=rl,i.tanh=nl,i.trunc=il,e===void 0&&(e={}),e&&e.defaults!==!0)for(n=[\"precision\",\"rounding\",\"toExpNeg\",\"toExpPos\",\"maxE\",\"minE\",\"modulo\",\"crypto\"],t=0;t<n.length;)e.hasOwnProperty(r=n[t++])||(e[r]=this[r]);return i.config(e),i}function _u(e,t){return new this(e).div(t)}function Fu(e){return new this(e).exp()}function Lu(e){return D(e=new this(e),e.e+1,3)}function Bu(){var e,t,r=new this(0);for(F=!1,e=0;e<arguments.length;)if(t=new this(arguments[e++]),t.d)r.d&&(r=r.plus(t.times(t)));else{if(t.s)return F=!0,new this(1/0);r=t}return F=!0,r.sqrt()}function mo(e){return e instanceof Ge||e&&e.toStringTag===wo||!1}function $u(e){return new this(e).ln()}function qu(e,t){return new this(e).log(t)}function Uu(e){return new this(e).log(2)}function Vu(e){return new this(e).log(10)}function ju(){return Po(this,arguments,\"lt\")}function Ju(){return Po(this,arguments,\"gt\")}function Qu(e,t){return new this(e).mod(t)}function Gu(e,t){return new this(e).mul(t)}function Hu(e,t){return new this(e).pow(t)}function Wu(e){var t,r,n,i,o=0,s=new this(1),a=[];if(e===void 0?e=this.precision:ae(e,1,Ne),n=Math.ceil(e/N),this.crypto)if(crypto.getRandomValues)for(t=crypto.getRandomValues(new Uint32Array(n));o<n;)i=t[o],i>=429e7?t[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(t=crypto.randomBytes(n*=4);o<n;)i=t[o]+(t[o+1]<<8)+(t[o+2]<<16)+((t[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(t,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(yo);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],e%=N,n&&e&&(i=H(10,N-e),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<0)r=0,a=[0];else{for(r=-1;a[0]===0;r-=N)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<N&&(r-=N-n)}return s.e=r,s.d=a,s}function Ku(e){return D(e=new this(e),e.e+1,this.rounding)}function zu(e){return e=new this(e),e.d?e.d[0]?e.s:0*e.s:e.s||NaN}function Yu(e){return new this(e).sin()}function Zu(e){return new this(e).sinh()}function Xu(e){return new this(e).sqrt()}function el(e,t){return new this(e).sub(t)}function tl(){var e=0,t=arguments,r=new this(t[e]);for(F=!1;r.s&&++e<t.length;)r=r.plus(t[e]);return F=!0,D(r,this.precision,this.rounding)}function rl(e){return new this(e).tan()}function nl(e){return new this(e).tanh()}function il(e){return D(e=new this(e),e.e+1,1)}R[Symbol.for(\"nodejs.util.inspect.custom\")]=R.toString;R[Symbol.toStringTag]=\"Decimal\";var Ge=R.constructor=Co(bn);yr=new Ge(yr);wr=new Ge(wr);var ye=Ge;function ft(e){return Ge.isDecimal(e)?!0:e!==null&&typeof e==\"object\"&&typeof e.s==\"number\"&&typeof e.e==\"number\"&&typeof e.toFixed==\"function\"&&Array.isArray(e.d)}d();c();p();f();m();var Bt=class{constructor(t,r,n,i,o){this.modelName=t,this.name=r,this.typeName=n,this.isList=i,this.isEnum=o}_toGraphQLInputType(){let t=this.isList?\"List\":\"\",r=this.isEnum?\"Enum\":\"\";return`${t}${r}${this.typeName}FieldRefInput<${this.modelName}>`}};function mt(e){return e instanceof Bt}d();c();p();f();m();d();c();p();f();m();var vr=class{constructor(t){this.value=t}write(t){t.write(this.value)}markAsError(){this.value.markAsError()}};d();c();p();f();m();var Tr=e=>e,Cr={bold:Tr,red:Tr,green:Tr,dim:Tr,enabled:!1},Ao={bold:sr,red:nt,green:Ri,dim:ar,enabled:!0},dt={write(e){e.writeLine(\",\")}};d();c();p();f();m();var we=class{constructor(t){this.contents=t;this.isUnderlined=!1;this.color=t=>t}underline(){return this.isUnderlined=!0,this}setColor(t){return this.color=t,this}write(t){let r=t.getCurrentLineLength();t.write(this.color(this.contents)),this.isUnderlined&&t.afterNextNewline(()=>{t.write(\" \".repeat(r)).writeLine(this.color(\"~\".repeat(this.contents.length)))})}};d();c();p();f();m();var _e=class{constructor(){this.hasError=!1}markAsError(){return this.hasError=!0,this}};var gt=class extends _e{constructor(){super(...arguments);this.items=[]}addItem(r){return this.items.push(new vr(r)),this}getField(r){return this.items[r]}getPrintWidth(){return this.items.length===0?2:Math.max(...this.items.map(n=>n.value.getPrintWidth()))+2}write(r){if(this.items.length===0){this.writeEmpty(r);return}this.writeWithItems(r)}writeEmpty(r){let n=new we(\"[]\");this.hasError&&n.setColor(r.context.colors.red).underline(),r.write(n)}writeWithItems(r){let{colors:n}=r.context;r.writeLine(\"[\").withIndent(()=>r.writeJoined(dt,this.items).newLine()).write(\"]\"),this.hasError&&r.afterNextNewline(()=>{r.writeLine(n.red(\"~\".repeat(this.getPrintWidth())))})}asObject(){}};d();c();p();f();m();var Ro=\": \",Ar=class{constructor(t,r){this.name=t;this.value=r;this.hasError=!1}markAsError(){this.hasError=!0}getPrintWidth(){return this.name.length+this.value.getPrintWidth()+Ro.length}write(t){let r=new we(this.name);this.hasError&&r.underline().setColor(t.context.colors.red),t.write(r).write(Ro).write(this.value)}};d();c();p();f();m();var Rr=class e extends _e{constructor(){super(...arguments);this.fields={};this.suggestions=[]}addField(r){this.fields[r.name]=r}addSuggestion(r){this.suggestions.push(r)}getField(r){return this.fields[r]}getDeepField(r){let[n,...i]=r,o=this.getField(n);if(!o)return;let s=o;for(let a of i){let u;if(s.value instanceof e?u=s.value.getField(a):s.value instanceof gt&&(u=s.value.getField(Number(a))),!u)return;s=u}return s}getDeepFieldValue(r){var n;return r.length===0?this:(n=this.getDeepField(r))==null?void 0:n.value}hasField(r){return!!this.getField(r)}removeAllFields(){this.fields={}}removeField(r){delete this.fields[r]}getFields(){return this.fields}isEmpty(){return Object.keys(this.fields).length===0}getFieldValue(r){var n;return(n=this.getField(r))==null?void 0:n.value}getDeepSubSelectionValue(r){let n=this;for(let i of r){if(!(n instanceof e))return;let o=n.getSubSelectionValue(i);if(!o)return;n=o}return n}getDeepSelectionParent(r){let n=this.getSelectionParent();if(!n)return;let i=n;for(let o of r){let s=i.value.getFieldValue(o);if(!s||!(s instanceof e))return;let a=s.getSelectionParent();if(!a)return;i=a}return i}getSelectionParent(){var i,o;let r=(i=this.getField(\"select\"))==null?void 0:i.value.asObject();if(r)return{kind:\"select\",value:r};let n=(o=this.getField(\"include\"))==null?void 0:o.value.asObject();if(n)return{kind:\"include\",value:n}}getSubSelectionValue(r){var n;return(n=this.getSelectionParent())==null?void 0:n.value.fields[r].value}getPrintWidth(){let r=Object.values(this.fields);return r.length==0?2:Math.max(...r.map(i=>i.getPrintWidth()))+2}write(r){let n=Object.values(this.fields);if(n.length===0&&this.suggestions.length===0){this.writeEmpty(r);return}this.writeWithContents(r,n)}asObject(){return this}writeEmpty(r){let n=new we(\"{}\");this.hasError&&n.setColor(r.context.colors.red).underline(),r.write(n)}writeWithContents(r,n){r.writeLine(\"{\").withIndent(()=>{r.writeJoined(dt,[...n,...this.suggestions]).newLine()}),r.write(\"}\"),this.hasError&&r.afterNextNewline(()=>{r.writeLine(r.context.colors.red(\"~\".repeat(this.getPrintWidth())))})}};d();c();p();f();m();var z=class extends _e{constructor(r){super();this.text=r}getPrintWidth(){return this.text.length}write(r){let n=new we(this.text);this.hasError&&n.underline().setColor(r.context.colors.red),r.write(n)}asObject(){}};var Cn=class{constructor(t){this.errorMessages=[];this.arguments=t}write(t){t.write(this.arguments)}addErrorMessage(t){this.errorMessages.push(t)}renderAllMessages(t){return this.errorMessages.map(r=>r(t)).join(`\n`)}};function Sr(e){return new Cn(So(e))}function So(e){let t=new Rr;for(let[r,n]of Object.entries(e)){let i=new Ar(r,Io(n));t.addField(i)}return t}function Io(e){if(typeof e==\"string\")return new z(JSON.stringify(e));if(typeof e==\"number\"||typeof e==\"boolean\")return new z(String(e));if(typeof e==\"bigint\")return new z(`${e}n`);if(e===null)return new z(\"null\");if(e===void 0)return new z(\"undefined\");if(ft(e))return new z(`new Prisma.Decimal(\"${e.toFixed()}\")`);if(e instanceof Uint8Array)return w.Buffer.isBuffer(e)?new z(`Buffer.alloc(${e.byteLength})`):new z(`new Uint8Array(${e.byteLength})`);if(e instanceof Date){let t=gr(e)?e.toISOString():\"Invalid Date\";return new z(`new Date(\"${t}\")`)}return e instanceof Te?new z(`Prisma.${e._getName()}`):mt(e)?new z(`prisma.${co(e.modelName)}.$fields.${e.name}`):Array.isArray(e)?sl(e):typeof e==\"object\"?So(e):new z(Object.prototype.toString.call(e))}function sl(e){let t=new gt;for(let r of e)t.addItem(Io(r));return t}function Do(e){if(e===void 0)return\"\";let t=Sr(e);return new ut(0,{colors:Cr}).write(t).toString()}d();c();p();f();m();var al=\"P2037\";function $t({error:e,user_facing_error:t},r,n){return t.error_code?new K(ul(t,n),{code:t.error_code,clientVersion:r,meta:t.meta,batchRequestIdx:t.batch_request_idx}):new oe(e,{clientVersion:r,batchRequestIdx:t.batch_request_idx})}function ul(e,t){let r=e.message;return(t===\"postgresql\"||t===\"postgres\"||t===\"mysql\")&&e.error_code===al&&(r+=`\nPrisma Accelerate has built-in connection pooling to prevent such errors: https://pris.ly/client/error-accelerate`),r}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();var An=class{getLocation(){return null}};function Fe(e){return typeof $EnabledCallSite==\"function\"&&e!==\"minimal\"?new $EnabledCallSite:new An}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();var ko={_avg:!0,_count:!0,_sum:!0,_min:!0,_max:!0};function ht(e={}){let t=cl(e);return Object.entries(t).reduce((n,[i,o])=>(ko[i]!==void 0?n.select[i]={select:o}:n[i]=o,n),{select:{}})}function cl(e={}){return typeof e._count==\"boolean\"?{...e,_count:{_all:e._count}}:e}function Ir(e={}){return t=>(typeof e._count==\"boolean\"&&(t._count=t._count._all),t)}function Oo(e,t){let r=Ir(e);return t({action:\"aggregate\",unpacker:r,argsMapper:ht})(e)}d();c();p();f();m();function pl(e={}){let{select:t,...r}=e;return typeof t==\"object\"?ht({...r,_count:t}):ht({...r,_count:{_all:!0}})}function fl(e={}){return typeof e.select==\"object\"?t=>Ir(e)(t)._count:t=>Ir(e)(t)._count._all}function Mo(e,t){return t({action:\"count\",unpacker:fl(e),argsMapper:pl})(e)}d();c();p();f();m();function ml(e={}){let t=ht(e);if(Array.isArray(t.by))for(let r of t.by)typeof r==\"string\"&&(t.select[r]=!0);else typeof t.by==\"string\"&&(t.select[t.by]=!0);return t}function dl(e={}){return t=>(typeof(e==null?void 0:e._count)==\"boolean\"&&t.forEach(r=>{r._count=r._count._all}),t)}function No(e,t){return t({action:\"groupBy\",unpacker:dl(e),argsMapper:ml})(e)}function _o(e,t,r){if(t===\"aggregate\")return n=>Oo(n,r);if(t===\"count\")return n=>Mo(n,r);if(t===\"groupBy\")return n=>No(n,r)}d();c();p();f();m();function Fo(e,t){let r=t.fields.filter(i=>!i.relationName),n=cn(r,i=>i.name);return new Proxy({},{get(i,o){if(o in i||typeof o==\"symbol\")return i[o];let s=n[o];if(s)return new Bt(e,o,s.type,s.isList,s.kind===\"enum\")},...mr(Object.keys(n))})}d();c();p();f();m();d();c();p();f();m();var Lo=e=>Array.isArray(e)?e:e.split(\".\"),Rn=(e,t)=>Lo(t).reduce((r,n)=>r&&r[n],e),Bo=(e,t,r)=>Lo(t).reduceRight((n,i,o,s)=>Object.assign({},Rn(e,s.slice(0,o)),{[i]:n}),r);function gl(e,t){return e===void 0||t===void 0?[]:[...t,\"select\",e]}function hl(e,t,r){return t===void 0?e!=null?e:{}:Bo(t,r,e||!0)}function Sn(e,t,r,n,i,o){let a=e._runtimeDataModel.models[t].fields.reduce((u,l)=>({...u,[l.name]:l}),{});return u=>{let l=Fe(e._errorFormat),g=gl(n,i),h=hl(u,o,g),x=r({dataPath:g,callsite:l})(h),S=yl(e,t);return new Proxy(x,{get(C,A){if(!S.includes(A))return C[A];let O=[a[A].type,r,A],B=[g,h];return Sn(e,...O,...B)},...mr([...S,...Object.getOwnPropertyNames(x)])})}}function yl(e,t){return e._runtimeDataModel.models[t].fields.filter(r=>r.kind===\"object\").map(r=>r.name)}d();c();p();f();m();d();c();p();f();m();var wl=Ue(Ki());var El={red:nt,gray:ki,dim:ar,bold:sr,underline:Ai,highlightSource:e=>e.highlight()},bl={red:e=>e,gray:e=>e,dim:e=>e,bold:e=>e,underline:e=>e,highlightSource:e=>e};function xl({message:e,originalMethod:t,isPanic:r,callArguments:n}){return{functionName:`prisma.${t}()`,message:e,isPanic:r!=null?r:!1,callArguments:n}}function Pl({functionName:e,location:t,message:r,isPanic:n,contextLines:i,callArguments:o},s){let a=[\"\"],u=t?\" in\":\":\";if(n?(a.push(s.red(`Oops, an unknown error occurred! This is ${s.bold(\"on us\")}, you did nothing wrong.`)),a.push(s.red(`It occurred in the ${s.bold(`\\`${e}\\``)} invocation${u}`))):a.push(s.red(`Invalid ${s.bold(`\\`${e}\\``)} invocation${u}`)),t&&a.push(s.underline(vl(t))),i){a.push(\"\");let l=[i.toString()];o&&(l.push(o),l.push(s.dim(\")\"))),a.push(l.join(\"\")),o&&a.push(\"\")}else a.push(\"\"),o&&a.push(o),a.push(\"\");return a.push(r),a.join(`\n`)}function vl(e){let t=[e.fileName];return e.lineNumber&&t.push(String(e.lineNumber)),e.columnNumber&&t.push(String(e.columnNumber)),t.join(\":\")}function yt(e){let t=e.showColors?El:bl,r;return typeof $getTemplateParameters!=\"undefined\"?r=$getTemplateParameters(e,t):r=xl(e),Pl(r,t)}function $o(e,t,r,n){return e===De.ModelAction.findFirstOrThrow||e===De.ModelAction.findUniqueOrThrow?Tl(t,r,n):n}function Tl(e,t,r){return async n=>{if(\"rejectOnNotFound\"in n.args){let o=yt({originalMethod:n.clientMethod,callsite:n.callsite,message:\"'rejectOnNotFound' option is not supported\"});throw new Y(o,{clientVersion:t})}return await r(n).catch(o=>{throw o instanceof K&&o.code===\"P2025\"?new Pe(`No ${e} found`,t):o})}}d();c();p();f();m();function Ee(e){return e.replace(/^./,t=>t.toLowerCase())}var Cl=[\"findUnique\",\"findUniqueOrThrow\",\"findFirst\",\"findFirstOrThrow\",\"create\",\"update\",\"upsert\",\"delete\"],Al=[\"aggregate\",\"count\",\"groupBy\"];function In(e,t){var i;let r=(i=e._extensions.getAllModelExtensions(t))!=null?i:{},n=[Rl(e,t),Il(e,t),Ft(r),ne(\"name\",()=>t),ne(\"$name\",()=>t),ne(\"$parent\",()=>e._appliedParent)];return ge({},n)}function Rl(e,t){let r=Ee(t),n=Object.keys(De.ModelAction).concat(\"count\");return{getKeys(){return n},getPropertyValue(i){let o=i,s=u=>e._request(u);s=$o(o,t,e._clientVersion,s);let a=u=>l=>{let g=Fe(e._errorFormat);return e._createPrismaPromise(h=>{let x={args:l,dataPath:[],action:o,model:t,clientMethod:`${r}.${i}`,jsModelName:r,transaction:h,callsite:g};return s({...x,...u})})};return Cl.includes(o)?Sn(e,t,a):Sl(i)?_o(e,i,a):a({})}}}function Sl(e){return Al.includes(e)}function Il(e,t){return Qe(ne(\"fields\",()=>{let r=e._runtimeDataModel.models[t];return Fo(t,r)}))}d();c();p();f();m();function qo(e){return e.replace(/^./,t=>t.toUpperCase())}var Dn=Symbol();function qt(e){let t=[Dl(e),ne(Dn,()=>e),ne(\"$parent\",()=>e._appliedParent)],r=e._extensions.getAllClientExtensions();return r&&t.push(Ft(r)),ge(e,t)}function Dl(e){let t=Object.keys(e._runtimeDataModel.models),r=t.map(Ee),n=[...new Set(t.concat(r))];return Qe({getKeys(){return n},getPropertyValue(i){let o=qo(i);if(e._runtimeDataModel.models[o]!==void 0)return In(e,o);if(e._runtimeDataModel.models[i]!==void 0)return In(e,i)},getPropertyDescriptor(i){if(!r.includes(i))return{enumerable:!1}}})}function Uo(e){return e[Dn]?e[Dn]:e}function Vo(e){var r;if(typeof e==\"function\")return e(this);if((r=e.client)!=null&&r.__AccelerateEngine){let n=e.client.__AccelerateEngine;this._originalClient._engine=new n(this._originalClient._accelerateEngineConfig)}let t=Object.create(this._originalClient,{_extensions:{value:this._extensions.append(e)},_appliedParent:{value:this,configurable:!0},$use:{value:void 0},$on:{value:void 0}});return qt(t)}d();c();p();f();m();d();c();p();f();m();function jo({result:e,modelName:t,select:r,omit:n,extensions:i}){let o=i.getAllComputedFields(t);if(!o)return e;let s=[],a=[];for(let u of Object.values(o)){if(n){if(n[u.name])continue;let l=u.needs.filter(g=>n[g]);l.length>0&&a.push(at(l))}else if(r){if(!r[u.name])continue;let l=u.needs.filter(g=>!r[g]);l.length>0&&a.push(at(l))}kl(e,u.needs)&&s.push(Ol(u,ge(e,s)))}return s.length>0||a.length>0?ge(e,[...s,...a]):e}function kl(e,t){return t.every(r=>ln(e,r))}function Ol(e,t){return Qe(ne(e.name,()=>e.compute(t)))}d();c();p();f();m();function Dr({visitor:e,result:t,args:r,runtimeDataModel:n,modelName:i}){var s;if(Array.isArray(t)){for(let a=0;a<t.length;a++)t[a]=Dr({result:t[a],args:r,modelName:i,runtimeDataModel:n,visitor:e});return t}let o=(s=e(t,i,r))!=null?s:t;return r.include&&Jo({includeOrSelect:r.include,result:o,parentModelName:i,runtimeDataModel:n,visitor:e}),r.select&&Jo({includeOrSelect:r.select,result:o,parentModelName:i,runtimeDataModel:n,visitor:e}),o}function Jo({includeOrSelect:e,result:t,parentModelName:r,runtimeDataModel:n,visitor:i}){for(let[o,s]of Object.entries(e)){if(!s||t[o]==null)continue;let u=n.models[r].fields.find(g=>g.name===o);if(!u||u.kind!==\"object\"||!u.relationName)continue;let l=typeof s==\"object\"?s:{};t[o]=Dr({visitor:i,result:t[o],args:l,modelName:u.type,runtimeDataModel:n})}}function Qo({result:e,modelName:t,args:r,extensions:n,runtimeDataModel:i}){return n.isEmpty()||e==null||typeof e!=\"object\"||!i.models[t]?e:Dr({result:e,args:r!=null?r:{},modelName:t,runtimeDataModel:i,visitor:(s,a,u)=>jo({result:s,modelName:Ee(a),select:u.select,omit:u.omit,extensions:n})})}d();c();p();f();m();d();c();p();f();m();function Go(e){if(e instanceof se)return Ml(e);if(Array.isArray(e)){let r=[e[0]];for(let n=1;n<e.length;n++)r[n]=Ut(e[n]);return r}let t={};for(let r in e)t[r]=Ut(e[r]);return t}function Ml(e){return new se(e.strings,e.values)}function Ut(e){if(typeof e!=\"object\"||e==null||e instanceof Te||mt(e))return e;if(ft(e))return new ye(e.toFixed());if(lt(e))return new Date(+e);if(ArrayBuffer.isView(e))return e.slice(0);if(Array.isArray(e)){let t=e.length,r;for(r=Array(t);t--;)r[t]=Ut(e[t]);return r}if(typeof e==\"object\"){let t={};for(let r in e)r===\"__proto__\"?Object.defineProperty(t,r,{value:Ut(e[r]),configurable:!0,enumerable:!0,writable:!0}):t[r]=Ut(e[r]);return t}je(e,\"Unknown value\")}function Wo(e,t,r,n=0){return e._createPrismaPromise(i=>{var s,a;let o=t.customDataProxyFetch;return\"transaction\"in t&&i!==void 0&&(((s=t.transaction)==null?void 0:s.kind)===\"batch\"&&t.transaction.lock.then(),t.transaction=i),n===r.length?e._executeRequest(t):r[n]({model:t.model,operation:t.model?t.action:t.clientMethod,args:Go((a=t.args)!=null?a:{}),__internalParams:t,query:(u,l=t)=>{let g=l.customDataProxyFetch;return l.customDataProxyFetch=Zo(o,g),l.args=u,Wo(e,l,r,n+1)}})})}function Ko(e,t){let{jsModelName:r,action:n,clientMethod:i}=t,o=r?n:i;if(e._extensions.isEmpty())return e._executeRequest(t);let s=e._extensions.getAllQueryCallbacks(r!=null?r:\"$none\",o);return Wo(e,t,s)}function zo(e){return t=>{let r={requests:t},n=t[0].extensions.getAllBatchQueryCallbacks();return n.length?Yo(r,n,0,e):e(r)}}function Yo(e,t,r,n){if(r===t.length)return n(e);let i=e.customDataProxyFetch,o=e.requests[0].transaction;return t[r]({args:{queries:e.requests.map(s=>({model:s.modelName,operation:s.action,args:s.args})),transaction:o?{isolationLevel:o.kind===\"batch\"?o.isolationLevel:void 0}:void 0},__internalParams:e,query(s,a=e){let u=a.customDataProxyFetch;return a.customDataProxyFetch=Zo(i,u),Yo(a,t,r+1,n)}})}var Ho=e=>e;function Zo(e=Ho,t=Ho){return r=>e(t(r))}d();c();p();f();m();d();c();p();f();m();function es(e,t,r){let n=Ee(r);return!t.result||!(t.result.$allModels||t.result[n])?e:Nl({...e,...Xo(t.name,e,t.result.$allModels),...Xo(t.name,e,t.result[n])})}function Nl(e){let t=new de,r=(n,i)=>t.getOrCreate(n,()=>i.has(n)?[n]:(i.add(n),e[n]?e[n].needs.flatMap(o=>r(o,i)):[n]));return ot(e,n=>({...n,needs:r(n.name,new Set)}))}function Xo(e,t,r){return r?ot(r,({needs:n,compute:i},o)=>({name:o,needs:n?Object.keys(n).filter(s=>n[s]):[],compute:_l(t,o,i)})):{}}function _l(e,t,r){var i;let n=(i=e==null?void 0:e[t])==null?void 0:i.compute;return n?o=>r({...o,[t]:n(o)}):r}function ts(e,t){if(!t)return e;let r={...e};for(let n of Object.values(t))if(e[n.name])for(let i of n.needs)r[i]=!0;return r}function rs(e,t){if(!t)return e;let r={...e};for(let n of Object.values(t))if(!e[n.name])for(let i of n.needs)delete r[i];return r}var kr=class{constructor(t,r){this.extension=t;this.previous=r;this.computedFieldsCache=new de;this.modelExtensionsCache=new de;this.queryCallbacksCache=new de;this.clientExtensions=Dt(()=>{var t,r;return this.extension.client?{...(r=this.previous)==null?void 0:r.getAllClientExtensions(),...this.extension.client}:(t=this.previous)==null?void 0:t.getAllClientExtensions()});this.batchCallbacks=Dt(()=>{var n,i,o;let t=(i=(n=this.previous)==null?void 0:n.getAllBatchQueryCallbacks())!=null?i:[],r=(o=this.extension.query)==null?void 0:o.$__internalBatch;return r?t.concat(r):t})}getAllComputedFields(t){return this.computedFieldsCache.getOrCreate(t,()=>{var r;return es((r=this.previous)==null?void 0:r.getAllComputedFields(t),this.extension,t)})}getAllClientExtensions(){return this.clientExtensions.get()}getAllModelExtensions(t){return this.modelExtensionsCache.getOrCreate(t,()=>{var n,i;let r=Ee(t);return!this.extension.model||!(this.extension.model[r]||this.extension.model.$allModels)?(n=this.previous)==null?void 0:n.getAllModelExtensions(t):{...(i=this.previous)==null?void 0:i.getAllModelExtensions(t),...this.extension.model.$allModels,...this.extension.model[r]}})}getAllQueryCallbacks(t,r){return this.queryCallbacksCache.getOrCreate(`${t}:${r}`,()=>{var s,a;let n=(a=(s=this.previous)==null?void 0:s.getAllQueryCallbacks(t,r))!=null?a:[],i=[],o=this.extension.query;return!o||!(o[t]||o.$allModels||o[r]||o.$allOperations)?n:(o[t]!==void 0&&(o[t][r]!==void 0&&i.push(o[t][r]),o[t].$allOperations!==void 0&&i.push(o[t].$allOperations)),t!==\"$none\"&&o.$allModels!==void 0&&(o.$allModels[r]!==void 0&&i.push(o.$allModels[r]),o.$allModels.$allOperations!==void 0&&i.push(o.$allModels.$allOperations)),o[r]!==void 0&&i.push(o[r]),o.$allOperations!==void 0&&i.push(o.$allOperations),n.concat(i))})}getAllBatchQueryCallbacks(){return this.batchCallbacks.get()}},Or=class e{constructor(t){this.head=t}static empty(){return new e}static single(t){return new e(new kr(t))}isEmpty(){return this.head===void 0}append(t){return new e(new kr(t,this.head))}getAllComputedFields(t){var r;return(r=this.head)==null?void 0:r.getAllComputedFields(t)}getAllClientExtensions(){var t;return(t=this.head)==null?void 0:t.getAllClientExtensions()}getAllModelExtensions(t){var r;return(r=this.head)==null?void 0:r.getAllModelExtensions(t)}getAllQueryCallbacks(t,r){var n,i;return(i=(n=this.head)==null?void 0:n.getAllQueryCallbacks(t,r))!=null?i:[]}getAllBatchQueryCallbacks(){var t,r;return(r=(t=this.head)==null?void 0:t.getAllBatchQueryCallbacks())!=null?r:[]}};d();c();p();f();m();var ns=re(\"prisma:client\"),is={Vercel:\"vercel\",\"Netlify CI\":\"netlify\"};function os({postinstall:e,ciName:t,clientVersion:r}){if(ns(\"checkPlatformCaching:postinstall\",e),ns(\"checkPlatformCaching:ciName\",t),e===!0&&t&&t in is){let n=`Prisma has detected that this project was built on ${t}, which caches dependencies. This leads to an outdated Prisma Client because Prisma's auto-generation isn't triggered. To fix this, make sure to run the \\`prisma generate\\` command during the build process.\n\nLearn how: https://pris.ly/d/${is[t]}-build`;throw console.error(n),new G(n,r)}}d();c();p();f();m();function ss(e,t){return e?e.datasources?e.datasources:e.datasourceUrl?{[t[0]]:{url:e.datasourceUrl}}:{}:{}}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();var Fl=\"Cloudflare-Workers\",Ll=\"node\";function as(){var e,t,r;return typeof Netlify==\"object\"?\"netlify\":typeof EdgeRuntime==\"string\"?\"edge-light\":((e=globalThis.navigator)==null?void 0:e.userAgent)===Fl?\"workerd\":globalThis.Deno?\"deno\":globalThis.__lagon__?\"lagon\":((r=(t=globalThis.process)==null?void 0:t.release)==null?void 0:r.name)===Ll?\"node\":globalThis.Bun?\"bun\":globalThis.fastly?\"fastly\":\"unknown\"}var Bl={node:\"Node.js\",workerd:\"Cloudflare Workers\",deno:\"Deno and Deno Deploy\",netlify:\"Netlify Edge Functions\",\"edge-light\":\"Vercel Edge Functions or Edge Middleware\"};function Mr(){let e=as();return{id:e,prettyName:Bl[e]||e,isEdge:[\"workerd\",\"deno\",\"netlify\",\"edge-light\"].includes(e)}}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();function wt({inlineDatasources:e,overrideDatasources:t,env:r,clientVersion:n}){var u,l;let i,o=Object.keys(e)[0],s=(u=e[o])==null?void 0:u.url,a=(l=t[o])==null?void 0:l.url;if(o===void 0?i=void 0:a?i=a:s!=null&&s.value?i=s.value:s!=null&&s.fromEnvVar&&(i=r[s.fromEnvVar]),(s==null?void 0:s.fromEnvVar)!==void 0&&i===void 0)throw Mr().id===\"workerd\"?new G(`error: Environment variable not found: ${s.fromEnvVar}.\n\nIn Cloudflare module Workers, environment variables are available only in the Worker's \\`env\\` parameter of \\`fetch\\`.\nTo solve this, provide the connection string directly: https://pris.ly/d/cloudflare-datasource-url`,n):new G(`error: Environment variable not found: ${s.fromEnvVar}.`,n);if(i===void 0)throw new G(\"error: Missing URL environment variable, value, or override.\",n);return i}d();c();p();f();m();d();c();p();f();m();var Nr=class extends Error{constructor(t,r){super(t),this.clientVersion=r.clientVersion,this.cause=r.cause}get[Symbol.toStringTag](){return this.name}};var ue=class extends Nr{constructor(t,r){var n;super(t,r),this.isRetryable=(n=r.isRetryable)!=null?n:!0}};d();c();p();f();m();d();c();p();f();m();function $(e,t){return{...e,isRetryable:t}}var Et=class extends ue{constructor(r){super(\"This request must be retried\",$(r,!0));this.name=\"ForcedRetryError\";this.code=\"P5001\"}};_(Et,\"ForcedRetryError\");d();c();p();f();m();var He=class extends ue{constructor(r,n){super(r,$(n,!1));this.name=\"InvalidDatasourceError\";this.code=\"P6001\"}};_(He,\"InvalidDatasourceError\");d();c();p();f();m();var We=class extends ue{constructor(r,n){super(r,$(n,!1));this.name=\"NotImplementedYetError\";this.code=\"P5004\"}};_(We,\"NotImplementedYetError\");d();c();p();f();m();d();c();p();f();m();var j=class extends ue{constructor(t,r){super(t,r),this.response=r.response;let n=this.response.headers.get(\"prisma-request-id\");if(n){let i=`(The request id was: ${n})`;this.message=this.message+\" \"+i}}};var Ke=class extends j{constructor(r){super(\"Schema needs to be uploaded\",$(r,!0));this.name=\"SchemaMissingError\";this.code=\"P5005\"}};_(Ke,\"SchemaMissingError\");d();c();p();f();m();d();c();p();f();m();var kn=\"This request could not be understood by the server\",Vt=class extends j{constructor(r,n,i){super(n||kn,$(r,!1));this.name=\"BadRequestError\";this.code=\"P5000\";i&&(this.code=i)}};_(Vt,\"BadRequestError\");d();c();p();f();m();var jt=class extends j{constructor(r,n){super(\"Engine not started: healthcheck timeout\",$(r,!0));this.name=\"HealthcheckTimeoutError\";this.code=\"P5013\";this.logs=n}};_(jt,\"HealthcheckTimeoutError\");d();c();p();f();m();var Jt=class extends j{constructor(r,n,i){super(n,$(r,!0));this.name=\"EngineStartupError\";this.code=\"P5014\";this.logs=i}};_(Jt,\"EngineStartupError\");d();c();p();f();m();var Qt=class extends j{constructor(r){super(\"Engine version is not supported\",$(r,!1));this.name=\"EngineVersionNotSupportedError\";this.code=\"P5012\"}};_(Qt,\"EngineVersionNotSupportedError\");d();c();p();f();m();var On=\"Request timed out\",Gt=class extends j{constructor(r,n=On){super(n,$(r,!1));this.name=\"GatewayTimeoutError\";this.code=\"P5009\"}};_(Gt,\"GatewayTimeoutError\");d();c();p();f();m();var $l=\"Interactive transaction error\",Ht=class extends j{constructor(r,n=$l){super(n,$(r,!1));this.name=\"InteractiveTransactionError\";this.code=\"P5015\"}};_(Ht,\"InteractiveTransactionError\");d();c();p();f();m();var ql=\"Request parameters are invalid\",Wt=class extends j{constructor(r,n=ql){super(n,$(r,!1));this.name=\"InvalidRequestError\";this.code=\"P5011\"}};_(Wt,\"InvalidRequestError\");d();c();p();f();m();var Mn=\"Requested resource does not exist\",Kt=class extends j{constructor(r,n=Mn){super(n,$(r,!1));this.name=\"NotFoundError\";this.code=\"P5003\"}};_(Kt,\"NotFoundError\");d();c();p();f();m();var Nn=\"Unknown server error\",bt=class extends j{constructor(r,n,i){super(n||Nn,$(r,!0));this.name=\"ServerError\";this.code=\"P5006\";this.logs=i}};_(bt,\"ServerError\");d();c();p();f();m();var _n=\"Unauthorized, check your connection string\",zt=class extends j{constructor(r,n=_n){super(n,$(r,!1));this.name=\"UnauthorizedError\";this.code=\"P5007\"}};_(zt,\"UnauthorizedError\");d();c();p();f();m();var Fn=\"Usage exceeded, retry again later\",Yt=class extends j{constructor(r,n=Fn){super(n,$(r,!0));this.name=\"UsageExceededError\";this.code=\"P5008\"}};_(Yt,\"UsageExceededError\");async function Ul(e){let t;try{t=await e.text()}catch(r){return{type:\"EmptyError\"}}try{let r=JSON.parse(t);if(typeof r==\"string\")switch(r){case\"InternalDataProxyError\":return{type:\"DataProxyError\",body:r};default:return{type:\"UnknownTextError\",body:r}}if(typeof r==\"object\"&&r!==null){if(\"is_panic\"in r&&\"message\"in r&&\"error_code\"in r)return{type:\"QueryEngineError\",body:r};if(\"EngineNotStarted\"in r||\"InteractiveTransactionMisrouted\"in r||\"InvalidRequestError\"in r){let n=Object.values(r)[0].reason;return typeof n==\"string\"&&![\"SchemaMissing\",\"EngineVersionNotSupported\"].includes(n)?{type:\"UnknownJsonError\",body:r}:{type:\"DataProxyError\",body:r}}}return{type:\"UnknownJsonError\",body:r}}catch(r){return t===\"\"?{type:\"EmptyError\"}:{type:\"UnknownTextError\",body:t}}}async function Zt(e,t){if(e.ok)return;let r={clientVersion:t,response:e},n=await Ul(e);if(n.type===\"QueryEngineError\")throw new K(n.body.message,{code:n.body.error_code,clientVersion:t});if(n.type===\"DataProxyError\"){if(n.body===\"InternalDataProxyError\")throw new bt(r,\"Internal Data Proxy error\");if(\"EngineNotStarted\"in n.body){if(n.body.EngineNotStarted.reason===\"SchemaMissing\")return new Ke(r);if(n.body.EngineNotStarted.reason===\"EngineVersionNotSupported\")throw new Qt(r);if(\"EngineStartupError\"in n.body.EngineNotStarted.reason){let{msg:i,logs:o}=n.body.EngineNotStarted.reason.EngineStartupError;throw new Jt(r,i,o)}if(\"KnownEngineStartupError\"in n.body.EngineNotStarted.reason){let{msg:i,error_code:o}=n.body.EngineNotStarted.reason.KnownEngineStartupError;throw new G(i,t,o)}if(\"HealthcheckTimeout\"in n.body.EngineNotStarted.reason){let{logs:i}=n.body.EngineNotStarted.reason.HealthcheckTimeout;throw new jt(r,i)}}if(\"InteractiveTransactionMisrouted\"in n.body){let i={IDParseError:\"Could not parse interactive transaction ID\",NoQueryEngineFoundError:\"Could not find Query Engine for the specified host and transaction ID\",TransactionStartError:\"Could not start interactive transaction\"};throw new Ht(r,i[n.body.InteractiveTransactionMisrouted.reason])}if(\"InvalidRequestError\"in n.body)throw new Wt(r,n.body.InvalidRequestError.reason)}if(e.status===401||e.status===403)throw new zt(r,xt(_n,n));if(e.status===404)return new Kt(r,xt(Mn,n));if(e.status===429)throw new Yt(r,xt(Fn,n));if(e.status===504)throw new Gt(r,xt(On,n));if(e.status>=500)throw new bt(r,xt(Nn,n));if(e.status>=400)throw new Vt(r,xt(kn,n))}function xt(e,t){return t.type===\"EmptyError\"?e:`${e}: ${JSON.stringify(t)}`}d();c();p();f();m();function us(e){let t=Math.pow(2,e)*50,r=Math.ceil(Math.random()*t)-Math.ceil(t/2),n=t+r;return new Promise(i=>setTimeout(()=>i(n),n))}d();c();p();f();m();var Ae=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";function ls(e){let t=new TextEncoder().encode(e),r=\"\",n=t.byteLength,i=n%3,o=n-i,s,a,u,l,g;for(let h=0;h<o;h=h+3)g=t[h]<<16|t[h+1]<<8|t[h+2],s=(g&16515072)>>18,a=(g&258048)>>12,u=(g&4032)>>6,l=g&63,r+=Ae[s]+Ae[a]+Ae[u]+Ae[l];return i==1?(g=t[o],s=(g&252)>>2,a=(g&3)<<4,r+=Ae[s]+Ae[a]+\"==\"):i==2&&(g=t[o]<<8|t[o+1],s=(g&64512)>>10,a=(g&1008)>>4,u=(g&15)<<2,r+=Ae[s]+Ae[a]+Ae[u]+\"=\"),r}d();c();p();f();m();function cs(e){var r;if(!!((r=e.generator)!=null&&r.previewFeatures.some(n=>n.toLowerCase().includes(\"metrics\"))))throw new G(\"The `metrics` preview feature is not yet available with Accelerate.\\nPlease remove `metrics` from the `previewFeatures` in your schema.\\n\\nMore information about Accelerate: https://pris.ly/d/accelerate\",e.clientVersion)}d();c();p();f();m();function Vl(e){return e[0]*1e3+e[1]/1e6}function ps(e){return new Date(Vl(e))}d();c();p();f();m();var fs={\"@prisma/debug\":\"workspace:*\",\"@prisma/engines-version\":\"5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\",\"@prisma/fetch-engine\":\"workspace:*\",\"@prisma/get-platform\":\"workspace:*\"};d();c();p();f();m();d();c();p();f();m();var Xt=class extends ue{constructor(r,n){super(`Cannot fetch data from service:\n${r}`,$(n,!0));this.name=\"RequestError\";this.code=\"P5010\"}};_(Xt,\"RequestError\");async function ze(e,t,r=n=>n){var i;let n=t.clientVersion;try{return typeof fetch==\"function\"?await r(fetch)(e,t):await r(Ln)(e,t)}catch(o){let s=(i=o.message)!=null?i:\"Unknown error\";throw new Xt(s,{clientVersion:n})}}function Jl(e){return{...e.headers,\"Content-Type\":\"application/json\"}}function Ql(e){return{method:e.method,headers:Jl(e)}}function Gl(e,t){return{text:()=>Promise.resolve(w.Buffer.concat(e).toString()),json:()=>Promise.resolve().then(()=>JSON.parse(w.Buffer.concat(e).toString())),ok:t.statusCode>=200&&t.statusCode<=299,status:t.statusCode,url:t.url,headers:new Bn(t.headers)}}async function Ln(e,t={}){let r=Hl(\"https\"),n=Ql(t),i=[],{origin:o}=new URL(e);return new Promise((s,a)=>{var l;let u=r.request(e,n,g=>{let{statusCode:h,headers:{location:x}}=g;h>=301&&h<=399&&x&&(x.startsWith(\"http\")===!1?s(Ln(`${o}${x}`,t)):s(Ln(x,t))),g.on(\"data\",S=>i.push(S)),g.on(\"end\",()=>s(Gl(i,g))),g.on(\"error\",a)});u.on(\"error\",a),u.end((l=t.body)!=null?l:\"\")})}var Hl=typeof require!=\"undefined\"?require:()=>{},Bn=class{constructor(t={}){this.headers=new Map;for(let[r,n]of Object.entries(t))if(typeof n==\"string\")this.headers.set(r,n);else if(Array.isArray(n))for(let i of n)this.headers.set(r,i)}append(t,r){this.headers.set(t,r)}delete(t){this.headers.delete(t)}get(t){var r;return(r=this.headers.get(t))!=null?r:null}has(t){return this.headers.has(t)}set(t,r){this.headers.set(t,r)}forEach(t,r){for(let[n,i]of this.headers)t.call(r,i,n,this)}};var Wl=/^[1-9][0-9]*\\.[0-9]+\\.[0-9]+$/,ms=re(\"prisma:client:dataproxyEngine\");async function Kl(e,t){var s,a,u;let r=fs[\"@prisma/engines-version\"],n=(s=t.clientVersion)!=null?s:\"unknown\";if(y.env.PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION)return y.env.PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION;if(e.includes(\"accelerate\")&&n!==\"0.0.0\"&&n!==\"in-memory\")return n;let[i,o]=(a=n==null?void 0:n.split(\"-\"))!=null?a:[];if(o===void 0&&Wl.test(i))return i;if(o!==void 0||n===\"0.0.0\"||n===\"in-memory\"){if(e.startsWith(\"localhost\")||e.startsWith(\"127.0.0.1\"))return\"0.0.0\";let[l]=(u=r.split(\"-\"))!=null?u:[],[g,h,x]=l.split(\".\"),S=zl(`<=${g}.${h}.${x}`),C=await ze(S,{clientVersion:n});if(!C.ok)throw new Error(`Failed to fetch stable Prisma version, unpkg.com status ${C.status} ${C.statusText}, response body: ${await C.text()||\"<empty body>\"}`);let A=await C.text();ms(\"length of body fetched from unpkg.com\",A.length);let k;try{k=JSON.parse(A)}catch(O){throw console.error(\"JSON.parse error: body fetched from unpkg.com: \",A),O}return k.version}throw new We(\"Only `major.minor.patch` versions are supported by Accelerate.\",{clientVersion:n})}async function ds(e,t){let r=await Kl(e,t);return ms(\"version\",r),r}function zl(e){return encodeURI(`https://unpkg.com/prisma@${e}/package.json`)}var gs=3,$n=re(\"prisma:client:dataproxyEngine\"),qn=class{constructor({apiKey:t,tracingHelper:r,logLevel:n,logQueries:i,engineHash:o}){this.apiKey=t,this.tracingHelper=r,this.logLevel=n,this.logQueries=i,this.engineHash=o}build({traceparent:t,interactiveTransaction:r}={}){let n={Authorization:`Bearer ${this.apiKey}`,\"Prisma-Engine-Hash\":this.engineHash};this.tracingHelper.isEnabled()&&(n.traceparent=t!=null?t:this.tracingHelper.getTraceParent()),r&&(n[\"X-transaction-id\"]=r.id);let i=this.buildCaptureSettings();return i.length>0&&(n[\"X-capture-telemetry\"]=i.join(\", \")),n}buildCaptureSettings(){let t=[];return this.tracingHelper.isEnabled()&&t.push(\"tracing\"),this.logLevel&&t.push(this.logLevel),this.logQueries&&t.push(\"query\"),t}},er=class{constructor(t){this.name=\"DataProxyEngine\";cs(t),this.config=t,this.env={...t.env,...typeof y!=\"undefined\"?y.env:{}},this.inlineSchema=ls(t.inlineSchema),this.inlineDatasources=t.inlineDatasources,this.inlineSchemaHash=t.inlineSchemaHash,this.clientVersion=t.clientVersion,this.engineHash=t.engineVersion,this.logEmitter=t.logEmitter,this.tracingHelper=t.tracingHelper}apiKey(){return this.headerBuilder.apiKey}version(){return this.engineHash}async start(){this.startPromise!==void 0&&await this.startPromise,this.startPromise=(async()=>{let[t,r]=this.extractHostAndApiKey();this.host=t,this.headerBuilder=new qn({apiKey:r,tracingHelper:this.tracingHelper,logLevel:this.config.logLevel,logQueries:this.config.logQueries,engineHash:this.engineHash}),this.remoteClientVersion=await ds(t,this.config),$n(\"host\",this.host)})(),await this.startPromise}async stop(){}propagateResponseExtensions(t){var r,n;(r=t==null?void 0:t.logs)!=null&&r.length&&t.logs.forEach(i=>{switch(i.level){case\"debug\":case\"error\":case\"trace\":case\"warn\":case\"info\":break;case\"query\":{let o=typeof i.attributes.query==\"string\"?i.attributes.query:\"\";if(!this.tracingHelper.isEnabled()){let[s]=o.split(\"/* traceparent\");o=s}this.logEmitter.emit(\"query\",{query:o,timestamp:ps(i.timestamp),duration:Number(i.attributes.duration_ms),params:i.attributes.params,target:i.attributes.target})}}}),(n=t==null?void 0:t.traces)!=null&&n.length&&this.tracingHelper.createEngineSpan({span:!0,spans:t.traces})}onBeforeExit(){throw new Error('\"beforeExit\" hook is not applicable to the remote query engine')}async url(t){return await this.start(),`https://${this.host}/${this.remoteClientVersion}/${this.inlineSchemaHash}/${t}`}async uploadSchema(){let t={name:\"schemaUpload\",internal:!0};return this.tracingHelper.runInChildSpan(t,async()=>{let r=await ze(await this.url(\"schema\"),{method:\"PUT\",headers:this.headerBuilder.build(),body:this.inlineSchema,clientVersion:this.clientVersion});r.ok||$n(\"schema response status\",r.status);let n=await Zt(r,this.clientVersion);if(n)throw this.logEmitter.emit(\"warn\",{message:`Error while uploading schema: ${n.message}`,timestamp:new Date,target:\"\"}),n;this.logEmitter.emit(\"info\",{message:`Schema (re)uploaded (hash: ${this.inlineSchemaHash})`,timestamp:new Date,target:\"\"})})}request(t,{traceparent:r,interactiveTransaction:n,customDataProxyFetch:i}){return this.requestInternal({body:t,traceparent:r,interactiveTransaction:n,customDataProxyFetch:i})}async requestBatch(t,{traceparent:r,transaction:n,customDataProxyFetch:i}){let o=(n==null?void 0:n.kind)===\"itx\"?n.options:void 0,s=dr(t,n),{batchResult:a,elapsed:u}=await this.requestInternal({body:s,customDataProxyFetch:i,interactiveTransaction:o,traceparent:r});return a.map(l=>\"errors\"in l&&l.errors.length>0?$t(l.errors[0],this.clientVersion,this.config.activeProvider):{data:l,elapsed:u})}requestInternal({body:t,traceparent:r,customDataProxyFetch:n,interactiveTransaction:i}){return this.withRetry({actionGerund:\"querying\",callback:async({logHttpCall:o})=>{let s=i?`${i.payload.endpoint}/graphql`:await this.url(\"graphql\");o(s);let a=await ze(s,{method:\"POST\",headers:this.headerBuilder.build({traceparent:r,interactiveTransaction:i}),body:JSON.stringify(t),clientVersion:this.clientVersion},n);a.ok||$n(\"graphql response status\",a.status),await this.handleError(await Zt(a,this.clientVersion));let u=await a.json(),l=u.extensions;if(l&&this.propagateResponseExtensions(l),u.errors)throw u.errors.length===1?$t(u.errors[0],this.config.clientVersion,this.config.activeProvider):new oe(u.errors,{clientVersion:this.config.clientVersion});return u}})}async transaction(t,r,n){let i={start:\"starting\",commit:\"committing\",rollback:\"rolling back\"};return this.withRetry({actionGerund:`${i[t]} transaction`,callback:async({logHttpCall:o})=>{if(t===\"start\"){let s=JSON.stringify({max_wait:n.maxWait,timeout:n.timeout,isolation_level:n.isolationLevel}),a=await this.url(\"transaction/start\");o(a);let u=await ze(a,{method:\"POST\",headers:this.headerBuilder.build({traceparent:r.traceparent}),body:s,clientVersion:this.clientVersion});await this.handleError(await Zt(u,this.clientVersion));let l=await u.json(),g=l.extensions;g&&this.propagateResponseExtensions(g);let h=l.id,x=l[\"data-proxy\"].endpoint;return{id:h,payload:{endpoint:x}}}else{let s=`${n.payload.endpoint}/${t}`;o(s);let a=await ze(s,{method:\"POST\",headers:this.headerBuilder.build({traceparent:r.traceparent}),clientVersion:this.clientVersion});await this.handleError(await Zt(a,this.clientVersion));let l=(await a.json()).extensions;l&&this.propagateResponseExtensions(l);return}}})}extractHostAndApiKey(){let t={clientVersion:this.clientVersion},r=Object.keys(this.inlineDatasources)[0],n=wt({inlineDatasources:this.inlineDatasources,overrideDatasources:this.config.overrideDatasources,clientVersion:this.clientVersion,env:this.env}),i;try{i=new URL(n)}catch(l){throw new He(`Error validating datasource \\`${r}\\`: the URL must start with the protocol \\`prisma://\\``,t)}let{protocol:o,host:s,searchParams:a}=i;if(o!==\"prisma:\")throw new He(`Error validating datasource \\`${r}\\`: the URL must start with the protocol \\`prisma://\\``,t);let u=a.get(\"api_key\");if(u===null||u.length<1)throw new He(`Error validating datasource \\`${r}\\`: the URL must contain a valid API key`,t);return[s,u]}metrics(){throw new We(\"Metrics are not yet supported for Accelerate\",{clientVersion:this.clientVersion})}async withRetry(t){var r;for(let n=0;;n++){let i=o=>{this.logEmitter.emit(\"info\",{message:`Calling ${o} (n=${n})`,timestamp:new Date,target:\"\"})};try{return await t.callback({logHttpCall:i})}catch(o){if(!(o instanceof ue)||!o.isRetryable)throw o;if(n>=gs)throw o instanceof Et?o.cause:o;this.logEmitter.emit(\"warn\",{message:`Attempt ${n+1}/${gs} failed for ${t.actionGerund}: ${(r=o.message)!=null?r:\"(unknown)\"}`,timestamp:new Date,target:\"\"});let s=await us(n);this.logEmitter.emit(\"warn\",{message:`Retrying after ${s}ms`,timestamp:new Date,target:\"\"})}}}async handleError(t){if(t instanceof Ke)throw await this.uploadSchema(),new Et({clientVersion:this.clientVersion,cause:t});if(t)throw t}applyPendingMigrations(){throw new Error(\"Method not implemented.\")}};function hs({copyEngine:e=!0},t){let r;try{r=wt({inlineDatasources:t.inlineDatasources,overrideDatasources:t.overrideDatasources,env:{...t.env,...y.env},clientVersion:t.clientVersion})}catch(u){}e&&(r!=null&&r.startsWith(\"prisma://\"))&&It(\"recommend--no-engine\",\"In production, we recommend using `prisma generate --no-engine` (See: `prisma generate --help`)\");let n=Rt(t.generator),i=!!(r!=null&&r.startsWith(\"prisma://\")||!e),o=!!t.adapter,s=n===\"library\",a=n===\"binary\";if(i&&o||o){let u;throw u=[\"Prisma Client was configured to use the `adapter` option but it was imported via its `/edge` endpoint.\",\"Please either remove the `/edge` endpoint or remove the `adapter` from the Prisma Client constructor.\"],new Y(u.join(`\n`),{clientVersion:t.clientVersion})}if(i)return new er(t);throw new Y(\"Invalid client engine type, please use `library` or `binary`\",{clientVersion:t.clientVersion})}d();c();p();f();m();function _r({generator:e}){var t;return(t=e==null?void 0:e.previewFeatures)!=null?t:[]}d();c();p();f();m();d();c();p();f();m();d();c();p();f();m();var Ps=Ue(Un());d();c();p();f();m();function bs(e,t){let r=xs(e),n=Yl(r),i=Xl(n);i?Fr(i,t):t.addErrorMessage(()=>\"Unknown error\")}function xs(e){return e.errors.flatMap(t=>t.kind===\"Union\"?xs(t):[t])}function Yl(e){let t=new Map,r=[];for(let n of e){if(n.kind!==\"InvalidArgumentType\"){r.push(n);continue}let i=`${n.selectionPath.join(\".\")}:${n.argumentPath.join(\".\")}`,o=t.get(i);o?t.set(i,{...n,argument:{...n.argument,typeNames:Zl(o.argument.typeNames,n.argument.typeNames)}}):t.set(i,n)}return r.push(...t.values()),r}function Zl(e,t){return[...new Set(e.concat(t))]}function Xl(e){return pn(e,(t,r)=>{let n=ws(t),i=ws(r);return n!==i?n-i:Es(t)-Es(r)})}function ws(e){let t=0;return Array.isArray(e.selectionPath)&&(t+=e.selectionPath.length),Array.isArray(e.argumentPath)&&(t+=e.argumentPath.length),t}function Es(e){switch(e.kind){case\"InvalidArgumentValue\":case\"ValueTooLarge\":return 20;case\"InvalidArgumentType\":return 10;case\"RequiredArgumentMissing\":return-10;default:return 0}}d();c();p();f();m();var le=class{constructor(t,r){this.name=t;this.value=r;this.isRequired=!1}makeRequired(){return this.isRequired=!0,this}write(t){let{colors:{green:r}}=t.context;t.addMarginSymbol(r(this.isRequired?\"+\":\"?\")),t.write(r(this.name)),this.isRequired||t.write(r(\"?\")),t.write(r(\": \")),typeof this.value==\"string\"?t.write(r(this.value)):t.write(this.value)}};d();c();p();f();m();var Lr=class{constructor(){this.fields=[]}addField(t,r){return this.fields.push({write(n){let{green:i,dim:o}=n.context.colors;n.write(i(o(`${t}: ${r}`))).addMarginSymbol(i(o(\"+\")))}}),this}write(t){let{colors:{green:r}}=t.context;t.writeLine(r(\"{\")).withIndent(()=>{t.writeJoined(dt,this.fields).newLine()}).write(r(\"}\")).addMarginSymbol(r(\"+\"))}};function Fr(e,t){switch(e.kind){case\"MutuallyExclusiveFields\":ec(e,t);break;case\"IncludeOnScalar\":tc(e,t);break;case\"EmptySelection\":rc(e,t);break;case\"UnknownSelectionField\":oc(e,t);break;case\"UnknownArgument\":sc(e,t);break;case\"UnknownInputField\":ac(e,t);break;case\"RequiredArgumentMissing\":uc(e,t);break;case\"InvalidArgumentType\":lc(e,t);break;case\"InvalidArgumentValue\":cc(e,t);break;case\"ValueTooLarge\":pc(e,t);break;case\"SomeFieldsMissing\":fc(e,t);break;case\"TooManyFieldsGiven\":mc(e,t);break;case\"Union\":bs(e,t);break;default:throw new Error(\"not implemented: \"+e.kind)}}function ec(e,t){var n,i,o;let r=(n=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:n.asObject();r&&((i=r.getField(e.firstField))==null||i.markAsError(),(o=r.getField(e.secondField))==null||o.markAsError()),t.addErrorMessage(s=>`Please ${s.bold(\"either\")} use ${s.green(`\\`${e.firstField}\\``)} or ${s.green(`\\`${e.secondField}\\``)}, but ${s.red(\"not both\")} at the same time.`)}function tc(e,t){var s,a;let[r,n]=Br(e.selectionPath),i=e.outputType,o=(s=t.arguments.getDeepSelectionParent(r))==null?void 0:s.value;if(o&&((a=o.getField(n))==null||a.markAsError(),i))for(let u of i.fields)u.isRelation&&o.addSuggestion(new le(u.name,\"true\"));t.addErrorMessage(u=>{let l=`Invalid scalar field ${u.red(`\\`${n}\\``)} for ${u.bold(\"include\")} statement`;return i?l+=` on model ${u.bold(i.name)}. ${tr(u)}`:l+=\".\",l+=`\nNote that ${u.bold(\"include\")} statements only accept relation fields.`,l})}function rc(e,t){var n,i;let r=(n=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:n.asObject();if(r){let o=(i=r.getField(\"omit\"))==null?void 0:i.value.asObject();if(o){nc(e,t,o);return}}ic(e,t)}function nc(e,t,r){r.removeAllFields();for(let n of e.outputType.fields)r.addSuggestion(new le(n.name,\"false\"));t.addErrorMessage(n=>`The ${n.red(\"omit\")} statement includes every field of the model ${n.bold(e.outputType.name)}. At least one field must be included in the result`)}function ic(e,t){var o,s;let r=e.outputType,n=(o=t.arguments.getDeepSelectionParent(e.selectionPath))==null?void 0:o.value,i=(s=n==null?void 0:n.isEmpty())!=null?s:!1;n&&(n.removeAllFields(),Cs(n,r)),t.addErrorMessage(a=>i?`The ${a.red(\"`select`\")} statement for type ${a.bold(r.name)} must not be empty. ${tr(a)}`:`The ${a.red(\"`select`\")} statement for type ${a.bold(r.name)} needs ${a.bold(\"at least one truthy value\")}.`)}function oc(e,t){var s,a,u,l,g,h,x;let[r,n]=Br(e.selectionPath),i=(s=t.arguments.getDeepSubSelectionValue(r))==null?void 0:s.asObject(),o;if(i){let S=(a=i.getFieldValue(\"select\"))==null?void 0:a.asObject(),C=(u=i.getFieldValue(\"include\"))==null?void 0:u.asObject(),A=(l=i.getFieldValue(\"omit\"))==null?void 0:l.asObject();S!=null&&S.hasField(n)?(o=\"select\",(g=S.getField(n))==null||g.markAsError(),Cs(S,e.outputType)):C!=null&&C.hasField(n)?(o=\"include\",(h=C.getField(n))==null||h.markAsError(),dc(C,e.outputType)):A!=null&&A.hasField(n)&&(o=\"omit\",(x=A.getField(n))==null||x.markAsError(),gc(A,e.outputType))}t.addErrorMessage(S=>{let C=[`Unknown field ${S.red(`\\`${n}\\``)}`];return o&&C.push(`for ${S.bold(o)} statement`),C.push(`on model ${S.bold(`\\`${e.outputType.name}\\``)}.`),C.push(tr(S)),C.join(\" \")})}function sc(e,t){var i,o;let r=e.argumentPath[0],n=(i=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:i.asObject();n&&((o=n.getField(r))==null||o.markAsError(),hc(n,e.arguments)),t.addErrorMessage(s=>vs(s,r,e.arguments.map(a=>a.name)))}function ac(e,t){var o,s,a;let[r,n]=Br(e.argumentPath),i=(o=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:o.asObject();if(i){(s=i.getDeepField(e.argumentPath))==null||s.markAsError();let u=(a=i.getDeepFieldValue(r))==null?void 0:a.asObject();u&&As(u,e.inputType)}t.addErrorMessage(u=>vs(u,n,e.inputType.fields.map(l=>l.name)))}function vs(e,t,r){let n=[`Unknown argument \\`${e.red(t)}\\`.`],i=wc(t,r);return i&&n.push(`Did you mean \\`${e.green(i)}\\`?`),r.length>0&&n.push(tr(e)),n.join(\" \")}function uc(e,t){var u,l;let r;t.addErrorMessage(g=>(r==null?void 0:r.value)instanceof z&&r.value.text===\"null\"?`Argument \\`${g.green(o)}\\` must not be ${g.red(\"null\")}.`:`Argument \\`${g.green(o)}\\` is missing.`);let n=(u=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:u.asObject();if(!n)return;let[i,o]=Br(e.argumentPath),s=new Lr,a=(l=n.getDeepFieldValue(i))==null?void 0:l.asObject();if(a)if(r=a.getField(o),r&&a.removeField(o),e.inputTypes.length===1&&e.inputTypes[0].kind===\"object\"){for(let g of e.inputTypes[0].fields)s.addField(g.name,g.typeNames.join(\" | \"));a.addSuggestion(new le(o,s).makeRequired())}else{let g=e.inputTypes.map(Ts).join(\" | \");a.addSuggestion(new le(o,g).makeRequired())}}function Ts(e){return e.kind===\"list\"?`${Ts(e.elementType)}[]`:e.name}function lc(e,t){var i,o;let r=e.argument.name,n=(i=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:i.asObject();n&&((o=n.getDeepFieldValue(e.argumentPath))==null||o.markAsError()),t.addErrorMessage(s=>{let a=$r(\"or\",e.argument.typeNames.map(u=>s.green(u)));return`Argument \\`${s.bold(r)}\\`: Invalid value provided. Expected ${a}, provided ${s.red(e.inferredType)}.`})}function cc(e,t){var i,o;let r=e.argument.name,n=(i=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:i.asObject();n&&((o=n.getDeepFieldValue(e.argumentPath))==null||o.markAsError()),t.addErrorMessage(s=>{let a=[`Invalid value for argument \\`${s.bold(r)}\\``];if(e.underlyingError&&a.push(`: ${e.underlyingError}`),a.push(\".\"),e.argument.typeNames.length>0){let u=$r(\"or\",e.argument.typeNames.map(l=>s.green(l)));a.push(` Expected ${u}.`)}return a.join(\"\")})}function pc(e,t){var o;let r=e.argument.name,n=(o=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:o.asObject(),i;if(n){let s=n.getDeepField(e.argumentPath),a=s==null?void 0:s.value;a==null||a.markAsError(),a instanceof z&&(i=a.text)}t.addErrorMessage(s=>{let a=[\"Unable to fit value\"];return i&&a.push(s.red(i)),a.push(`into a 64-bit signed integer for field \\`${s.bold(r)}\\``),a.join(\" \")})}function fc(e,t){var i,o;let r=e.argumentPath[e.argumentPath.length-1],n=(i=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:i.asObject();if(n){let s=(o=n.getDeepFieldValue(e.argumentPath))==null?void 0:o.asObject();s&&As(s,e.inputType)}t.addErrorMessage(s=>{let a=[`Argument \\`${s.bold(r)}\\` of type ${s.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1?e.constraints.requiredFields?a.push(`${s.green(\"at least one of\")} ${$r(\"or\",e.constraints.requiredFields.map(u=>`\\`${s.bold(u)}\\``))} arguments.`):a.push(`${s.green(\"at least one\")} argument.`):a.push(`${s.green(`at least ${e.constraints.minFieldCount}`)} arguments.`),a.push(tr(s)),a.join(\" \")})}function mc(e,t){var o,s;let r=e.argumentPath[e.argumentPath.length-1],n=(o=t.arguments.getDeepSubSelectionValue(e.selectionPath))==null?void 0:o.asObject(),i=[];if(n){let a=(s=n.getDeepFieldValue(e.argumentPath))==null?void 0:s.asObject();a&&(a.markAsError(),i=Object.keys(a.getFields()))}t.addErrorMessage(a=>{let u=[`Argument \\`${a.bold(r)}\\` of type ${a.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1&&e.constraints.maxFieldCount==1?u.push(`${a.green(\"exactly one\")} argument,`):e.constraints.maxFieldCount==1?u.push(`${a.green(\"at most one\")} argument,`):u.push(`${a.green(`at most ${e.constraints.maxFieldCount}`)} arguments,`),u.push(`but you provided ${$r(\"and\",i.map(l=>a.red(l)))}. Please choose`),e.constraints.maxFieldCount===1?u.push(\"one.\"):u.push(`${e.constraints.maxFieldCount}.`),u.join(\" \")})}function Cs(e,t){for(let r of t.fields)e.hasField(r.name)||e.addSuggestion(new le(r.name,\"true\"))}function dc(e,t){for(let r of t.fields)r.isRelation&&!e.hasField(r.name)&&e.addSuggestion(new le(r.name,\"true\"))}function gc(e,t){for(let r of t.fields)!e.hasField(r.name)&&!r.isRelation&&e.addSuggestion(new le(r.name,\"true\"))}function hc(e,t){for(let r of t)e.hasField(r.name)||e.addSuggestion(new le(r.name,r.typeNames.join(\" | \")))}function As(e,t){if(t.kind===\"object\")for(let r of t.fields)e.hasField(r.name)||e.addSuggestion(new le(r.name,r.typeNames.join(\" | \")))}function Br(e){let t=[...e],r=t.pop();if(!r)throw new Error(\"unexpected empty path\");return[t,r]}function tr({green:e,enabled:t}){return\"Available options are \"+(t?`listed in ${e(\"green\")}`:\"marked with ?\")+\".\"}function $r(e,t){if(t.length===1)return t[0];let r=[...t],n=r.pop();return`${r.join(\", \")} ${e} ${n}`}var yc=3;function wc(e,t){let r=1/0,n;for(let i of t){let o=(0,Ps.default)(e,i);o>yc||o<r&&(r=o,n=i)}return n}function qr({args:e,errors:t,errorFormat:r,callsite:n,originalMethod:i,clientVersion:o}){let s=Sr(e);for(let h of t)Fr(h,s);let a=r===\"pretty\"?Ao:Cr,u=s.renderAllMessages(a),l=new ut(0,{colors:a}).write(s).toString(),g=yt({message:u,callsite:n,originalMethod:i,showColors:r===\"pretty\",callArguments:l});throw new Y(g,{clientVersion:o})}var Ec={findUnique:\"findUnique\",findUniqueOrThrow:\"findUniqueOrThrow\",findFirst:\"findFirst\",findFirstOrThrow:\"findFirstOrThrow\",findMany:\"findMany\",count:\"aggregate\",create:\"createOne\",createMany:\"createMany\",createManyAndReturn:\"createManyAndReturn\",update:\"updateOne\",updateMany:\"updateMany\",upsert:\"upsertOne\",delete:\"deleteOne\",deleteMany:\"deleteMany\",executeRaw:\"executeRaw\",queryRaw:\"queryRaw\",aggregate:\"aggregate\",groupBy:\"groupBy\",runCommandRaw:\"runCommandRaw\",findRaw:\"findRaw\",aggregateRaw:\"aggregateRaw\"};function Rs({modelName:e,action:t,args:r,runtimeDataModel:n,extensions:i,callsite:o,clientMethod:s,errorFormat:a,clientVersion:u,previewFeatures:l}){let g=new Vn({runtimeDataModel:n,modelName:e,action:t,rootArgs:r,callsite:o,extensions:i,selectionPath:[],argumentPath:[],originalMethod:s,errorFormat:a,clientVersion:u,previewFeatures:l});return{modelName:e,action:Ec[t],query:jn(r,g)}}function jn({select:e,include:t,...r}={},n){let i;return n.isPreviewFeatureOn(\"omitApi\")&&(i=r.omit,delete r.omit),{arguments:Is(r,n),selection:bc(e,t,i,n)}}function bc(e,t,r,n){return e?(t?n.throwValidationError({kind:\"MutuallyExclusiveFields\",firstField:\"include\",secondField:\"select\",selectionPath:n.getSelectionPath()}):r&&n.isPreviewFeatureOn(\"omitApi\")&&n.throwValidationError({kind:\"MutuallyExclusiveFields\",firstField:\"omit\",secondField:\"select\",selectionPath:n.getSelectionPath()}),Tc(e,n)):xc(n,t,r)}function xc(e,t,r){let n={};return e.model&&!e.isRawAction()&&(n.$composites=!0,n.$scalars=!0),t&&Pc(n,t,e),r&&e.isPreviewFeatureOn(\"omitApi\")&&vc(n,r,e),n}function Pc(e,t,r){for(let[n,i]of Object.entries(t)){let o=r.findField(n);o&&(o==null?void 0:o.kind)!==\"object\"&&r.throwValidationError({kind:\"IncludeOnScalar\",selectionPath:r.getSelectionPath().concat(n),outputType:r.getOutputTypeDescription()}),i===!0?e[n]=!0:typeof i==\"object\"&&(e[n]=jn(i,r.nestSelection(n)))}}function vc(e,t,r){let n=r.getComputedFields(),i=rs(t,n);for(let[o,s]of Object.entries(i)){let a=r.findField(o);n!=null&&n[o]&&!a||(e[o]=!s)}}function Tc(e,t){let r={},n=t.getComputedFields(),i=ts(e,n);for(let[o,s]of Object.entries(i)){let a=t.findField(o);n!=null&&n[o]&&!a||(s===!0?r[o]=!0:typeof s==\"object\"&&(r[o]=jn(s,t.nestSelection(o))))}return r}function Ss(e,t){if(e===null)return null;if(typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\")return e;if(typeof e==\"bigint\")return{$type:\"BigInt\",value:String(e)};if(lt(e)){if(gr(e))return{$type:\"DateTime\",value:e.toISOString()};t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:t.getSelectionPath(),argumentPath:t.getArgumentPath(),argument:{name:t.getArgumentName(),typeNames:[\"Date\"]},underlyingError:\"Provided Date object is invalid\"})}if(mt(e))return{$type:\"FieldRef\",value:{_ref:e.name,_container:e.modelName}};if(Array.isArray(e))return Cc(e,t);if(ArrayBuffer.isView(e))return{$type:\"Bytes\",value:w.Buffer.from(e).toString(\"base64\")};if(Ac(e))return e.values;if(ft(e))return{$type:\"Decimal\",value:e.toFixed()};if(e instanceof Te){if(e!==pr.instances[e._getName()])throw new Error(\"Invalid ObjectEnumValue\");return{$type:\"Enum\",value:e._getName()}}if(Rc(e))return e.toJSON();if(typeof e==\"object\")return Is(e,t);t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:t.getSelectionPath(),argumentPath:t.getArgumentPath(),argument:{name:t.getArgumentName(),typeNames:[]},underlyingError:`We could not serialize ${Object.prototype.toString.call(e)} value. Serialize the object to JSON or implement a \".toJSON()\" method on it`})}function Is(e,t){if(e.$type)return{$type:\"Raw\",value:e};let r={};for(let n in e){let i=e[n];i!==void 0&&(r[n]=Ss(i,t.nestArgument(n)))}return r}function Cc(e,t){let r=[];for(let n=0;n<e.length;n++){let i=t.nestArgument(String(n)),o=e[n];o===void 0&&t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:i.getSelectionPath(),argumentPath:i.getArgumentPath(),argument:{name:`${t.getArgumentName()}[${n}]`,typeNames:[]},underlyingError:\"Can not use `undefined` value within array. Use `null` or filter out `undefined` values\"}),r.push(Ss(o,i))}return r}function Ac(e){return typeof e==\"object\"&&e!==null&&e.__prismaRawParameters__===!0}function Rc(e){return typeof e==\"object\"&&e!==null&&typeof e.toJSON==\"function\"}var Vn=class e{constructor(t){this.params=t;this.params.modelName&&(this.model=this.params.runtimeDataModel.models[this.params.modelName])}throwValidationError(t){var r;qr({errors:[t],originalMethod:this.params.originalMethod,args:(r=this.params.rootArgs)!=null?r:{},callsite:this.params.callsite,errorFormat:this.params.errorFormat,clientVersion:this.params.clientVersion})}getSelectionPath(){return this.params.selectionPath}getArgumentPath(){return this.params.argumentPath}getArgumentName(){return this.params.argumentPath[this.params.argumentPath.length-1]}getOutputTypeDescription(){if(!(!this.params.modelName||!this.model))return{name:this.params.modelName,fields:this.model.fields.map(t=>({name:t.name,typeName:\"boolean\",isRelation:t.kind===\"object\"}))}}isRawAction(){return[\"executeRaw\",\"queryRaw\",\"runCommandRaw\",\"findRaw\",\"aggregateRaw\"].includes(this.params.action)}isPreviewFeatureOn(t){return this.params.previewFeatures.includes(t)}getComputedFields(){if(this.params.modelName)return this.params.extensions.getAllComputedFields(this.params.modelName)}findField(t){var r;return(r=this.model)==null?void 0:r.fields.find(n=>n.name===t)}nestSelection(t){let r=this.findField(t),n=(r==null?void 0:r.kind)===\"object\"?r.type:void 0;return new e({...this.params,modelName:n,selectionPath:this.params.selectionPath.concat(t)})}nestArgument(t){return new e({...this.params,argumentPath:this.params.argumentPath.concat(t)})}};d();c();p();f();m();var Ds=e=>({command:e});d();c();p();f();m();d();c();p();f();m();var ks=e=>e.strings.reduce((t,r,n)=>`${t}@P${n}${r}`);d();c();p();f();m();function rr(e){try{return Os(e,\"fast\")}catch(t){return Os(e,\"slow\")}}function Os(e,t){return JSON.stringify(e.map(r=>Sc(r,t)))}function Sc(e,t){return typeof e==\"bigint\"?{prisma__type:\"bigint\",prisma__value:e.toString()}:lt(e)?{prisma__type:\"date\",prisma__value:e.toJSON()}:ye.isDecimal(e)?{prisma__type:\"decimal\",prisma__value:e.toJSON()}:w.Buffer.isBuffer(e)?{prisma__type:\"bytes\",prisma__value:e.toString(\"base64\")}:Ic(e)||ArrayBuffer.isView(e)?{prisma__type:\"bytes\",prisma__value:w.Buffer.from(e).toString(\"base64\")}:typeof e==\"object\"&&t===\"slow\"?Ns(e):e}function Ic(e){return e instanceof ArrayBuffer||e instanceof SharedArrayBuffer?!0:typeof e==\"object\"&&e!==null?e[Symbol.toStringTag]===\"ArrayBuffer\"||e[Symbol.toStringTag]===\"SharedArrayBuffer\":!1}function Ns(e){if(typeof e!=\"object\"||e===null)return e;if(typeof e.toJSON==\"function\")return e.toJSON();if(Array.isArray(e))return e.map(Ms);let t={};for(let r of Object.keys(e))t[r]=Ms(e[r]);return t}function Ms(e){return typeof e==\"bigint\"?e.toString():Ns(e)}var Dc=/^(\\s*alter\\s)/i,_s=re(\"prisma:client\");function Jn(e,t,r,n){if(!(e!==\"postgresql\"&&e!==\"cockroachdb\")&&r.length>0&&Dc.exec(t))throw new Error(`Running ALTER using ${n} is not supported\nUsing the example below you can still execute your query with Prisma, but please note that it is vulnerable to SQL injection attacks and requires you to take care of input sanitization.\n\nExample:\n  await prisma.$executeRawUnsafe(\\`ALTER USER prisma WITH PASSWORD '\\${password}'\\`)\n\nMore Information: https://pris.ly/d/execute-raw\n`)}var Qn=({clientMethod:e,activeProvider:t})=>r=>{let n=\"\",i;if(Array.isArray(r)){let[o,...s]=r;n=o,i={values:rr(s||[]),__prismaRawParameters__:!0}}else switch(t){case\"sqlite\":case\"mysql\":{n=r.sql,i={values:rr(r.values),__prismaRawParameters__:!0};break}case\"cockroachdb\":case\"postgresql\":case\"postgres\":{n=r.text,i={values:rr(r.values),__prismaRawParameters__:!0};break}case\"sqlserver\":{n=ks(r),i={values:rr(r.values),__prismaRawParameters__:!0};break}default:throw new Error(`The ${t} provider does not support ${e}`)}return i!=null&&i.values?_s(`prisma.${e}(${n}, ${i.values})`):_s(`prisma.${e}(${n})`),{query:n,parameters:i}},Fs={requestArgsToMiddlewareArgs(e){return[e.strings,...e.values]},middlewareArgsToRequestArgs(e){let[t,...r]=e;return new se(t,r)}},Ls={requestArgsToMiddlewareArgs(e){return[e]},middlewareArgsToRequestArgs(e){return e[0]}};d();c();p();f();m();function Gn(e){return function(r){let n,i=(o=e)=>{try{return o===void 0||(o==null?void 0:o.kind)===\"itx\"?n!=null?n:n=Bs(r(o)):Bs(r(o))}catch(s){return Promise.reject(s)}};return{then(o,s){return i().then(o,s)},catch(o){return i().catch(o)},finally(o){return i().finally(o)},requestTransaction(o){let s=i(o);return s.requestTransaction?s.requestTransaction(o):s},[Symbol.toStringTag]:\"PrismaPromise\"}}}function Bs(e){return typeof e.then==\"function\"?e:Promise.resolve(e)}d();c();p();f();m();var $s={isEnabled(){return!1},getTraceParent(){return\"00-10-10-00\"},async createEngineSpan(){},getActiveContext(){},runInChildSpan(e,t){return t()}},Hn=class{isEnabled(){return this.getGlobalTracingHelper().isEnabled()}getTraceParent(t){return this.getGlobalTracingHelper().getTraceParent(t)}createEngineSpan(t){return this.getGlobalTracingHelper().createEngineSpan(t)}getActiveContext(){return this.getGlobalTracingHelper().getActiveContext()}runInChildSpan(t,r){return this.getGlobalTracingHelper().runInChildSpan(t,r)}getGlobalTracingHelper(){var t,r;return(r=(t=globalThis.PRISMA_INSTRUMENTATION)==null?void 0:t.helper)!=null?r:$s}};function qs(e){return e.includes(\"tracing\")?new Hn:$s}d();c();p();f();m();function Us(e,t=()=>{}){let r,n=new Promise(i=>r=i);return{then(i){return--e===0&&r(t()),i==null?void 0:i(n)}}}d();c();p();f();m();var kc=[\"$connect\",\"$disconnect\",\"$on\",\"$transaction\",\"$use\",\"$extends\"],Vs=kc;d();c();p();f();m();function js(e){return typeof e==\"string\"?e:e.reduce((t,r)=>{let n=typeof r==\"string\"?r:r.level;return n===\"query\"?t:t&&(r===\"info\"||t===\"info\")?\"info\":n},void 0)}d();c();p();f();m();var Ur=class{constructor(){this._middlewares=[]}use(t){this._middlewares.push(t)}get(t){return this._middlewares[t]}has(t){return!!this._middlewares[t]}length(){return this._middlewares.length}};d();c();p();f();m();var Qs=Ue(eo());d();c();p();f();m();function Vr(e){return typeof e.batchRequestIdx==\"number\"}d();c();p();f();m();function jr(e){return e===null?e:Array.isArray(e)?e.map(jr):typeof e==\"object\"?Oc(e)?Mc(e):ot(e,jr):e}function Oc(e){return e!==null&&typeof e==\"object\"&&typeof e.$type==\"string\"}function Mc({$type:e,value:t}){switch(e){case\"BigInt\":return BigInt(t);case\"Bytes\":return w.Buffer.from(t,\"base64\");case\"DateTime\":return new Date(t);case\"Decimal\":return new ye(t);case\"Json\":return JSON.parse(t);default:je(t,\"Unknown tagged value\")}}d();c();p();f();m();function Js(e){if(e.action!==\"findUnique\"&&e.action!==\"findUniqueOrThrow\")return;let t=[];return e.modelName&&t.push(e.modelName),e.query.arguments&&t.push(Wn(e.query.arguments)),t.push(Wn(e.query.selection)),t.join(\"\")}function Wn(e){return`(${Object.keys(e).sort().map(r=>{let n=e[r];return typeof n==\"object\"&&n!==null?`(${r} ${Wn(n)})`:r}).join(\" \")})`}d();c();p();f();m();var Nc={aggregate:!1,aggregateRaw:!1,createMany:!0,createManyAndReturn:!0,createOne:!0,deleteMany:!0,deleteOne:!0,executeRaw:!0,findFirst:!1,findFirstOrThrow:!1,findMany:!1,findRaw:!1,findUnique:!1,findUniqueOrThrow:!1,groupBy:!1,queryRaw:!1,runCommandRaw:!0,updateMany:!0,updateOne:!0,upsertOne:!0};function Kn(e){return Nc[e]}d();c();p();f();m();var Jr=class{constructor(t){this.options=t;this.tickActive=!1;this.batches={}}request(t){let r=this.options.batchBy(t);return r?(this.batches[r]||(this.batches[r]=[],this.tickActive||(this.tickActive=!0,y.nextTick(()=>{this.dispatchBatches(),this.tickActive=!1}))),new Promise((n,i)=>{this.batches[r].push({request:t,resolve:n,reject:i})})):this.options.singleLoader(t)}dispatchBatches(){for(let t in this.batches){let r=this.batches[t];delete this.batches[t],r.length===1?this.options.singleLoader(r[0].request).then(n=>{n instanceof Error?r[0].reject(n):r[0].resolve(n)}).catch(n=>{r[0].reject(n)}):(r.sort((n,i)=>this.options.batchOrder(n.request,i.request)),this.options.batchLoader(r.map(n=>n.request)).then(n=>{if(n instanceof Error)for(let i=0;i<r.length;i++)r[i].reject(n);else for(let i=0;i<r.length;i++){let o=n[i];o instanceof Error?r[i].reject(o):r[i].resolve(o)}}).catch(n=>{for(let i=0;i<r.length;i++)r[i].reject(n)}))}}get[Symbol.toStringTag](){return\"DataLoader\"}};var _c=re(\"prisma:client:request_handler\"),Qr=class{constructor(t,r){this.logEmitter=r,this.client=t,this.dataloader=new Jr({batchLoader:zo(async({requests:n,customDataProxyFetch:i})=>{let{transaction:o,otelParentCtx:s}=n[0],a=n.map(h=>h.protocolQuery),u=this.client._tracingHelper.getTraceParent(s),l=n.some(h=>Kn(h.protocolQuery.action));return(await this.client._engine.requestBatch(a,{traceparent:u,transaction:Fc(o),containsWrite:l,customDataProxyFetch:i})).map((h,x)=>{if(h instanceof Error)return h;try{return this.mapQueryEngineResult(n[x],h)}catch(S){return S}})}),singleLoader:async n=>{var s;let i=((s=n.transaction)==null?void 0:s.kind)===\"itx\"?Gs(n.transaction):void 0,o=await this.client._engine.request(n.protocolQuery,{traceparent:this.client._tracingHelper.getTraceParent(),interactiveTransaction:i,isWrite:Kn(n.protocolQuery.action),customDataProxyFetch:n.customDataProxyFetch});return this.mapQueryEngineResult(n,o)},batchBy:n=>{var i;return(i=n.transaction)!=null&&i.id?`transaction-${n.transaction.id}`:Js(n.protocolQuery)},batchOrder(n,i){var o,s;return((o=n.transaction)==null?void 0:o.kind)===\"batch\"&&((s=i.transaction)==null?void 0:s.kind)===\"batch\"?n.transaction.index-i.transaction.index:0}})}async request(t){try{return await this.dataloader.request(t)}catch(r){let{clientMethod:n,callsite:i,transaction:o,args:s,modelName:a}=t;this.handleAndLogRequestError({error:r,clientMethod:n,callsite:i,transaction:o,args:s,modelName:a})}}mapQueryEngineResult({dataPath:t,unpacker:r},n){let i=n==null?void 0:n.data,o=n==null?void 0:n.elapsed,s=this.unpack(i,t,r);return y.env.PRISMA_CLIENT_GET_TIME?{data:s,elapsed:o}:s}handleAndLogRequestError(t){try{this.handleRequestError(t)}catch(r){throw this.logEmitter&&this.logEmitter.emit(\"error\",{message:r.message,target:t.clientMethod,timestamp:new Date}),r}}handleRequestError({error:t,clientMethod:r,callsite:n,transaction:i,args:o,modelName:s}){if(_c(t),Lc(t,i)||t instanceof Pe)throw t;if(t instanceof K&&Bc(t)){let u=Hs(t.meta);qr({args:o,errors:[u],callsite:n,errorFormat:this.client._errorFormat,originalMethod:r,clientVersion:this.client._clientVersion})}let a=t.message;if(n&&(a=yt({callsite:n,originalMethod:r,isPanic:t.isPanic,showColors:this.client._errorFormat===\"pretty\",message:a})),a=this.sanitizeMessage(a),t.code){let u=s?{modelName:s,...t.meta}:t.meta;throw new K(a,{code:t.code,clientVersion:this.client._clientVersion,meta:u,batchRequestIdx:t.batchRequestIdx})}else{if(t.isPanic)throw new ve(a,this.client._clientVersion);if(t instanceof oe)throw new oe(a,{clientVersion:this.client._clientVersion,batchRequestIdx:t.batchRequestIdx});if(t instanceof G)throw new G(a,this.client._clientVersion);if(t instanceof ve)throw new ve(a,this.client._clientVersion)}throw t.clientVersion=this.client._clientVersion,t}sanitizeMessage(t){return this.client._errorFormat&&this.client._errorFormat!==\"pretty\"?(0,Qs.default)(t):t}unpack(t,r,n){if(!t||(t.data&&(t=t.data),!t))return t;let i=Object.values(t)[0],o=r.filter(a=>a!==\"select\"&&a!==\"include\"),s=jr(Rn(i,o));return n?n(s):s}get[Symbol.toStringTag](){return\"RequestHandler\"}};function Fc(e){if(e){if(e.kind===\"batch\")return{kind:\"batch\",options:{isolationLevel:e.isolationLevel}};if(e.kind===\"itx\")return{kind:\"itx\",options:Gs(e)};je(e,\"Unknown transaction kind\")}}function Gs(e){return{id:e.id,payload:e.payload}}function Lc(e,t){return Vr(e)&&(t==null?void 0:t.kind)===\"batch\"&&e.batchRequestIdx!==t.index}function Bc(e){return e.code===\"P2009\"||e.code===\"P2012\"}function Hs(e){if(e.kind===\"Union\")return{kind:\"Union\",errors:e.errors.map(Hs)};if(Array.isArray(e.selectionPath)){let[,...t]=e.selectionPath;return{...e,selectionPath:t}}return e}d();c();p();f();m();var Ws=\"5.15.0\";var Ks=Ws;d();c();p();f();m();function zs(e){return e.map(t=>{let r={};for(let n of Object.keys(t))r[n]=Ys(t[n]);return r})}function Ys({prisma__type:e,prisma__value:t}){switch(e){case\"bigint\":return BigInt(t);case\"bytes\":return w.Buffer.from(t,\"base64\");case\"decimal\":return new ye(t);case\"datetime\":case\"date\":return new Date(t);case\"time\":return new Date(`1970-01-01T${t}Z`);case\"array\":return t.map(Ys);default:return t}}d();c();p();f();m();var ta=Ue(Un());d();c();p();f();m();var J=class extends Error{constructor(t){super(t+`\nRead more at https://pris.ly/d/client-constructor`),this.name=\"PrismaClientConstructorValidationError\"}get[Symbol.toStringTag](){return\"PrismaClientConstructorValidationError\"}};_(J,\"PrismaClientConstructorValidationError\");var Zs=[\"datasources\",\"datasourceUrl\",\"errorFormat\",\"adapter\",\"log\",\"transactionOptions\",\"__internal\"],Xs=[\"pretty\",\"colorless\",\"minimal\"],ea=[\"info\",\"query\",\"warn\",\"error\"],qc={datasources:(e,{datasourceNames:t})=>{if(e){if(typeof e!=\"object\"||Array.isArray(e))throw new J(`Invalid value ${JSON.stringify(e)} for \"datasources\" provided to PrismaClient constructor`);for(let[r,n]of Object.entries(e)){if(!t.includes(r)){let i=Pt(r,t)||` Available datasources: ${t.join(\", \")}`;throw new J(`Unknown datasource ${r} provided to PrismaClient constructor.${i}`)}if(typeof n!=\"object\"||Array.isArray(n))throw new J(`Invalid value ${JSON.stringify(e)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`);if(n&&typeof n==\"object\")for(let[i,o]of Object.entries(n)){if(i!==\"url\")throw new J(`Invalid value ${JSON.stringify(e)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`);if(typeof o!=\"string\")throw new J(`Invalid value ${JSON.stringify(o)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`)}}}},adapter:(e,t)=>{if(e===null)return;if(e===void 0)throw new J('\"adapter\" property must not be undefined, use null to conditionally disable driver adapters.');if(!_r(t).includes(\"driverAdapters\"))throw new J('\"adapter\" property can only be provided to PrismaClient constructor when \"driverAdapters\" preview feature is enabled.');if(Rt()===\"binary\")throw new J('Cannot use a driver adapter with the \"binary\" Query Engine. Please use the \"library\" Query Engine.')},datasourceUrl:e=>{if(typeof e!=\"undefined\"&&typeof e!=\"string\")throw new J(`Invalid value ${JSON.stringify(e)} for \"datasourceUrl\" provided to PrismaClient constructor.\nExpected string or undefined.`)},errorFormat:e=>{if(e){if(typeof e!=\"string\")throw new J(`Invalid value ${JSON.stringify(e)} for \"errorFormat\" provided to PrismaClient constructor.`);if(!Xs.includes(e)){let t=Pt(e,Xs);throw new J(`Invalid errorFormat ${e} provided to PrismaClient constructor.${t}`)}}},log:e=>{if(!e)return;if(!Array.isArray(e))throw new J(`Invalid value ${JSON.stringify(e)} for \"log\" provided to PrismaClient constructor.`);function t(r){if(typeof r==\"string\"&&!ea.includes(r)){let n=Pt(r,ea);throw new J(`Invalid log level \"${r}\" provided to PrismaClient constructor.${n}`)}}for(let r of e){t(r);let n={level:t,emit:i=>{let o=[\"stdout\",\"event\"];if(!o.includes(i)){let s=Pt(i,o);throw new J(`Invalid value ${JSON.stringify(i)} for \"emit\" in logLevel provided to PrismaClient constructor.${s}`)}}};if(r&&typeof r==\"object\")for(let[i,o]of Object.entries(r))if(n[i])n[i](o);else throw new J(`Invalid property ${i} for \"log\" provided to PrismaClient constructor`)}},transactionOptions:e=>{if(!e)return;let t=e.maxWait;if(t!=null&&t<=0)throw new J(`Invalid value ${t} for maxWait in \"transactionOptions\" provided to PrismaClient constructor. maxWait needs to be greater than 0`);let r=e.timeout;if(r!=null&&r<=0)throw new J(`Invalid value ${r} for timeout in \"transactionOptions\" provided to PrismaClient constructor. timeout needs to be greater than 0`)},__internal:e=>{if(!e)return;let t=[\"debug\",\"engine\",\"configOverride\"];if(typeof e!=\"object\")throw new J(`Invalid value ${JSON.stringify(e)} for \"__internal\" to PrismaClient constructor`);for(let[r]of Object.entries(e))if(!t.includes(r)){let n=Pt(r,t);throw new J(`Invalid property ${JSON.stringify(r)} for \"__internal\" provided to PrismaClient constructor.${n}`)}}};function ra(e,t){for(let[r,n]of Object.entries(e)){if(!Zs.includes(r)){let i=Pt(r,Zs);throw new J(`Unknown property ${r} provided to PrismaClient constructor.${i}`)}qc[r](n,t)}if(e.datasourceUrl&&e.datasources)throw new J('Can not use \"datasourceUrl\" and \"datasources\" options at the same time. Pick one of them')}function Pt(e,t){if(t.length===0||typeof e!=\"string\")return\"\";let r=Uc(e,t);return r?` Did you mean \"${r}\"?`:\"\"}function Uc(e,t){if(t.length===0)return null;let r=t.map(i=>({value:i,distance:(0,ta.default)(e,i)}));r.sort((i,o)=>i.distance<o.distance?-1:1);let n=r[0];return n.distance<3?n.value:null}d();c();p();f();m();function na(e){return e.length===0?Promise.resolve([]):new Promise((t,r)=>{let n=new Array(e.length),i=null,o=!1,s=0,a=()=>{o||(s++,s===e.length&&(o=!0,i?r(i):t(n)))},u=l=>{o||(o=!0,r(l))};for(let l=0;l<e.length;l++)e[l].then(g=>{n[l]=g,a()},g=>{if(!Vr(g)){u(g);return}g.batchRequestIdx===l?u(g):(i||(i=g),a())})})}var Le=re(\"prisma:client\");typeof globalThis==\"object\"&&(globalThis.NODE_CLIENT=!0);var Vc={requestArgsToMiddlewareArgs:e=>e,middlewareArgsToRequestArgs:e=>e},jc=Symbol.for(\"prisma.client.transaction.id\"),Jc={id:0,nextId(){return++this.id}};function sa(e){class t{constructor(n){this._originalClient=this;this._middlewares=new Ur;this._createPrismaPromise=Gn();this.$extends=Vo;var u,l,g,h,x,S,C,A,k,O,B,M,I,X;e=(g=(l=(u=n==null?void 0:n.__internal)==null?void 0:u.configOverride)==null?void 0:l.call(u,e))!=null?g:e,os(e),n&&ra(n,e);let i=n!=null&&n.adapter?hn(n.adapter):void 0,o=new lr().on(\"error\",()=>{});this._extensions=Or.empty(),this._previewFeatures=_r(e),this._clientVersion=(h=e.clientVersion)!=null?h:Ks,this._activeProvider=e.activeProvider,this._tracingHelper=qs(this._previewFeatures);let s={rootEnvPath:e.relativeEnvPaths.rootEnvPath&&At.resolve(e.dirname,e.relativeEnvPaths.rootEnvPath),schemaEnvPath:e.relativeEnvPaths.schemaEnvPath&&At.resolve(e.dirname,e.relativeEnvPaths.schemaEnvPath)},a=(x=e.injectableEdgeEnv)==null?void 0:x.call(e);try{let L=n!=null?n:{},Ye=(S=L.__internal)!=null?S:{},Be=Ye.debug===!0;Be&&re.enable(\"prisma:client\");let fe=At.resolve(e.dirname,e.relativePath);bi.existsSync(fe)||(fe=e.dirname),Le(\"dirname\",e.dirname),Le(\"relativePath\",e.relativePath),Le(\"cwd\",fe);let $e=Ye.engine||{};if(L.errorFormat?this._errorFormat=L.errorFormat:y.env.NODE_ENV===\"production\"?this._errorFormat=\"minimal\":y.env.NO_COLOR?this._errorFormat=\"colorless\":this._errorFormat=\"colorless\",this._runtimeDataModel=e.runtimeDataModel,this._engineConfig={cwd:fe,dirname:e.dirname,enableDebugLogs:Be,allowTriggerPanic:$e.allowTriggerPanic,datamodelPath:At.join(e.dirname,(C=e.filename)!=null?C:\"schema.prisma\"),prismaPath:(A=$e.binaryPath)!=null?A:void 0,engineEndpoint:$e.endpoint,generator:e.generator,showColors:this._errorFormat===\"pretty\",logLevel:L.log&&js(L.log),logQueries:L.log&&!!(typeof L.log==\"string\"?L.log===\"query\":L.log.find(Q=>typeof Q==\"string\"?Q===\"query\":Q.level===\"query\")),env:(k=a==null?void 0:a.parsed)!=null?k:{},flags:[],engineWasm:e.engineWasm,clientVersion:e.clientVersion,engineVersion:e.engineVersion,previewFeatures:this._previewFeatures,activeProvider:e.activeProvider,inlineSchema:e.inlineSchema,overrideDatasources:ss(L,e.datasourceNames),inlineDatasources:e.inlineDatasources,inlineSchemaHash:e.inlineSchemaHash,tracingHelper:this._tracingHelper,transactionOptions:{maxWait:(B=(O=L.transactionOptions)==null?void 0:O.maxWait)!=null?B:2e3,timeout:(I=(M=L.transactionOptions)==null?void 0:M.timeout)!=null?I:5e3,isolationLevel:(X=L.transactionOptions)==null?void 0:X.isolationLevel},logEmitter:o,isBundled:e.isBundled,adapter:i},this._accelerateEngineConfig={...this._engineConfig,accelerateUtils:{resolveDatasourceUrl:wt,getBatchRequestPayload:dr,prismaGraphQLToJSError:$t,PrismaClientUnknownRequestError:oe,PrismaClientInitializationError:G,PrismaClientKnownRequestError:K,debug:re(\"prisma:client:accelerateEngine\"),engineVersion:oa.version,clientVersion:e.clientVersion}},Le(\"clientVersion\",e.clientVersion),this._engine=hs(e,this._engineConfig),this._requestHandler=new Qr(this,o),L.log)for(let Q of L.log){let Re=typeof Q==\"string\"?Q:Q.emit===\"stdout\"?Q.level:null;Re&&this.$on(Re,qe=>{var Ze;it.log(`${(Ze=it.tags[Re])!=null?Ze:\"\"}`,qe.message||qe.query)})}this._metrics=new st(this._engine)}catch(L){throw L.clientVersion=this._clientVersion,L}return this._appliedParent=qt(this)}get[Symbol.toStringTag](){return\"PrismaClient\"}$use(n){this._middlewares.use(n)}$on(n,i){n===\"beforeExit\"?this._engine.onBeforeExit(i):n&&this._engineConfig.logEmitter.on(n,i)}$connect(){try{return this._engine.start()}catch(n){throw n.clientVersion=this._clientVersion,n}}async $disconnect(){try{await this._engine.stop()}catch(n){throw n.clientVersion=this._clientVersion,n}finally{ji()}}$executeRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:\"executeRaw\",args:o,transaction:n,clientMethod:i,argsMapper:Qn({clientMethod:i,activeProvider:a}),callsite:Fe(this._errorFormat),dataPath:[],middlewareArgsMapper:s})}$executeRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0){let[s,a]=ia(n,i);return Jn(this._activeProvider,s.text,s.values,Array.isArray(n)?\"prisma.$executeRaw`<SQL>`\":\"prisma.$executeRaw(sql`<SQL>`)\"),this.$executeRawInternal(o,\"$executeRaw\",s,a)}throw new Y(\"`$executeRaw` is a tag function, please use it like the following:\\n```\\nconst result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`\\n```\\n\\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#executeraw\\n\",{clientVersion:this._clientVersion})})}$executeRawUnsafe(n,...i){return this._createPrismaPromise(o=>(Jn(this._activeProvider,n,i,\"prisma.$executeRawUnsafe(<SQL>, [...values])\"),this.$executeRawInternal(o,\"$executeRawUnsafe\",[n,...i])))}$runCommandRaw(n){if(e.activeProvider!==\"mongodb\")throw new Y(`The ${e.activeProvider} provider does not support $runCommandRaw. Use the mongodb provider.`,{clientVersion:this._clientVersion});return this._createPrismaPromise(i=>this._request({args:n,clientMethod:\"$runCommandRaw\",dataPath:[],action:\"runCommandRaw\",argsMapper:Ds,callsite:Fe(this._errorFormat),transaction:i}))}async $queryRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:\"queryRaw\",args:o,transaction:n,clientMethod:i,argsMapper:Qn({clientMethod:i,activeProvider:a}),callsite:Fe(this._errorFormat),dataPath:[],middlewareArgsMapper:s}).then(zs)}$queryRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0)return this.$queryRawInternal(o,\"$queryRaw\",...ia(n,i));throw new Y(\"`$queryRaw` is a tag function, please use it like the following:\\n```\\nconst result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`\\n```\\n\\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#queryraw\\n\",{clientVersion:this._clientVersion})})}$queryRawUnsafe(n,...i){return this._createPrismaPromise(o=>this.$queryRawInternal(o,\"$queryRawUnsafe\",[n,...i]))}_transactionWithArray({promises:n,options:i}){let o=Jc.nextId(),s=Us(n.length),a=n.map((u,l)=>{var x,S,C;if((u==null?void 0:u[Symbol.toStringTag])!==\"PrismaPromise\")throw new Error(\"All elements of the array need to be Prisma Client promises. Hint: Please make sure you are not awaiting the Prisma client calls you intended to pass in the $transaction function.\");let g=(x=i==null?void 0:i.isolationLevel)!=null?x:this._engineConfig.transactionOptions.isolationLevel,h={kind:\"batch\",id:o,index:l,isolationLevel:g,lock:s};return(C=(S=u.requestTransaction)==null?void 0:S.call(u,h))!=null?C:u});return na(a)}async _transactionWithCallback({callback:n,options:i}){var l,g,h;let o={traceparent:this._tracingHelper.getTraceParent()},s={maxWait:(l=i==null?void 0:i.maxWait)!=null?l:this._engineConfig.transactionOptions.maxWait,timeout:(g=i==null?void 0:i.timeout)!=null?g:this._engineConfig.transactionOptions.timeout,isolationLevel:(h=i==null?void 0:i.isolationLevel)!=null?h:this._engineConfig.transactionOptions.isolationLevel},a=await this._engine.transaction(\"start\",o,s),u;try{let x={kind:\"itx\",...a};u=await n(this._createItxClient(x)),await this._engine.transaction(\"commit\",o,a)}catch(x){throw await this._engine.transaction(\"rollback\",o,a).catch(()=>{}),x}return u}_createItxClient(n){return qt(ge(Uo(this),[ne(\"_appliedParent\",()=>this._appliedParent._createItxClient(n)),ne(\"_createPrismaPromise\",()=>Gn(n)),ne(jc,()=>n.id),at(Vs)]))}$transaction(n,i){var a;let o;typeof n==\"function\"?((a=this._engineConfig.adapter)==null?void 0:a.adapterName)===\"@prisma/adapter-d1\"?o=()=>{throw new Error(\"Cloudflare D1 does not support interactive transactions. We recommend you to refactor your queries with that limitation in mind, and use batch transactions with `prisma.$transactions([])` where applicable.\")}:o=()=>this._transactionWithCallback({callback:n,options:i}):o=()=>this._transactionWithArray({promises:n,options:i});let s={name:\"transaction\",attributes:{method:\"$transaction\"}};return this._tracingHelper.runInChildSpan(s,o)}_request(n){var l;n.otelParentCtx=this._tracingHelper.getActiveContext();let i=(l=n.middlewareArgsMapper)!=null?l:Vc,o={args:i.requestArgsToMiddlewareArgs(n.args),dataPath:n.dataPath,runInTransaction:!!n.transaction,action:n.action,model:n.model},s={middleware:{name:\"middleware\",middleware:!0,attributes:{method:\"$use\"},active:!1},operation:{name:\"operation\",attributes:{method:o.action,model:o.model,name:o.model?`${o.model}.${o.action}`:o.action}}},a=-1,u=async g=>{let h=this._middlewares.get(++a);if(h)return this._tracingHelper.runInChildSpan(s.middleware,O=>h(g,B=>(O==null||O.end(),u(B))));let{runInTransaction:x,args:S,...C}=g,A={...n,...C};S&&(A.args=i.middlewareArgsToRequestArgs(S)),n.transaction!==void 0&&x===!1&&delete A.transaction;let k=await Ko(this,A);return A.model?Qo({result:k,modelName:A.model,args:A.args,extensions:this._extensions,runtimeDataModel:this._runtimeDataModel}):k};return this._tracingHelper.runInChildSpan(s.operation,()=>u(o))}async _executeRequest({args:n,clientMethod:i,dataPath:o,callsite:s,action:a,model:u,argsMapper:l,transaction:g,unpacker:h,otelParentCtx:x,customDataProxyFetch:S}){try{n=l?l(n):n;let C={name:\"serialize\"},A=this._tracingHelper.runInChildSpan(C,()=>Rs({modelName:u,runtimeDataModel:this._runtimeDataModel,action:a,args:n,clientMethod:i,callsite:s,extensions:this._extensions,errorFormat:this._errorFormat,clientVersion:this._clientVersion,previewFeatures:this._previewFeatures}));return re.enabled(\"prisma:client\")&&(Le(\"Prisma Client call:\"),Le(`prisma.${i}(${Do(n)})`),Le(\"Generated request:\"),Le(JSON.stringify(A,null,2)+`\n`)),(g==null?void 0:g.kind)===\"batch\"&&await g.lock,this._requestHandler.request({protocolQuery:A,modelName:u,action:a,clientMethod:i,dataPath:o,callsite:s,args:n,extensions:this._extensions,transaction:g,unpacker:h,otelParentCtx:x,otelChildCtx:this._tracingHelper.getActiveContext(),customDataProxyFetch:S})}catch(C){throw C.clientVersion=this._clientVersion,C}}get $metrics(){if(!this._hasPreviewFlag(\"metrics\"))throw new Y(\"`metrics` preview feature must be enabled in order to access metrics API\",{clientVersion:this._clientVersion});return this._metrics}_hasPreviewFlag(n){var i;return!!((i=this._engineConfig.previewFeatures)!=null&&i.includes(n))}$applyPendingMigrations(){return this._engine.applyPendingMigrations()}}return t}function ia(e,t){return Qc(e)?[new se(e,t),Fs]:[e,Ls]}function Qc(e){return Array.isArray(e)&&Array.isArray(e.raw)}d();c();p();f();m();var Gc=new Set([\"toJSON\",\"$$typeof\",\"asymmetricMatch\",Symbol.iterator,Symbol.toStringTag,Symbol.isConcatSpreadable,Symbol.toPrimitive]);function aa(e){return new Proxy(e,{get(t,r){if(r in t)return t[r];if(!Gc.has(r))throw new TypeError(`Invalid enum value: ${String(r)}`)}})}d();c();p();f();m();0&&(module.exports={Debug,Decimal,Extensions,MetricsClient,NotFoundError,PrismaClientInitializationError,PrismaClientKnownRequestError,PrismaClientRustPanicError,PrismaClientUnknownRequestError,PrismaClientValidationError,Public,Sql,defineDmmfProperty,empty,getPrismaClient,getRuntime,join,makeStrictEnum,objectEnumValues,raw,sqltag,warnEnvConflicts,warnOnce});\n//# sourceMappingURL=edge.js.map\n"
  },
  {
    "path": "server/src/common/prisma-client/runtime/index-browser.d.ts",
    "content": "declare class AnyNull extends NullTypesEnumValue {\r\n}\r\n\r\ndeclare type Args<T, F extends Operation> = T extends {\r\n    [K: symbol]: {\r\n        types: {\r\n            operations: {\r\n                [K in F]: {\r\n                    args: any;\r\n                };\r\n            };\r\n        };\r\n    };\r\n} ? T[symbol]['types']['operations'][F]['args'] : any;\r\n\r\ndeclare class DbNull extends NullTypesEnumValue {\r\n}\r\n\r\nexport declare namespace Decimal {\r\n    export type Constructor = typeof Decimal;\r\n    export type Instance = Decimal;\r\n    export type Rounding = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\r\n    export type Modulo = Rounding | 9;\r\n    export type Value = string | number | Decimal;\r\n\r\n    // http://mikemcl.github.io/decimal.js/#constructor-properties\r\n    export interface Config {\r\n        precision?: number;\r\n        rounding?: Rounding;\r\n        toExpNeg?: number;\r\n        toExpPos?: number;\r\n        minE?: number;\r\n        maxE?: number;\r\n        crypto?: boolean;\r\n        modulo?: Modulo;\r\n        defaults?: boolean;\r\n    }\r\n}\r\n\r\nexport declare class Decimal {\r\n    readonly d: number[];\r\n    readonly e: number;\r\n    readonly s: number;\r\n\r\n    constructor(n: Decimal.Value);\r\n\r\n    absoluteValue(): Decimal;\r\n    abs(): Decimal;\r\n\r\n    ceil(): Decimal;\r\n\r\n    clampedTo(min: Decimal.Value, max: Decimal.Value): Decimal;\r\n    clamp(min: Decimal.Value, max: Decimal.Value): Decimal;\r\n\r\n    comparedTo(n: Decimal.Value): number;\r\n    cmp(n: Decimal.Value): number;\r\n\r\n    cosine(): Decimal;\r\n    cos(): Decimal;\r\n\r\n    cubeRoot(): Decimal;\r\n    cbrt(): Decimal;\r\n\r\n    decimalPlaces(): number;\r\n    dp(): number;\r\n\r\n    dividedBy(n: Decimal.Value): Decimal;\r\n    div(n: Decimal.Value): Decimal;\r\n\r\n    dividedToIntegerBy(n: Decimal.Value): Decimal;\r\n    divToInt(n: Decimal.Value): Decimal;\r\n\r\n    equals(n: Decimal.Value): boolean;\r\n    eq(n: Decimal.Value): boolean;\r\n\r\n    floor(): Decimal;\r\n\r\n    greaterThan(n: Decimal.Value): boolean;\r\n    gt(n: Decimal.Value): boolean;\r\n\r\n    greaterThanOrEqualTo(n: Decimal.Value): boolean;\r\n    gte(n: Decimal.Value): boolean;\r\n\r\n    hyperbolicCosine(): Decimal;\r\n    cosh(): Decimal;\r\n\r\n    hyperbolicSine(): Decimal;\r\n    sinh(): Decimal;\r\n\r\n    hyperbolicTangent(): Decimal;\r\n    tanh(): Decimal;\r\n\r\n    inverseCosine(): Decimal;\r\n    acos(): Decimal;\r\n\r\n    inverseHyperbolicCosine(): Decimal;\r\n    acosh(): Decimal;\r\n\r\n    inverseHyperbolicSine(): Decimal;\r\n    asinh(): Decimal;\r\n\r\n    inverseHyperbolicTangent(): Decimal;\r\n    atanh(): Decimal;\r\n\r\n    inverseSine(): Decimal;\r\n    asin(): Decimal;\r\n\r\n    inverseTangent(): Decimal;\r\n    atan(): Decimal;\r\n\r\n    isFinite(): boolean;\r\n\r\n    isInteger(): boolean;\r\n    isInt(): boolean;\r\n\r\n    isNaN(): boolean;\r\n\r\n    isNegative(): boolean;\r\n    isNeg(): boolean;\r\n\r\n    isPositive(): boolean;\r\n    isPos(): boolean;\r\n\r\n    isZero(): boolean;\r\n\r\n    lessThan(n: Decimal.Value): boolean;\r\n    lt(n: Decimal.Value): boolean;\r\n\r\n    lessThanOrEqualTo(n: Decimal.Value): boolean;\r\n    lte(n: Decimal.Value): boolean;\r\n\r\n    logarithm(n?: Decimal.Value): Decimal;\r\n    log(n?: Decimal.Value): Decimal;\r\n\r\n    minus(n: Decimal.Value): Decimal;\r\n    sub(n: Decimal.Value): Decimal;\r\n\r\n    modulo(n: Decimal.Value): Decimal;\r\n    mod(n: Decimal.Value): Decimal;\r\n\r\n    naturalExponential(): Decimal;\r\n    exp(): Decimal;\r\n\r\n    naturalLogarithm(): Decimal;\r\n    ln(): Decimal;\r\n\r\n    negated(): Decimal;\r\n    neg(): Decimal;\r\n\r\n    plus(n: Decimal.Value): Decimal;\r\n    add(n: Decimal.Value): Decimal;\r\n\r\n    precision(includeZeros?: boolean): number;\r\n    sd(includeZeros?: boolean): number;\r\n\r\n    round(): Decimal;\r\n\r\n    sine() : Decimal;\r\n    sin() : Decimal;\r\n\r\n    squareRoot(): Decimal;\r\n    sqrt(): Decimal;\r\n\r\n    tangent() : Decimal;\r\n    tan() : Decimal;\r\n\r\n    times(n: Decimal.Value): Decimal;\r\n    mul(n: Decimal.Value) : Decimal;\r\n\r\n    toBinary(significantDigits?: number): string;\r\n    toBinary(significantDigits: number, rounding: Decimal.Rounding): string;\r\n\r\n    toDecimalPlaces(decimalPlaces?: number): Decimal;\r\n    toDecimalPlaces(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;\r\n    toDP(decimalPlaces?: number): Decimal;\r\n    toDP(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;\r\n\r\n    toExponential(decimalPlaces?: number): string;\r\n    toExponential(decimalPlaces: number, rounding: Decimal.Rounding): string;\r\n\r\n    toFixed(decimalPlaces?: number): string;\r\n    toFixed(decimalPlaces: number, rounding: Decimal.Rounding): string;\r\n\r\n    toFraction(max_denominator?: Decimal.Value): Decimal[];\r\n\r\n    toHexadecimal(significantDigits?: number): string;\r\n    toHexadecimal(significantDigits: number, rounding: Decimal.Rounding): string;\r\n    toHex(significantDigits?: number): string;\r\n    toHex(significantDigits: number, rounding?: Decimal.Rounding): string;\r\n\r\n    toJSON(): string;\r\n\r\n    toNearest(n: Decimal.Value, rounding?: Decimal.Rounding): Decimal;\r\n\r\n    toNumber(): number;\r\n\r\n    toOctal(significantDigits?: number): string;\r\n    toOctal(significantDigits: number, rounding: Decimal.Rounding): string;\r\n\r\n    toPower(n: Decimal.Value): Decimal;\r\n    pow(n: Decimal.Value): Decimal;\r\n\r\n    toPrecision(significantDigits?: number): string;\r\n    toPrecision(significantDigits: number, rounding: Decimal.Rounding): string;\r\n\r\n    toSignificantDigits(significantDigits?: number): Decimal;\r\n    toSignificantDigits(significantDigits: number, rounding: Decimal.Rounding): Decimal;\r\n    toSD(significantDigits?: number): Decimal;\r\n    toSD(significantDigits: number, rounding: Decimal.Rounding): Decimal;\r\n\r\n    toString(): string;\r\n\r\n    truncated(): Decimal;\r\n    trunc(): Decimal;\r\n\r\n    valueOf(): string;\r\n\r\n    static abs(n: Decimal.Value): Decimal;\r\n    static acos(n: Decimal.Value): Decimal;\r\n    static acosh(n: Decimal.Value): Decimal;\r\n    static add(x: Decimal.Value, y: Decimal.Value): Decimal;\r\n    static asin(n: Decimal.Value): Decimal;\r\n    static asinh(n: Decimal.Value): Decimal;\r\n    static atan(n: Decimal.Value): Decimal;\r\n    static atanh(n: Decimal.Value): Decimal;\r\n    static atan2(y: Decimal.Value, x: Decimal.Value): Decimal;\r\n    static cbrt(n: Decimal.Value): Decimal;\r\n    static ceil(n: Decimal.Value): Decimal;\r\n    static clamp(n: Decimal.Value, min: Decimal.Value, max: Decimal.Value): Decimal;\r\n    static clone(object?: Decimal.Config): Decimal.Constructor;\r\n    static config(object: Decimal.Config): Decimal.Constructor;\r\n    static cos(n: Decimal.Value): Decimal;\r\n    static cosh(n: Decimal.Value): Decimal;\r\n    static div(x: Decimal.Value, y: Decimal.Value): Decimal;\r\n    static exp(n: Decimal.Value): Decimal;\r\n    static floor(n: Decimal.Value): Decimal;\r\n    static hypot(...n: Decimal.Value[]): Decimal;\r\n    static isDecimal(object: any): object is Decimal;\r\n    static ln(n: Decimal.Value): Decimal;\r\n    static log(n: Decimal.Value, base?: Decimal.Value): Decimal;\r\n    static log2(n: Decimal.Value): Decimal;\r\n    static log10(n: Decimal.Value): Decimal;\r\n    static max(...n: Decimal.Value[]): Decimal;\r\n    static min(...n: Decimal.Value[]): Decimal;\r\n    static mod(x: Decimal.Value, y: Decimal.Value): Decimal;\r\n    static mul(x: Decimal.Value, y: Decimal.Value): Decimal;\r\n    static noConflict(): Decimal.Constructor;   // Browser only\r\n    static pow(base: Decimal.Value, exponent: Decimal.Value): Decimal;\r\n    static random(significantDigits?: number): Decimal;\r\n    static round(n: Decimal.Value): Decimal;\r\n    static set(object: Decimal.Config): Decimal.Constructor;\r\n    static sign(n: Decimal.Value): number;\r\n    static sin(n: Decimal.Value): Decimal;\r\n    static sinh(n: Decimal.Value): Decimal;\r\n    static sqrt(n: Decimal.Value): Decimal;\r\n    static sub(x: Decimal.Value, y: Decimal.Value): Decimal;\r\n    static sum(...n: Decimal.Value[]): Decimal;\r\n    static tan(n: Decimal.Value): Decimal;\r\n    static tanh(n: Decimal.Value): Decimal;\r\n    static trunc(n: Decimal.Value): Decimal;\r\n\r\n    static readonly default?: Decimal.Constructor;\r\n    static readonly Decimal?: Decimal.Constructor;\r\n\r\n    static readonly precision: number;\r\n    static readonly rounding: Decimal.Rounding;\r\n    static readonly toExpNeg: number;\r\n    static readonly toExpPos: number;\r\n    static readonly minE: number;\r\n    static readonly maxE: number;\r\n    static readonly crypto: boolean;\r\n    static readonly modulo: Decimal.Modulo;\r\n\r\n    static readonly ROUND_UP: 0;\r\n    static readonly ROUND_DOWN: 1;\r\n    static readonly ROUND_CEIL: 2;\r\n    static readonly ROUND_FLOOR: 3;\r\n    static readonly ROUND_HALF_UP: 4;\r\n    static readonly ROUND_HALF_DOWN: 5;\r\n    static readonly ROUND_HALF_EVEN: 6;\r\n    static readonly ROUND_HALF_CEIL: 7;\r\n    static readonly ROUND_HALF_FLOOR: 8;\r\n    static readonly EUCLID: 9;\r\n}\r\n\r\ndeclare type Exact<A, W> = (A extends unknown ? (W extends A ? {\r\n    [K in keyof A]: Exact<A[K], W[K]>;\r\n} : W) : never) | (A extends Narrowable ? A : never);\r\n\r\nexport declare function getRuntime(): GetRuntimeOutput;\r\n\r\ndeclare type GetRuntimeOutput = {\r\n    id: Runtime;\r\n    prettyName: string;\r\n    isEdge: boolean;\r\n};\r\n\r\ndeclare class JsonNull extends NullTypesEnumValue {\r\n}\r\n\r\n/**\r\n * Generates more strict variant of an enum which, unlike regular enum,\r\n * throws on non-existing property access. This can be useful in following situations:\r\n * - we have an API, that accepts both `undefined` and `SomeEnumType` as an input\r\n * - enum values are generated dynamically from DMMF.\r\n *\r\n * In that case, if using normal enums and no compile-time typechecking, using non-existing property\r\n * will result in `undefined` value being used, which will be accepted. Using strict enum\r\n * in this case will help to have a runtime exception, telling you that you are probably doing something wrong.\r\n *\r\n * Note: if you need to check for existence of a value in the enum you can still use either\r\n * `in` operator or `hasOwnProperty` function.\r\n *\r\n * @param definition\r\n * @returns\r\n */\r\nexport declare function makeStrictEnum<T extends Record<PropertyKey, string | number>>(definition: T): T;\r\n\r\ndeclare type Narrowable = string | number | bigint | boolean | [];\r\n\r\ndeclare class NullTypesEnumValue extends ObjectEnumValue {\r\n    _getNamespace(): string;\r\n}\r\n\r\n/**\r\n * Base class for unique values of object-valued enums.\r\n */\r\ndeclare abstract class ObjectEnumValue {\r\n    constructor(arg?: symbol);\r\n    abstract _getNamespace(): string;\r\n    _getName(): string;\r\n    toString(): string;\r\n}\r\n\r\nexport declare const objectEnumValues: {\r\n    classes: {\r\n        DbNull: typeof DbNull;\r\n        JsonNull: typeof JsonNull;\r\n        AnyNull: typeof AnyNull;\r\n    };\r\n    instances: {\r\n        DbNull: DbNull;\r\n        JsonNull: JsonNull;\r\n        AnyNull: AnyNull;\r\n    };\r\n};\r\n\r\ndeclare type Operation = 'findFirst' | 'findFirstOrThrow' | 'findUnique' | 'findUniqueOrThrow' | 'findMany' | 'create' | 'createMany' | 'createManyAndReturn' | 'update' | 'updateMany' | 'upsert' | 'delete' | 'deleteMany' | 'aggregate' | 'count' | 'groupBy' | '$queryRaw' | '$executeRaw' | '$queryRawUnsafe' | '$executeRawUnsafe' | 'findRaw' | 'aggregateRaw' | '$runCommandRaw';\r\n\r\ndeclare namespace Public {\r\n    export {\r\n        validator\r\n    }\r\n}\r\nexport { Public }\r\n\r\ndeclare type Runtime = \"edge-routine\" | \"workerd\" | \"deno\" | \"lagon\" | \"react-native\" | \"netlify\" | \"electron\" | \"node\" | \"bun\" | \"edge-light\" | \"fastly\" | \"unknown\";\r\n\r\ndeclare function validator<V>(): <S>(select: Exact<S, V>) => S;\r\n\r\ndeclare function validator<C, M extends Exclude<keyof C, `$${string}`>, O extends keyof C[M] & Operation>(client: C, model: M, operation: O): <S>(select: Exact<S, Args<C[M], O>>) => S;\r\n\r\ndeclare function validator<C, M extends Exclude<keyof C, `$${string}`>, O extends keyof C[M] & Operation, P extends keyof Args<C[M], O>>(client: C, model: M, operation: O, prop: P): <S>(select: Exact<S, Args<C[M], O>[P]>) => S;\r\n\r\nexport { }\r\n"
  },
  {
    "path": "server/src/common/prisma-client/runtime/index-browser.js",
    "content": "\"use strict\";var de=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var Je=Object.getOwnPropertyNames;var je=Object.prototype.hasOwnProperty;var Ce=(e,n)=>{for(var i in n)de(e,i,{get:n[i],enumerable:!0})},Xe=(e,n,i,t)=>{if(n&&typeof n==\"object\"||typeof n==\"function\")for(let r of Je(n))!je.call(e,r)&&r!==i&&de(e,r,{get:()=>n[r],enumerable:!(t=Ge(n,r))||t.enumerable});return e};var Ke=e=>Xe(de({},\"__esModule\",{value:!0}),e);var Xn={};Ce(Xn,{Decimal:()=>We,Public:()=>he,getRuntime:()=>Ae,makeStrictEnum:()=>Pe,objectEnumValues:()=>Oe});module.exports=Ke(Xn);var he={};Ce(he,{validator:()=>Me});function Me(...e){return n=>n}var ne=Symbol(),pe=new WeakMap,ge=class{constructor(n){n===ne?pe.set(this,\"Prisma.\".concat(this._getName())):pe.set(this,\"new Prisma.\".concat(this._getNamespace(),\".\").concat(this._getName(),\"()\"))}_getName(){return this.constructor.name}toString(){return pe.get(this)}},J=class extends ge{_getNamespace(){return\"NullTypes\"}},j=class extends J{};me(j,\"DbNull\");var X=class extends J{};me(X,\"JsonNull\");var K=class extends J{};me(K,\"AnyNull\");var Oe={classes:{DbNull:j,JsonNull:X,AnyNull:K},instances:{DbNull:new j(ne),JsonNull:new X(ne),AnyNull:new K(ne)}};function me(e,n){Object.defineProperty(e,\"name\",{value:n,configurable:!0})}var Qe=new Set([\"toJSON\",\"$$typeof\",\"asymmetricMatch\",Symbol.iterator,Symbol.toStringTag,Symbol.isConcatSpreadable,Symbol.toPrimitive]);function Pe(e){return new Proxy(e,{get(n,i){if(i in n)return n[i];if(!Qe.has(i))throw new TypeError(\"Invalid enum value: \".concat(String(i)))}})}var Ye=\"Cloudflare-Workers\",xe=\"node\";function be(){var e,n,i;return typeof Netlify==\"object\"?\"netlify\":typeof EdgeRuntime==\"string\"?\"edge-light\":((e=globalThis.navigator)==null?void 0:e.userAgent)===Ye?\"workerd\":globalThis.Deno?\"deno\":globalThis.__lagon__?\"lagon\":((i=(n=globalThis.process)==null?void 0:n.release)==null?void 0:i.name)===xe?\"node\":globalThis.Bun?\"bun\":globalThis.fastly?\"fastly\":\"unknown\"}var ze={node:\"Node.js\",workerd:\"Cloudflare Workers\",deno:\"Deno and Deno Deploy\",netlify:\"Netlify Edge Functions\",\"edge-light\":\"Vercel Edge Functions or Edge Middleware\"};function Ae(){let e=be();return{id:e,prettyName:ze[e]||e,isEdge:[\"workerd\",\"deno\",\"netlify\",\"edge-light\"].includes(e)}}var H=9e15,V=1e9,we=\"0123456789abcdef\",te=\"2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058\",re=\"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789\",Ne={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-H,maxE:H,crypto:!1},Te,Z,w=!0,oe=\"[DecimalError] \",$=oe+\"Invalid argument: \",Le=oe+\"Precision limit exceeded\",De=oe+\"crypto unavailable\",Fe=\"[object Decimal]\",A=Math.floor,M=Math.pow,ye=/^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,en=/^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,nn=/^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,Ie=/^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,D=1e7,m=7,tn=9007199254740991,rn=te.length-1,ve=re.length-1,h={toStringTag:Fe};h.absoluteValue=h.abs=function(){var e=new this.constructor(this);return e.s<0&&(e.s=1),p(e)};h.ceil=function(){return p(new this.constructor(this),this.e+1,2)};h.clampedTo=h.clamp=function(e,n){var i,t=this,r=t.constructor;if(e=new r(e),n=new r(n),!e.s||!n.s)return new r(NaN);if(e.gt(n))throw Error($+n);return i=t.cmp(e),i<0?e:t.cmp(n)>0?n:new r(t)};h.comparedTo=h.cmp=function(e){var n,i,t,r,s=this,o=s.d,u=(e=new s.constructor(e)).d,l=s.s,f=e.s;if(!o||!u)return!l||!f?NaN:l!==f?l:o===u?0:!o^l<0?1:-1;if(!o[0]||!u[0])return o[0]?l:u[0]?-f:0;if(l!==f)return l;if(s.e!==e.e)return s.e>e.e^l<0?1:-1;for(t=o.length,r=u.length,n=0,i=t<r?t:r;n<i;++n)if(o[n]!==u[n])return o[n]>u[n]^l<0?1:-1;return t===r?0:t>r^l<0?1:-1};h.cosine=h.cos=function(){var e,n,i=this,t=i.constructor;return i.d?i.d[0]?(e=t.precision,n=t.rounding,t.precision=e+Math.max(i.e,i.sd())+m,t.rounding=1,i=sn(t,Ve(t,i)),t.precision=e,t.rounding=n,p(Z==2||Z==3?i.neg():i,e,n,!0)):new t(1):new t(NaN)};h.cubeRoot=h.cbrt=function(){var e,n,i,t,r,s,o,u,l,f,c=this,a=c.constructor;if(!c.isFinite()||c.isZero())return new a(c);for(w=!1,s=c.s*M(c.s*c,1/3),!s||Math.abs(s)==1/0?(i=O(c.d),e=c.e,(s=(e-i.length+1)%3)&&(i+=s==1||s==-2?\"0\":\"00\"),s=M(i,1/3),e=A((e+1)/3)-(e%3==(e<0?-1:2)),s==1/0?i=\"5e\"+e:(i=s.toExponential(),i=i.slice(0,i.indexOf(\"e\")+1)+e),t=new a(i),t.s=c.s):t=new a(s.toString()),o=(e=a.precision)+3;;)if(u=t,l=u.times(u).times(u),f=l.plus(c),t=S(f.plus(c).times(u),f.plus(l),o+2,1),O(u.d).slice(0,o)===(i=O(t.d)).slice(0,o))if(i=i.slice(o-3,o+1),i==\"9999\"||!r&&i==\"4999\"){if(!r&&(p(u,e+1,0),u.times(u).times(u).eq(c))){t=u;break}o+=4,r=1}else{(!+i||!+i.slice(1)&&i.charAt(0)==\"5\")&&(p(t,e+1,1),n=!t.times(t).times(t).eq(c));break}return w=!0,p(t,e,a.rounding,n)};h.decimalPlaces=h.dp=function(){var e,n=this.d,i=NaN;if(n){if(e=n.length-1,i=(e-A(this.e/m))*m,e=n[e],e)for(;e%10==0;e/=10)i--;i<0&&(i=0)}return i};h.dividedBy=h.div=function(e){return S(this,new this.constructor(e))};h.dividedToIntegerBy=h.divToInt=function(e){var n=this,i=n.constructor;return p(S(n,new i(e),0,1,1),i.precision,i.rounding)};h.equals=h.eq=function(e){return this.cmp(e)===0};h.floor=function(){return p(new this.constructor(this),this.e+1,3)};h.greaterThan=h.gt=function(e){return this.cmp(e)>0};h.greaterThanOrEqualTo=h.gte=function(e){var n=this.cmp(e);return n==1||n===0};h.hyperbolicCosine=h.cosh=function(){var e,n,i,t,r,s=this,o=s.constructor,u=new o(1);if(!s.isFinite())return new o(s.s?1/0:NaN);if(s.isZero())return u;i=o.precision,t=o.rounding,o.precision=i+Math.max(s.e,s.sd())+4,o.rounding=1,r=s.d.length,r<32?(e=Math.ceil(r/3),n=(1/fe(4,e)).toString()):(e=16,n=\"2.3283064365386962890625e-10\"),s=W(o,1,s.times(n),new o(1),!0);for(var l,f=e,c=new o(8);f--;)l=s.times(s),s=u.minus(l.times(c.minus(l.times(c))));return p(s,o.precision=i,o.rounding=t,!0)};h.hyperbolicSine=h.sinh=function(){var e,n,i,t,r=this,s=r.constructor;if(!r.isFinite()||r.isZero())return new s(r);if(n=s.precision,i=s.rounding,s.precision=n+Math.max(r.e,r.sd())+4,s.rounding=1,t=r.d.length,t<3)r=W(s,2,r,r,!0);else{e=1.4*Math.sqrt(t),e=e>16?16:e|0,r=r.times(1/fe(5,e)),r=W(s,2,r,r,!0);for(var o,u=new s(5),l=new s(16),f=new s(20);e--;)o=r.times(r),r=r.times(u.plus(o.times(l.times(o).plus(f))))}return s.precision=n,s.rounding=i,p(r,n,i,!0)};h.hyperbolicTangent=h.tanh=function(){var e,n,i=this,t=i.constructor;return i.isFinite()?i.isZero()?new t(i):(e=t.precision,n=t.rounding,t.precision=e+7,t.rounding=1,S(i.sinh(),i.cosh(),t.precision=e,t.rounding=n)):new t(i.s)};h.inverseCosine=h.acos=function(){var e,n=this,i=n.constructor,t=n.abs().cmp(1),r=i.precision,s=i.rounding;return t!==-1?t===0?n.isNeg()?L(i,r,s):new i(0):new i(NaN):n.isZero()?L(i,r+4,s).times(.5):(i.precision=r+6,i.rounding=1,n=n.asin(),e=L(i,r+4,s).times(.5),i.precision=r,i.rounding=s,e.minus(n))};h.inverseHyperbolicCosine=h.acosh=function(){var e,n,i=this,t=i.constructor;return i.lte(1)?new t(i.eq(1)?0:NaN):i.isFinite()?(e=t.precision,n=t.rounding,t.precision=e+Math.max(Math.abs(i.e),i.sd())+4,t.rounding=1,w=!1,i=i.times(i).minus(1).sqrt().plus(i),w=!0,t.precision=e,t.rounding=n,i.ln()):new t(i)};h.inverseHyperbolicSine=h.asinh=function(){var e,n,i=this,t=i.constructor;return!i.isFinite()||i.isZero()?new t(i):(e=t.precision,n=t.rounding,t.precision=e+2*Math.max(Math.abs(i.e),i.sd())+6,t.rounding=1,w=!1,i=i.times(i).plus(1).sqrt().plus(i),w=!0,t.precision=e,t.rounding=n,i.ln())};h.inverseHyperbolicTangent=h.atanh=function(){var e,n,i,t,r=this,s=r.constructor;return r.isFinite()?r.e>=0?new s(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(e=s.precision,n=s.rounding,t=r.sd(),Math.max(t,e)<2*-r.e-1?p(new s(r),e,n,!0):(s.precision=i=t-r.e,r=S(r.plus(1),new s(1).minus(r),i+e,1),s.precision=e+4,s.rounding=1,r=r.ln(),s.precision=e,s.rounding=n,r.times(.5))):new s(NaN)};h.inverseSine=h.asin=function(){var e,n,i,t,r=this,s=r.constructor;return r.isZero()?new s(r):(n=r.abs().cmp(1),i=s.precision,t=s.rounding,n!==-1?n===0?(e=L(s,i+4,t).times(.5),e.s=r.s,e):new s(NaN):(s.precision=i+6,s.rounding=1,r=r.div(new s(1).minus(r.times(r)).sqrt().plus(1)).atan(),s.precision=i,s.rounding=t,r.times(2)))};h.inverseTangent=h.atan=function(){var e,n,i,t,r,s,o,u,l,f=this,c=f.constructor,a=c.precision,d=c.rounding;if(f.isFinite()){if(f.isZero())return new c(f);if(f.abs().eq(1)&&a+4<=ve)return o=L(c,a+4,d).times(.25),o.s=f.s,o}else{if(!f.s)return new c(NaN);if(a+4<=ve)return o=L(c,a+4,d).times(.5),o.s=f.s,o}for(c.precision=u=a+10,c.rounding=1,i=Math.min(28,u/m+2|0),e=i;e;--e)f=f.div(f.times(f).plus(1).sqrt().plus(1));for(w=!1,n=Math.ceil(u/m),t=1,l=f.times(f),o=new c(f),r=f;e!==-1;)if(r=r.times(l),s=o.minus(r.div(t+=2)),r=r.times(l),o=s.plus(r.div(t+=2)),o.d[n]!==void 0)for(e=n;o.d[e]===s.d[e]&&e--;);return i&&(o=o.times(2<<i-1)),w=!0,p(o,c.precision=a,c.rounding=d,!0)};h.isFinite=function(){return!!this.d};h.isInteger=h.isInt=function(){return!!this.d&&A(this.e/m)>this.d.length-2};h.isNaN=function(){return!this.s};h.isNegative=h.isNeg=function(){return this.s<0};h.isPositive=h.isPos=function(){return this.s>0};h.isZero=function(){return!!this.d&&this.d[0]===0};h.lessThan=h.lt=function(e){return this.cmp(e)<0};h.lessThanOrEqualTo=h.lte=function(e){return this.cmp(e)<1};h.logarithm=h.log=function(e){var n,i,t,r,s,o,u,l,f=this,c=f.constructor,a=c.precision,d=c.rounding,g=5;if(e==null)e=new c(10),n=!0;else{if(e=new c(e),i=e.d,e.s<0||!i||!i[0]||e.eq(1))return new c(NaN);n=e.eq(10)}if(i=f.d,f.s<0||!i||!i[0]||f.eq(1))return new c(i&&!i[0]?-1/0:f.s!=1?NaN:i?0:1/0);if(n)if(i.length>1)s=!0;else{for(r=i[0];r%10===0;)r/=10;s=r!==1}if(w=!1,u=a+g,o=B(f,u),t=n?se(c,u+10):B(e,u),l=S(o,t,u,1),Q(l.d,r=a,d))do if(u+=10,o=B(f,u),t=n?se(c,u+10):B(e,u),l=S(o,t,u,1),!s){+O(l.d).slice(r+1,r+15)+1==1e14&&(l=p(l,a+1,0));break}while(Q(l.d,r+=10,d));return w=!0,p(l,a,d)};h.minus=h.sub=function(e){var n,i,t,r,s,o,u,l,f,c,a,d,g=this,v=g.constructor;if(e=new v(e),!g.d||!e.d)return!g.s||!e.s?e=new v(NaN):g.d?e.s=-e.s:e=new v(e.d||g.s!==e.s?g:NaN),e;if(g.s!=e.s)return e.s=-e.s,g.plus(e);if(f=g.d,d=e.d,u=v.precision,l=v.rounding,!f[0]||!d[0]){if(d[0])e.s=-e.s;else if(f[0])e=new v(g);else return new v(l===3?-0:0);return w?p(e,u,l):e}if(i=A(e.e/m),c=A(g.e/m),f=f.slice(),s=c-i,s){for(a=s<0,a?(n=f,s=-s,o=d.length):(n=d,i=c,o=f.length),t=Math.max(Math.ceil(u/m),o)+2,s>t&&(s=t,n.length=1),n.reverse(),t=s;t--;)n.push(0);n.reverse()}else{for(t=f.length,o=d.length,a=t<o,a&&(o=t),t=0;t<o;t++)if(f[t]!=d[t]){a=f[t]<d[t];break}s=0}for(a&&(n=f,f=d,d=n,e.s=-e.s),o=f.length,t=d.length-o;t>0;--t)f[o++]=0;for(t=d.length;t>s;){if(f[--t]<d[t]){for(r=t;r&&f[--r]===0;)f[r]=D-1;--f[r],f[t]+=D}f[t]-=d[t]}for(;f[--o]===0;)f.pop();for(;f[0]===0;f.shift())--i;return f[0]?(e.d=f,e.e=ue(f,i),w?p(e,u,l):e):new v(l===3?-0:0)};h.modulo=h.mod=function(e){var n,i=this,t=i.constructor;return e=new t(e),!i.d||!e.s||e.d&&!e.d[0]?new t(NaN):!e.d||i.d&&!i.d[0]?p(new t(i),t.precision,t.rounding):(w=!1,t.modulo==9?(n=S(i,e.abs(),0,3,1),n.s*=e.s):n=S(i,e,0,t.modulo,1),n=n.times(e),w=!0,i.minus(n))};h.naturalExponential=h.exp=function(){return Ee(this)};h.naturalLogarithm=h.ln=function(){return B(this)};h.negated=h.neg=function(){var e=new this.constructor(this);return e.s=-e.s,p(e)};h.plus=h.add=function(e){var n,i,t,r,s,o,u,l,f,c,a=this,d=a.constructor;if(e=new d(e),!a.d||!e.d)return!a.s||!e.s?e=new d(NaN):a.d||(e=new d(e.d||a.s===e.s?a:NaN)),e;if(a.s!=e.s)return e.s=-e.s,a.minus(e);if(f=a.d,c=e.d,u=d.precision,l=d.rounding,!f[0]||!c[0])return c[0]||(e=new d(a)),w?p(e,u,l):e;if(s=A(a.e/m),t=A(e.e/m),f=f.slice(),r=s-t,r){for(r<0?(i=f,r=-r,o=c.length):(i=c,t=s,o=f.length),s=Math.ceil(u/m),o=s>o?s+1:o+1,r>o&&(r=o,i.length=1),i.reverse();r--;)i.push(0);i.reverse()}for(o=f.length,r=c.length,o-r<0&&(r=o,i=c,c=f,f=i),n=0;r;)n=(f[--r]=f[r]+c[r]+n)/D|0,f[r]%=D;for(n&&(f.unshift(n),++t),o=f.length;f[--o]==0;)f.pop();return e.d=f,e.e=ue(f,t),w?p(e,u,l):e};h.precision=h.sd=function(e){var n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error($+e);return i.d?(n=Ze(i.d),e&&i.e+1>n&&(n=i.e+1)):n=NaN,n};h.round=function(){var e=this,n=e.constructor;return p(new n(e),e.e+1,n.rounding)};h.sine=h.sin=function(){var e,n,i=this,t=i.constructor;return i.isFinite()?i.isZero()?new t(i):(e=t.precision,n=t.rounding,t.precision=e+Math.max(i.e,i.sd())+m,t.rounding=1,i=un(t,Ve(t,i)),t.precision=e,t.rounding=n,p(Z>2?i.neg():i,e,n,!0)):new t(NaN)};h.squareRoot=h.sqrt=function(){var e,n,i,t,r,s,o=this,u=o.d,l=o.e,f=o.s,c=o.constructor;if(f!==1||!u||!u[0])return new c(!f||f<0&&(!u||u[0])?NaN:u?o:1/0);for(w=!1,f=Math.sqrt(+o),f==0||f==1/0?(n=O(u),(n.length+l)%2==0&&(n+=\"0\"),f=Math.sqrt(n),l=A((l+1)/2)-(l<0||l%2),f==1/0?n=\"5e\"+l:(n=f.toExponential(),n=n.slice(0,n.indexOf(\"e\")+1)+l),t=new c(n)):t=new c(f.toString()),i=(l=c.precision)+3;;)if(s=t,t=s.plus(S(o,s,i+2,1)).times(.5),O(s.d).slice(0,i)===(n=O(t.d)).slice(0,i))if(n=n.slice(i-3,i+1),n==\"9999\"||!r&&n==\"4999\"){if(!r&&(p(s,l+1,0),s.times(s).eq(o))){t=s;break}i+=4,r=1}else{(!+n||!+n.slice(1)&&n.charAt(0)==\"5\")&&(p(t,l+1,1),e=!t.times(t).eq(o));break}return w=!0,p(t,l,c.rounding,e)};h.tangent=h.tan=function(){var e,n,i=this,t=i.constructor;return i.isFinite()?i.isZero()?new t(i):(e=t.precision,n=t.rounding,t.precision=e+10,t.rounding=1,i=i.sin(),i.s=1,i=S(i,new t(1).minus(i.times(i)).sqrt(),e+10,0),t.precision=e,t.rounding=n,p(Z==2||Z==4?i.neg():i,e,n,!0)):new t(NaN)};h.times=h.mul=function(e){var n,i,t,r,s,o,u,l,f,c=this,a=c.constructor,d=c.d,g=(e=new a(e)).d;if(e.s*=c.s,!d||!d[0]||!g||!g[0])return new a(!e.s||d&&!d[0]&&!g||g&&!g[0]&&!d?NaN:!d||!g?e.s/0:e.s*0);for(i=A(c.e/m)+A(e.e/m),l=d.length,f=g.length,l<f&&(s=d,d=g,g=s,o=l,l=f,f=o),s=[],o=l+f,t=o;t--;)s.push(0);for(t=f;--t>=0;){for(n=0,r=l+t;r>t;)u=s[r]+g[t]*d[r-t-1]+n,s[r--]=u%D|0,n=u/D|0;s[r]=(s[r]+n)%D|0}for(;!s[--o];)s.pop();return n?++i:s.shift(),e.d=s,e.e=ue(s,i),w?p(e,a.precision,a.rounding):e};h.toBinary=function(e,n){return ke(this,2,e,n)};h.toDecimalPlaces=h.toDP=function(e,n){var i=this,t=i.constructor;return i=new t(i),e===void 0?i:(R(e,0,V),n===void 0?n=t.rounding:R(n,0,8),p(i,e+i.e+1,n))};h.toExponential=function(e,n){var i,t=this,r=t.constructor;return e===void 0?i=F(t,!0):(R(e,0,V),n===void 0?n=r.rounding:R(n,0,8),t=p(new r(t),e+1,n),i=F(t,!0,e+1)),t.isNeg()&&!t.isZero()?\"-\"+i:i};h.toFixed=function(e,n){var i,t,r=this,s=r.constructor;return e===void 0?i=F(r):(R(e,0,V),n===void 0?n=s.rounding:R(n,0,8),t=p(new s(r),e+r.e+1,n),i=F(t,!1,e+t.e+1)),r.isNeg()&&!r.isZero()?\"-\"+i:i};h.toFraction=function(e){var n,i,t,r,s,o,u,l,f,c,a,d,g=this,v=g.d,N=g.constructor;if(!v)return new N(g);if(f=i=new N(1),t=l=new N(0),n=new N(t),s=n.e=Ze(v)-g.e-1,o=s%m,n.d[0]=M(10,o<0?m+o:o),e==null)e=s>0?n:f;else{if(u=new N(e),!u.isInt()||u.lt(f))throw Error($+u);e=u.gt(n)?s>0?n:f:u}for(w=!1,u=new N(O(v)),c=N.precision,N.precision=s=v.length*m*2;a=S(u,n,0,1,1),r=i.plus(a.times(t)),r.cmp(e)!=1;)i=t,t=r,r=f,f=l.plus(a.times(r)),l=r,r=n,n=u.minus(a.times(r)),u=r;return r=S(e.minus(i),t,0,1,1),l=l.plus(r.times(f)),i=i.plus(r.times(t)),l.s=f.s=g.s,d=S(f,t,s,1).minus(g).abs().cmp(S(l,i,s,1).minus(g).abs())<1?[f,t]:[l,i],N.precision=c,w=!0,d};h.toHexadecimal=h.toHex=function(e,n){return ke(this,16,e,n)};h.toNearest=function(e,n){var i=this,t=i.constructor;if(i=new t(i),e==null){if(!i.d)return i;e=new t(1),n=t.rounding}else{if(e=new t(e),n===void 0?n=t.rounding:R(n,0,8),!i.d)return e.s?i:e;if(!e.d)return e.s&&(e.s=i.s),e}return e.d[0]?(w=!1,i=S(i,e,0,n,1).times(e),w=!0,p(i)):(e.s=i.s,i=e),i};h.toNumber=function(){return+this};h.toOctal=function(e,n){return ke(this,8,e,n)};h.toPower=h.pow=function(e){var n,i,t,r,s,o,u=this,l=u.constructor,f=+(e=new l(e));if(!u.d||!e.d||!u.d[0]||!e.d[0])return new l(M(+u,f));if(u=new l(u),u.eq(1))return u;if(t=l.precision,s=l.rounding,e.eq(1))return p(u,t,s);if(n=A(e.e/m),n>=e.d.length-1&&(i=f<0?-f:f)<=tn)return r=Ue(l,u,i,t),e.s<0?new l(1).div(r):p(r,t,s);if(o=u.s,o<0){if(n<e.d.length-1)return new l(NaN);if(e.d[n]&1||(o=1),u.e==0&&u.d[0]==1&&u.d.length==1)return u.s=o,u}return i=M(+u,f),n=i==0||!isFinite(i)?A(f*(Math.log(\"0.\"+O(u.d))/Math.LN10+u.e+1)):new l(i+\"\").e,n>l.maxE+1||n<l.minE-1?new l(n>0?o/0:0):(w=!1,l.rounding=u.s=1,i=Math.min(12,(n+\"\").length),r=Ee(e.times(B(u,t+i)),t),r.d&&(r=p(r,t+5,1),Q(r.d,t,s)&&(n=t+10,r=p(Ee(e.times(B(u,n+i)),n),n+5,1),+O(r.d).slice(t+1,t+15)+1==1e14&&(r=p(r,t+1,0)))),r.s=o,w=!0,l.rounding=s,p(r,t,s))};h.toPrecision=function(e,n){var i,t=this,r=t.constructor;return e===void 0?i=F(t,t.e<=r.toExpNeg||t.e>=r.toExpPos):(R(e,1,V),n===void 0?n=r.rounding:R(n,0,8),t=p(new r(t),e,n),i=F(t,e<=t.e||t.e<=r.toExpNeg,e)),t.isNeg()&&!t.isZero()?\"-\"+i:i};h.toSignificantDigits=h.toSD=function(e,n){var i=this,t=i.constructor;return e===void 0?(e=t.precision,n=t.rounding):(R(e,1,V),n===void 0?n=t.rounding:R(n,0,8)),p(new t(i),e,n)};h.toString=function(){var e=this,n=e.constructor,i=F(e,e.e<=n.toExpNeg||e.e>=n.toExpPos);return e.isNeg()&&!e.isZero()?\"-\"+i:i};h.truncated=h.trunc=function(){return p(new this.constructor(this),this.e+1,1)};h.valueOf=h.toJSON=function(){var e=this,n=e.constructor,i=F(e,e.e<=n.toExpNeg||e.e>=n.toExpPos);return e.isNeg()?\"-\"+i:i};function O(e){var n,i,t,r=e.length-1,s=\"\",o=e[0];if(r>0){for(s+=o,n=1;n<r;n++)t=e[n]+\"\",i=m-t.length,i&&(s+=U(i)),s+=t;o=e[n],t=o+\"\",i=m-t.length,i&&(s+=U(i))}else if(o===0)return\"0\";for(;o%10===0;)o/=10;return s+o}function R(e,n,i){if(e!==~~e||e<n||e>i)throw Error($+e)}function Q(e,n,i,t){var r,s,o,u;for(s=e[0];s>=10;s/=10)--n;return--n<0?(n+=m,r=0):(r=Math.ceil((n+1)/m),n%=m),s=M(10,m-n),u=e[r]%s|0,t==null?n<3?(n==0?u=u/100|0:n==1&&(u=u/10|0),o=i<4&&u==99999||i>3&&u==49999||u==5e4||u==0):o=(i<4&&u+1==s||i>3&&u+1==s/2)&&(e[r+1]/s/100|0)==M(10,n-2)-1||(u==s/2||u==0)&&(e[r+1]/s/100|0)==0:n<4?(n==0?u=u/1e3|0:n==1?u=u/100|0:n==2&&(u=u/10|0),o=(t||i<4)&&u==9999||!t&&i>3&&u==4999):o=((t||i<4)&&u+1==s||!t&&i>3&&u+1==s/2)&&(e[r+1]/s/1e3|0)==M(10,n-3)-1,o}function ie(e,n,i){for(var t,r=[0],s,o=0,u=e.length;o<u;){for(s=r.length;s--;)r[s]*=n;for(r[0]+=we.indexOf(e.charAt(o++)),t=0;t<r.length;t++)r[t]>i-1&&(r[t+1]===void 0&&(r[t+1]=0),r[t+1]+=r[t]/i|0,r[t]%=i)}return r.reverse()}function sn(e,n){var i,t,r;if(n.isZero())return n;t=n.d.length,t<32?(i=Math.ceil(t/3),r=(1/fe(4,i)).toString()):(i=16,r=\"2.3283064365386962890625e-10\"),e.precision+=i,n=W(e,1,n.times(r),new e(1));for(var s=i;s--;){var o=n.times(n);n=o.times(o).minus(o).times(8).plus(1)}return e.precision-=i,n}var S=function(){function e(t,r,s){var o,u=0,l=t.length;for(t=t.slice();l--;)o=t[l]*r+u,t[l]=o%s|0,u=o/s|0;return u&&t.unshift(u),t}function n(t,r,s,o){var u,l;if(s!=o)l=s>o?1:-1;else for(u=l=0;u<s;u++)if(t[u]!=r[u]){l=t[u]>r[u]?1:-1;break}return l}function i(t,r,s,o){for(var u=0;s--;)t[s]-=u,u=t[s]<r[s]?1:0,t[s]=u*o+t[s]-r[s];for(;!t[0]&&t.length>1;)t.shift()}return function(t,r,s,o,u,l){var f,c,a,d,g,v,N,_,C,q,E,P,x,I,le,z,G,ce,T,y,ee=t.constructor,ae=t.s==r.s?1:-1,b=t.d,k=r.d;if(!b||!b[0]||!k||!k[0])return new ee(!t.s||!r.s||(b?k&&b[0]==k[0]:!k)?NaN:b&&b[0]==0||!k?ae*0:ae/0);for(l?(g=1,c=t.e-r.e):(l=D,g=m,c=A(t.e/g)-A(r.e/g)),T=k.length,G=b.length,C=new ee(ae),q=C.d=[],a=0;k[a]==(b[a]||0);a++);if(k[a]>(b[a]||0)&&c--,s==null?(I=s=ee.precision,o=ee.rounding):u?I=s+(t.e-r.e)+1:I=s,I<0)q.push(1),v=!0;else{if(I=I/g+2|0,a=0,T==1){for(d=0,k=k[0],I++;(a<G||d)&&I--;a++)le=d*l+(b[a]||0),q[a]=le/k|0,d=le%k|0;v=d||a<G}else{for(d=l/(k[0]+1)|0,d>1&&(k=e(k,d,l),b=e(b,d,l),T=k.length,G=b.length),z=T,E=b.slice(0,T),P=E.length;P<T;)E[P++]=0;y=k.slice(),y.unshift(0),ce=k[0],k[1]>=l/2&&++ce;do d=0,f=n(k,E,T,P),f<0?(x=E[0],T!=P&&(x=x*l+(E[1]||0)),d=x/ce|0,d>1?(d>=l&&(d=l-1),N=e(k,d,l),_=N.length,P=E.length,f=n(N,E,_,P),f==1&&(d--,i(N,T<_?y:k,_,l))):(d==0&&(f=d=1),N=k.slice()),_=N.length,_<P&&N.unshift(0),i(E,N,P,l),f==-1&&(P=E.length,f=n(k,E,T,P),f<1&&(d++,i(E,T<P?y:k,P,l))),P=E.length):f===0&&(d++,E=[0]),q[a++]=d,f&&E[0]?E[P++]=b[z]||0:(E=[b[z]],P=1);while((z++<G||E[0]!==void 0)&&I--);v=E[0]!==void 0}q[0]||q.shift()}if(g==1)C.e=c,Te=v;else{for(a=1,d=q[0];d>=10;d/=10)a++;C.e=a+c*g-1,p(C,u?s+C.e+1:s,o,v)}return C}}();function p(e,n,i,t){var r,s,o,u,l,f,c,a,d,g=e.constructor;e:if(n!=null){if(a=e.d,!a)return e;for(r=1,u=a[0];u>=10;u/=10)r++;if(s=n-r,s<0)s+=m,o=n,c=a[d=0],l=c/M(10,r-o-1)%10|0;else if(d=Math.ceil((s+1)/m),u=a.length,d>=u)if(t){for(;u++<=d;)a.push(0);c=l=0,r=1,s%=m,o=s-m+1}else break e;else{for(c=u=a[d],r=1;u>=10;u/=10)r++;s%=m,o=s-m+r,l=o<0?0:c/M(10,r-o-1)%10|0}if(t=t||n<0||a[d+1]!==void 0||(o<0?c:c%M(10,r-o-1)),f=i<4?(l||t)&&(i==0||i==(e.s<0?3:2)):l>5||l==5&&(i==4||t||i==6&&(s>0?o>0?c/M(10,r-o):0:a[d-1])%10&1||i==(e.s<0?8:7)),n<1||!a[0])return a.length=0,f?(n-=e.e+1,a[0]=M(10,(m-n%m)%m),e.e=-n||0):a[0]=e.e=0,e;if(s==0?(a.length=d,u=1,d--):(a.length=d+1,u=M(10,m-s),a[d]=o>0?(c/M(10,r-o)%M(10,o)|0)*u:0),f)for(;;)if(d==0){for(s=1,o=a[0];o>=10;o/=10)s++;for(o=a[0]+=u,u=1;o>=10;o/=10)u++;s!=u&&(e.e++,a[0]==D&&(a[0]=1));break}else{if(a[d]+=u,a[d]!=D)break;a[d--]=0,u=1}for(s=a.length;a[--s]===0;)a.pop()}return w&&(e.e>g.maxE?(e.d=null,e.e=NaN):e.e<g.minE&&(e.e=0,e.d=[0])),e}function F(e,n,i){if(!e.isFinite())return $e(e);var t,r=e.e,s=O(e.d),o=s.length;return n?(i&&(t=i-o)>0?s=s.charAt(0)+\".\"+s.slice(1)+U(t):o>1&&(s=s.charAt(0)+\".\"+s.slice(1)),s=s+(e.e<0?\"e\":\"e+\")+e.e):r<0?(s=\"0.\"+U(-r-1)+s,i&&(t=i-o)>0&&(s+=U(t))):r>=o?(s+=U(r+1-o),i&&(t=i-r-1)>0&&(s=s+\".\"+U(t))):((t=r+1)<o&&(s=s.slice(0,t)+\".\"+s.slice(t)),i&&(t=i-o)>0&&(r+1===o&&(s+=\".\"),s+=U(t))),s}function ue(e,n){var i=e[0];for(n*=m;i>=10;i/=10)n++;return n}function se(e,n,i){if(n>rn)throw w=!0,i&&(e.precision=i),Error(Le);return p(new e(te),n,1,!0)}function L(e,n,i){if(n>ve)throw Error(Le);return p(new e(re),n,i,!0)}function Ze(e){var n=e.length-1,i=n*m+1;if(n=e[n],n){for(;n%10==0;n/=10)i--;for(n=e[0];n>=10;n/=10)i++}return i}function U(e){for(var n=\"\";e--;)n+=\"0\";return n}function Ue(e,n,i,t){var r,s=new e(1),o=Math.ceil(t/m+4);for(w=!1;;){if(i%2&&(s=s.times(n),Re(s.d,o)&&(r=!0)),i=A(i/2),i===0){i=s.d.length-1,r&&s.d[i]===0&&++s.d[i];break}n=n.times(n),Re(n.d,o)}return w=!0,s}function _e(e){return e.d[e.d.length-1]&1}function Be(e,n,i){for(var t,r=new e(n[0]),s=0;++s<n.length;)if(t=new e(n[s]),t.s)r[i](t)&&(r=t);else{r=t;break}return r}function Ee(e,n){var i,t,r,s,o,u,l,f=0,c=0,a=0,d=e.constructor,g=d.rounding,v=d.precision;if(!e.d||!e.d[0]||e.e>17)return new d(e.d?e.d[0]?e.s<0?0:1/0:1:e.s?e.s<0?0:e:NaN);for(n==null?(w=!1,l=v):l=n,u=new d(.03125);e.e>-2;)e=e.times(u),a+=5;for(t=Math.log(M(2,a))/Math.LN10*2+5|0,l+=t,i=s=o=new d(1),d.precision=l;;){if(s=p(s.times(e),l,1),i=i.times(++c),u=o.plus(S(s,i,l,1)),O(u.d).slice(0,l)===O(o.d).slice(0,l)){for(r=a;r--;)o=p(o.times(o),l,1);if(n==null)if(f<3&&Q(o.d,l-t,g,f))d.precision=l+=10,i=s=u=new d(1),c=0,f++;else return p(o,d.precision=v,g,w=!0);else return d.precision=v,o}o=u}}function B(e,n){var i,t,r,s,o,u,l,f,c,a,d,g=1,v=10,N=e,_=N.d,C=N.constructor,q=C.rounding,E=C.precision;if(N.s<0||!_||!_[0]||!N.e&&_[0]==1&&_.length==1)return new C(_&&!_[0]?-1/0:N.s!=1?NaN:_?0:N);if(n==null?(w=!1,c=E):c=n,C.precision=c+=v,i=O(_),t=i.charAt(0),Math.abs(s=N.e)<15e14){for(;t<7&&t!=1||t==1&&i.charAt(1)>3;)N=N.times(e),i=O(N.d),t=i.charAt(0),g++;s=N.e,t>1?(N=new C(\"0.\"+i),s++):N=new C(t+\".\"+i.slice(1))}else return f=se(C,c+2,E).times(s+\"\"),N=B(new C(t+\".\"+i.slice(1)),c-v).plus(f),C.precision=E,n==null?p(N,E,q,w=!0):N;for(a=N,l=o=N=S(N.minus(1),N.plus(1),c,1),d=p(N.times(N),c,1),r=3;;){if(o=p(o.times(d),c,1),f=l.plus(S(o,new C(r),c,1)),O(f.d).slice(0,c)===O(l.d).slice(0,c))if(l=l.times(2),s!==0&&(l=l.plus(se(C,c+2,E).times(s+\"\"))),l=S(l,new C(g),c,1),n==null)if(Q(l.d,c-v,q,u))C.precision=c+=v,f=o=N=S(a.minus(1),a.plus(1),c,1),d=p(N.times(N),c,1),r=u=1;else return p(l,C.precision=E,q,w=!0);else return C.precision=E,l;l=f,r+=2}}function $e(e){return String(e.s*e.s/0)}function Se(e,n){var i,t,r;for((i=n.indexOf(\".\"))>-1&&(n=n.replace(\".\",\"\")),(t=n.search(/e/i))>0?(i<0&&(i=t),i+=+n.slice(t+1),n=n.substring(0,t)):i<0&&(i=n.length),t=0;n.charCodeAt(t)===48;t++);for(r=n.length;n.charCodeAt(r-1)===48;--r);if(n=n.slice(t,r),n){if(r-=t,e.e=i=i-t-1,e.d=[],t=(i+1)%m,i<0&&(t+=m),t<r){for(t&&e.d.push(+n.slice(0,t)),r-=m;t<r;)e.d.push(+n.slice(t,t+=m));n=n.slice(t),t=m-n.length}else t-=r;for(;t--;)n+=\"0\";e.d.push(+n),w&&(e.e>e.constructor.maxE?(e.d=null,e.e=NaN):e.e<e.constructor.minE&&(e.e=0,e.d=[0]))}else e.e=0,e.d=[0];return e}function on(e,n){var i,t,r,s,o,u,l,f,c;if(n.indexOf(\"_\")>-1){if(n=n.replace(/(\\d)_(?=\\d)/g,\"$1\"),Ie.test(n))return Se(e,n)}else if(n===\"Infinity\"||n===\"NaN\")return+n||(e.s=NaN),e.e=NaN,e.d=null,e;if(en.test(n))i=16,n=n.toLowerCase();else if(ye.test(n))i=2;else if(nn.test(n))i=8;else throw Error($+n);for(s=n.search(/p/i),s>0?(l=+n.slice(s+1),n=n.substring(2,s)):n=n.slice(2),s=n.indexOf(\".\"),o=s>=0,t=e.constructor,o&&(n=n.replace(\".\",\"\"),u=n.length,s=u-s,r=Ue(t,new t(i),s,s*2)),f=ie(n,i,D),c=f.length-1,s=c;f[s]===0;--s)f.pop();return s<0?new t(e.s*0):(e.e=ue(f,c),e.d=f,w=!1,o&&(e=S(e,r,u*4)),l&&(e=e.times(Math.abs(l)<54?M(2,l):Y.pow(2,l))),w=!0,e)}function un(e,n){var i,t=n.d.length;if(t<3)return n.isZero()?n:W(e,2,n,n);i=1.4*Math.sqrt(t),i=i>16?16:i|0,n=n.times(1/fe(5,i)),n=W(e,2,n,n);for(var r,s=new e(5),o=new e(16),u=new e(20);i--;)r=n.times(n),n=n.times(s.plus(r.times(o.times(r).minus(u))));return n}function W(e,n,i,t,r){var s,o,u,l,f=1,c=e.precision,a=Math.ceil(c/m);for(w=!1,l=i.times(i),u=new e(t);;){if(o=S(u.times(l),new e(n++*n++),c,1),u=r?t.plus(o):t.minus(o),t=S(o.times(l),new e(n++*n++),c,1),o=u.plus(t),o.d[a]!==void 0){for(s=a;o.d[s]===u.d[s]&&s--;);if(s==-1)break}s=u,u=t,t=o,o=s,f++}return w=!0,o.d.length=a+1,o}function fe(e,n){for(var i=e;--n;)i*=e;return i}function Ve(e,n){var i,t=n.s<0,r=L(e,e.precision,1),s=r.times(.5);if(n=n.abs(),n.lte(s))return Z=t?4:1,n;if(i=n.divToInt(r),i.isZero())Z=t?3:2;else{if(n=n.minus(i.times(r)),n.lte(s))return Z=_e(i)?t?2:3:t?4:1,n;Z=_e(i)?t?1:4:t?3:2}return n.minus(r).abs()}function ke(e,n,i,t){var r,s,o,u,l,f,c,a,d,g=e.constructor,v=i!==void 0;if(v?(R(i,1,V),t===void 0?t=g.rounding:R(t,0,8)):(i=g.precision,t=g.rounding),!e.isFinite())c=$e(e);else{for(c=F(e),o=c.indexOf(\".\"),v?(r=2,n==16?i=i*4-3:n==8&&(i=i*3-2)):r=n,o>=0&&(c=c.replace(\".\",\"\"),d=new g(1),d.e=c.length-o,d.d=ie(F(d),10,r),d.e=d.d.length),a=ie(c,10,r),s=l=a.length;a[--l]==0;)a.pop();if(!a[0])c=v?\"0p+0\":\"0\";else{if(o<0?s--:(e=new g(e),e.d=a,e.e=s,e=S(e,d,i,t,0,r),a=e.d,s=e.e,f=Te),o=a[i],u=r/2,f=f||a[i+1]!==void 0,f=t<4?(o!==void 0||f)&&(t===0||t===(e.s<0?3:2)):o>u||o===u&&(t===4||f||t===6&&a[i-1]&1||t===(e.s<0?8:7)),a.length=i,f)for(;++a[--i]>r-1;)a[i]=0,i||(++s,a.unshift(1));for(l=a.length;!a[l-1];--l);for(o=0,c=\"\";o<l;o++)c+=we.charAt(a[o]);if(v){if(l>1)if(n==16||n==8){for(o=n==16?4:3,--l;l%o;l++)c+=\"0\";for(a=ie(c,r,n),l=a.length;!a[l-1];--l);for(o=1,c=\"1.\";o<l;o++)c+=we.charAt(a[o])}else c=c.charAt(0)+\".\"+c.slice(1);c=c+(s<0?\"p\":\"p+\")+s}else if(s<0){for(;++s;)c=\"0\"+c;c=\"0.\"+c}else if(++s>l)for(s-=l;s--;)c+=\"0\";else s<l&&(c=c.slice(0,s)+\".\"+c.slice(s))}c=(n==16?\"0x\":n==2?\"0b\":n==8?\"0o\":\"\")+c}return e.s<0?\"-\"+c:c}function Re(e,n){if(e.length>n)return e.length=n,!0}function fn(e){return new this(e).abs()}function ln(e){return new this(e).acos()}function cn(e){return new this(e).acosh()}function an(e,n){return new this(e).plus(n)}function dn(e){return new this(e).asin()}function hn(e){return new this(e).asinh()}function pn(e){return new this(e).atan()}function gn(e){return new this(e).atanh()}function mn(e,n){e=new this(e),n=new this(n);var i,t=this.precision,r=this.rounding,s=t+4;return!e.s||!n.s?i=new this(NaN):!e.d&&!n.d?(i=L(this,s,1).times(n.s>0?.25:.75),i.s=e.s):!n.d||e.isZero()?(i=n.s<0?L(this,t,r):new this(0),i.s=e.s):!e.d||n.isZero()?(i=L(this,s,1).times(.5),i.s=e.s):n.s<0?(this.precision=s,this.rounding=1,i=this.atan(S(e,n,s,1)),n=L(this,s,1),this.precision=t,this.rounding=r,i=e.s<0?i.minus(n):i.plus(n)):i=this.atan(S(e,n,s,1)),i}function wn(e){return new this(e).cbrt()}function Nn(e){return p(e=new this(e),e.e+1,2)}function vn(e,n,i){return new this(e).clamp(n,i)}function En(e){if(!e||typeof e!=\"object\")throw Error(oe+\"Object expected\");var n,i,t,r=e.defaults===!0,s=[\"precision\",1,V,\"rounding\",0,8,\"toExpNeg\",-H,0,\"toExpPos\",0,H,\"maxE\",0,H,\"minE\",-H,0,\"modulo\",0,9];for(n=0;n<s.length;n+=3)if(i=s[n],r&&(this[i]=Ne[i]),(t=e[i])!==void 0)if(A(t)===t&&t>=s[n+1]&&t<=s[n+2])this[i]=t;else throw Error($+i+\": \"+t);if(i=\"crypto\",r&&(this[i]=Ne[i]),(t=e[i])!==void 0)if(t===!0||t===!1||t===0||t===1)if(t)if(typeof crypto<\"u\"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[i]=!0;else throw Error(De);else this[i]=!1;else throw Error($+i+\": \"+t);return this}function Sn(e){return new this(e).cos()}function kn(e){return new this(e).cosh()}function He(e){var n,i,t;function r(s){var o,u,l,f=this;if(!(f instanceof r))return new r(s);if(f.constructor=r,qe(s)){f.s=s.s,w?!s.d||s.e>r.maxE?(f.e=NaN,f.d=null):s.e<r.minE?(f.e=0,f.d=[0]):(f.e=s.e,f.d=s.d.slice()):(f.e=s.e,f.d=s.d?s.d.slice():s.d);return}if(l=typeof s,l===\"number\"){if(s===0){f.s=1/s<0?-1:1,f.e=0,f.d=[0];return}if(s<0?(s=-s,f.s=-1):f.s=1,s===~~s&&s<1e7){for(o=0,u=s;u>=10;u/=10)o++;w?o>r.maxE?(f.e=NaN,f.d=null):o<r.minE?(f.e=0,f.d=[0]):(f.e=o,f.d=[s]):(f.e=o,f.d=[s]);return}else if(s*0!==0){s||(f.s=NaN),f.e=NaN,f.d=null;return}return Se(f,s.toString())}else if(l!==\"string\")throw Error($+s);return(u=s.charCodeAt(0))===45?(s=s.slice(1),f.s=-1):(u===43&&(s=s.slice(1)),f.s=1),Ie.test(s)?Se(f,s):on(f,s)}if(r.prototype=h,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=En,r.clone=He,r.isDecimal=qe,r.abs=fn,r.acos=ln,r.acosh=cn,r.add=an,r.asin=dn,r.asinh=hn,r.atan=pn,r.atanh=gn,r.atan2=mn,r.cbrt=wn,r.ceil=Nn,r.clamp=vn,r.cos=Sn,r.cosh=kn,r.div=Cn,r.exp=Mn,r.floor=On,r.hypot=Pn,r.ln=bn,r.log=An,r.log10=Rn,r.log2=_n,r.max=qn,r.min=Tn,r.mod=Ln,r.mul=Dn,r.pow=Fn,r.random=In,r.round=Zn,r.sign=Un,r.sin=Bn,r.sinh=$n,r.sqrt=Vn,r.sub=Hn,r.sum=Wn,r.tan=Gn,r.tanh=Jn,r.trunc=jn,e===void 0&&(e={}),e&&e.defaults!==!0)for(t=[\"precision\",\"rounding\",\"toExpNeg\",\"toExpPos\",\"maxE\",\"minE\",\"modulo\",\"crypto\"],n=0;n<t.length;)e.hasOwnProperty(i=t[n++])||(e[i]=this[i]);return r.config(e),r}function Cn(e,n){return new this(e).div(n)}function Mn(e){return new this(e).exp()}function On(e){return p(e=new this(e),e.e+1,3)}function Pn(){var e,n,i=new this(0);for(w=!1,e=0;e<arguments.length;)if(n=new this(arguments[e++]),n.d)i.d&&(i=i.plus(n.times(n)));else{if(n.s)return w=!0,new this(1/0);i=n}return w=!0,i.sqrt()}function qe(e){return e instanceof Y||e&&e.toStringTag===Fe||!1}function bn(e){return new this(e).ln()}function An(e,n){return new this(e).log(n)}function _n(e){return new this(e).log(2)}function Rn(e){return new this(e).log(10)}function qn(){return Be(this,arguments,\"lt\")}function Tn(){return Be(this,arguments,\"gt\")}function Ln(e,n){return new this(e).mod(n)}function Dn(e,n){return new this(e).mul(n)}function Fn(e,n){return new this(e).pow(n)}function In(e){var n,i,t,r,s=0,o=new this(1),u=[];if(e===void 0?e=this.precision:R(e,1,V),t=Math.ceil(e/m),this.crypto)if(crypto.getRandomValues)for(n=crypto.getRandomValues(new Uint32Array(t));s<t;)r=n[s],r>=429e7?n[s]=crypto.getRandomValues(new Uint32Array(1))[0]:u[s++]=r%1e7;else if(crypto.randomBytes){for(n=crypto.randomBytes(t*=4);s<t;)r=n[s]+(n[s+1]<<8)+(n[s+2]<<16)+((n[s+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(n,s):(u.push(r%1e7),s+=4);s=t/4}else throw Error(De);else for(;s<t;)u[s++]=Math.random()*1e7|0;for(t=u[--s],e%=m,t&&e&&(r=M(10,m-e),u[s]=(t/r|0)*r);u[s]===0;s--)u.pop();if(s<0)i=0,u=[0];else{for(i=-1;u[0]===0;i-=m)u.shift();for(t=1,r=u[0];r>=10;r/=10)t++;t<m&&(i-=m-t)}return o.e=i,o.d=u,o}function Zn(e){return p(e=new this(e),e.e+1,this.rounding)}function Un(e){return e=new this(e),e.d?e.d[0]?e.s:0*e.s:e.s||NaN}function Bn(e){return new this(e).sin()}function $n(e){return new this(e).sinh()}function Vn(e){return new this(e).sqrt()}function Hn(e,n){return new this(e).sub(n)}function Wn(){var e=0,n=arguments,i=new this(n[e]);for(w=!1;i.s&&++e<n.length;)i=i.plus(n[e]);return w=!0,p(i,this.precision,this.rounding)}function Gn(e){return new this(e).tan()}function Jn(e){return new this(e).tanh()}function jn(e){return p(e=new this(e),e.e+1,1)}h[Symbol.for(\"nodejs.util.inspect.custom\")]=h.toString;h[Symbol.toStringTag]=\"Decimal\";var Y=h.constructor=He(Ne);te=new Y(te);re=new Y(re);var We=Y;0&&(module.exports={Decimal,Public,getRuntime,makeStrictEnum,objectEnumValues});\n/*! Bundled license information:\n\ndecimal.js/decimal.mjs:\n  (*!\n   *  decimal.js v10.4.3\n   *  An arbitrary-precision Decimal type for JavaScript.\n   *  https://github.com/MikeMcl/decimal.js\n   *  Copyright (c) 2022 Michael Mclaughlin <M8ch88l@gmail.com>\n   *  MIT Licence\n   *)\n*/\n//# sourceMappingURL=index-browser.js.map\n"
  },
  {
    "path": "server/src/common/prisma-client/runtime/library.d.ts",
    "content": "/**\r\n * @param this\r\n */\r\ndeclare function $extends(this: Client, extension: ExtensionArgs | ((client: Client) => Client)): Client;\r\n\r\ndeclare type AccelerateEngineConfig = {\r\n    inlineSchema: EngineConfig['inlineSchema'];\r\n    inlineSchemaHash: EngineConfig['inlineSchemaHash'];\r\n    env: EngineConfig['env'];\r\n    generator?: {\r\n        previewFeatures: string[];\r\n    };\r\n    inlineDatasources: EngineConfig['inlineDatasources'];\r\n    overrideDatasources: EngineConfig['overrideDatasources'];\r\n    clientVersion: EngineConfig['clientVersion'];\r\n    engineVersion: EngineConfig['engineVersion'];\r\n    logEmitter: EngineConfig['logEmitter'];\r\n    logQueries?: EngineConfig['logQueries'];\r\n    logLevel?: EngineConfig['logLevel'];\r\n    tracingHelper: EngineConfig['tracingHelper'];\r\n    accelerateUtils?: EngineConfig['accelerateUtils'];\r\n};\r\n\r\nexport declare type Action = keyof typeof DMMF.ModelAction | 'executeRaw' | 'queryRaw' | 'runCommandRaw';\r\n\r\nexport declare type Aggregate = '_count' | '_max' | '_min' | '_avg' | '_sum';\r\n\r\nexport declare type AllModelsToStringIndex<TypeMap extends TypeMapDef, Args extends Record<string, any>, K extends PropertyKey> = Args extends {\r\n    [P in K]: {\r\n        $allModels: infer AllModels;\r\n    };\r\n} ? {\r\n    [P in K]: Record<TypeMap['meta']['modelProps'], AllModels>;\r\n} : {};\r\n\r\ndeclare class AnyNull extends NullTypesEnumValue {\r\n}\r\n\r\nexport declare type Args<T, F extends Operation> = T extends {\r\n    [K: symbol]: {\r\n        types: {\r\n            operations: {\r\n                [K in F]: {\r\n                    args: any;\r\n                };\r\n            };\r\n        };\r\n    };\r\n} ? T[symbol]['types']['operations'][F]['args'] : any;\r\n\r\nexport declare type Args_3<T, F extends Operation> = Args<T, F>;\r\n\r\n/**\r\n * Attributes is a map from string to attribute values.\r\n *\r\n * Note: only the own enumerable keys are counted as valid attribute keys.\r\n */\r\ndeclare interface Attributes {\r\n    [attributeKey: string]: AttributeValue | undefined;\r\n}\r\n\r\n/**\r\n * Attribute values may be any non-nullish primitive value except an object.\r\n *\r\n * null or undefined attribute values are invalid and will result in undefined behavior.\r\n */\r\ndeclare type AttributeValue = string | number | boolean | Array<null | undefined | string> | Array<null | undefined | number> | Array<null | undefined | boolean>;\r\n\r\nexport declare type BaseDMMF = Pick<DMMF.Document, 'datamodel'>;\r\n\r\ndeclare type BatchArgs = {\r\n    queries: BatchQuery[];\r\n    transaction?: {\r\n        isolationLevel?: IsolationLevel;\r\n    };\r\n};\r\n\r\ndeclare type BatchInternalParams = {\r\n    requests: RequestParams[];\r\n    customDataProxyFetch?: CustomDataProxyFetch;\r\n};\r\n\r\ndeclare type BatchQuery = {\r\n    model: string | undefined;\r\n    operation: string;\r\n    args: JsArgs | RawQueryArgs;\r\n};\r\n\r\ndeclare type BatchQueryEngineResult<T> = QueryEngineResult<T> | Error;\r\n\r\ndeclare type BatchQueryOptionsCb = (args: BatchQueryOptionsCbArgs) => Promise<any>;\r\n\r\ndeclare type BatchQueryOptionsCbArgs = {\r\n    args: BatchArgs;\r\n    query: (args: BatchArgs, __internalParams?: BatchInternalParams) => Promise<unknown[]>;\r\n    __internalParams: BatchInternalParams;\r\n};\r\n\r\ndeclare type BatchTransactionOptions = {\r\n    isolationLevel?: Transaction_2.IsolationLevel;\r\n};\r\n\r\ndeclare interface BinaryTargetsEnvValue {\r\n    fromEnvVar: string | null;\r\n    value: string;\r\n    native?: boolean;\r\n}\r\n\r\nexport declare type Call<F extends Fn, P> = (F & {\r\n    params: P;\r\n})['returns'];\r\n\r\ndeclare interface CallSite {\r\n    getLocation(): LocationInFile | null;\r\n}\r\n\r\nexport declare type Cast<A, W> = A extends W ? A : W;\r\n\r\ndeclare type Client = ReturnType<typeof getPrismaClient> extends new () => infer T ? T : never;\r\n\r\nexport declare type ClientArg = {\r\n    [MethodName in string]: unknown;\r\n};\r\n\r\nexport declare type ClientArgs = {\r\n    client: ClientArg;\r\n};\r\n\r\nexport declare type ClientBuiltInProp = keyof DynamicClientExtensionThisBuiltin<never, never, never>;\r\n\r\ndeclare type ColumnType = (typeof ColumnTypeEnum)[keyof typeof ColumnTypeEnum];\r\n\r\ndeclare const ColumnTypeEnum: {\r\n    readonly Int32: 0;\r\n    readonly Int64: 1;\r\n    readonly Float: 2;\r\n    readonly Double: 3;\r\n    readonly Numeric: 4;\r\n    readonly Boolean: 5;\r\n    readonly Character: 6;\r\n    readonly Text: 7;\r\n    readonly Date: 8;\r\n    readonly Time: 9;\r\n    readonly DateTime: 10;\r\n    readonly Json: 11;\r\n    readonly Enum: 12;\r\n    readonly Bytes: 13;\r\n    readonly Set: 14;\r\n    readonly Uuid: 15;\r\n    readonly Int32Array: 64;\r\n    readonly Int64Array: 65;\r\n    readonly FloatArray: 66;\r\n    readonly DoubleArray: 67;\r\n    readonly NumericArray: 68;\r\n    readonly BooleanArray: 69;\r\n    readonly CharacterArray: 70;\r\n    readonly TextArray: 71;\r\n    readonly DateArray: 72;\r\n    readonly TimeArray: 73;\r\n    readonly DateTimeArray: 74;\r\n    readonly JsonArray: 75;\r\n    readonly EnumArray: 76;\r\n    readonly BytesArray: 77;\r\n    readonly UuidArray: 78;\r\n    readonly UnknownNumber: 128;\r\n};\r\n\r\nexport declare type Compute<T> = T extends Function ? T : {\r\n    [K in keyof T]: T[K];\r\n} & unknown;\r\n\r\nexport declare type ComputeDeep<T> = T extends Function ? T : {\r\n    [K in keyof T]: ComputeDeep<T[K]>;\r\n} & unknown;\r\n\r\ndeclare type ComputedField = {\r\n    name: string;\r\n    needs: string[];\r\n    compute: ResultArgsFieldCompute;\r\n};\r\n\r\ndeclare type ComputedFieldsMap = {\r\n    [fieldName: string]: ComputedField;\r\n};\r\n\r\ndeclare type ConnectionInfo = {\r\n    schemaName?: string;\r\n    maxBindValues?: number;\r\n};\r\n\r\ndeclare interface Context {\r\n    /**\r\n     * Get a value from the context.\r\n     *\r\n     * @param key key which identifies a context value\r\n     */\r\n    getValue(key: symbol): unknown;\r\n    /**\r\n     * Create a new context which inherits from this context and has\r\n     * the given key set to the given value.\r\n     *\r\n     * @param key context key for which to set the value\r\n     * @param value value to set for the given key\r\n     */\r\n    setValue(key: symbol, value: unknown): Context;\r\n    /**\r\n     * Return a new context which inherits from this context but does\r\n     * not contain a value for the given key.\r\n     *\r\n     * @param key context key for which to clear a value\r\n     */\r\n    deleteValue(key: symbol): Context;\r\n}\r\n\r\ndeclare type Context_2<T> = T extends {\r\n    [K: symbol]: {\r\n        ctx: infer C;\r\n    };\r\n} ? C & T & {\r\n    /**\r\n     * @deprecated Use `$name` instead.\r\n     */\r\n    name?: string;\r\n    $name?: string;\r\n    $parent?: unknown;\r\n} : T & {\r\n    /**\r\n     * @deprecated Use `$name` instead.\r\n     */\r\n    name?: string;\r\n    $name?: string;\r\n    $parent?: unknown;\r\n};\r\n\r\nexport declare type Count<O> = {\r\n    [K in keyof O]: Count<number>;\r\n} & {};\r\n\r\ndeclare type CustomDataProxyFetch = (fetch: Fetch) => Fetch;\r\n\r\ndeclare class DataLoader<T = unknown> {\r\n    private options;\r\n    batches: {\r\n        [key: string]: Job[];\r\n    };\r\n    private tickActive;\r\n    constructor(options: DataLoaderOptions<T>);\r\n    request(request: T): Promise<any>;\r\n    private dispatchBatches;\r\n    get [Symbol.toStringTag](): string;\r\n}\r\n\r\ndeclare type DataLoaderOptions<T> = {\r\n    singleLoader: (request: T) => Promise<any>;\r\n    batchLoader: (request: T[]) => Promise<any[]>;\r\n    batchBy: (request: T) => string | undefined;\r\n    batchOrder: (requestA: T, requestB: T) => number;\r\n};\r\n\r\ndeclare type Datasource = {\r\n    url?: string;\r\n};\r\n\r\ndeclare type Datasources = {\r\n    [name in string]: Datasource;\r\n};\r\n\r\ndeclare class DbNull extends NullTypesEnumValue {\r\n}\r\n\r\nexport declare const Debug: typeof debugCreate & {\r\n    enable(namespace: any): void;\r\n    disable(): any;\r\n    enabled(namespace: string): boolean;\r\n    log: (...args: string[]) => void;\r\n    formatters: {};\r\n};\r\n\r\n/**\r\n * Create a new debug instance with the given namespace.\r\n *\r\n * @example\r\n * ```ts\r\n * import Debug from '@prisma/debug'\r\n * const debug = Debug('prisma:client')\r\n * debug('Hello World')\r\n * ```\r\n */\r\ndeclare function debugCreate(namespace: string): ((...args: any[]) => void) & {\r\n    color: string;\r\n    enabled: boolean;\r\n    namespace: string;\r\n    log: (...args: string[]) => void;\r\n    extend: () => void;\r\n};\r\n\r\nexport declare namespace Decimal {\r\n    export type Constructor = typeof Decimal;\r\n    export type Instance = Decimal;\r\n    export type Rounding = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\r\n    export type Modulo = Rounding | 9;\r\n    export type Value = string | number | Decimal;\r\n\r\n    // http://mikemcl.github.io/decimal.js/#constructor-properties\r\n    export interface Config {\r\n        precision?: number;\r\n        rounding?: Rounding;\r\n        toExpNeg?: number;\r\n        toExpPos?: number;\r\n        minE?: number;\r\n        maxE?: number;\r\n        crypto?: boolean;\r\n        modulo?: Modulo;\r\n        defaults?: boolean;\r\n    }\r\n}\r\n\r\nexport declare class Decimal {\r\n    readonly d: number[];\r\n    readonly e: number;\r\n    readonly s: number;\r\n\r\n    constructor(n: Decimal.Value);\r\n\r\n    absoluteValue(): Decimal;\r\n    abs(): Decimal;\r\n\r\n    ceil(): Decimal;\r\n\r\n    clampedTo(min: Decimal.Value, max: Decimal.Value): Decimal;\r\n    clamp(min: Decimal.Value, max: Decimal.Value): Decimal;\r\n\r\n    comparedTo(n: Decimal.Value): number;\r\n    cmp(n: Decimal.Value): number;\r\n\r\n    cosine(): Decimal;\r\n    cos(): Decimal;\r\n\r\n    cubeRoot(): Decimal;\r\n    cbrt(): Decimal;\r\n\r\n    decimalPlaces(): number;\r\n    dp(): number;\r\n\r\n    dividedBy(n: Decimal.Value): Decimal;\r\n    div(n: Decimal.Value): Decimal;\r\n\r\n    dividedToIntegerBy(n: Decimal.Value): Decimal;\r\n    divToInt(n: Decimal.Value): Decimal;\r\n\r\n    equals(n: Decimal.Value): boolean;\r\n    eq(n: Decimal.Value): boolean;\r\n\r\n    floor(): Decimal;\r\n\r\n    greaterThan(n: Decimal.Value): boolean;\r\n    gt(n: Decimal.Value): boolean;\r\n\r\n    greaterThanOrEqualTo(n: Decimal.Value): boolean;\r\n    gte(n: Decimal.Value): boolean;\r\n\r\n    hyperbolicCosine(): Decimal;\r\n    cosh(): Decimal;\r\n\r\n    hyperbolicSine(): Decimal;\r\n    sinh(): Decimal;\r\n\r\n    hyperbolicTangent(): Decimal;\r\n    tanh(): Decimal;\r\n\r\n    inverseCosine(): Decimal;\r\n    acos(): Decimal;\r\n\r\n    inverseHyperbolicCosine(): Decimal;\r\n    acosh(): Decimal;\r\n\r\n    inverseHyperbolicSine(): Decimal;\r\n    asinh(): Decimal;\r\n\r\n    inverseHyperbolicTangent(): Decimal;\r\n    atanh(): Decimal;\r\n\r\n    inverseSine(): Decimal;\r\n    asin(): Decimal;\r\n\r\n    inverseTangent(): Decimal;\r\n    atan(): Decimal;\r\n\r\n    isFinite(): boolean;\r\n\r\n    isInteger(): boolean;\r\n    isInt(): boolean;\r\n\r\n    isNaN(): boolean;\r\n\r\n    isNegative(): boolean;\r\n    isNeg(): boolean;\r\n\r\n    isPositive(): boolean;\r\n    isPos(): boolean;\r\n\r\n    isZero(): boolean;\r\n\r\n    lessThan(n: Decimal.Value): boolean;\r\n    lt(n: Decimal.Value): boolean;\r\n\r\n    lessThanOrEqualTo(n: Decimal.Value): boolean;\r\n    lte(n: Decimal.Value): boolean;\r\n\r\n    logarithm(n?: Decimal.Value): Decimal;\r\n    log(n?: Decimal.Value): Decimal;\r\n\r\n    minus(n: Decimal.Value): Decimal;\r\n    sub(n: Decimal.Value): Decimal;\r\n\r\n    modulo(n: Decimal.Value): Decimal;\r\n    mod(n: Decimal.Value): Decimal;\r\n\r\n    naturalExponential(): Decimal;\r\n    exp(): Decimal;\r\n\r\n    naturalLogarithm(): Decimal;\r\n    ln(): Decimal;\r\n\r\n    negated(): Decimal;\r\n    neg(): Decimal;\r\n\r\n    plus(n: Decimal.Value): Decimal;\r\n    add(n: Decimal.Value): Decimal;\r\n\r\n    precision(includeZeros?: boolean): number;\r\n    sd(includeZeros?: boolean): number;\r\n\r\n    round(): Decimal;\r\n\r\n    sine() : Decimal;\r\n    sin() : Decimal;\r\n\r\n    squareRoot(): Decimal;\r\n    sqrt(): Decimal;\r\n\r\n    tangent() : Decimal;\r\n    tan() : Decimal;\r\n\r\n    times(n: Decimal.Value): Decimal;\r\n    mul(n: Decimal.Value) : Decimal;\r\n\r\n    toBinary(significantDigits?: number): string;\r\n    toBinary(significantDigits: number, rounding: Decimal.Rounding): string;\r\n\r\n    toDecimalPlaces(decimalPlaces?: number): Decimal;\r\n    toDecimalPlaces(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;\r\n    toDP(decimalPlaces?: number): Decimal;\r\n    toDP(decimalPlaces: number, rounding: Decimal.Rounding): Decimal;\r\n\r\n    toExponential(decimalPlaces?: number): string;\r\n    toExponential(decimalPlaces: number, rounding: Decimal.Rounding): string;\r\n\r\n    toFixed(decimalPlaces?: number): string;\r\n    toFixed(decimalPlaces: number, rounding: Decimal.Rounding): string;\r\n\r\n    toFraction(max_denominator?: Decimal.Value): Decimal[];\r\n\r\n    toHexadecimal(significantDigits?: number): string;\r\n    toHexadecimal(significantDigits: number, rounding: Decimal.Rounding): string;\r\n    toHex(significantDigits?: number): string;\r\n    toHex(significantDigits: number, rounding?: Decimal.Rounding): string;\r\n\r\n    toJSON(): string;\r\n\r\n    toNearest(n: Decimal.Value, rounding?: Decimal.Rounding): Decimal;\r\n\r\n    toNumber(): number;\r\n\r\n    toOctal(significantDigits?: number): string;\r\n    toOctal(significantDigits: number, rounding: Decimal.Rounding): string;\r\n\r\n    toPower(n: Decimal.Value): Decimal;\r\n    pow(n: Decimal.Value): Decimal;\r\n\r\n    toPrecision(significantDigits?: number): string;\r\n    toPrecision(significantDigits: number, rounding: Decimal.Rounding): string;\r\n\r\n    toSignificantDigits(significantDigits?: number): Decimal;\r\n    toSignificantDigits(significantDigits: number, rounding: Decimal.Rounding): Decimal;\r\n    toSD(significantDigits?: number): Decimal;\r\n    toSD(significantDigits: number, rounding: Decimal.Rounding): Decimal;\r\n\r\n    toString(): string;\r\n\r\n    truncated(): Decimal;\r\n    trunc(): Decimal;\r\n\r\n    valueOf(): string;\r\n\r\n    static abs(n: Decimal.Value): Decimal;\r\n    static acos(n: Decimal.Value): Decimal;\r\n    static acosh(n: Decimal.Value): Decimal;\r\n    static add(x: Decimal.Value, y: Decimal.Value): Decimal;\r\n    static asin(n: Decimal.Value): Decimal;\r\n    static asinh(n: Decimal.Value): Decimal;\r\n    static atan(n: Decimal.Value): Decimal;\r\n    static atanh(n: Decimal.Value): Decimal;\r\n    static atan2(y: Decimal.Value, x: Decimal.Value): Decimal;\r\n    static cbrt(n: Decimal.Value): Decimal;\r\n    static ceil(n: Decimal.Value): Decimal;\r\n    static clamp(n: Decimal.Value, min: Decimal.Value, max: Decimal.Value): Decimal;\r\n    static clone(object?: Decimal.Config): Decimal.Constructor;\r\n    static config(object: Decimal.Config): Decimal.Constructor;\r\n    static cos(n: Decimal.Value): Decimal;\r\n    static cosh(n: Decimal.Value): Decimal;\r\n    static div(x: Decimal.Value, y: Decimal.Value): Decimal;\r\n    static exp(n: Decimal.Value): Decimal;\r\n    static floor(n: Decimal.Value): Decimal;\r\n    static hypot(...n: Decimal.Value[]): Decimal;\r\n    static isDecimal(object: any): object is Decimal;\r\n    static ln(n: Decimal.Value): Decimal;\r\n    static log(n: Decimal.Value, base?: Decimal.Value): Decimal;\r\n    static log2(n: Decimal.Value): Decimal;\r\n    static log10(n: Decimal.Value): Decimal;\r\n    static max(...n: Decimal.Value[]): Decimal;\r\n    static min(...n: Decimal.Value[]): Decimal;\r\n    static mod(x: Decimal.Value, y: Decimal.Value): Decimal;\r\n    static mul(x: Decimal.Value, y: Decimal.Value): Decimal;\r\n    static noConflict(): Decimal.Constructor;   // Browser only\r\n    static pow(base: Decimal.Value, exponent: Decimal.Value): Decimal;\r\n    static random(significantDigits?: number): Decimal;\r\n    static round(n: Decimal.Value): Decimal;\r\n    static set(object: Decimal.Config): Decimal.Constructor;\r\n    static sign(n: Decimal.Value): number;\r\n    static sin(n: Decimal.Value): Decimal;\r\n    static sinh(n: Decimal.Value): Decimal;\r\n    static sqrt(n: Decimal.Value): Decimal;\r\n    static sub(x: Decimal.Value, y: Decimal.Value): Decimal;\r\n    static sum(...n: Decimal.Value[]): Decimal;\r\n    static tan(n: Decimal.Value): Decimal;\r\n    static tanh(n: Decimal.Value): Decimal;\r\n    static trunc(n: Decimal.Value): Decimal;\r\n\r\n    static readonly default?: Decimal.Constructor;\r\n    static readonly Decimal?: Decimal.Constructor;\r\n\r\n    static readonly precision: number;\r\n    static readonly rounding: Decimal.Rounding;\r\n    static readonly toExpNeg: number;\r\n    static readonly toExpPos: number;\r\n    static readonly minE: number;\r\n    static readonly maxE: number;\r\n    static readonly crypto: boolean;\r\n    static readonly modulo: Decimal.Modulo;\r\n\r\n    static readonly ROUND_UP: 0;\r\n    static readonly ROUND_DOWN: 1;\r\n    static readonly ROUND_CEIL: 2;\r\n    static readonly ROUND_FLOOR: 3;\r\n    static readonly ROUND_HALF_UP: 4;\r\n    static readonly ROUND_HALF_DOWN: 5;\r\n    static readonly ROUND_HALF_EVEN: 6;\r\n    static readonly ROUND_HALF_CEIL: 7;\r\n    static readonly ROUND_HALF_FLOOR: 8;\r\n    static readonly EUCLID: 9;\r\n}\r\n\r\n/**\r\n * Interface for any Decimal.js-like library\r\n * Allows us to accept Decimal.js from different\r\n * versions and some compatible alternatives\r\n */\r\nexport declare interface DecimalJsLike {\r\n    d: number[];\r\n    e: number;\r\n    s: number;\r\n    toFixed(): string;\r\n}\r\n\r\nexport declare type DefaultArgs = InternalArgs<{}, {}, {}, {}>;\r\n\r\nexport declare type DefaultSelection<P> = UnwrapPayload<{\r\n    default: P;\r\n}>['default'];\r\n\r\nexport declare function defineDmmfProperty(target: object, runtimeDataModel: RuntimeDataModel): void;\r\n\r\ndeclare function defineExtension(ext: ExtensionArgs | ((client: Client) => Client)): (client: Client) => Client;\r\n\r\ndeclare const denylist: readonly [\"$connect\", \"$disconnect\", \"$on\", \"$transaction\", \"$use\", \"$extends\"];\r\n\r\nexport declare type DevTypeMapDef = {\r\n    meta: {\r\n        modelProps: string;\r\n    };\r\n    model: {\r\n        [Model in PropertyKey]: {\r\n            [Operation in PropertyKey]: DevTypeMapFnDef;\r\n        };\r\n    };\r\n    other: {\r\n        [Operation in PropertyKey]: DevTypeMapFnDef;\r\n    };\r\n};\r\n\r\nexport declare type DevTypeMapFnDef = {\r\n    args: any;\r\n    result: any;\r\n    payload: OperationPayload;\r\n};\r\n\r\nexport declare namespace DMMF {\r\n    export type Document = ReadonlyDeep_2<{\r\n        datamodel: Datamodel;\r\n        schema: Schema;\r\n        mappings: Mappings;\r\n    }>;\r\n    export type Mappings = ReadonlyDeep_2<{\r\n        modelOperations: ModelMapping[];\r\n        otherOperations: {\r\n            read: string[];\r\n            write: string[];\r\n        };\r\n    }>;\r\n    export type OtherOperationMappings = ReadonlyDeep_2<{\r\n        read: string[];\r\n        write: string[];\r\n    }>;\r\n    export type DatamodelEnum = ReadonlyDeep_2<{\r\n        name: string;\r\n        values: EnumValue[];\r\n        dbName?: string | null;\r\n        documentation?: string;\r\n    }>;\r\n    export type SchemaEnum = ReadonlyDeep_2<{\r\n        name: string;\r\n        values: string[];\r\n    }>;\r\n    export type EnumValue = ReadonlyDeep_2<{\r\n        name: string;\r\n        dbName: string | null;\r\n    }>;\r\n    export type Datamodel = ReadonlyDeep_2<{\r\n        models: Model[];\r\n        enums: DatamodelEnum[];\r\n        types: Model[];\r\n    }>;\r\n    export type uniqueIndex = ReadonlyDeep_2<{\r\n        name: string;\r\n        fields: string[];\r\n    }>;\r\n    export type PrimaryKey = ReadonlyDeep_2<{\r\n        name: string | null;\r\n        fields: string[];\r\n    }>;\r\n    export type Model = ReadonlyDeep_2<{\r\n        name: string;\r\n        dbName: string | null;\r\n        fields: Field[];\r\n        uniqueFields: string[][];\r\n        uniqueIndexes: uniqueIndex[];\r\n        documentation?: string;\r\n        primaryKey: PrimaryKey | null;\r\n        isGenerated?: boolean;\r\n    }>;\r\n    export type FieldKind = 'scalar' | 'object' | 'enum' | 'unsupported';\r\n    export type FieldNamespace = 'model' | 'prisma';\r\n    export type FieldLocation = 'scalar' | 'inputObjectTypes' | 'outputObjectTypes' | 'enumTypes' | 'fieldRefTypes';\r\n    export type Field = ReadonlyDeep_2<{\r\n        kind: FieldKind;\r\n        name: string;\r\n        isRequired: boolean;\r\n        isList: boolean;\r\n        isUnique: boolean;\r\n        isId: boolean;\r\n        isReadOnly: boolean;\r\n        isGenerated?: boolean;\r\n        isUpdatedAt?: boolean;\r\n        /**\r\n         * Describes the data type in the same the way it is defined in the Prisma schema:\r\n         * BigInt, Boolean, Bytes, DateTime, Decimal, Float, Int, JSON, String, $ModelName\r\n         */\r\n        type: string;\r\n        dbName?: string | null;\r\n        hasDefaultValue: boolean;\r\n        default?: FieldDefault | FieldDefaultScalar | FieldDefaultScalar[];\r\n        relationFromFields?: string[];\r\n        relationToFields?: string[];\r\n        relationOnDelete?: string;\r\n        relationName?: string;\r\n        documentation?: string;\r\n    }>;\r\n    export type FieldDefault = ReadonlyDeep_2<{\r\n        name: string;\r\n        args: any[];\r\n    }>;\r\n    export type FieldDefaultScalar = string | boolean | number;\r\n    export type Schema = ReadonlyDeep_2<{\r\n        rootQueryType?: string;\r\n        rootMutationType?: string;\r\n        inputObjectTypes: {\r\n            model?: InputType[];\r\n            prisma: InputType[];\r\n        };\r\n        outputObjectTypes: {\r\n            model: OutputType[];\r\n            prisma: OutputType[];\r\n        };\r\n        enumTypes: {\r\n            model?: SchemaEnum[];\r\n            prisma: SchemaEnum[];\r\n        };\r\n        fieldRefTypes: {\r\n            prisma?: FieldRefType[];\r\n        };\r\n    }>;\r\n    export type Query = ReadonlyDeep_2<{\r\n        name: string;\r\n        args: SchemaArg[];\r\n        output: QueryOutput;\r\n    }>;\r\n    export type QueryOutput = ReadonlyDeep_2<{\r\n        name: string;\r\n        isRequired: boolean;\r\n        isList: boolean;\r\n    }>;\r\n    export type TypeRef<AllowedLocations extends FieldLocation> = {\r\n        isList: boolean;\r\n        type: string;\r\n        location: AllowedLocations;\r\n        namespace?: FieldNamespace;\r\n    };\r\n    export type InputTypeRef = TypeRef<'scalar' | 'inputObjectTypes' | 'enumTypes' | 'fieldRefTypes'>;\r\n    export type SchemaArg = ReadonlyDeep_2<{\r\n        name: string;\r\n        comment?: string;\r\n        isNullable: boolean;\r\n        isRequired: boolean;\r\n        inputTypes: InputTypeRef[];\r\n        deprecation?: Deprecation;\r\n    }>;\r\n    export type OutputType = ReadonlyDeep_2<{\r\n        name: string;\r\n        fields: SchemaField[];\r\n    }>;\r\n    export type SchemaField = ReadonlyDeep_2<{\r\n        name: string;\r\n        isNullable?: boolean;\r\n        outputType: OutputTypeRef;\r\n        args: SchemaArg[];\r\n        deprecation?: Deprecation;\r\n        documentation?: string;\r\n    }>;\r\n    export type OutputTypeRef = TypeRef<'scalar' | 'outputObjectTypes' | 'enumTypes'>;\r\n    export type Deprecation = ReadonlyDeep_2<{\r\n        sinceVersion: string;\r\n        reason: string;\r\n        plannedRemovalVersion?: string;\r\n    }>;\r\n    export type InputType = ReadonlyDeep_2<{\r\n        name: string;\r\n        constraints: {\r\n            maxNumFields: number | null;\r\n            minNumFields: number | null;\r\n            fields?: string[];\r\n        };\r\n        meta?: {\r\n            source?: string;\r\n        };\r\n        fields: SchemaArg[];\r\n    }>;\r\n    export type FieldRefType = ReadonlyDeep_2<{\r\n        name: string;\r\n        allowTypes: FieldRefAllowType[];\r\n        fields: SchemaArg[];\r\n    }>;\r\n    export type FieldRefAllowType = TypeRef<'scalar' | 'enumTypes'>;\r\n    export type ModelMapping = ReadonlyDeep_2<{\r\n        model: string;\r\n        plural: string;\r\n        findUnique?: string | null;\r\n        findUniqueOrThrow?: string | null;\r\n        findFirst?: string | null;\r\n        findFirstOrThrow?: string | null;\r\n        findMany?: string | null;\r\n        create?: string | null;\r\n        createMany?: string | null;\r\n        createManyAndReturn?: string | null;\r\n        update?: string | null;\r\n        updateMany?: string | null;\r\n        upsert?: string | null;\r\n        delete?: string | null;\r\n        deleteMany?: string | null;\r\n        aggregate?: string | null;\r\n        groupBy?: string | null;\r\n        count?: string | null;\r\n        findRaw?: string | null;\r\n        aggregateRaw?: string | null;\r\n    }>;\r\n    export enum ModelAction {\r\n        findUnique = \"findUnique\",\r\n        findUniqueOrThrow = \"findUniqueOrThrow\",\r\n        findFirst = \"findFirst\",\r\n        findFirstOrThrow = \"findFirstOrThrow\",\r\n        findMany = \"findMany\",\r\n        create = \"create\",\r\n        createMany = \"createMany\",\r\n        createManyAndReturn = \"createManyAndReturn\",\r\n        update = \"update\",\r\n        updateMany = \"updateMany\",\r\n        upsert = \"upsert\",\r\n        delete = \"delete\",\r\n        deleteMany = \"deleteMany\",\r\n        groupBy = \"groupBy\",\r\n        count = \"count\",// TODO: count does not actually exist, why?\r\n        aggregate = \"aggregate\",\r\n        findRaw = \"findRaw\",\r\n        aggregateRaw = \"aggregateRaw\"\r\n    }\r\n}\r\n\r\nexport declare interface DriverAdapter extends Queryable {\r\n    /**\r\n     * Starts new transaction.\r\n     */\r\n    startTransaction(): Promise<Result_4<Transaction>>;\r\n    /**\r\n     * Optional method that returns extra connection info\r\n     */\r\n    getConnectionInfo?(): Result_4<ConnectionInfo>;\r\n}\r\n\r\n/** Client */\r\nexport declare type DynamicClientExtensionArgs<C_, TypeMap extends TypeMapDef, TypeMapCb extends TypeMapCbDef, ExtArgs extends Record<string, any>> = {\r\n    [P in keyof C_]: unknown;\r\n} & {\r\n    [K: symbol]: {\r\n        ctx: Optional<DynamicClientExtensionThis<TypeMap, TypeMapCb, ExtArgs>, ITXClientDenyList> & {\r\n            $parent: Optional<DynamicClientExtensionThis<TypeMap, TypeMapCb, ExtArgs>, ITXClientDenyList>;\r\n        };\r\n    };\r\n};\r\n\r\nexport declare type DynamicClientExtensionThis<TypeMap extends TypeMapDef, TypeMapCb extends TypeMapCbDef, ExtArgs extends Record<string, any>> = {\r\n    [P in keyof ExtArgs['client']]: Return<ExtArgs['client'][P]>;\r\n} & {\r\n    [P in Exclude<TypeMap['meta']['modelProps'], keyof ExtArgs['client']>]: DynamicModelExtensionThis<TypeMap, ModelKey<TypeMap, P>, ExtArgs>;\r\n} & {\r\n    [P in Exclude<keyof TypeMap['other']['operations'], keyof ExtArgs['client']>]: <R = GetResult<TypeMap['other']['payload'], any, P & Operation>>(...args: ToTuple<TypeMap['other']['operations'][P]['args']>) => PrismaPromise<R>;\r\n} & {\r\n    [P in Exclude<ClientBuiltInProp, keyof ExtArgs['client']>]: DynamicClientExtensionThisBuiltin<TypeMap, TypeMapCb, ExtArgs>[P];\r\n} & {\r\n    [K: symbol]: {\r\n        types: TypeMap['other'];\r\n    };\r\n};\r\n\r\nexport declare type DynamicClientExtensionThisBuiltin<TypeMap extends TypeMapDef, TypeMapCb extends TypeMapCbDef, ExtArgs extends Record<string, any>> = {\r\n    $extends: ExtendsHook<'extends', TypeMapCb, ExtArgs>;\r\n    $transaction<P extends PrismaPromise<any>[]>(arg: [...P], options?: {\r\n        isolationLevel?: TypeMap['meta']['txIsolationLevel'];\r\n    }): Promise<UnwrapTuple<P>>;\r\n    $transaction<R>(fn: (client: Omit<DynamicClientExtensionThis<TypeMap, TypeMapCb, ExtArgs>, ITXClientDenyList>) => Promise<R>, options?: {\r\n        maxWait?: number;\r\n        timeout?: number;\r\n        isolationLevel?: TypeMap['meta']['txIsolationLevel'];\r\n    }): Promise<R>;\r\n    $disconnect(): Promise<void>;\r\n    $connect(): Promise<void>;\r\n};\r\n\r\n/** Model */\r\nexport declare type DynamicModelExtensionArgs<M_, TypeMap extends TypeMapDef, TypeMapCb extends TypeMapCbDef, ExtArgs extends Record<string, any>> = {\r\n    [K in keyof M_]: K extends '$allModels' ? {\r\n        [P in keyof M_[K]]?: unknown;\r\n    } & {\r\n        [K: symbol]: {};\r\n    } : K extends TypeMap['meta']['modelProps'] ? {\r\n        [P in keyof M_[K]]?: unknown;\r\n    } & {\r\n        [K: symbol]: {\r\n            ctx: DynamicModelExtensionThis<TypeMap, ModelKey<TypeMap, K>, ExtArgs> & {\r\n                $parent: DynamicClientExtensionThis<TypeMap, TypeMapCb, ExtArgs>;\r\n            } & {\r\n                $name: ModelKey<TypeMap, K>;\r\n            } & {\r\n                /**\r\n                 * @deprecated Use `$name` instead.\r\n                 */\r\n                name: ModelKey<TypeMap, K>;\r\n            };\r\n        };\r\n    } : never;\r\n};\r\n\r\nexport declare type DynamicModelExtensionFluentApi<TypeMap extends TypeMapDef, M extends PropertyKey, P extends PropertyKey, Null> = {\r\n    [K in keyof TypeMap['model'][M]['payload']['objects']]: <A>(args?: Exact<A, Path<TypeMap['model'][M]['operations'][P]['args']['select'], [K]>>) => PrismaPromise<Path<DynamicModelExtensionFnResultBase<TypeMap, M, {\r\n        select: {\r\n            [P in K]: A;\r\n        };\r\n    }, P>, [K]> | Null> & DynamicModelExtensionFluentApi<TypeMap, (TypeMap['model'][M]['payload']['objects'][K] & {})['name'], P, Null | Select<TypeMap['model'][M]['payload']['objects'][K], null>>;\r\n};\r\n\r\nexport declare type DynamicModelExtensionFnResult<TypeMap extends TypeMapDef, M extends PropertyKey, A, P extends PropertyKey, Null = DynamicModelExtensionFnResultNull<P>> = P extends FluentOperation ? DynamicModelExtensionFluentApi<TypeMap, M, P, Null> & PrismaPromise<DynamicModelExtensionFnResultBase<TypeMap, M, A, P> | Null> : PrismaPromise<DynamicModelExtensionFnResultBase<TypeMap, M, A, P>>;\r\n\r\nexport declare type DynamicModelExtensionFnResultBase<TypeMap extends TypeMapDef, M extends PropertyKey, A, P extends PropertyKey> = GetResult<TypeMap['model'][M]['payload'], A, P & Operation>;\r\n\r\nexport declare type DynamicModelExtensionFnResultNull<P extends PropertyKey> = P extends 'findUnique' | 'findFirst' ? null : never;\r\n\r\nexport declare type DynamicModelExtensionOperationFn<TypeMap extends TypeMapDef, M extends PropertyKey, P extends PropertyKey> = {} extends TypeMap['model'][M]['operations'][P]['args'] ? <A extends TypeMap['model'][M]['operations'][P]['args']>(args?: Exact<A, TypeMap['model'][M]['operations'][P]['args']>) => DynamicModelExtensionFnResult<TypeMap, M, A, P> : <A extends TypeMap['model'][M]['operations'][P]['args']>(args: Exact<A, TypeMap['model'][M]['operations'][P]['args']>) => DynamicModelExtensionFnResult<TypeMap, M, A, P>;\r\n\r\nexport declare type DynamicModelExtensionThis<TypeMap extends TypeMapDef, M extends PropertyKey, ExtArgs extends Record<string, any>> = {\r\n    [P in keyof ExtArgs['model'][Uncapitalize<M & string>]]: Return<ExtArgs['model'][Uncapitalize<M & string>][P]>;\r\n} & {\r\n    [P in Exclude<keyof TypeMap['model'][M]['operations'], keyof ExtArgs['model'][Uncapitalize<M & string>]>]: DynamicModelExtensionOperationFn<TypeMap, M, P>;\r\n} & {\r\n    [P in Exclude<'fields', keyof ExtArgs['model'][Uncapitalize<M & string>]>]: TypeMap['model'][M]['fields'];\r\n} & {\r\n    [K: symbol]: {\r\n        types: TypeMap['model'][M];\r\n    };\r\n};\r\n\r\n/** Query */\r\nexport declare type DynamicQueryExtensionArgs<Q_, TypeMap extends TypeMapDef> = {\r\n    [K in keyof Q_]: K extends '$allOperations' ? (args: {\r\n        model?: string;\r\n        operation: string;\r\n        args: any;\r\n        query: (args: any) => PrismaPromise<any>;\r\n    }) => Promise<any> : K extends '$allModels' ? {\r\n        [P in keyof Q_[K] | keyof TypeMap['model'][keyof TypeMap['model']]['operations'] | '$allOperations']?: P extends '$allOperations' ? DynamicQueryExtensionCb<TypeMap, 'model', keyof TypeMap['model'], keyof TypeMap['model'][keyof TypeMap['model']]['operations']> : P extends keyof TypeMap['model'][keyof TypeMap['model']]['operations'] ? DynamicQueryExtensionCb<TypeMap, 'model', keyof TypeMap['model'], P> : never;\r\n    } : K extends TypeMap['meta']['modelProps'] ? {\r\n        [P in keyof Q_[K] | keyof TypeMap['model'][ModelKey<TypeMap, K>]['operations'] | '$allOperations']?: P extends '$allOperations' ? DynamicQueryExtensionCb<TypeMap, 'model', ModelKey<TypeMap, K>, keyof TypeMap['model'][ModelKey<TypeMap, K>]['operations']> : P extends keyof TypeMap['model'][ModelKey<TypeMap, K>]['operations'] ? DynamicQueryExtensionCb<TypeMap, 'model', ModelKey<TypeMap, K>, P> : never;\r\n    } : K extends keyof TypeMap['other']['operations'] ? DynamicQueryExtensionCb<[TypeMap], 0, 'other', K> : never;\r\n};\r\n\r\nexport declare type DynamicQueryExtensionCb<TypeMap extends TypeMapDef, _0 extends PropertyKey, _1 extends PropertyKey, _2 extends PropertyKey> = <A extends DynamicQueryExtensionCbArgs<TypeMap, _0, _1, _2>>(args: A) => Promise<TypeMap[_0][_1][_2]['result']>;\r\n\r\nexport declare type DynamicQueryExtensionCbArgs<TypeMap extends TypeMapDef, _0 extends PropertyKey, _1 extends PropertyKey, _2 extends PropertyKey> = (_1 extends unknown ? _2 extends unknown ? {\r\n    args: DynamicQueryExtensionCbArgsArgs<TypeMap, _0, _1, _2>;\r\n    model: _0 extends 0 ? undefined : _1;\r\n    operation: _2;\r\n    query: <A extends DynamicQueryExtensionCbArgsArgs<TypeMap, _0, _1, _2>>(args: A) => PrismaPromise<TypeMap[_0][_1]['operations'][_2]['result']>;\r\n} : never : never) & {\r\n    query: (args: DynamicQueryExtensionCbArgsArgs<TypeMap, _0, _1, _2>) => PrismaPromise<TypeMap[_0][_1]['operations'][_2]['result']>;\r\n};\r\n\r\nexport declare type DynamicQueryExtensionCbArgsArgs<TypeMap extends TypeMapDef, _0 extends PropertyKey, _1 extends PropertyKey, _2 extends PropertyKey> = _2 extends '$queryRaw' | '$executeRaw' ? Sql : TypeMap[_0][_1]['operations'][_2]['args'];\r\n\r\n/** Result */\r\nexport declare type DynamicResultExtensionArgs<R_, TypeMap extends TypeMapDef> = {\r\n    [K in keyof R_]: {\r\n        [P in keyof R_[K]]?: {\r\n            needs?: DynamicResultExtensionNeeds<TypeMap, ModelKey<TypeMap, K>, R_[K][P]>;\r\n            compute(data: DynamicResultExtensionData<TypeMap, ModelKey<TypeMap, K>, R_[K][P]>): any;\r\n        };\r\n    };\r\n};\r\n\r\nexport declare type DynamicResultExtensionData<TypeMap extends TypeMapDef, M extends PropertyKey, S> = GetFindResult<TypeMap['model'][M]['payload'], {\r\n    select: S;\r\n}>;\r\n\r\nexport declare type DynamicResultExtensionNeeds<TypeMap extends TypeMapDef, M extends PropertyKey, S> = {\r\n    [K in keyof S]: K extends keyof TypeMap['model'][M]['payload']['scalars'] ? S[K] : never;\r\n} & {\r\n    [N in keyof TypeMap['model'][M]['payload']['scalars']]?: boolean;\r\n};\r\n\r\n/**\r\n * Placeholder value for \"no text\".\r\n */\r\nexport declare const empty: Sql;\r\n\r\nexport declare type EmptyToUnknown<T> = T;\r\n\r\ndeclare interface Engine<InteractiveTransactionPayload = unknown> {\r\n    /** The name of the engine. This is meant to be consumed externally */\r\n    readonly name: string;\r\n    onBeforeExit(callback: () => Promise<void>): void;\r\n    start(): Promise<void>;\r\n    stop(): Promise<void>;\r\n    version(forceRun?: boolean): Promise<string> | string;\r\n    request<T>(query: JsonQuery, options: RequestOptions_2<InteractiveTransactionPayload>): Promise<QueryEngineResult<T>>;\r\n    requestBatch<T>(queries: JsonQuery[], options: RequestBatchOptions<InteractiveTransactionPayload>): Promise<BatchQueryEngineResult<T>[]>;\r\n    transaction(action: 'start', headers: Transaction_2.TransactionHeaders, options: Transaction_2.Options): Promise<Transaction_2.InteractiveTransactionInfo<unknown>>;\r\n    transaction(action: 'commit', headers: Transaction_2.TransactionHeaders, info: Transaction_2.InteractiveTransactionInfo<unknown>): Promise<void>;\r\n    transaction(action: 'rollback', headers: Transaction_2.TransactionHeaders, info: Transaction_2.InteractiveTransactionInfo<unknown>): Promise<void>;\r\n    metrics(options: MetricsOptionsJson): Promise<Metrics>;\r\n    metrics(options: MetricsOptionsPrometheus): Promise<string>;\r\n    applyPendingMigrations(): Promise<void>;\r\n}\r\n\r\ndeclare interface EngineConfig {\r\n    cwd: string;\r\n    dirname: string;\r\n    datamodelPath: string;\r\n    enableDebugLogs?: boolean;\r\n    allowTriggerPanic?: boolean;\r\n    prismaPath?: string;\r\n    generator?: GeneratorConfig;\r\n    overrideDatasources: Datasources;\r\n    showColors?: boolean;\r\n    logQueries?: boolean;\r\n    logLevel?: 'info' | 'warn';\r\n    env: Record<string, string>;\r\n    flags?: string[];\r\n    clientVersion: string;\r\n    engineVersion: string;\r\n    previewFeatures?: string[];\r\n    engineEndpoint?: string;\r\n    activeProvider?: string;\r\n    logEmitter: LogEmitter;\r\n    transactionOptions: Transaction_2.Options;\r\n    /**\r\n     * Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-planetscale`.\r\n     * If set, this is only used in the library engine, and all queries would be performed through it,\r\n     * rather than Prisma's Rust drivers.\r\n     * @remarks only used by LibraryEngine.ts\r\n     */\r\n    adapter?: ErrorCapturingDriverAdapter;\r\n    /**\r\n     * The contents of the schema encoded into a string\r\n     * @remarks only used by DataProxyEngine.ts\r\n     */\r\n    inlineSchema: string;\r\n    /**\r\n     * The contents of the datasource url saved in a string\r\n     * @remarks only used by DataProxyEngine.ts\r\n     */\r\n    inlineDatasources: GetPrismaClientConfig['inlineDatasources'];\r\n    /**\r\n     * The string hash that was produced for a given schema\r\n     * @remarks only used by DataProxyEngine.ts\r\n     */\r\n    inlineSchemaHash: string;\r\n    /**\r\n     * The helper for interaction with OTEL tracing\r\n     * @remarks enabling is determined by the client and @prisma/instrumentation package\r\n     */\r\n    tracingHelper: TracingHelper;\r\n    /**\r\n     * Information about whether we have not found a schema.prisma file in the\r\n     * default location, and that we fell back to finding the schema.prisma file\r\n     * in the current working directory. This usually means it has been bundled.\r\n     */\r\n    isBundled?: boolean;\r\n    /**\r\n     * Web Assembly module loading configuration\r\n     */\r\n    engineWasm?: WasmLoadingConfig;\r\n    /**\r\n     * Allows Accelerate to use runtime utilities from the client. These are\r\n     * necessary for the AccelerateEngine to function correctly.\r\n     */\r\n    accelerateUtils?: {\r\n        resolveDatasourceUrl: typeof resolveDatasourceUrl;\r\n        getBatchRequestPayload: typeof getBatchRequestPayload;\r\n        prismaGraphQLToJSError: typeof prismaGraphQLToJSError;\r\n        PrismaClientUnknownRequestError: typeof PrismaClientUnknownRequestError;\r\n        PrismaClientInitializationError: typeof PrismaClientInitializationError;\r\n        PrismaClientKnownRequestError: typeof PrismaClientKnownRequestError;\r\n        debug: (...args: any[]) => void;\r\n        engineVersion: string;\r\n        clientVersion: string;\r\n    };\r\n}\r\n\r\ndeclare type EngineEvent<E extends EngineEventType> = E extends QueryEventType ? QueryEvent : LogEvent;\r\n\r\ndeclare type EngineEventType = QueryEventType | LogEventType;\r\n\r\ndeclare type EngineProtocol = 'graphql' | 'json';\r\n\r\ndeclare type EngineSpan = {\r\n    span: boolean;\r\n    name: string;\r\n    trace_id: string;\r\n    span_id: string;\r\n    parent_span_id: string;\r\n    start_time: [number, number];\r\n    end_time: [number, number];\r\n    attributes?: Record<string, string>;\r\n    links?: {\r\n        trace_id: string;\r\n        span_id: string;\r\n    }[];\r\n};\r\n\r\ndeclare type EngineSpanEvent = {\r\n    span: boolean;\r\n    spans: EngineSpan[];\r\n};\r\n\r\ndeclare interface EnvValue {\r\n    fromEnvVar: null | string;\r\n    value: null | string;\r\n}\r\n\r\nexport declare type Equals<A, B> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? 1 : 0;\r\n\r\ndeclare type Error_2 = {\r\n    kind: 'GenericJs';\r\n    id: number;\r\n} | {\r\n    kind: 'UnsupportedNativeDataType';\r\n    type: string;\r\n} | {\r\n    kind: 'Postgres';\r\n    code: string;\r\n    severity: string;\r\n    message: string;\r\n    detail: string | undefined;\r\n    column: string | undefined;\r\n    hint: string | undefined;\r\n} | {\r\n    kind: 'Mysql';\r\n    code: number;\r\n    message: string;\r\n    state: string;\r\n} | {\r\n    kind: 'Sqlite';\r\n    /**\r\n     * Sqlite extended error code: https://www.sqlite.org/rescode.html\r\n     */\r\n    extendedCode: number;\r\n    message: string;\r\n};\r\n\r\ndeclare interface ErrorCapturingDriverAdapter extends DriverAdapter {\r\n    readonly errorRegistry: ErrorRegistry;\r\n}\r\n\r\ndeclare type ErrorFormat = 'pretty' | 'colorless' | 'minimal';\r\n\r\ndeclare type ErrorRecord = {\r\n    error: unknown;\r\n};\r\n\r\ndeclare interface ErrorRegistry {\r\n    consumeError(id: number): ErrorRecord | undefined;\r\n}\r\n\r\ndeclare interface ErrorWithBatchIndex {\r\n    batchRequestIdx?: number;\r\n}\r\n\r\ndeclare type EventCallback<E extends ExtendedEventType> = [E] extends ['beforeExit'] ? () => Promise<void> : [E] extends [LogLevel] ? (event: EngineEvent<E>) => void : never;\r\n\r\nexport declare type Exact<A, W> = (A extends unknown ? (W extends A ? {\r\n    [K in keyof A]: Exact<A[K], W[K]>;\r\n} : W) : never) | (A extends Narrowable ? A : never);\r\n\r\n/**\r\n * Defines Exception.\r\n *\r\n * string or an object with one of (message or name or code) and optional stack\r\n */\r\ndeclare type Exception = ExceptionWithCode | ExceptionWithMessage | ExceptionWithName | string;\r\n\r\ndeclare interface ExceptionWithCode {\r\n    code: string | number;\r\n    name?: string;\r\n    message?: string;\r\n    stack?: string;\r\n}\r\n\r\ndeclare interface ExceptionWithMessage {\r\n    code?: string | number;\r\n    message: string;\r\n    name?: string;\r\n    stack?: string;\r\n}\r\n\r\ndeclare interface ExceptionWithName {\r\n    code?: string | number;\r\n    message?: string;\r\n    name: string;\r\n    stack?: string;\r\n}\r\n\r\ndeclare type ExtendedEventType = LogLevel | 'beforeExit';\r\n\r\ndeclare type ExtendedSpanOptions = SpanOptions & {\r\n    /** The name of the span */\r\n    name: string;\r\n    internal?: boolean;\r\n    middleware?: boolean;\r\n    /** Whether it propagates context (?=true) */\r\n    active?: boolean;\r\n    /** The context to append the span to */\r\n    context?: Context;\r\n};\r\n\r\n/** $extends, defineExtension */\r\nexport declare interface ExtendsHook<Variant extends 'extends' | 'define', TypeMapCb extends TypeMapCbDef, ExtArgs extends Record<string, any>, TypeMap extends TypeMapDef = Call<TypeMapCb, {\r\n    extArgs: ExtArgs;\r\n}>> {\r\n    extArgs: ExtArgs;\r\n    <R_ extends {\r\n        [K in TypeMap['meta']['modelProps'] | '$allModels']?: unknown;\r\n    }, R, M_ extends {\r\n        [K in TypeMap['meta']['modelProps'] | '$allModels']?: unknown;\r\n    }, M, Q_ extends {\r\n        [K in TypeMap['meta']['modelProps'] | '$allModels' | keyof TypeMap['other']['operations'] | '$allOperations']?: unknown;\r\n    }, C_ extends {\r\n        [K in string]?: unknown;\r\n    }, C, Args extends InternalArgs = InternalArgs<R, M, {}, C>, MergedArgs extends InternalArgs = MergeExtArgs<TypeMap, ExtArgs, Args>>(extension: ((client: DynamicClientExtensionThis<TypeMap, TypeMapCb, ExtArgs>) => {\r\n        $extends: {\r\n            extArgs: Args;\r\n        };\r\n    }) | {\r\n        name?: string;\r\n        query?: DynamicQueryExtensionArgs<Q_, TypeMap>;\r\n        result?: DynamicResultExtensionArgs<R_, TypeMap> & R;\r\n        model?: DynamicModelExtensionArgs<M_, TypeMap, TypeMapCb, ExtArgs> & M;\r\n        client?: DynamicClientExtensionArgs<C_, TypeMap, TypeMapCb, ExtArgs> & C;\r\n    }): {\r\n        extends: DynamicClientExtensionThis<Call<TypeMapCb, {\r\n            extArgs: MergedArgs;\r\n        }>, TypeMapCb, MergedArgs>;\r\n        define: (client: any) => {\r\n            $extends: {\r\n                extArgs: Args;\r\n            };\r\n        };\r\n    }[Variant];\r\n}\r\n\r\nexport declare type ExtensionArgs = Optional<RequiredExtensionArgs>;\r\n\r\ndeclare namespace Extensions {\r\n    export {\r\n        defineExtension,\r\n        getExtensionContext\r\n    }\r\n}\r\nexport { Extensions }\r\n\r\ndeclare namespace Extensions_2 {\r\n    export {\r\n        InternalArgs,\r\n        DefaultArgs,\r\n        GetPayloadResult,\r\n        GetSelect,\r\n        GetOmit,\r\n        DynamicQueryExtensionArgs,\r\n        DynamicQueryExtensionCb,\r\n        DynamicQueryExtensionCbArgs,\r\n        DynamicQueryExtensionCbArgsArgs,\r\n        DynamicResultExtensionArgs,\r\n        DynamicResultExtensionNeeds,\r\n        DynamicResultExtensionData,\r\n        DynamicModelExtensionArgs,\r\n        DynamicModelExtensionThis,\r\n        DynamicModelExtensionOperationFn,\r\n        DynamicModelExtensionFnResult,\r\n        DynamicModelExtensionFnResultBase,\r\n        DynamicModelExtensionFluentApi,\r\n        DynamicModelExtensionFnResultNull,\r\n        DynamicClientExtensionArgs,\r\n        DynamicClientExtensionThis,\r\n        ClientBuiltInProp,\r\n        DynamicClientExtensionThisBuiltin,\r\n        ExtendsHook,\r\n        MergeExtArgs,\r\n        AllModelsToStringIndex,\r\n        TypeMapDef,\r\n        DevTypeMapDef,\r\n        DevTypeMapFnDef,\r\n        TypeMapCbDef,\r\n        ModelKey,\r\n        RequiredExtensionArgs as UserArgs\r\n    }\r\n}\r\n\r\ndeclare type Fetch = typeof nodeFetch;\r\n\r\n/**\r\n * A reference to a specific field of a specific model\r\n */\r\nexport declare interface FieldRef<Model, FieldType> {\r\n    readonly modelName: Model;\r\n    readonly name: string;\r\n    readonly typeName: FieldType;\r\n    readonly isList: boolean;\r\n}\r\n\r\nexport declare type FluentOperation = 'findUnique' | 'findUniqueOrThrow' | 'findFirst' | 'findFirstOrThrow' | 'create' | 'update' | 'upsert' | 'delete';\r\n\r\nexport declare interface Fn<Params = unknown, Returns = unknown> {\r\n    params: Params;\r\n    returns: Returns;\r\n}\r\n\r\ndeclare interface GeneratorConfig {\r\n    name: string;\r\n    output: EnvValue | null;\r\n    isCustomOutput?: boolean;\r\n    provider: EnvValue;\r\n    config: {\r\n        /** `output` is a reserved name and will only be available directly at `generator.output` */\r\n        output?: never;\r\n        /** `provider` is a reserved name and will only be available directly at `generator.provider` */\r\n        provider?: never;\r\n        /** `binaryTargets` is a reserved name and will only be available directly at `generator.binaryTargets` */\r\n        binaryTargets?: never;\r\n        /** `previewFeatures` is a reserved name and will only be available directly at `generator.previewFeatures` */\r\n        previewFeatures?: never;\r\n    } & {\r\n        [key: string]: string | string[] | undefined;\r\n    };\r\n    binaryTargets: BinaryTargetsEnvValue[];\r\n    previewFeatures: string[];\r\n}\r\n\r\nexport declare type GetAggregateResult<P extends OperationPayload, A> = {\r\n    [K in keyof A as K extends Aggregate ? K : never]: K extends '_count' ? A[K] extends true ? number : Count<A[K]> : {\r\n        [J in keyof A[K] & string]: P['scalars'][J] | null;\r\n    };\r\n};\r\n\r\ndeclare function getBatchRequestPayload(batch: JsonQuery[], transaction?: TransactionOptions_2<unknown>): QueryEngineBatchRequest;\r\n\r\nexport declare type GetBatchResult = {\r\n    count: number;\r\n};\r\n\r\nexport declare type GetCountResult<A> = A extends {\r\n    select: infer S;\r\n} ? (S extends true ? number : Count<S>) : number;\r\n\r\ndeclare function getExtensionContext<T>(that: T): Context_2<T>;\r\n\r\nexport declare type GetFindResult<P extends OperationPayload, A> = A extends {\r\n    omit: infer Omission;\r\n} ? Compute<Omit_2<GetSelectIncludeResult<P, A>, TrueKeys<Omission>>> : GetSelectIncludeResult<P, A>;\r\n\r\nexport declare type GetGroupByResult<P extends OperationPayload, A> = A extends {\r\n    by: string[];\r\n} ? Array<GetAggregateResult<P, A> & {\r\n    [K in A['by'][number]]: P['scalars'][K];\r\n}> : A extends {\r\n    by: string;\r\n} ? Array<GetAggregateResult<P, A> & {\r\n    [K in A['by']]: P['scalars'][K];\r\n}> : {}[];\r\n\r\nexport declare type GetOmit<BaseKeys extends string, R extends InternalArgs['result'][string]> = {\r\n    [K in (string extends keyof R ? never : keyof R) | BaseKeys]?: boolean;\r\n};\r\n\r\nexport declare type GetPayloadResult<Base extends Record<any, any>, R extends InternalArgs['result'][string], KR extends keyof R = string extends keyof R ? never : keyof R> = unknown extends R ? Base : {\r\n    [K in KR | keyof Base]: K extends KR ? R[K] extends () => {\r\n        compute: (...args: any) => infer C;\r\n    } ? C : never : Base[K];\r\n};\r\n\r\nexport declare function getPrismaClient(config: GetPrismaClientConfig): {\r\n    new (optionsArg?: PrismaClientOptions): {\r\n        _originalClient: any;\r\n        _runtimeDataModel: RuntimeDataModel;\r\n        _requestHandler: RequestHandler;\r\n        _connectionPromise?: Promise<any> | undefined;\r\n        _disconnectionPromise?: Promise<any> | undefined;\r\n        _engineConfig: EngineConfig;\r\n        _accelerateEngineConfig: AccelerateEngineConfig;\r\n        _clientVersion: string;\r\n        _errorFormat: ErrorFormat;\r\n        _tracingHelper: TracingHelper;\r\n        _metrics: MetricsClient;\r\n        _middlewares: MiddlewareHandler<QueryMiddleware>;\r\n        _previewFeatures: string[];\r\n        _activeProvider: string;\r\n        _extensions: MergedExtensionsList;\r\n        _engine: Engine;\r\n        /**\r\n         * A fully constructed/applied Client that references the parent\r\n         * PrismaClient. This is used for Client extensions only.\r\n         */\r\n        _appliedParent: any;\r\n        _createPrismaPromise: PrismaPromiseFactory;\r\n        /**\r\n         * Hook a middleware into the client\r\n         * @param middleware to hook\r\n         */\r\n        $use(middleware: QueryMiddleware): void;\r\n        $on<E extends ExtendedEventType>(eventType: E, callback: EventCallback<E>): void;\r\n        $connect(): Promise<void>;\r\n        /**\r\n         * Disconnect from the database\r\n         */\r\n        $disconnect(): Promise<void>;\r\n        /**\r\n         * Executes a raw query and always returns a number\r\n         */\r\n        $executeRawInternal(transaction: PrismaPromiseTransaction | undefined, clientMethod: string, args: RawQueryArgs, middlewareArgsMapper?: MiddlewareArgsMapper<unknown, unknown>): Promise<number>;\r\n        /**\r\n         * Executes a raw query provided through a safe tag function\r\n         * @see https://github.com/prisma/prisma/issues/7142\r\n         *\r\n         * @param query\r\n         * @param values\r\n         * @returns\r\n         */\r\n        $executeRaw(query: TemplateStringsArray | Sql, ...values: any[]): PrismaPromise_2<unknown>;\r\n        /**\r\n         * Unsafe counterpart of `$executeRaw` that is susceptible to SQL injections\r\n         * @see https://github.com/prisma/prisma/issues/7142\r\n         *\r\n         * @param query\r\n         * @param values\r\n         * @returns\r\n         */\r\n        $executeRawUnsafe(query: string, ...values: RawValue[]): PrismaPromise_2<unknown>;\r\n        /**\r\n         * Executes a raw command only for MongoDB\r\n         *\r\n         * @param command\r\n         * @returns\r\n         */\r\n        $runCommandRaw(command: Record<string, JsInputValue>): PrismaPromise_2<unknown>;\r\n        /**\r\n         * Executes a raw query and returns selected data\r\n         */\r\n        $queryRawInternal(transaction: PrismaPromiseTransaction | undefined, clientMethod: string, args: RawQueryArgs, middlewareArgsMapper?: MiddlewareArgsMapper<unknown, unknown>): Promise<unknown[]>;\r\n        /**\r\n         * Executes a raw query provided through a safe tag function\r\n         * @see https://github.com/prisma/prisma/issues/7142\r\n         *\r\n         * @param query\r\n         * @param values\r\n         * @returns\r\n         */\r\n        $queryRaw(query: TemplateStringsArray | Sql, ...values: any[]): PrismaPromise_2<unknown>;\r\n        /**\r\n         * Unsafe counterpart of `$queryRaw` that is susceptible to SQL injections\r\n         * @see https://github.com/prisma/prisma/issues/7142\r\n         *\r\n         * @param query\r\n         * @param values\r\n         * @returns\r\n         */\r\n        $queryRawUnsafe(query: string, ...values: RawValue[]): PrismaPromise_2<unknown>;\r\n        /**\r\n         * Execute a batch of requests in a transaction\r\n         * @param requests\r\n         * @param options\r\n         */\r\n        _transactionWithArray({ promises, options, }: {\r\n            promises: Array<PrismaPromise_2<any>>;\r\n            options?: BatchTransactionOptions;\r\n        }): Promise<any>;\r\n        /**\r\n         * Perform a long-running transaction\r\n         * @param callback\r\n         * @param options\r\n         * @returns\r\n         */\r\n        _transactionWithCallback({ callback, options, }: {\r\n            callback: (client: Client) => Promise<unknown>;\r\n            options?: Options;\r\n        }): Promise<unknown>;\r\n        _createItxClient(transaction: PrismaPromiseInteractiveTransaction): Client;\r\n        /**\r\n         * Execute queries within a transaction\r\n         * @param input a callback or a query list\r\n         * @param options to set timeouts (callback)\r\n         * @returns\r\n         */\r\n        $transaction(input: any, options?: any): Promise<any>;\r\n        /**\r\n         * Runs the middlewares over params before executing a request\r\n         * @param internalParams\r\n         * @returns\r\n         */\r\n        _request(internalParams: InternalRequestParams): Promise<any>;\r\n        _executeRequest({ args, clientMethod, dataPath, callsite, action, model, argsMapper, transaction, unpacker, otelParentCtx, customDataProxyFetch, }: InternalRequestParams): Promise<any>;\r\n        readonly $metrics: MetricsClient;\r\n        /**\r\n         * Shortcut for checking a preview flag\r\n         * @param feature preview flag\r\n         * @returns\r\n         */\r\n        _hasPreviewFlag(feature: string): boolean;\r\n        $applyPendingMigrations(): Promise<void>;\r\n        $extends: typeof $extends;\r\n        readonly [Symbol.toStringTag]: string;\r\n    };\r\n};\r\n\r\n/**\r\n * Config that is stored into the generated client. When the generated client is\r\n * loaded, this same config is passed to {@link getPrismaClient} which creates a\r\n * closure with that config around a non-instantiated [[PrismaClient]].\r\n */\r\ndeclare type GetPrismaClientConfig = {\r\n    runtimeDataModel: RuntimeDataModel;\r\n    generator?: GeneratorConfig;\r\n    relativeEnvPaths: {\r\n        rootEnvPath?: string | null;\r\n        schemaEnvPath?: string | null;\r\n    };\r\n    relativePath: string;\r\n    dirname: string;\r\n    filename?: string;\r\n    clientVersion: string;\r\n    engineVersion: string;\r\n    datasourceNames: string[];\r\n    activeProvider: string;\r\n    /**\r\n     * The contents of the schema encoded into a string\r\n     * @remarks only used for the purpose of data proxy\r\n     */\r\n    inlineSchema: string;\r\n    /**\r\n     * A special env object just for the data proxy edge runtime.\r\n     * Allows bundlers to inject their own env variables (Vercel).\r\n     * Allows platforms to declare global variables as env (Workers).\r\n     * @remarks only used for the purpose of data proxy\r\n     */\r\n    injectableEdgeEnv?: () => LoadedEnv;\r\n    /**\r\n     * The contents of the datasource url saved in a string.\r\n     * This can either be an env var name or connection string.\r\n     * It is needed by the client to connect to the Data Proxy.\r\n     * @remarks only used for the purpose of data proxy\r\n     */\r\n    inlineDatasources: {\r\n        [name in string]: {\r\n            url: EnvValue;\r\n        };\r\n    };\r\n    /**\r\n     * The string hash that was produced for a given schema\r\n     * @remarks only used for the purpose of data proxy\r\n     */\r\n    inlineSchemaHash: string;\r\n    /**\r\n     * A marker to indicate that the client was not generated via `prisma\r\n     * generate` but was generated via `generate --postinstall` script instead.\r\n     * @remarks used to error for Vercel/Netlify for schema caching issues\r\n     */\r\n    postinstall?: boolean;\r\n    /**\r\n     * Information about the CI where the Prisma Client has been generated. The\r\n     * name of the CI environment is stored at generation time because CI\r\n     * information is not always available at runtime. Moreover, the edge client\r\n     * has no notion of environment variables, so this works around that.\r\n     * @remarks used to error for Vercel/Netlify for schema caching issues\r\n     */\r\n    ciName?: string;\r\n    /**\r\n     * Information about whether we have not found a schema.prisma file in the\r\n     * default location, and that we fell back to finding the schema.prisma file\r\n     * in the current working directory. This usually means it has been bundled.\r\n     */\r\n    isBundled?: boolean;\r\n    /**\r\n     * A boolean that is `false` when the client was generated with --no-engine. At\r\n     * runtime, this means the client will be bound to be using the Data Proxy.\r\n     */\r\n    copyEngine?: boolean;\r\n    /**\r\n     * Optional wasm loading configuration\r\n     */\r\n    engineWasm?: WasmLoadingConfig;\r\n};\r\n\r\nexport declare type GetResult<P extends OperationPayload, A, O extends Operation = 'findUniqueOrThrow'> = {\r\n    findUnique: GetFindResult<P, A> | null;\r\n    findUniqueOrThrow: GetFindResult<P, A>;\r\n    findFirst: GetFindResult<P, A> | null;\r\n    findFirstOrThrow: GetFindResult<P, A>;\r\n    findMany: GetFindResult<P, A>[];\r\n    create: GetFindResult<P, A>;\r\n    createMany: GetBatchResult;\r\n    createManyAndReturn: GetFindResult<P, A>[];\r\n    update: GetFindResult<P, A>;\r\n    updateMany: GetBatchResult;\r\n    upsert: GetFindResult<P, A>;\r\n    delete: GetFindResult<P, A>;\r\n    deleteMany: GetBatchResult;\r\n    aggregate: GetAggregateResult<P, A>;\r\n    count: GetCountResult<A>;\r\n    groupBy: GetGroupByResult<P, A>;\r\n    $queryRaw: unknown;\r\n    $executeRaw: number;\r\n    $queryRawUnsafe: unknown;\r\n    $executeRawUnsafe: number;\r\n    $runCommandRaw: JsonObject;\r\n    findRaw: JsonObject;\r\n    aggregateRaw: JsonObject;\r\n}[O];\r\n\r\nexport declare function getRuntime(): GetRuntimeOutput;\r\n\r\ndeclare type GetRuntimeOutput = {\r\n    id: Runtime;\r\n    prettyName: string;\r\n    isEdge: boolean;\r\n};\r\n\r\nexport declare type GetSelect<Base extends Record<any, any>, R extends InternalArgs['result'][string], KR extends keyof R = string extends keyof R ? never : keyof R> = {\r\n    [K in KR | keyof Base]?: K extends KR ? boolean : Base[K];\r\n};\r\n\r\nexport declare type GetSelectIncludeResult<P extends OperationPayload, A> = Equals<A, any> extends 1 ? DefaultSelection<P> : A extends {\r\n    select: infer S extends object;\r\n} & Record<string, unknown> | {\r\n    include: infer I extends object;\r\n} & Record<string, unknown> ? {\r\n    [K in keyof S | keyof I as (S & I)[K] extends false | undefined | null ? never : K]: (S & I)[K] extends object ? P extends SelectablePayloadFields<K, (infer O)[]> ? O extends OperationPayload ? GetFindResult<O, (S & I)[K]>[] : never : P extends SelectablePayloadFields<K, infer O | null> ? O extends OperationPayload ? GetFindResult<O, (S & I)[K]> | SelectField<P, K> & null : never : K extends '_count' ? Count<GetFindResult<P, (S & I)[K]>> : never : P extends SelectablePayloadFields<K, (infer O)[]> ? O extends OperationPayload ? DefaultSelection<O>[] : never : P extends SelectablePayloadFields<K, infer O | null> ? O extends OperationPayload ? DefaultSelection<O> | SelectField<P, K> & null : never : P extends {\r\n        scalars: {\r\n            [k in K]: infer O;\r\n        };\r\n    } ? O : K extends '_count' ? Count<P['objects']> : never;\r\n} & (A extends {\r\n    include: any;\r\n} & Record<string, unknown> ? DefaultSelection<P> : unknown) : DefaultSelection<P>;\r\n\r\ndeclare type HandleErrorParams = {\r\n    args: JsArgs;\r\n    error: any;\r\n    clientMethod: string;\r\n    callsite?: CallSite;\r\n    transaction?: PrismaPromiseTransaction;\r\n    modelName?: string;\r\n};\r\n\r\n/**\r\n * Defines High-Resolution Time.\r\n *\r\n * The first number, HrTime[0], is UNIX Epoch time in seconds since 00:00:00 UTC on 1 January 1970.\r\n * The second number, HrTime[1], represents the partial second elapsed since Unix Epoch time represented by first number in nanoseconds.\r\n * For example, 2021-01-01T12:30:10.150Z in UNIX Epoch time in milliseconds is represented as 1609504210150.\r\n * The first number is calculated by converting and truncating the Epoch time in milliseconds to seconds:\r\n * HrTime[0] = Math.trunc(1609504210150 / 1000) = 1609504210.\r\n * The second number is calculated by converting the digits after the decimal point of the subtraction, (1609504210150 / 1000) - HrTime[0], to nanoseconds:\r\n * HrTime[1] = Number((1609504210.150 - HrTime[0]).toFixed(9)) * 1e9 = 150000000.\r\n * This is represented in HrTime format as [1609504210, 150000000].\r\n */\r\ndeclare type HrTime = [number, number];\r\n\r\ndeclare type InteractiveTransactionInfo<Payload = unknown> = {\r\n    /**\r\n     * Transaction ID returned by the query engine.\r\n     */\r\n    id: string;\r\n    /**\r\n     * Arbitrary payload the meaning of which depends on the `Engine` implementation.\r\n     * For example, `DataProxyEngine` needs to associate different API endpoints with transactions.\r\n     * In `LibraryEngine` and `BinaryEngine` it is currently not used.\r\n     */\r\n    payload: Payload;\r\n};\r\n\r\ndeclare type InteractiveTransactionOptions<Payload> = Transaction_2.InteractiveTransactionInfo<Payload>;\r\n\r\nexport declare type InternalArgs<R = {\r\n    [K in string]: {\r\n        [K in string]: unknown;\r\n    };\r\n}, M = {\r\n    [K in string]: {\r\n        [K in string]: unknown;\r\n    };\r\n}, Q = {\r\n    [K in string]: {\r\n        [K in string]: unknown;\r\n    };\r\n}, C = {\r\n    [K in string]: unknown;\r\n}> = {\r\n    result: {\r\n        [K in keyof R]: {\r\n            [P in keyof R[K]]: () => R[K][P];\r\n        };\r\n    };\r\n    model: {\r\n        [K in keyof M]: {\r\n            [P in keyof M[K]]: () => M[K][P];\r\n        };\r\n    };\r\n    query: {\r\n        [K in keyof Q]: {\r\n            [P in keyof Q[K]]: () => Q[K][P];\r\n        };\r\n    };\r\n    client: {\r\n        [K in keyof C]: () => C[K];\r\n    };\r\n};\r\n\r\ndeclare type InternalRequestParams = {\r\n    /**\r\n     * The original client method being called.\r\n     * Even though the rootField / operation can be changed,\r\n     * this method stays as it is, as it's what the user's\r\n     * code looks like\r\n     */\r\n    clientMethod: string;\r\n    /**\r\n     * Name of js model that triggered the request. Might be used\r\n     * for warnings or error messages\r\n     */\r\n    jsModelName?: string;\r\n    callsite?: CallSite;\r\n    transaction?: PrismaPromiseTransaction;\r\n    unpacker?: Unpacker;\r\n    otelParentCtx?: Context;\r\n    /** Used to \"desugar\" a user input into an \"expanded\" one */\r\n    argsMapper?: (args?: UserArgs_2) => UserArgs_2;\r\n    /** Used to convert args for middleware and back */\r\n    middlewareArgsMapper?: MiddlewareArgsMapper<unknown, unknown>;\r\n    /** Used for Accelerate client extension via Data Proxy */\r\n    customDataProxyFetch?: (fetch: Fetch) => Fetch;\r\n} & Omit<QueryMiddlewareParams, 'runInTransaction'>;\r\n\r\ndeclare enum IsolationLevel {\r\n    ReadUncommitted = \"ReadUncommitted\",\r\n    ReadCommitted = \"ReadCommitted\",\r\n    RepeatableRead = \"RepeatableRead\",\r\n    Snapshot = \"Snapshot\",\r\n    Serializable = \"Serializable\"\r\n}\r\n\r\nexport declare type ITXClientDenyList = (typeof denylist)[number];\r\n\r\nexport declare const itxClientDenyList: readonly (string | symbol)[];\r\n\r\ndeclare interface Job {\r\n    resolve: (data: any) => void;\r\n    reject: (data: any) => void;\r\n    request: any;\r\n}\r\n\r\n/**\r\n * Create a SQL query for a list of values.\r\n */\r\nexport declare function join(values: readonly RawValue[], separator?: string, prefix?: string, suffix?: string): Sql;\r\n\r\nexport declare type JsArgs = {\r\n    select?: Selection_2;\r\n    include?: Selection_2;\r\n    omit?: Omission;\r\n    [argName: string]: JsInputValue;\r\n};\r\n\r\nexport declare type JsInputValue = null | undefined | string | number | boolean | bigint | Uint8Array | Date | DecimalJsLike | ObjectEnumValue | RawParameters | JsonConvertible | FieldRef<string, unknown> | JsInputValue[] | {\r\n    [key: string]: JsInputValue;\r\n};\r\n\r\ndeclare type JsonArgumentValue = number | string | boolean | null | RawTaggedValue | JsonArgumentValue[] | {\r\n    [key: string]: JsonArgumentValue;\r\n};\r\n\r\nexport declare interface JsonArray extends Array<JsonValue> {\r\n}\r\n\r\ndeclare type JsonBatchQuery = {\r\n    batch: JsonQuery[];\r\n    transaction?: {\r\n        isolationLevel?: Transaction_2.IsolationLevel;\r\n    };\r\n};\r\n\r\nexport declare interface JsonConvertible {\r\n    toJSON(): unknown;\r\n}\r\n\r\ndeclare type JsonFieldSelection = {\r\n    arguments?: Record<string, JsonArgumentValue> | RawTaggedValue;\r\n    selection: JsonSelectionSet;\r\n};\r\n\r\ndeclare class JsonNull extends NullTypesEnumValue {\r\n}\r\n\r\nexport declare type JsonObject = {\r\n    [Key in string]?: JsonValue;\r\n};\r\n\r\ndeclare type JsonQuery = {\r\n    modelName?: string;\r\n    action: JsonQueryAction;\r\n    query: JsonFieldSelection;\r\n};\r\n\r\ndeclare type JsonQueryAction = 'findUnique' | 'findUniqueOrThrow' | 'findFirst' | 'findFirstOrThrow' | 'findMany' | 'createOne' | 'createMany' | 'createManyAndReturn' | 'updateOne' | 'updateMany' | 'deleteOne' | 'deleteMany' | 'upsertOne' | 'aggregate' | 'groupBy' | 'executeRaw' | 'queryRaw' | 'runCommandRaw' | 'findRaw' | 'aggregateRaw';\r\n\r\ndeclare type JsonSelectionSet = {\r\n    $scalars?: boolean;\r\n    $composites?: boolean;\r\n} & {\r\n    [fieldName: string]: boolean | JsonFieldSelection;\r\n};\r\n\r\nexport declare type JsonValue = string | number | boolean | JsonObject | JsonArray | null;\r\n\r\nexport declare type JsOutputValue = null | string | number | boolean | bigint | Uint8Array | Date | Decimal | JsOutputValue[] | {\r\n    [key: string]: JsOutputValue;\r\n};\r\n\r\nexport declare type JsPromise<T> = Promise<T> & {};\r\n\r\ndeclare type KnownErrorParams = {\r\n    code: string;\r\n    clientVersion: string;\r\n    meta?: Record<string, unknown>;\r\n    batchRequestIdx?: number;\r\n};\r\n\r\n/**\r\n * A pointer from the current {@link Span} to another span in the same trace or\r\n * in a different trace.\r\n * Few examples of Link usage.\r\n * 1. Batch Processing: A batch of elements may contain elements associated\r\n *    with one or more traces/spans. Since there can only be one parent\r\n *    SpanContext, Link is used to keep reference to SpanContext of all\r\n *    elements in the batch.\r\n * 2. Public Endpoint: A SpanContext in incoming client request on a public\r\n *    endpoint is untrusted from service provider perspective. In such case it\r\n *    is advisable to start a new trace with appropriate sampling decision.\r\n *    However, it is desirable to associate incoming SpanContext to new trace\r\n *    initiated on service provider side so two traces (from Client and from\r\n *    Service Provider) can be correlated.\r\n */\r\ndeclare interface Link {\r\n    /** The {@link SpanContext} of a linked span. */\r\n    context: SpanContext;\r\n    /** A set of {@link SpanAttributes} on the link. */\r\n    attributes?: SpanAttributes;\r\n    /** Count of attributes of the link that were dropped due to collection limits */\r\n    droppedAttributesCount?: number;\r\n}\r\n\r\ndeclare type LoadedEnv = {\r\n    message?: string;\r\n    parsed: {\r\n        [x: string]: string;\r\n    };\r\n} | undefined;\r\n\r\ndeclare type LocationInFile = {\r\n    fileName: string;\r\n    lineNumber: number | null;\r\n    columnNumber: number | null;\r\n};\r\n\r\ndeclare type LogDefinition = {\r\n    level: LogLevel;\r\n    emit: 'stdout' | 'event';\r\n};\r\n\r\n/**\r\n * Typings for the events we emit.\r\n *\r\n * @remarks\r\n * If this is updated, our edge runtime shim needs to be updated as well.\r\n */\r\ndeclare type LogEmitter = {\r\n    on<E extends EngineEventType>(event: E, listener: (event: EngineEvent<E>) => void): LogEmitter;\r\n    emit(event: QueryEventType, payload: QueryEvent): boolean;\r\n    emit(event: LogEventType, payload: LogEvent): boolean;\r\n};\r\n\r\ndeclare type LogEvent = {\r\n    timestamp: Date;\r\n    message: string;\r\n    target: string;\r\n};\r\n\r\ndeclare type LogEventType = 'info' | 'warn' | 'error';\r\n\r\ndeclare type LogLevel = 'info' | 'query' | 'warn' | 'error';\r\n\r\n/**\r\n * Generates more strict variant of an enum which, unlike regular enum,\r\n * throws on non-existing property access. This can be useful in following situations:\r\n * - we have an API, that accepts both `undefined` and `SomeEnumType` as an input\r\n * - enum values are generated dynamically from DMMF.\r\n *\r\n * In that case, if using normal enums and no compile-time typechecking, using non-existing property\r\n * will result in `undefined` value being used, which will be accepted. Using strict enum\r\n * in this case will help to have a runtime exception, telling you that you are probably doing something wrong.\r\n *\r\n * Note: if you need to check for existence of a value in the enum you can still use either\r\n * `in` operator or `hasOwnProperty` function.\r\n *\r\n * @param definition\r\n * @returns\r\n */\r\nexport declare function makeStrictEnum<T extends Record<PropertyKey, string | number>>(definition: T): T;\r\n\r\n/**\r\n * Class that holds the list of all extensions, applied to particular instance,\r\n * as well as resolved versions of the components that need to apply on\r\n * different levels. Main idea of this class: avoid re-resolving as much of the\r\n * stuff as possible when new extensions are added while also delaying the\r\n * resolve until the point it is actually needed. For example, computed fields\r\n * of the model won't be resolved unless the model is actually queried. Neither\r\n * adding extensions with `client` component only cause other components to\r\n * recompute.\r\n */\r\ndeclare class MergedExtensionsList {\r\n    private head?;\r\n    private constructor();\r\n    static empty(): MergedExtensionsList;\r\n    static single(extension: ExtensionArgs): MergedExtensionsList;\r\n    isEmpty(): boolean;\r\n    append(extension: ExtensionArgs): MergedExtensionsList;\r\n    getAllComputedFields(dmmfModelName: string): ComputedFieldsMap | undefined;\r\n    getAllClientExtensions(): ClientArg | undefined;\r\n    getAllModelExtensions(dmmfModelName: string): ModelArg | undefined;\r\n    getAllQueryCallbacks(jsModelName: string, operation: string): any;\r\n    getAllBatchQueryCallbacks(): BatchQueryOptionsCb[];\r\n}\r\n\r\nexport declare type MergeExtArgs<TypeMap extends TypeMapDef, ExtArgs extends Record<any, any>, Args extends Record<any, any>> = ComputeDeep<ExtArgs & Args & AllModelsToStringIndex<TypeMap, Args, 'result'> & AllModelsToStringIndex<TypeMap, Args, 'model'>>;\r\n\r\nexport declare type Metric<T> = {\r\n    key: string;\r\n    value: T;\r\n    labels: Record<string, string>;\r\n    description: string;\r\n};\r\n\r\nexport declare type MetricHistogram = {\r\n    buckets: MetricHistogramBucket[];\r\n    sum: number;\r\n    count: number;\r\n};\r\n\r\nexport declare type MetricHistogramBucket = [maxValue: number, count: number];\r\n\r\nexport declare type Metrics = {\r\n    counters: Metric<number>[];\r\n    gauges: Metric<number>[];\r\n    histograms: Metric<MetricHistogram>[];\r\n};\r\n\r\nexport declare class MetricsClient {\r\n    private _engine;\r\n    constructor(engine: Engine);\r\n    /**\r\n     * Returns all metrics gathered up to this point in prometheus format.\r\n     * Result of this call can be exposed directly to prometheus scraping endpoint\r\n     *\r\n     * @param options\r\n     * @returns\r\n     */\r\n    prometheus(options?: MetricsOptions): Promise<string>;\r\n    /**\r\n     * Returns all metrics gathered up to this point in prometheus format.\r\n     *\r\n     * @param options\r\n     * @returns\r\n     */\r\n    json(options?: MetricsOptions): Promise<Metrics>;\r\n}\r\n\r\ndeclare type MetricsOptions = {\r\n    /**\r\n     * Labels to add to every metrics in key-value format\r\n     */\r\n    globalLabels?: Record<string, string>;\r\n};\r\n\r\ndeclare type MetricsOptionsCommon = {\r\n    globalLabels?: Record<string, string>;\r\n};\r\n\r\ndeclare type MetricsOptionsJson = {\r\n    format: 'json';\r\n} & MetricsOptionsCommon;\r\n\r\ndeclare type MetricsOptionsPrometheus = {\r\n    format: 'prometheus';\r\n} & MetricsOptionsCommon;\r\n\r\ndeclare type MiddlewareArgsMapper<RequestArgs, MiddlewareArgs> = {\r\n    requestArgsToMiddlewareArgs(requestArgs: RequestArgs): MiddlewareArgs;\r\n    middlewareArgsToRequestArgs(middlewareArgs: MiddlewareArgs): RequestArgs;\r\n};\r\n\r\ndeclare class MiddlewareHandler<M extends Function> {\r\n    private _middlewares;\r\n    use(middleware: M): void;\r\n    get(id: number): M | undefined;\r\n    has(id: number): boolean;\r\n    length(): number;\r\n}\r\n\r\nexport declare type ModelArg = {\r\n    [MethodName in string]: unknown;\r\n};\r\n\r\nexport declare type ModelArgs = {\r\n    model: {\r\n        [ModelName in string]: ModelArg;\r\n    };\r\n};\r\n\r\nexport declare type ModelKey<TypeMap extends TypeMapDef, M extends PropertyKey> = M extends keyof TypeMap['model'] ? M : Capitalize<M & string>;\r\n\r\nexport declare type ModelQueryOptionsCb = (args: ModelQueryOptionsCbArgs) => Promise<any>;\r\n\r\nexport declare type ModelQueryOptionsCbArgs = {\r\n    model: string;\r\n    operation: string;\r\n    args: JsArgs;\r\n    query: (args: JsArgs) => Promise<unknown>;\r\n};\r\n\r\nexport declare type NameArgs = {\r\n    name?: string;\r\n};\r\n\r\nexport declare type Narrow<A> = {\r\n    [K in keyof A]: A[K] extends Function ? A[K] : Narrow<A[K]>;\r\n} | (A extends Narrowable ? A : never);\r\n\r\nexport declare type Narrowable = string | number | bigint | boolean | [];\r\n\r\nexport declare type NeverToUnknown<T> = [T] extends [never] ? unknown : T;\r\n\r\n/**\r\n * Imitates `fetch` via `https` to only suit our needs, it does nothing more.\r\n * This is because we cannot bundle `node-fetch` as it uses many other Node.js\r\n * utilities, while also bloating our bundles. This approach is much leaner.\r\n * @param url\r\n * @param options\r\n * @returns\r\n */\r\ndeclare function nodeFetch(url: string, options?: RequestOptions): Promise<RequestResponse>;\r\n\r\ndeclare class NodeHeaders {\r\n    readonly headers: Map<string, string>;\r\n    constructor(init?: Record<any, any>);\r\n    append(name: string, value: string): void;\r\n    delete(name: string): void;\r\n    get(name: string): string | null;\r\n    has(name: string): boolean;\r\n    set(name: string, value: string): void;\r\n    forEach(callbackfn: (value: string, key: string, parent: this) => void, thisArg?: any): void;\r\n}\r\n\r\n/**\r\n * @deprecated Please don´t rely on type checks to this error anymore.\r\n * This will become a regular `PrismaClientKnownRequestError` with code `P2025`\r\n * in the future major version of the client.\r\n * Instead of `error instanceof Prisma.NotFoundError` use `error.code === \"P2025\"`.\r\n */\r\nexport declare class NotFoundError extends PrismaClientKnownRequestError {\r\n    constructor(message: string, clientVersion: string);\r\n}\r\n\r\ndeclare class NullTypesEnumValue extends ObjectEnumValue {\r\n    _getNamespace(): string;\r\n}\r\n\r\n/**\r\n * List of Prisma enums that must use unique objects instead of strings as their values.\r\n */\r\nexport declare const objectEnumNames: string[];\r\n\r\n/**\r\n * Base class for unique values of object-valued enums.\r\n */\r\nexport declare abstract class ObjectEnumValue {\r\n    constructor(arg?: symbol);\r\n    abstract _getNamespace(): string;\r\n    _getName(): string;\r\n    toString(): string;\r\n}\r\n\r\nexport declare const objectEnumValues: {\r\n    classes: {\r\n        DbNull: typeof DbNull;\r\n        JsonNull: typeof JsonNull;\r\n        AnyNull: typeof AnyNull;\r\n    };\r\n    instances: {\r\n        DbNull: DbNull;\r\n        JsonNull: JsonNull;\r\n        AnyNull: AnyNull;\r\n    };\r\n};\r\n\r\ndeclare const officialPrismaAdapters: readonly [\"@prisma/adapter-planetscale\", \"@prisma/adapter-neon\", \"@prisma/adapter-libsql\", \"@prisma/adapter-d1\", \"@prisma/adapter-pg\", \"@prisma/adapter-pg-worker\"];\r\n\r\nexport declare type Omission = Record<string, boolean>;\r\n\r\ndeclare type Omit_2<T, K extends string | number | symbol> = {\r\n    [P in keyof T as P extends K ? never : P]: T[P];\r\n};\r\nexport { Omit_2 as Omit }\r\n\r\nexport declare type Operation = 'findFirst' | 'findFirstOrThrow' | 'findUnique' | 'findUniqueOrThrow' | 'findMany' | 'create' | 'createMany' | 'createManyAndReturn' | 'update' | 'updateMany' | 'upsert' | 'delete' | 'deleteMany' | 'aggregate' | 'count' | 'groupBy' | '$queryRaw' | '$executeRaw' | '$queryRawUnsafe' | '$executeRawUnsafe' | 'findRaw' | 'aggregateRaw' | '$runCommandRaw';\r\n\r\nexport declare type OperationPayload = {\r\n    scalars: {\r\n        [ScalarName in string]: unknown;\r\n    };\r\n    objects: {\r\n        [ObjectName in string]: unknown;\r\n    };\r\n    composites: {\r\n        [CompositeName in string]: unknown;\r\n    };\r\n};\r\n\r\nexport declare type Optional<O, K extends keyof any = keyof O> = {\r\n    [P in K & keyof O]?: O[P];\r\n} & {\r\n    [P in Exclude<keyof O, K>]: O[P];\r\n};\r\n\r\nexport declare type OptionalFlat<T> = {\r\n    [K in keyof T]?: T[K];\r\n};\r\n\r\nexport declare type OptionalKeys<O> = {\r\n    [K in keyof O]-?: {} extends Pick_2<O, K> ? K : never;\r\n}[keyof O];\r\n\r\ndeclare type Options = {\r\n    maxWait?: number;\r\n    timeout?: number;\r\n    isolationLevel?: IsolationLevel;\r\n};\r\n\r\ndeclare type Options_2 = {\r\n    clientVersion: string;\r\n};\r\n\r\nexport declare type Or<A extends 1 | 0, B extends 1 | 0> = {\r\n    0: {\r\n        0: 0;\r\n        1: 1;\r\n    };\r\n    1: {\r\n        0: 1;\r\n        1: 1;\r\n    };\r\n}[A][B];\r\n\r\nexport declare type PatchFlat<O1, O2> = O1 & Omit_2<O2, keyof O1>;\r\n\r\nexport declare type Path<O, P, Default = never> = O extends unknown ? P extends [infer K, ...infer R] ? K extends keyof O ? Path<O[K], R> : Default : O : never;\r\n\r\nexport declare type Payload<T, F extends Operation = never> = T extends {\r\n    [K: symbol]: {\r\n        types: {\r\n            payload: any;\r\n        };\r\n    };\r\n} ? T[symbol]['types']['payload'] : any;\r\n\r\nexport declare type PayloadToResult<P, O extends Record_2<any, any> = RenameAndNestPayloadKeys<P>> = {\r\n    [K in keyof O]?: O[K][K] extends any[] ? PayloadToResult<O[K][K][number]>[] : O[K][K] extends object ? PayloadToResult<O[K][K]> : O[K][K];\r\n};\r\n\r\ndeclare type Pick_2<T, K extends string | number | symbol> = {\r\n    [P in keyof T as P extends K ? P : never]: T[P];\r\n};\r\nexport { Pick_2 as Pick }\r\n\r\nexport declare class PrismaClientInitializationError extends Error {\r\n    clientVersion: string;\r\n    errorCode?: string;\r\n    retryable?: boolean;\r\n    constructor(message: string, clientVersion: string, errorCode?: string);\r\n    get [Symbol.toStringTag](): string;\r\n}\r\n\r\nexport declare class PrismaClientKnownRequestError extends Error implements ErrorWithBatchIndex {\r\n    code: string;\r\n    meta?: Record<string, unknown>;\r\n    clientVersion: string;\r\n    batchRequestIdx?: number;\r\n    constructor(message: string, { code, clientVersion, meta, batchRequestIdx }: KnownErrorParams);\r\n    get [Symbol.toStringTag](): string;\r\n}\r\n\r\nexport declare type PrismaClientOptions = {\r\n    /**\r\n     * Overwrites the primary datasource url from your schema.prisma file\r\n     */\r\n    datasourceUrl?: string;\r\n    /**\r\n     * Instance of a Driver Adapter, e.g., like one provided by `@prisma/adapter-planetscale.\r\n     */\r\n    adapter?: DriverAdapter | null;\r\n    /**\r\n     * Overwrites the datasource url from your schema.prisma file\r\n     */\r\n    datasources?: Datasources;\r\n    /**\r\n     * @default \"colorless\"\r\n     */\r\n    errorFormat?: ErrorFormat;\r\n    /**\r\n     * The default values for Transaction options\r\n     * maxWait ?= 2000\r\n     * timeout ?= 5000\r\n     */\r\n    transactionOptions?: Transaction_2.Options;\r\n    /**\r\n     * @example\r\n     * \\`\\`\\`\r\n     * // Defaults to stdout\r\n     * log: ['query', 'info', 'warn']\r\n     *\r\n     * // Emit as events\r\n     * log: [\r\n     *  { emit: 'stdout', level: 'query' },\r\n     *  { emit: 'stdout', level: 'info' },\r\n     *  { emit: 'stdout', level: 'warn' }\r\n     * ]\r\n     * \\`\\`\\`\r\n     * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/logging#the-log-option).\r\n     */\r\n    log?: Array<LogLevel | LogDefinition>;\r\n    /**\r\n     * @internal\r\n     * You probably don't want to use this. \\`__internal\\` is used by internal tooling.\r\n     */\r\n    __internal?: {\r\n        debug?: boolean;\r\n        engine?: {\r\n            cwd?: string;\r\n            binaryPath?: string;\r\n            endpoint?: string;\r\n            allowTriggerPanic?: boolean;\r\n        };\r\n        /** This can be used for testing purposes */\r\n        configOverride?: (config: GetPrismaClientConfig) => GetPrismaClientConfig;\r\n    };\r\n};\r\n\r\nexport declare class PrismaClientRustPanicError extends Error {\r\n    clientVersion: string;\r\n    constructor(message: string, clientVersion: string);\r\n    get [Symbol.toStringTag](): string;\r\n}\r\n\r\nexport declare class PrismaClientUnknownRequestError extends Error implements ErrorWithBatchIndex {\r\n    clientVersion: string;\r\n    batchRequestIdx?: number;\r\n    constructor(message: string, { clientVersion, batchRequestIdx }: UnknownErrorParams);\r\n    get [Symbol.toStringTag](): string;\r\n}\r\n\r\nexport declare class PrismaClientValidationError extends Error {\r\n    name: string;\r\n    clientVersion: string;\r\n    constructor(message: string, { clientVersion }: Options_2);\r\n    get [Symbol.toStringTag](): string;\r\n}\r\n\r\ndeclare function prismaGraphQLToJSError({ error, user_facing_error }: RequestError, clientVersion: string, activeProvider: string): PrismaClientKnownRequestError | PrismaClientUnknownRequestError;\r\n\r\nexport declare interface PrismaPromise<T> extends Promise<T> {\r\n    [Symbol.toStringTag]: 'PrismaPromise';\r\n}\r\n\r\n/**\r\n * Prisma's `Promise` that is backwards-compatible. All additions on top of the\r\n * original `Promise` are optional so that it can be backwards-compatible.\r\n * @see [[createPrismaPromise]]\r\n */\r\ndeclare interface PrismaPromise_2<A> extends Promise<A> {\r\n    /**\r\n     * Extension of the original `.then` function\r\n     * @param onfulfilled same as regular promises\r\n     * @param onrejected same as regular promises\r\n     * @param transaction transaction options\r\n     */\r\n    then<R1 = A, R2 = never>(onfulfilled?: (value: A) => R1 | PromiseLike<R1>, onrejected?: (error: unknown) => R2 | PromiseLike<R2>, transaction?: PrismaPromiseTransaction): Promise<R1 | R2>;\r\n    /**\r\n     * Extension of the original `.catch` function\r\n     * @param onrejected same as regular promises\r\n     * @param transaction transaction options\r\n     */\r\n    catch<R = never>(onrejected?: ((reason: any) => R | PromiseLike<R>) | undefined | null, transaction?: PrismaPromiseTransaction): Promise<A | R>;\r\n    /**\r\n     * Extension of the original `.finally` function\r\n     * @param onfinally same as regular promises\r\n     * @param transaction transaction options\r\n     */\r\n    finally(onfinally?: (() => void) | undefined | null, transaction?: PrismaPromiseTransaction): Promise<A>;\r\n    /**\r\n     * Called when executing a batch of regular tx\r\n     * @param transaction transaction options for batch tx\r\n     */\r\n    requestTransaction?(transaction: PrismaPromiseBatchTransaction): PromiseLike<unknown>;\r\n}\r\n\r\ndeclare type PrismaPromiseBatchTransaction = {\r\n    kind: 'batch';\r\n    id: number;\r\n    isolationLevel?: IsolationLevel;\r\n    index: number;\r\n    lock: PromiseLike<void>;\r\n};\r\n\r\ndeclare type PrismaPromiseCallback = (transaction?: PrismaPromiseTransaction) => PrismaPromise_2<unknown>;\r\n\r\n/**\r\n * Creates a [[PrismaPromise]]. It is Prisma's implementation of `Promise` which\r\n * is essentially a proxy for `Promise`. All the transaction-compatible client\r\n * methods return one, this allows for pre-preparing queries without executing\r\n * them until `.then` is called. It's the foundation of Prisma's query batching.\r\n * @param callback that will be wrapped within our promise implementation\r\n * @see [[PrismaPromise]]\r\n * @returns\r\n */\r\ndeclare type PrismaPromiseFactory = (callback: PrismaPromiseCallback) => PrismaPromise_2<unknown>;\r\n\r\ndeclare type PrismaPromiseInteractiveTransaction<PayloadType = unknown> = {\r\n    kind: 'itx';\r\n    id: string;\r\n    payload: PayloadType;\r\n};\r\n\r\ndeclare type PrismaPromiseTransaction<PayloadType = unknown> = PrismaPromiseBatchTransaction | PrismaPromiseInteractiveTransaction<PayloadType>;\r\n\r\ndeclare namespace Public {\r\n    export {\r\n        validator\r\n    }\r\n}\r\nexport { Public }\r\n\r\ndeclare namespace Public_2 {\r\n    export {\r\n        Args,\r\n        Result,\r\n        Payload,\r\n        PrismaPromise,\r\n        Operation,\r\n        Exact\r\n    }\r\n}\r\n\r\ndeclare type Query = {\r\n    sql: string;\r\n    args: Array<unknown>;\r\n};\r\n\r\ndeclare interface Queryable {\r\n    readonly provider: 'mysql' | 'postgres' | 'sqlite';\r\n    readonly adapterName: (typeof officialPrismaAdapters)[number] | (string & {});\r\n    /**\r\n     * Execute a query given as SQL, interpolating the given parameters,\r\n     * and returning the type-aware result set of the query.\r\n     *\r\n     * This is the preferred way of executing `SELECT` queries.\r\n     */\r\n    queryRaw(params: Query): Promise<Result_4<ResultSet>>;\r\n    /**\r\n     * Execute a query given as SQL, interpolating the given parameters,\r\n     * and returning the number of affected rows.\r\n     *\r\n     * This is the preferred way of executing `INSERT`, `UPDATE`, `DELETE` queries,\r\n     * as well as transactional queries.\r\n     */\r\n    executeRaw(params: Query): Promise<Result_4<number>>;\r\n}\r\n\r\ndeclare type QueryEngineBatchGraphQLRequest = {\r\n    batch: QueryEngineRequest[];\r\n    transaction?: boolean;\r\n    isolationLevel?: Transaction_2.IsolationLevel;\r\n};\r\n\r\ndeclare type QueryEngineBatchRequest = QueryEngineBatchGraphQLRequest | JsonBatchQuery;\r\n\r\ndeclare type QueryEngineConfig = {\r\n    datamodel: string;\r\n    configDir: string;\r\n    logQueries: boolean;\r\n    ignoreEnvVarErrors: boolean;\r\n    datasourceOverrides: Record<string, string>;\r\n    env: Record<string, string | undefined>;\r\n    logLevel: QueryEngineLogLevel;\r\n    telemetry?: QueryEngineTelemetry;\r\n    engineProtocol: EngineProtocol;\r\n};\r\n\r\ndeclare interface QueryEngineConstructor {\r\n    new (config: QueryEngineConfig, logger: (log: string) => void, adapter?: ErrorCapturingDriverAdapter): QueryEngineInstance;\r\n}\r\n\r\ndeclare type QueryEngineInstance = {\r\n    connect(headers: string): Promise<void>;\r\n    disconnect(headers: string): Promise<void>;\r\n    /**\r\n     * @param requestStr JSON.stringified `QueryEngineRequest | QueryEngineBatchRequest`\r\n     * @param headersStr JSON.stringified `QueryEngineRequestHeaders`\r\n     */\r\n    query(requestStr: string, headersStr: string, transactionId?: string): Promise<string>;\r\n    sdlSchema(): Promise<string>;\r\n    dmmf(traceparent: string): Promise<string>;\r\n    startTransaction(options: string, traceHeaders: string): Promise<string>;\r\n    commitTransaction(id: string, traceHeaders: string): Promise<string>;\r\n    rollbackTransaction(id: string, traceHeaders: string): Promise<string>;\r\n    metrics(options: string): Promise<string>;\r\n    applyPendingMigrations(): Promise<void>;\r\n};\r\n\r\ndeclare type QueryEngineLogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'off';\r\n\r\ndeclare type QueryEngineRequest = {\r\n    query: string;\r\n    variables: Object;\r\n};\r\n\r\ndeclare type QueryEngineResult<T> = {\r\n    data: T;\r\n    elapsed: number;\r\n};\r\n\r\ndeclare type QueryEngineTelemetry = {\r\n    enabled: Boolean;\r\n    endpoint: string;\r\n};\r\n\r\ndeclare type QueryEvent = {\r\n    timestamp: Date;\r\n    query: string;\r\n    params: string;\r\n    duration: number;\r\n    target: string;\r\n};\r\n\r\ndeclare type QueryEventType = 'query';\r\n\r\ndeclare type QueryMiddleware = (params: QueryMiddlewareParams, next: (params: QueryMiddlewareParams) => Promise<unknown>) => Promise<unknown>;\r\n\r\ndeclare type QueryMiddlewareParams = {\r\n    /** The model this is executed on */\r\n    model?: string;\r\n    /** The action that is being handled */\r\n    action: Action;\r\n    /** TODO what is this */\r\n    dataPath: string[];\r\n    /** TODO what is this */\r\n    runInTransaction: boolean;\r\n    args?: UserArgs_2;\r\n};\r\n\r\nexport declare type QueryOptions = {\r\n    query: {\r\n        [ModelName in string]: {\r\n            [ModelAction in string]: ModelQueryOptionsCb;\r\n        } | QueryOptionsCb;\r\n    };\r\n};\r\n\r\nexport declare type QueryOptionsCb = (args: QueryOptionsCbArgs) => Promise<any>;\r\n\r\nexport declare type QueryOptionsCbArgs = {\r\n    model?: string;\r\n    operation: string;\r\n    args: JsArgs | RawQueryArgs;\r\n    query: (args: JsArgs | RawQueryArgs) => Promise<unknown>;\r\n};\r\n\r\n/**\r\n * Create raw SQL statement.\r\n */\r\nexport declare function raw(value: string): Sql;\r\n\r\nexport declare type RawParameters = {\r\n    __prismaRawParameters__: true;\r\n    values: string;\r\n};\r\n\r\nexport declare type RawQueryArgs = Sql | [query: string, ...values: RawValue[]];\r\n\r\ndeclare type RawTaggedValue = {\r\n    $type: 'Raw';\r\n    value: unknown;\r\n};\r\n\r\n/**\r\n * Supported value or SQL instance.\r\n */\r\nexport declare type RawValue = Value | Sql;\r\n\r\nexport declare type ReadonlyDeep<T> = {\r\n    readonly [K in keyof T]: ReadonlyDeep<T[K]>;\r\n};\r\n\r\ndeclare type ReadonlyDeep_2<O> = {\r\n    +readonly [K in keyof O]: ReadonlyDeep_2<O[K]>;\r\n};\r\n\r\ndeclare type Record_2<T extends string | number | symbol, U> = {\r\n    [P in T]: U;\r\n};\r\nexport { Record_2 as Record }\r\n\r\nexport declare type RenameAndNestPayloadKeys<P> = {\r\n    [K in keyof P as K extends 'scalars' | 'objects' | 'composites' ? keyof P[K] : never]: P[K];\r\n};\r\n\r\ndeclare type RequestBatchOptions<InteractiveTransactionPayload> = {\r\n    transaction?: TransactionOptions_2<InteractiveTransactionPayload>;\r\n    traceparent?: string;\r\n    numTry?: number;\r\n    containsWrite: boolean;\r\n    customDataProxyFetch?: (fetch: Fetch) => Fetch;\r\n};\r\n\r\ndeclare interface RequestError {\r\n    error: string;\r\n    user_facing_error: {\r\n        is_panic: boolean;\r\n        message: string;\r\n        meta?: Record<string, unknown>;\r\n        error_code?: string;\r\n        batch_request_idx?: number;\r\n    };\r\n}\r\n\r\ndeclare class RequestHandler {\r\n    client: Client;\r\n    dataloader: DataLoader<RequestParams>;\r\n    private logEmitter?;\r\n    constructor(client: Client, logEmitter?: LogEmitter);\r\n    request(params: RequestParams): Promise<any>;\r\n    mapQueryEngineResult({ dataPath, unpacker }: RequestParams, response: QueryEngineResult<any>): any;\r\n    /**\r\n     * Handles the error and logs it, logging the error is done synchronously waiting for the event\r\n     * handlers to finish.\r\n     */\r\n    handleAndLogRequestError(params: HandleErrorParams): never;\r\n    handleRequestError({ error, clientMethod, callsite, transaction, args, modelName }: HandleErrorParams): never;\r\n    sanitizeMessage(message: any): any;\r\n    unpack(data: unknown, dataPath: string[], unpacker?: Unpacker): any;\r\n    get [Symbol.toStringTag](): string;\r\n}\r\n\r\ndeclare type RequestOptions = {\r\n    method?: string;\r\n    headers?: Record<string, string>;\r\n    body?: string;\r\n};\r\n\r\ndeclare type RequestOptions_2<InteractiveTransactionPayload> = {\r\n    traceparent?: string;\r\n    numTry?: number;\r\n    interactiveTransaction?: InteractiveTransactionOptions<InteractiveTransactionPayload>;\r\n    isWrite: boolean;\r\n    customDataProxyFetch?: (fetch: Fetch) => Fetch;\r\n};\r\n\r\ndeclare type RequestParams = {\r\n    modelName?: string;\r\n    action: Action;\r\n    protocolQuery: JsonQuery;\r\n    dataPath: string[];\r\n    clientMethod: string;\r\n    callsite?: CallSite;\r\n    transaction?: PrismaPromiseTransaction;\r\n    extensions: MergedExtensionsList;\r\n    args?: any;\r\n    headers?: Record<string, string>;\r\n    unpacker?: Unpacker;\r\n    otelParentCtx?: Context;\r\n    otelChildCtx?: Context;\r\n    customDataProxyFetch?: (fetch: Fetch) => Fetch;\r\n};\r\n\r\ndeclare type RequestResponse = {\r\n    ok: boolean;\r\n    url: string;\r\n    statusText?: string;\r\n    status: number;\r\n    headers: NodeHeaders;\r\n    text: () => Promise<string>;\r\n    json: () => Promise<any>;\r\n};\r\n\r\ndeclare type RequiredExtensionArgs = NameArgs & ResultArgs & ModelArgs & ClientArgs & QueryOptions;\r\nexport { RequiredExtensionArgs }\r\nexport { RequiredExtensionArgs as UserArgs }\r\n\r\nexport declare type RequiredKeys<O> = {\r\n    [K in keyof O]-?: {} extends Pick_2<O, K> ? never : K;\r\n}[keyof O];\r\n\r\ndeclare function resolveDatasourceUrl({ inlineDatasources, overrideDatasources, env, clientVersion, }: {\r\n    inlineDatasources: GetPrismaClientConfig['inlineDatasources'];\r\n    overrideDatasources: Datasources;\r\n    env: Record<string, string | undefined>;\r\n    clientVersion: string;\r\n}): string;\r\n\r\nexport declare type Result<T, A, F extends Operation> = T extends {\r\n    [K: symbol]: {\r\n        types: {\r\n            payload: any;\r\n        };\r\n    };\r\n} ? GetResult<T[symbol]['types']['payload'], A, F> : GetResult<{\r\n    composites: {};\r\n    objects: {};\r\n    scalars: {};\r\n}, {}, F>;\r\n\r\nexport declare type Result_2<T, A, F extends Operation> = Result<T, A, F>;\r\n\r\ndeclare namespace Result_3 {\r\n    export {\r\n        Operation,\r\n        FluentOperation,\r\n        Count,\r\n        TrueKeys,\r\n        GetFindResult,\r\n        GetSelectIncludeResult,\r\n        SelectablePayloadFields,\r\n        SelectField,\r\n        DefaultSelection,\r\n        UnwrapPayload,\r\n        GetCountResult,\r\n        Aggregate,\r\n        GetAggregateResult,\r\n        GetBatchResult,\r\n        GetGroupByResult,\r\n        GetResult\r\n    }\r\n}\r\n\r\ndeclare type Result_4<T> = {\r\n    map<U>(fn: (value: T) => U): Result_4<U>;\r\n    flatMap<U>(fn: (value: T) => Result_4<U>): Result_4<U>;\r\n} & ({\r\n    readonly ok: true;\r\n    readonly value: T;\r\n} | {\r\n    readonly ok: false;\r\n    readonly error: Error_2;\r\n});\r\n\r\nexport declare type ResultArg = {\r\n    [FieldName in string]: ResultFieldDefinition;\r\n};\r\n\r\nexport declare type ResultArgs = {\r\n    result: {\r\n        [ModelName in string]: ResultArg;\r\n    };\r\n};\r\n\r\nexport declare type ResultArgsFieldCompute = (model: any) => unknown;\r\n\r\nexport declare type ResultFieldDefinition = {\r\n    needs?: {\r\n        [FieldName in string]: boolean;\r\n    };\r\n    compute: ResultArgsFieldCompute;\r\n};\r\n\r\ndeclare interface ResultSet {\r\n    /**\r\n     * List of column types appearing in a database query, in the same order as `columnNames`.\r\n     * They are used within the Query Engine to convert values from JS to Quaint values.\r\n     */\r\n    columnTypes: Array<ColumnType>;\r\n    /**\r\n     * List of column names appearing in a database query, in the same order as `columnTypes`.\r\n     */\r\n    columnNames: Array<string>;\r\n    /**\r\n     * List of rows retrieved from a database query.\r\n     * Each row is a list of values, whose length matches `columnNames` and `columnTypes`.\r\n     */\r\n    rows: Array<Array<unknown>>;\r\n    /**\r\n     * The last ID of an `INSERT` statement, if any.\r\n     * This is required for `AUTO_INCREMENT` columns in databases based on MySQL and SQLite.\r\n     */\r\n    lastInsertId?: string;\r\n}\r\n\r\nexport declare type Return<T> = T extends (...args: any[]) => infer R ? R : T;\r\n\r\ndeclare type Runtime = \"edge-routine\" | \"workerd\" | \"deno\" | \"lagon\" | \"react-native\" | \"netlify\" | \"electron\" | \"node\" | \"bun\" | \"edge-light\" | \"fastly\" | \"unknown\";\r\n\r\ndeclare type RuntimeDataModel = {\r\n    readonly models: Record<string, RuntimeModel>;\r\n    readonly enums: Record<string, RuntimeEnum>;\r\n    readonly types: Record<string, RuntimeModel>;\r\n};\r\n\r\ndeclare type RuntimeEnum = Omit<DMMF.DatamodelEnum, 'name'>;\r\n\r\ndeclare type RuntimeModel = Omit<DMMF.Model, 'name'>;\r\n\r\nexport declare type Select<T, U> = T extends U ? T : never;\r\n\r\nexport declare type SelectablePayloadFields<K extends PropertyKey, O> = {\r\n    objects: {\r\n        [k in K]: O;\r\n    };\r\n} | {\r\n    composites: {\r\n        [k in K]: O;\r\n    };\r\n};\r\n\r\nexport declare type SelectField<P extends SelectablePayloadFields<any, any>, K extends PropertyKey> = P extends {\r\n    objects: Record<K, any>;\r\n} ? P['objects'][K] : P extends {\r\n    composites: Record<K, any>;\r\n} ? P['composites'][K] : never;\r\n\r\ndeclare type Selection_2 = Record<string, boolean | JsArgs>;\r\nexport { Selection_2 as Selection }\r\n\r\n/**\r\n * An interface that represents a span. A span represents a single operation\r\n * within a trace. Examples of span might include remote procedure calls or a\r\n * in-process function calls to sub-components. A Trace has a single, top-level\r\n * \"root\" Span that in turn may have zero or more child Spans, which in turn\r\n * may have children.\r\n *\r\n * Spans are created by the {@link Tracer.startSpan} method.\r\n */\r\ndeclare interface Span {\r\n    /**\r\n     * Returns the {@link SpanContext} object associated with this Span.\r\n     *\r\n     * Get an immutable, serializable identifier for this span that can be used\r\n     * to create new child spans. Returned SpanContext is usable even after the\r\n     * span ends.\r\n     *\r\n     * @returns the SpanContext object associated with this Span.\r\n     */\r\n    spanContext(): SpanContext;\r\n    /**\r\n     * Sets an attribute to the span.\r\n     *\r\n     * Sets a single Attribute with the key and value passed as arguments.\r\n     *\r\n     * @param key the key for this attribute.\r\n     * @param value the value for this attribute. Setting a value null or\r\n     *              undefined is invalid and will result in undefined behavior.\r\n     */\r\n    setAttribute(key: string, value: SpanAttributeValue): this;\r\n    /**\r\n     * Sets attributes to the span.\r\n     *\r\n     * @param attributes the attributes that will be added.\r\n     *                   null or undefined attribute values\r\n     *                   are invalid and will result in undefined behavior.\r\n     */\r\n    setAttributes(attributes: SpanAttributes): this;\r\n    /**\r\n     * Adds an event to the Span.\r\n     *\r\n     * @param name the name of the event.\r\n     * @param [attributesOrStartTime] the attributes that will be added; these are\r\n     *     associated with this event. Can be also a start time\r\n     *     if type is {@type TimeInput} and 3rd param is undefined\r\n     * @param [startTime] start time of the event.\r\n     */\r\n    addEvent(name: string, attributesOrStartTime?: SpanAttributes | TimeInput, startTime?: TimeInput): this;\r\n    /**\r\n     * Sets a status to the span. If used, this will override the default Span\r\n     * status. Default is {@link SpanStatusCode.UNSET}. SetStatus overrides the value\r\n     * of previous calls to SetStatus on the Span.\r\n     *\r\n     * @param status the SpanStatus to set.\r\n     */\r\n    setStatus(status: SpanStatus): this;\r\n    /**\r\n     * Updates the Span name.\r\n     *\r\n     * This will override the name provided via {@link Tracer.startSpan}.\r\n     *\r\n     * Upon this update, any sampling behavior based on Span name will depend on\r\n     * the implementation.\r\n     *\r\n     * @param name the Span name.\r\n     */\r\n    updateName(name: string): this;\r\n    /**\r\n     * Marks the end of Span execution.\r\n     *\r\n     * Call to End of a Span MUST not have any effects on child spans. Those may\r\n     * still be running and can be ended later.\r\n     *\r\n     * Do not return `this`. The Span generally should not be used after it\r\n     * is ended so chaining is not desired in this context.\r\n     *\r\n     * @param [endTime] the time to set as Span's end time. If not provided,\r\n     *     use the current time as the span's end time.\r\n     */\r\n    end(endTime?: TimeInput): void;\r\n    /**\r\n     * Returns the flag whether this span will be recorded.\r\n     *\r\n     * @returns true if this Span is active and recording information like events\r\n     *     with the `AddEvent` operation and attributes using `setAttributes`.\r\n     */\r\n    isRecording(): boolean;\r\n    /**\r\n     * Sets exception as a span event\r\n     * @param exception the exception the only accepted values are string or Error\r\n     * @param [time] the time to set as Span's event time. If not provided,\r\n     *     use the current time.\r\n     */\r\n    recordException(exception: Exception, time?: TimeInput): void;\r\n}\r\n\r\n/**\r\n * @deprecated please use {@link Attributes}\r\n */\r\ndeclare type SpanAttributes = Attributes;\r\n\r\n/**\r\n * @deprecated please use {@link AttributeValue}\r\n */\r\ndeclare type SpanAttributeValue = AttributeValue;\r\n\r\ndeclare type SpanCallback<R> = (span?: Span, context?: Context) => R;\r\n\r\n/**\r\n * A SpanContext represents the portion of a {@link Span} which must be\r\n * serialized and propagated along side of a {@link Baggage}.\r\n */\r\ndeclare interface SpanContext {\r\n    /**\r\n     * The ID of the trace that this span belongs to. It is worldwide unique\r\n     * with practically sufficient probability by being made as 16 randomly\r\n     * generated bytes, encoded as a 32 lowercase hex characters corresponding to\r\n     * 128 bits.\r\n     */\r\n    traceId: string;\r\n    /**\r\n     * The ID of the Span. It is globally unique with practically sufficient\r\n     * probability by being made as 8 randomly generated bytes, encoded as a 16\r\n     * lowercase hex characters corresponding to 64 bits.\r\n     */\r\n    spanId: string;\r\n    /**\r\n     * Only true if the SpanContext was propagated from a remote parent.\r\n     */\r\n    isRemote?: boolean;\r\n    /**\r\n     * Trace flags to propagate.\r\n     *\r\n     * It is represented as 1 byte (bitmap). Bit to represent whether trace is\r\n     * sampled or not. When set, the least significant bit documents that the\r\n     * caller may have recorded trace data. A caller who does not record trace\r\n     * data out-of-band leaves this flag unset.\r\n     *\r\n     * see {@link TraceFlags} for valid flag values.\r\n     */\r\n    traceFlags: number;\r\n    /**\r\n     * Tracing-system-specific info to propagate.\r\n     *\r\n     * The tracestate field value is a `list` as defined below. The `list` is a\r\n     * series of `list-members` separated by commas `,`, and a list-member is a\r\n     * key/value pair separated by an equals sign `=`. Spaces and horizontal tabs\r\n     * surrounding `list-members` are ignored. There can be a maximum of 32\r\n     * `list-members` in a `list`.\r\n     * More Info: https://www.w3.org/TR/trace-context/#tracestate-field\r\n     *\r\n     * Examples:\r\n     *     Single tracing system (generic format):\r\n     *         tracestate: rojo=00f067aa0ba902b7\r\n     *     Multiple tracing systems (with different formatting):\r\n     *         tracestate: rojo=00f067aa0ba902b7,congo=t61rcWkgMzE\r\n     */\r\n    traceState?: TraceState;\r\n}\r\n\r\ndeclare enum SpanKind {\r\n    /** Default value. Indicates that the span is used internally. */\r\n    INTERNAL = 0,\r\n    /**\r\n     * Indicates that the span covers server-side handling of an RPC or other\r\n     * remote request.\r\n     */\r\n    SERVER = 1,\r\n    /**\r\n     * Indicates that the span covers the client-side wrapper around an RPC or\r\n     * other remote request.\r\n     */\r\n    CLIENT = 2,\r\n    /**\r\n     * Indicates that the span describes producer sending a message to a\r\n     * broker. Unlike client and server, there is no direct critical path latency\r\n     * relationship between producer and consumer spans.\r\n     */\r\n    PRODUCER = 3,\r\n    /**\r\n     * Indicates that the span describes consumer receiving a message from a\r\n     * broker. Unlike client and server, there is no direct critical path latency\r\n     * relationship between producer and consumer spans.\r\n     */\r\n    CONSUMER = 4\r\n}\r\n\r\n/**\r\n * Options needed for span creation\r\n */\r\ndeclare interface SpanOptions {\r\n    /**\r\n     * The SpanKind of a span\r\n     * @default {@link SpanKind.INTERNAL}\r\n     */\r\n    kind?: SpanKind;\r\n    /** A span's attributes */\r\n    attributes?: SpanAttributes;\r\n    /** {@link Link}s span to other spans */\r\n    links?: Link[];\r\n    /** A manually specified start time for the created `Span` object. */\r\n    startTime?: TimeInput;\r\n    /** The new span should be a root span. (Ignore parent from context). */\r\n    root?: boolean;\r\n}\r\n\r\ndeclare interface SpanStatus {\r\n    /** The status code of this message. */\r\n    code: SpanStatusCode;\r\n    /** A developer-facing error message. */\r\n    message?: string;\r\n}\r\n\r\n/**\r\n * An enumeration of status codes.\r\n */\r\ndeclare enum SpanStatusCode {\r\n    /**\r\n     * The default status.\r\n     */\r\n    UNSET = 0,\r\n    /**\r\n     * The operation has been validated by an Application developer or\r\n     * Operator to have completed successfully.\r\n     */\r\n    OK = 1,\r\n    /**\r\n     * The operation contains an error.\r\n     */\r\n    ERROR = 2\r\n}\r\n\r\n/**\r\n * A SQL instance can be nested within each other to build SQL strings.\r\n */\r\nexport declare class Sql {\r\n    readonly values: Value[];\r\n    readonly strings: string[];\r\n    constructor(rawStrings: readonly string[], rawValues: readonly RawValue[]);\r\n    get sql(): string;\r\n    get statement(): string;\r\n    get text(): string;\r\n    inspect(): {\r\n        sql: string;\r\n        statement: string;\r\n        text: string;\r\n        values: unknown[];\r\n    };\r\n}\r\n\r\n/**\r\n * Create a SQL object from a template string.\r\n */\r\nexport declare function sqltag(strings: readonly string[], ...values: readonly RawValue[]): Sql;\r\n\r\n/**\r\n * Defines TimeInput.\r\n *\r\n * hrtime, epoch milliseconds, performance.now() or Date\r\n */\r\ndeclare type TimeInput = HrTime | number | Date;\r\n\r\nexport declare type ToTuple<T> = T extends any[] ? T : [T];\r\n\r\ndeclare interface TraceState {\r\n    /**\r\n     * Create a new TraceState which inherits from this TraceState and has the\r\n     * given key set.\r\n     * The new entry will always be added in the front of the list of states.\r\n     *\r\n     * @param key key of the TraceState entry.\r\n     * @param value value of the TraceState entry.\r\n     */\r\n    set(key: string, value: string): TraceState;\r\n    /**\r\n     * Return a new TraceState which inherits from this TraceState but does not\r\n     * contain the given key.\r\n     *\r\n     * @param key the key for the TraceState entry to be removed.\r\n     */\r\n    unset(key: string): TraceState;\r\n    /**\r\n     * Returns the value to which the specified key is mapped, or `undefined` if\r\n     * this map contains no mapping for the key.\r\n     *\r\n     * @param key with which the specified value is to be associated.\r\n     * @returns the value to which the specified key is mapped, or `undefined` if\r\n     *     this map contains no mapping for the key.\r\n     */\r\n    get(key: string): string | undefined;\r\n    /**\r\n     * Serializes the TraceState to a `list` as defined below. The `list` is a\r\n     * series of `list-members` separated by commas `,`, and a list-member is a\r\n     * key/value pair separated by an equals sign `=`. Spaces and horizontal tabs\r\n     * surrounding `list-members` are ignored. There can be a maximum of 32\r\n     * `list-members` in a `list`.\r\n     *\r\n     * @returns the serialized string.\r\n     */\r\n    serialize(): string;\r\n}\r\n\r\ndeclare interface TracingHelper {\r\n    isEnabled(): boolean;\r\n    getTraceParent(context?: Context): string;\r\n    createEngineSpan(engineSpanEvent: EngineSpanEvent): void;\r\n    getActiveContext(): Context | undefined;\r\n    runInChildSpan<R>(nameOrOptions: string | ExtendedSpanOptions, callback: SpanCallback<R>): R;\r\n}\r\n\r\ndeclare interface Transaction extends Queryable {\r\n    /**\r\n     * Transaction options.\r\n     */\r\n    readonly options: TransactionOptions;\r\n    /**\r\n     * Commit the transaction.\r\n     */\r\n    commit(): Promise<Result_4<void>>;\r\n    /**\r\n     * Rolls back the transaction.\r\n     */\r\n    rollback(): Promise<Result_4<void>>;\r\n}\r\n\r\ndeclare namespace Transaction_2 {\r\n    export {\r\n        IsolationLevel,\r\n        Options,\r\n        InteractiveTransactionInfo,\r\n        TransactionHeaders\r\n    }\r\n}\r\n\r\ndeclare type TransactionHeaders = {\r\n    traceparent?: string;\r\n};\r\n\r\ndeclare type TransactionOptions = {\r\n    usePhantomQuery: boolean;\r\n};\r\n\r\ndeclare type TransactionOptions_2<InteractiveTransactionPayload> = {\r\n    kind: 'itx';\r\n    options: InteractiveTransactionOptions<InteractiveTransactionPayload>;\r\n} | {\r\n    kind: 'batch';\r\n    options: BatchTransactionOptions;\r\n};\r\n\r\nexport declare type TrueKeys<T> = {\r\n    [K in keyof T]: T[K] extends true ? K : never;\r\n}[keyof T];\r\n\r\nexport declare type TypeMapCbDef = Fn<{\r\n    extArgs: InternalArgs;\r\n}, TypeMapDef>;\r\n\r\n/** Shared */\r\nexport declare type TypeMapDef = Record<any, any>;\r\n\r\ndeclare namespace Types {\r\n    export {\r\n        Result_3 as Result,\r\n        Extensions_2 as Extensions,\r\n        Utils,\r\n        Public_2 as Public,\r\n        OperationPayload as Payload\r\n    }\r\n}\r\nexport { Types }\r\n\r\ndeclare type UnknownErrorParams = {\r\n    clientVersion: string;\r\n    batchRequestIdx?: number;\r\n};\r\n\r\ndeclare type Unpacker = (data: any) => any;\r\n\r\nexport declare type UnwrapPayload<P> = {} extends P ? unknown : {\r\n    [K in keyof P]: P[K] extends {\r\n        scalars: infer S;\r\n        composites: infer C;\r\n    }[] ? Array<S & UnwrapPayload<C>> : P[K] extends {\r\n        scalars: infer S;\r\n        composites: infer C;\r\n    } | null ? S & UnwrapPayload<C> | Select<P[K], null> : never;\r\n};\r\n\r\nexport declare type UnwrapPromise<P> = P extends Promise<infer R> ? R : P;\r\n\r\nexport declare type UnwrapTuple<Tuple extends readonly unknown[]> = {\r\n    [K in keyof Tuple]: K extends `${number}` ? Tuple[K] extends PrismaPromise<infer X> ? X : UnwrapPromise<Tuple[K]> : UnwrapPromise<Tuple[K]>;\r\n};\r\n\r\n/**\r\n * Input that flows from the user into the Client.\r\n */\r\ndeclare type UserArgs_2 = any;\r\n\r\ndeclare namespace Utils {\r\n    export {\r\n        EmptyToUnknown,\r\n        NeverToUnknown,\r\n        PatchFlat,\r\n        Omit_2 as Omit,\r\n        Pick_2 as Pick,\r\n        ComputeDeep,\r\n        Compute,\r\n        OptionalFlat,\r\n        ReadonlyDeep,\r\n        Narrowable,\r\n        Narrow,\r\n        Exact,\r\n        Cast,\r\n        JsonObject,\r\n        JsonArray,\r\n        JsonValue,\r\n        Record_2 as Record,\r\n        UnwrapPromise,\r\n        UnwrapTuple,\r\n        Path,\r\n        Fn,\r\n        Call,\r\n        RequiredKeys,\r\n        OptionalKeys,\r\n        Optional,\r\n        Return,\r\n        ToTuple,\r\n        RenameAndNestPayloadKeys,\r\n        PayloadToResult,\r\n        Select,\r\n        Equals,\r\n        Or,\r\n        JsPromise\r\n    }\r\n}\r\n\r\ndeclare function validator<V>(): <S>(select: Exact<S, V>) => S;\r\n\r\ndeclare function validator<C, M extends Exclude<keyof C, `$${string}`>, O extends keyof C[M] & Operation>(client: C, model: M, operation: O): <S>(select: Exact<S, Args<C[M], O>>) => S;\r\n\r\ndeclare function validator<C, M extends Exclude<keyof C, `$${string}`>, O extends keyof C[M] & Operation, P extends keyof Args<C[M], O>>(client: C, model: M, operation: O, prop: P): <S>(select: Exact<S, Args<C[M], O>[P]>) => S;\r\n\r\n/**\r\n * Values supported by SQL engine.\r\n */\r\nexport declare type Value = unknown;\r\n\r\nexport declare function warnEnvConflicts(envPaths: any): void;\r\n\r\nexport declare const warnOnce: (key: string, message: string, ...args: unknown[]) => void;\r\n\r\ndeclare type WasmLoadingConfig = {\r\n    /**\r\n     * WASM-bindgen runtime for corresponding module\r\n     */\r\n    getRuntime: () => {\r\n        __wbg_set_wasm(exports: unknown): any;\r\n        QueryEngine: QueryEngineConstructor;\r\n    };\r\n    /**\r\n     * Loads the raw wasm module for the wasm query engine. This configuration is\r\n     * generated specifically for each type of client, eg. Node.js client and Edge\r\n     * clients will have different implementations.\r\n     * @remarks this is a callback on purpose, we only load the wasm if needed.\r\n     * @remarks only used by LibraryEngine.ts\r\n     */\r\n    getQueryEngineWasmModule: () => Promise<unknown>;\r\n};\r\n\r\nexport { }\r\n"
  },
  {
    "path": "server/src/common/prisma-client/runtime/library.js",
    "content": "\"use strict\";var Ml=Object.create;var Ct=Object.defineProperty;var $l=Object.getOwnPropertyDescriptor;var ql=Object.getOwnPropertyNames;var jl=Object.getPrototypeOf,Vl=Object.prototype.hasOwnProperty;var Z=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),Fr=(e,r)=>{for(var t in r)Ct(e,t,{get:r[t],enumerable:!0})},no=(e,r,t,n)=>{if(r&&typeof r==\"object\"||typeof r==\"function\")for(let i of ql(r))!Vl.call(e,i)&&i!==t&&Ct(e,i,{get:()=>r[i],enumerable:!(n=$l(r,i))||n.enumerable});return e};var k=(e,r,t)=>(t=e!=null?Ml(jl(e)):{},no(r||!e||!e.__esModule?Ct(t,\"default\",{value:e,enumerable:!0}):t,e)),Bl=e=>no(Ct({},\"__esModule\",{value:!0}),e);var Ao=Z((Bm,Un)=>{\"use strict\";var v=Un.exports;Un.exports.default=v;var D=\"\\x1B[\",jr=\"\\x1B]\",dr=\"\\x07\",Ft=\";\",Ro=process.env.TERM_PROGRAM===\"Apple_Terminal\";v.cursorTo=(e,r)=>{if(typeof e!=\"number\")throw new TypeError(\"The `x` argument is required\");return typeof r!=\"number\"?D+(e+1)+\"G\":D+(r+1)+\";\"+(e+1)+\"H\"};v.cursorMove=(e,r)=>{if(typeof e!=\"number\")throw new TypeError(\"The `x` argument is required\");let t=\"\";return e<0?t+=D+-e+\"D\":e>0&&(t+=D+e+\"C\"),r<0?t+=D+-r+\"A\":r>0&&(t+=D+r+\"B\"),t};v.cursorUp=(e=1)=>D+e+\"A\";v.cursorDown=(e=1)=>D+e+\"B\";v.cursorForward=(e=1)=>D+e+\"C\";v.cursorBackward=(e=1)=>D+e+\"D\";v.cursorLeft=D+\"G\";v.cursorSavePosition=Ro?\"\\x1B7\":D+\"s\";v.cursorRestorePosition=Ro?\"\\x1B8\":D+\"u\";v.cursorGetPosition=D+\"6n\";v.cursorNextLine=D+\"E\";v.cursorPrevLine=D+\"F\";v.cursorHide=D+\"?25l\";v.cursorShow=D+\"?25h\";v.eraseLines=e=>{let r=\"\";for(let t=0;t<e;t++)r+=v.eraseLine+(t<e-1?v.cursorUp():\"\");return e&&(r+=v.cursorLeft),r};v.eraseEndLine=D+\"K\";v.eraseStartLine=D+\"1K\";v.eraseLine=D+\"2K\";v.eraseDown=D+\"J\";v.eraseUp=D+\"1J\";v.eraseScreen=D+\"2J\";v.scrollUp=D+\"S\";v.scrollDown=D+\"T\";v.clearScreen=\"\\x1Bc\";v.clearTerminal=process.platform===\"win32\"?`${v.eraseScreen}${D}0f`:`${v.eraseScreen}${D}3J${D}H`;v.beep=dr;v.link=(e,r)=>[jr,\"8\",Ft,Ft,r,dr,e,jr,\"8\",Ft,Ft,dr].join(\"\");v.image=(e,r={})=>{let t=`${jr}1337;File=inline=1`;return r.width&&(t+=`;width=${r.width}`),r.height&&(t+=`;height=${r.height}`),r.preserveAspectRatio===!1&&(t+=\";preserveAspectRatio=0\"),t+\":\"+e.toString(\"base64\")+dr};v.iTerm={setCwd:(e=process.cwd())=>`${jr}50;CurrentDir=${e}${dr}`,annotation:(e,r={})=>{let t=`${jr}1337;`,n=typeof r.x<\"u\",i=typeof r.y<\"u\";if((n||i)&&!(n&&i&&typeof r.length<\"u\"))throw new Error(\"`x`, `y` and `length` must be defined when `x` or `y` is defined\");return e=e.replace(/\\|/g,\"\"),t+=r.isHidden?\"AddHiddenAnnotation=\":\"AddAnnotation=\",r.length>0?t+=(n?[e,r.length,r.x,r.y]:[r.length,e]).join(\"|\"):t+=e,t+dr}}});var Qn=Z((Um,Io)=>{\"use strict\";Io.exports=(e,r=process.argv)=>{let t=e.startsWith(\"-\")?\"\":e.length===1?\"-\":\"--\",n=r.indexOf(t+e),i=r.indexOf(\"--\");return n!==-1&&(i===-1||n<i)}});var Do=Z((Qm,ko)=>{\"use strict\";var Ru=require(\"os\"),_o=require(\"tty\"),pe=Qn(),{env:G}=process,Ve;pe(\"no-color\")||pe(\"no-colors\")||pe(\"color=false\")||pe(\"color=never\")?Ve=0:(pe(\"color\")||pe(\"colors\")||pe(\"color=true\")||pe(\"color=always\"))&&(Ve=1);\"FORCE_COLOR\"in G&&(G.FORCE_COLOR===\"true\"?Ve=1:G.FORCE_COLOR===\"false\"?Ve=0:Ve=G.FORCE_COLOR.length===0?1:Math.min(parseInt(G.FORCE_COLOR,10),3));function Gn(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Jn(e,r){if(Ve===0)return 0;if(pe(\"color=16m\")||pe(\"color=full\")||pe(\"color=truecolor\"))return 3;if(pe(\"color=256\"))return 2;if(e&&!r&&Ve===void 0)return 0;let t=Ve||0;if(G.TERM===\"dumb\")return t;if(process.platform===\"win32\"){let n=Ru.release().split(\".\");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if(\"CI\"in G)return[\"TRAVIS\",\"CIRCLECI\",\"APPVEYOR\",\"GITLAB_CI\",\"GITHUB_ACTIONS\",\"BUILDKITE\"].some(n=>n in G)||G.CI_NAME===\"codeship\"?1:t;if(\"TEAMCITY_VERSION\"in G)return/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(G.TEAMCITY_VERSION)?1:0;if(G.COLORTERM===\"truecolor\")return 3;if(\"TERM_PROGRAM\"in G){let n=parseInt((G.TERM_PROGRAM_VERSION||\"\").split(\".\")[0],10);switch(G.TERM_PROGRAM){case\"iTerm.app\":return n>=3?3:2;case\"Apple_Terminal\":return 2}}return/-256(color)?$/i.test(G.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(G.TERM)||\"COLORTERM\"in G?1:t}function Au(e){let r=Jn(e,e&&e.isTTY);return Gn(r)}ko.exports={supportsColor:Au,stdout:Gn(Jn(!0,_o.isatty(1))),stderr:Gn(Jn(!0,_o.isatty(2)))}});var Fo=Z((Gm,Lo)=>{\"use strict\";var Iu=Do(),mr=Qn();function Oo(e){if(/^\\d{3,4}$/.test(e)){let t=/(\\d{1,2})(\\d{2})/.exec(e);return{major:0,minor:parseInt(t[1],10),patch:parseInt(t[2],10)}}let r=(e||\"\").split(\".\").map(t=>parseInt(t,10));return{major:r[0],minor:r[1],patch:r[2]}}function Wn(e){let{env:r}=process;if(\"FORCE_HYPERLINK\"in r)return!(r.FORCE_HYPERLINK.length>0&&parseInt(r.FORCE_HYPERLINK,10)===0);if(mr(\"no-hyperlink\")||mr(\"no-hyperlinks\")||mr(\"hyperlink=false\")||mr(\"hyperlink=never\"))return!1;if(mr(\"hyperlink=true\")||mr(\"hyperlink=always\")||\"NETLIFY\"in r)return!0;if(!Iu.supportsColor(e)||e&&!e.isTTY||process.platform===\"win32\"||\"CI\"in r||\"TEAMCITY_VERSION\"in r)return!1;if(\"TERM_PROGRAM\"in r){let t=Oo(r.TERM_PROGRAM_VERSION);switch(r.TERM_PROGRAM){case\"iTerm.app\":return t.major===3?t.minor>=1:t.major>3;case\"WezTerm\":return t.major>=20200620;case\"vscode\":return t.major>1||t.major===1&&t.minor>=72}}if(\"VTE_VERSION\"in r){if(r.VTE_VERSION===\"0.50.0\")return!1;let t=Oo(r.VTE_VERSION);return t.major>0||t.minor>=50}return!1}Lo.exports={supportsHyperlink:Wn,stdout:Wn(process.stdout),stderr:Wn(process.stderr)}});var Mo=Z((Jm,Vr)=>{\"use strict\";var _u=Ao(),Hn=Fo(),No=(e,r,{target:t=\"stdout\",...n}={})=>Hn[t]?_u.link(e,r):n.fallback===!1?e:typeof n.fallback==\"function\"?n.fallback(e,r):`${e} (\\u200B${r}\\u200B)`;Vr.exports=(e,r,t={})=>No(e,r,t);Vr.exports.stderr=(e,r,t={})=>No(e,r,{target:\"stderr\",...t});Vr.exports.isSupported=Hn.stdout;Vr.exports.stderr.isSupported=Hn.stderr});var Yn=Z((tf,ku)=>{ku.exports={name:\"@prisma/engines-version\",version:\"5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\",main:\"index.js\",types:\"index.d.ts\",license:\"Apache-2.0\",author:\"Tim Suchanek <suchanek@prisma.io>\",prisma:{enginesVersion:\"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\"},repository:{type:\"git\",url:\"https://github.com/prisma/engines-wrapper.git\",directory:\"packages/engines-version\"},devDependencies:{\"@types/node\":\"18.19.33\",typescript:\"4.9.5\"},files:[\"index.js\",\"index.d.ts\"],scripts:{build:\"tsc -d\"}}});var zn=Z(Nt=>{\"use strict\";Object.defineProperty(Nt,\"__esModule\",{value:!0});Nt.enginesVersion=void 0;Nt.enginesVersion=Yn().prisma.enginesVersion});var Vo=Z((Pf,Lu)=>{Lu.exports={name:\"dotenv\",version:\"16.0.3\",description:\"Loads environment variables from .env file\",main:\"lib/main.js\",types:\"lib/main.d.ts\",exports:{\".\":{require:\"./lib/main.js\",types:\"./lib/main.d.ts\",default:\"./lib/main.js\"},\"./config\":\"./config.js\",\"./config.js\":\"./config.js\",\"./lib/env-options\":\"./lib/env-options.js\",\"./lib/env-options.js\":\"./lib/env-options.js\",\"./lib/cli-options\":\"./lib/cli-options.js\",\"./lib/cli-options.js\":\"./lib/cli-options.js\",\"./package.json\":\"./package.json\"},scripts:{\"dts-check\":\"tsc --project tests/types/tsconfig.json\",lint:\"standard\",\"lint-readme\":\"standard-markdown\",pretest:\"npm run lint && npm run dts-check\",test:\"tap tests/*.js --100 -Rspec\",prerelease:\"npm test\",release:\"standard-version\"},repository:{type:\"git\",url:\"git://github.com/motdotla/dotenv.git\"},keywords:[\"dotenv\",\"env\",\".env\",\"environment\",\"variables\",\"config\",\"settings\"],readmeFilename:\"README.md\",license:\"BSD-2-Clause\",devDependencies:{\"@types/node\":\"^17.0.9\",decache:\"^4.6.1\",dtslint:\"^3.7.0\",sinon:\"^12.0.1\",standard:\"^16.0.4\",\"standard-markdown\":\"^7.1.0\",\"standard-version\":\"^9.3.2\",tap:\"^15.1.6\",tar:\"^6.1.11\",typescript:\"^4.5.4\"},engines:{node:\">=12\"}}});var Uo=Z((vf,$t)=>{\"use strict\";var Fu=require(\"fs\"),Bo=require(\"path\"),Nu=require(\"os\"),Mu=Vo(),$u=Mu.version,qu=/(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg;function ju(e){let r={},t=e.toString();t=t.replace(/\\r\\n?/mg,`\n`);let n;for(;(n=qu.exec(t))!=null;){let i=n[1],o=n[2]||\"\";o=o.trim();let s=o[0];o=o.replace(/^(['\"`])([\\s\\S]*)\\1$/mg,\"$2\"),s==='\"'&&(o=o.replace(/\\\\n/g,`\n`),o=o.replace(/\\\\r/g,\"\\r\")),r[i]=o}return r}function ri(e){console.log(`[dotenv@${$u}][DEBUG] ${e}`)}function Vu(e){return e[0]===\"~\"?Bo.join(Nu.homedir(),e.slice(1)):e}function Bu(e){let r=Bo.resolve(process.cwd(),\".env\"),t=\"utf8\",n=!!(e&&e.debug),i=!!(e&&e.override);e&&(e.path!=null&&(r=Vu(e.path)),e.encoding!=null&&(t=e.encoding));try{let o=Mt.parse(Fu.readFileSync(r,{encoding:t}));return Object.keys(o).forEach(function(s){Object.prototype.hasOwnProperty.call(process.env,s)?(i===!0&&(process.env[s]=o[s]),n&&ri(i===!0?`\"${s}\" is already defined in \\`process.env\\` and WAS overwritten`:`\"${s}\" is already defined in \\`process.env\\` and was NOT overwritten`)):process.env[s]=o[s]}),{parsed:o}}catch(o){return n&&ri(`Failed to load ${r} ${o.message}`),{error:o}}}var Mt={config:Bu,parse:ju};$t.exports.config=Mt.config;$t.exports.parse=Mt.parse;$t.exports=Mt});var Ko=Z((_f,Ho)=>{\"use strict\";Ho.exports=e=>{let r=e.match(/^[ \\t]*(?=\\S)/gm);return r?r.reduce((t,n)=>Math.min(t,n.length),1/0):0}});var zo=Z((kf,Yo)=>{\"use strict\";var Ju=Ko();Yo.exports=e=>{let r=Ju(e);if(r===0)return e;let t=new RegExp(`^[ \\\\t]{${r}}`,\"gm\");return e.replace(t,\"\")}});var oi=Z((Mf,Zo)=>{\"use strict\";Zo.exports=(e,r=1,t)=>{if(t={indent:\" \",includeEmptyLines:!1,...t},typeof e!=\"string\")throw new TypeError(`Expected \\`input\\` to be a \\`string\\`, got \\`${typeof e}\\``);if(typeof r!=\"number\")throw new TypeError(`Expected \\`count\\` to be a \\`number\\`, got \\`${typeof r}\\``);if(typeof t.indent!=\"string\")throw new TypeError(`Expected \\`options.indent\\` to be a \\`string\\`, got \\`${typeof t.indent}\\``);if(r===0)return e;let n=t.includeEmptyLines?/^/gm:/^(?!\\s*$)/gm;return e.replace(n,t.indent.repeat(r))}});var ts=Z((jf,rs)=>{\"use strict\";rs.exports=({onlyFirst:e=!1}={})=>{let r=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(r,e?void 0:\"g\")}});var ui=Z((Vf,ns)=>{\"use strict\";var ec=ts();ns.exports=e=>typeof e==\"string\"?e.replace(ec(),\"\"):e});var is=Z((Qf,Vt)=>{\"use strict\";Vt.exports=(e={})=>{let r;if(e.repoUrl)r=e.repoUrl;else if(e.user&&e.repo)r=`https://github.com/${e.user}/${e.repo}`;else throw new Error(\"You need to specify either the `repoUrl` option or both the `user` and `repo` options\");let t=new URL(`${r}/issues/new`),n=[\"body\",\"title\",\"labels\",\"template\",\"milestone\",\"assignee\",\"projects\"];for(let i of n){let o=e[i];if(o!==void 0){if(i===\"labels\"||i===\"projects\"){if(!Array.isArray(o))throw new TypeError(`The \\`${i}\\` option should be an array`);o=o.join(\",\")}t.searchParams.set(i,o)}}return t.toString()};Vt.exports.default=Vt.exports});var Hi=Z((DP,Ba)=>{\"use strict\";Ba.exports=function(){function e(r,t,n,i,o){return r<t||n<t?r>n?n+1:r+1:i===o?t:t+1}return function(r,t){if(r===t)return 0;if(r.length>t.length){var n=r;r=t,t=n}for(var i=r.length,o=t.length;i>0&&r.charCodeAt(i-1)===t.charCodeAt(o-1);)i--,o--;for(var s=0;s<i&&r.charCodeAt(s)===t.charCodeAt(s);)s++;if(i-=s,o-=s,i===0||o<3)return o;var a=0,l,u,c,p,d,f,g,h,I,T,S,C,b=[];for(l=0;l<i;l++)b.push(l+1),b.push(r.charCodeAt(s+l));for(var me=b.length-1;a<o-3;)for(I=t.charCodeAt(s+(u=a)),T=t.charCodeAt(s+(c=a+1)),S=t.charCodeAt(s+(p=a+2)),C=t.charCodeAt(s+(d=a+3)),f=a+=4,l=0;l<me;l+=2)g=b[l],h=b[l+1],u=e(g,u,c,I,h),c=e(u,c,p,T,h),p=e(c,p,d,S,h),f=e(p,d,f,C,h),b[l]=f,d=p,p=c,c=u,u=g;for(;a<o;)for(I=t.charCodeAt(s+(u=a)),f=++a,l=0;l<me;l+=2)g=b[l],b[l]=f=e(g,u,f,I,b[l+1]),u=g;return f}}()});var fm={};Fr(fm,{Debug:()=>Fn,Decimal:()=>Te,Extensions:()=>kn,MetricsClient:()=>hr,NotFoundError:()=>Oe,PrismaClientInitializationError:()=>R,PrismaClientKnownRequestError:()=>V,PrismaClientRustPanicError:()=>le,PrismaClientUnknownRequestError:()=>B,PrismaClientValidationError:()=>H,Public:()=>Dn,Sql:()=>ie,defineDmmfProperty:()=>ss,empty:()=>ls,getPrismaClient:()=>Ll,getRuntime:()=>fn,join:()=>as,makeStrictEnum:()=>Fl,objectEnumValues:()=>Qt,raw:()=>Ei,sqltag:()=>bi,warnEnvConflicts:()=>Nl,warnOnce:()=>Wr});module.exports=Bl(fm);var kn={};Fr(kn,{defineExtension:()=>io,getExtensionContext:()=>oo});function io(e){return typeof e==\"function\"?e:r=>r.$extends(e)}function oo(e){return e}var Dn={};Fr(Dn,{validator:()=>so});function so(...e){return r=>r}var St={};Fr(St,{$:()=>po,bgBlack:()=>Zl,bgBlue:()=>tu,bgCyan:()=>iu,bgGreen:()=>eu,bgMagenta:()=>nu,bgRed:()=>Xl,bgWhite:()=>ou,bgYellow:()=>ru,black:()=>Hl,blue:()=>ze,bold:()=>W,cyan:()=>_e,dim:()=>Ie,gray:()=>Nr,green:()=>Me,grey:()=>zl,hidden:()=>Jl,inverse:()=>Gl,italic:()=>Ql,magenta:()=>Kl,red:()=>ue,reset:()=>Ul,strikethrough:()=>Wl,underline:()=>X,white:()=>Yl,yellow:()=>fe});var On,ao,lo,uo,co=!0;typeof process<\"u\"&&({FORCE_COLOR:On,NODE_DISABLE_COLORS:ao,NO_COLOR:lo,TERM:uo}=process.env||{},co=process.stdout&&process.stdout.isTTY);var po={enabled:!ao&&lo==null&&uo!==\"dumb\"&&(On!=null&&On!==\"0\"||co)};function N(e,r){let t=new RegExp(`\\\\x1b\\\\[${r}m`,\"g\"),n=`\\x1B[${e}m`,i=`\\x1B[${r}m`;return function(o){return!po.enabled||o==null?o:n+(~(\"\"+o).indexOf(i)?o.replace(t,i+n):o)+i}}var Ul=N(0,0),W=N(1,22),Ie=N(2,22),Ql=N(3,23),X=N(4,24),Gl=N(7,27),Jl=N(8,28),Wl=N(9,29),Hl=N(30,39),ue=N(31,39),Me=N(32,39),fe=N(33,39),ze=N(34,39),Kl=N(35,39),_e=N(36,39),Yl=N(37,39),Nr=N(90,39),zl=N(90,39),Zl=N(40,49),Xl=N(41,49),eu=N(42,49),ru=N(43,49),tu=N(44,49),nu=N(45,49),iu=N(46,49),ou=N(47,49);var su=100,mo=[\"green\",\"yellow\",\"blue\",\"magenta\",\"cyan\",\"red\"],Mr=[],fo=Date.now(),au=0,Ln=typeof process<\"u\"?process.env:{};globalThis.DEBUG??(globalThis.DEBUG=Ln.DEBUG??\"\");globalThis.DEBUG_COLORS??(globalThis.DEBUG_COLORS=Ln.DEBUG_COLORS?Ln.DEBUG_COLORS===\"true\":!0);var $r={enable(e){typeof e==\"string\"&&(globalThis.DEBUG=e)},disable(){let e=globalThis.DEBUG;return globalThis.DEBUG=\"\",e},enabled(e){let r=globalThis.DEBUG.split(\",\").map(i=>i.replace(/[.+?^${}()|[\\]\\\\]/g,\"\\\\$&\")),t=r.some(i=>i===\"\"||i[0]===\"-\"?!1:e.match(RegExp(i.split(\"*\").join(\".*\")+\"$\"))),n=r.some(i=>i===\"\"||i[0]!==\"-\"?!1:e.match(RegExp(i.slice(1).split(\"*\").join(\".*\")+\"$\")));return t&&!n},log:(...e)=>{let[r,t,...n]=e,i;typeof require==\"function\"&&typeof process<\"u\"&&typeof process.stderr<\"u\"&&typeof process.stderr.write==\"function\"?i=(...o)=>{try{let s=require(\"util\");process.stderr.write(s.format(...o)+`\n`)}catch{i=console.warn??console.log}}:i=console.warn??console.log,i(`${r} ${t}`,...n)},formatters:{}};function lu(e){let r={color:mo[au++%mo.length],enabled:$r.enabled(e),namespace:e,log:$r.log,extend:()=>{}},t=(...n)=>{let{enabled:i,namespace:o,color:s,log:a}=r;if(n.length!==0&&Mr.push([o,...n]),Mr.length>su&&Mr.shift(),$r.enabled(o)||i){let l=n.map(c=>typeof c==\"string\"?c:uu(c)),u=`+${Date.now()-fo}ms`;fo=Date.now(),globalThis.DEBUG_COLORS?a(St[s](W(o)),...l,St[s](u)):a(o,...l,u)}};return new Proxy(t,{get:(n,i)=>r[i],set:(n,i,o)=>r[i]=o})}var Fn=new Proxy(lu,{get:(e,r)=>$r[r],set:(e,r,t)=>$r[r]=t});function uu(e,r=2){let t=new Set;return JSON.stringify(e,(n,i)=>{if(typeof i==\"object\"&&i!==null){if(t.has(i))return\"[Circular *]\";t.add(i)}else if(typeof i==\"bigint\")return i.toString();return i},r)}function go(e=7500){let r=Mr.map(([t,...n])=>`${t} ${n.map(i=>typeof i==\"string\"?i:JSON.stringify(i)).join(\" \")}`).join(`\n`);return r.length<e?r:r.slice(-e)}function ho(){Mr.length=0}var L=Fn;var yo=k(require(\"fs\"));function Nn(){let e=process.env.PRISMA_QUERY_ENGINE_LIBRARY;if(!(e&&yo.default.existsSync(e))&&process.arch===\"ia32\")throw new Error('The default query engine type (Node-API, \"library\") is currently not supported for 32bit Node. Please set `engineType = \"binary\"` in the \"generator\" block of your \"schema.prisma\" file (or use the environment variables \"PRISMA_CLIENT_ENGINE_TYPE=binary\" and/or \"PRISMA_CLI_QUERY_ENGINE_TYPE=binary\".)')}var Mn=[\"darwin\",\"darwin-arm64\",\"debian-openssl-1.0.x\",\"debian-openssl-1.1.x\",\"debian-openssl-3.0.x\",\"rhel-openssl-1.0.x\",\"rhel-openssl-1.1.x\",\"rhel-openssl-3.0.x\",\"linux-arm64-openssl-1.1.x\",\"linux-arm64-openssl-1.0.x\",\"linux-arm64-openssl-3.0.x\",\"linux-arm-openssl-1.1.x\",\"linux-arm-openssl-1.0.x\",\"linux-arm-openssl-3.0.x\",\"linux-musl\",\"linux-musl-openssl-3.0.x\",\"linux-musl-arm64-openssl-1.1.x\",\"linux-musl-arm64-openssl-3.0.x\",\"linux-nixos\",\"linux-static-x64\",\"linux-static-arm64\",\"windows\",\"freebsd11\",\"freebsd12\",\"freebsd13\",\"freebsd14\",\"freebsd15\",\"openbsd\",\"netbsd\",\"arm\"];var Rt=\"libquery_engine\";function At(e,r){let t=r===\"url\";return e.includes(\"windows\")?t?\"query_engine.dll.node\":`query_engine-${e}.dll.node`:e.includes(\"darwin\")?t?`${Rt}.dylib.node`:`${Rt}-${e}.dylib.node`:t?`${Rt}.so.node`:`${Rt}-${e}.so.node`}var xo=k(require(\"child_process\")),Vn=k(require(\"fs/promises\")),Ot=k(require(\"os\"));var ke=Symbol.for(\"@ts-pattern/matcher\"),cu=Symbol.for(\"@ts-pattern/isVariadic\"),_t=\"@ts-pattern/anonymous-select-key\",$n=e=>!!(e&&typeof e==\"object\"),It=e=>e&&!!e[ke],we=(e,r,t)=>{if(It(e)){let n=e[ke](),{matched:i,selections:o}=n.match(r);return i&&o&&Object.keys(o).forEach(s=>t(s,o[s])),i}if($n(e)){if(!$n(r))return!1;if(Array.isArray(e)){if(!Array.isArray(r))return!1;let n=[],i=[],o=[];for(let s of e.keys()){let a=e[s];It(a)&&a[cu]?o.push(a):o.length?i.push(a):n.push(a)}if(o.length){if(o.length>1)throw new Error(\"Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.\");if(r.length<n.length+i.length)return!1;let s=r.slice(0,n.length),a=i.length===0?[]:r.slice(-i.length),l=r.slice(n.length,i.length===0?1/0:-i.length);return n.every((u,c)=>we(u,s[c],t))&&i.every((u,c)=>we(u,a[c],t))&&(o.length===0||we(o[0],l,t))}return e.length===r.length&&e.every((s,a)=>we(s,r[a],t))}return Object.keys(e).every(n=>{let i=e[n];return(n in r||It(o=i)&&o[ke]().matcherType===\"optional\")&&we(i,r[n],t);var o})}return Object.is(r,e)},je=e=>{var r,t,n;return $n(e)?It(e)?(r=(t=(n=e[ke]()).getSelectionKeys)==null?void 0:t.call(n))!=null?r:[]:Array.isArray(e)?qr(e,je):qr(Object.values(e),je):[]},qr=(e,r)=>e.reduce((t,n)=>t.concat(r(n)),[]);function ce(e){return Object.assign(e,{optional:()=>pu(e),and:r=>j(e,r),or:r=>du(e,r),select:r=>r===void 0?Eo(e):Eo(r,e)})}function pu(e){return ce({[ke]:()=>({match:r=>{let t={},n=(i,o)=>{t[i]=o};return r===void 0?(je(e).forEach(i=>n(i,void 0)),{matched:!0,selections:t}):{matched:we(e,r,n),selections:t}},getSelectionKeys:()=>je(e),matcherType:\"optional\"})})}function j(...e){return ce({[ke]:()=>({match:r=>{let t={},n=(i,o)=>{t[i]=o};return{matched:e.every(i=>we(i,r,n)),selections:t}},getSelectionKeys:()=>qr(e,je),matcherType:\"and\"})})}function du(...e){return ce({[ke]:()=>({match:r=>{let t={},n=(i,o)=>{t[i]=o};return qr(e,je).forEach(i=>n(i,void 0)),{matched:e.some(i=>we(i,r,n)),selections:t}},getSelectionKeys:()=>qr(e,je),matcherType:\"or\"})})}function _(e){return{[ke]:()=>({match:r=>({matched:!!e(r)})})}}function Eo(...e){let r=typeof e[0]==\"string\"?e[0]:void 0,t=e.length===2?e[1]:typeof e[0]==\"string\"?void 0:e[0];return ce({[ke]:()=>({match:n=>{let i={[r??_t]:n};return{matched:t===void 0||we(t,n,(o,s)=>{i[o]=s}),selections:i}},getSelectionKeys:()=>[r??_t].concat(t===void 0?[]:je(t))})})}function Ee(e){return typeof e==\"number\"}function Ze(e){return typeof e==\"string\"}function $e(e){return typeof e==\"bigint\"}var Rm=ce(_(function(e){return!0}));var Xe=e=>Object.assign(ce(e),{startsWith:r=>{return Xe(j(e,(t=r,_(n=>Ze(n)&&n.startsWith(t)))));var t},endsWith:r=>{return Xe(j(e,(t=r,_(n=>Ze(n)&&n.endsWith(t)))));var t},minLength:r=>Xe(j(e,(t=>_(n=>Ze(n)&&n.length>=t))(r))),maxLength:r=>Xe(j(e,(t=>_(n=>Ze(n)&&n.length<=t))(r))),includes:r=>{return Xe(j(e,(t=r,_(n=>Ze(n)&&n.includes(t)))));var t},regex:r=>{return Xe(j(e,(t=r,_(n=>Ze(n)&&!!n.match(t)))));var t}}),Am=Xe(_(Ze)),be=e=>Object.assign(ce(e),{between:(r,t)=>be(j(e,((n,i)=>_(o=>Ee(o)&&n<=o&&i>=o))(r,t))),lt:r=>be(j(e,(t=>_(n=>Ee(n)&&n<t))(r))),gt:r=>be(j(e,(t=>_(n=>Ee(n)&&n>t))(r))),lte:r=>be(j(e,(t=>_(n=>Ee(n)&&n<=t))(r))),gte:r=>be(j(e,(t=>_(n=>Ee(n)&&n>=t))(r))),int:()=>be(j(e,_(r=>Ee(r)&&Number.isInteger(r)))),finite:()=>be(j(e,_(r=>Ee(r)&&Number.isFinite(r)))),positive:()=>be(j(e,_(r=>Ee(r)&&r>0))),negative:()=>be(j(e,_(r=>Ee(r)&&r<0)))}),Im=be(_(Ee)),qe=e=>Object.assign(ce(e),{between:(r,t)=>qe(j(e,((n,i)=>_(o=>$e(o)&&n<=o&&i>=o))(r,t))),lt:r=>qe(j(e,(t=>_(n=>$e(n)&&n<t))(r))),gt:r=>qe(j(e,(t=>_(n=>$e(n)&&n>t))(r))),lte:r=>qe(j(e,(t=>_(n=>$e(n)&&n<=t))(r))),gte:r=>qe(j(e,(t=>_(n=>$e(n)&&n>=t))(r))),positive:()=>qe(j(e,_(r=>$e(r)&&r>0))),negative:()=>qe(j(e,_(r=>$e(r)&&r<0)))}),_m=qe(_($e)),km=ce(_(function(e){return typeof e==\"boolean\"})),Dm=ce(_(function(e){return typeof e==\"symbol\"})),Om=ce(_(function(e){return e==null})),Lm=ce(_(function(e){return e!=null}));var qn={matched:!1,value:void 0};function pr(e){return new jn(e,qn)}var jn=class e{constructor(r,t){this.input=void 0,this.state=void 0,this.input=r,this.state=t}with(...r){if(this.state.matched)return this;let t=r[r.length-1],n=[r[0]],i;r.length===3&&typeof r[1]==\"function\"?i=r[1]:r.length>2&&n.push(...r.slice(1,r.length-1));let o=!1,s={},a=(u,c)=>{o=!0,s[u]=c},l=!n.some(u=>we(u,this.input,a))||i&&!i(this.input)?qn:{matched:!0,value:t(o?_t in s?s[_t]:s:this.input,this.input)};return new e(this.input,l)}when(r,t){if(this.state.matched)return this;let n=!!r(this.input);return new e(this.input,n?{matched:!0,value:t(this.input,this.input)}:qn)}otherwise(r){return this.state.matched?this.state.value:r(this.input)}exhaustive(){if(this.state.matched)return this.state.value;let r;try{r=JSON.stringify(this.input)}catch{r=this.input}throw new Error(`Pattern matching error: no pattern matches value ${r}`)}run(){return this.exhaustive()}returnType(){return this}};var Po=require(\"util\");var mu={warn:fe(\"prisma:warn\")},fu={warn:()=>!process.env.PRISMA_DISABLE_WARNINGS};function kt(e,...r){fu.warn()&&console.warn(`${mu.warn} ${e}`,...r)}var gu=(0,Po.promisify)(xo.default.exec),re=L(\"prisma:get-platform\"),hu=[\"1.0.x\",\"1.1.x\",\"3.0.x\"];async function vo(){let e=Ot.default.platform(),r=process.arch;if(e===\"freebsd\"){let s=await Lt(\"freebsd-version\");if(s&&s.trim().length>0){let l=/^(\\d+)\\.?/.exec(s);if(l)return{platform:\"freebsd\",targetDistro:`freebsd${l[1]}`,arch:r}}}if(e!==\"linux\")return{platform:e,arch:r};let t=await Eu(),n=await Su(),i=wu({arch:r,archFromUname:n,familyDistro:t.familyDistro}),{libssl:o}=await xu(i);return{platform:\"linux\",libssl:o,arch:r,archFromUname:n,...t}}function yu(e){let r=/^ID=\"?([^\"\\n]*)\"?$/im,t=/^ID_LIKE=\"?([^\"\\n]*)\"?$/im,n=r.exec(e),i=n&&n[1]&&n[1].toLowerCase()||\"\",o=t.exec(e),s=o&&o[1]&&o[1].toLowerCase()||\"\",a=pr({id:i,idLike:s}).with({id:\"alpine\"},({id:l})=>({targetDistro:\"musl\",familyDistro:l,originalDistro:l})).with({id:\"raspbian\"},({id:l})=>({targetDistro:\"arm\",familyDistro:\"debian\",originalDistro:l})).with({id:\"nixos\"},({id:l})=>({targetDistro:\"nixos\",originalDistro:l,familyDistro:\"nixos\"})).with({id:\"debian\"},{id:\"ubuntu\"},({id:l})=>({targetDistro:\"debian\",familyDistro:\"debian\",originalDistro:l})).with({id:\"rhel\"},{id:\"centos\"},{id:\"fedora\"},({id:l})=>({targetDistro:\"rhel\",familyDistro:\"rhel\",originalDistro:l})).when(({idLike:l})=>l.includes(\"debian\")||l.includes(\"ubuntu\"),({id:l})=>({targetDistro:\"debian\",familyDistro:\"debian\",originalDistro:l})).when(({idLike:l})=>i===\"arch\"||l.includes(\"arch\"),({id:l})=>({targetDistro:\"debian\",familyDistro:\"arch\",originalDistro:l})).when(({idLike:l})=>l.includes(\"centos\")||l.includes(\"fedora\")||l.includes(\"rhel\")||l.includes(\"suse\"),({id:l})=>({targetDistro:\"rhel\",familyDistro:\"rhel\",originalDistro:l})).otherwise(({id:l})=>({targetDistro:void 0,familyDistro:void 0,originalDistro:l}));return re(`Found distro info:\n${JSON.stringify(a,null,2)}`),a}async function Eu(){let e=\"/etc/os-release\";try{let r=await Vn.default.readFile(e,{encoding:\"utf-8\"});return yu(r)}catch{return{targetDistro:void 0,familyDistro:void 0,originalDistro:void 0}}}function bu(e){let r=/^OpenSSL\\s(\\d+\\.\\d+)\\.\\d+/.exec(e);if(r){let t=`${r[1]}.x`;return To(t)}}function bo(e){let r=/libssl\\.so\\.(\\d)(\\.\\d)?/.exec(e);if(r){let t=`${r[1]}${r[2]??\".0\"}.x`;return To(t)}}function To(e){let r=(()=>{if(So(e))return e;let t=e.split(\".\");return t[1]=\"0\",t.join(\".\")})();if(hu.includes(r))return r}function wu(e){return pr(e).with({familyDistro:\"musl\"},()=>(re('Trying platform-specific paths for \"alpine\"'),[\"/lib\"])).with({familyDistro:\"debian\"},({archFromUname:r})=>(re('Trying platform-specific paths for \"debian\" (and \"ubuntu\")'),[`/usr/lib/${r}-linux-gnu`,`/lib/${r}-linux-gnu`])).with({familyDistro:\"rhel\"},()=>(re('Trying platform-specific paths for \"rhel\"'),[\"/lib64\",\"/usr/lib64\"])).otherwise(({familyDistro:r,arch:t,archFromUname:n})=>(re(`Don't know any platform-specific paths for \"${r}\" on ${t} (${n})`),[]))}async function xu(e){let r='grep -v \"libssl.so.0\"',t=await wo(e);if(t){re(`Found libssl.so file using platform-specific paths: ${t}`);let o=bo(t);if(re(`The parsed libssl version is: ${o}`),o)return{libssl:o,strategy:\"libssl-specific-path\"}}re('Falling back to \"ldconfig\" and other generic paths');let n=await Lt(`ldconfig -p | sed \"s/.*=>s*//\" | sed \"s|.*/||\" | grep libssl | sort | ${r}`);if(n||(n=await wo([\"/lib64\",\"/usr/lib64\",\"/lib\"])),n){re(`Found libssl.so file using \"ldconfig\" or other generic paths: ${n}`);let o=bo(n);if(re(`The parsed libssl version is: ${o}`),o)return{libssl:o,strategy:\"ldconfig\"}}let i=await Lt(\"openssl version -v\");if(i){re(`Found openssl binary with version: ${i}`);let o=bu(i);if(re(`The parsed openssl version is: ${o}`),o)return{libssl:o,strategy:\"openssl-binary\"}}return re(\"Couldn't find any version of libssl or OpenSSL in the system\"),{}}async function wo(e){for(let r of e){let t=await Pu(r);if(t)return t}}async function Pu(e){try{return(await Vn.default.readdir(e)).find(t=>t.startsWith(\"libssl.so.\")&&!t.startsWith(\"libssl.so.0\"))}catch(r){if(r.code===\"ENOENT\")return;throw r}}async function er(){let{binaryTarget:e}=await Co();return e}function vu(e){return e.binaryTarget!==void 0}async function Bn(){let{memoized:e,...r}=await Co();return r}var Dt={};async function Co(){if(vu(Dt))return Promise.resolve({...Dt,memoized:!0});let e=await vo(),r=Tu(e);return Dt={...e,binaryTarget:r},{...Dt,memoized:!1}}function Tu(e){let{platform:r,arch:t,archFromUname:n,libssl:i,targetDistro:o,familyDistro:s,originalDistro:a}=e;r===\"linux\"&&![\"x64\",\"arm64\"].includes(t)&&kt(`Prisma only officially supports Linux on amd64 (x86_64) and arm64 (aarch64) system architectures (detected \"${t}\" instead). If you are using your own custom Prisma engines, you can ignore this warning, as long as you've compiled the engines for your system architecture \"${n}\".`);let l=\"1.1.x\";if(r===\"linux\"&&i===void 0){let c=pr({familyDistro:s}).with({familyDistro:\"debian\"},()=>\"Please manually install OpenSSL via `apt-get update -y && apt-get install -y openssl` and try installing Prisma again. If you're running Prisma on Docker, add this command to your Dockerfile, or switch to an image that already has OpenSSL installed.\").otherwise(()=>\"Please manually install OpenSSL and try installing Prisma again.\");kt(`Prisma failed to detect the libssl/openssl version to use, and may not work as expected. Defaulting to \"openssl-${l}\".\n${c}`)}let u=\"debian\";if(r===\"linux\"&&o===void 0&&re(`Distro is \"${a}\". Falling back to Prisma engines built for \"${u}\".`),r===\"darwin\"&&t===\"arm64\")return\"darwin-arm64\";if(r===\"darwin\")return\"darwin\";if(r===\"win32\")return\"windows\";if(r===\"freebsd\")return o;if(r===\"openbsd\")return\"openbsd\";if(r===\"netbsd\")return\"netbsd\";if(r===\"linux\"&&o===\"nixos\")return\"linux-nixos\";if(r===\"linux\"&&t===\"arm64\")return`${o===\"musl\"?\"linux-musl-arm64\":\"linux-arm64\"}-openssl-${i||l}`;if(r===\"linux\"&&t===\"arm\")return`linux-arm-openssl-${i||l}`;if(r===\"linux\"&&o===\"musl\"){let c=\"linux-musl\";return!i||So(i)?c:`${c}-openssl-${i}`}return r===\"linux\"&&o&&i?`${o}-openssl-${i}`:(r!==\"linux\"&&kt(`Prisma detected unknown OS \"${r}\" and may not work as expected. Defaulting to \"linux\".`),i?`${u}-openssl-${i}`:o?`${o}-openssl-${l}`:`${u}-openssl-${l}`)}async function Cu(e){try{return await e()}catch{return}}function Lt(e){return Cu(async()=>{let r=await gu(e);return re(`Command \"${e}\" successfully returned \"${r.stdout}\"`),r.stdout})}async function Su(){return typeof Ot.default.machine==\"function\"?Ot.default.machine():(await Lt(\"uname -m\"))?.trim()}function So(e){return e.startsWith(\"1.\")}var $o=k(Mo());function Kn(e){return(0,$o.default)(e,e,{fallback:X})}var Du=k(zn());var M=k(require(\"path\")),Ou=k(zn()),mf=L(\"prisma:engines\");function qo(){return M.default.join(__dirname,\"../\")}var ff=\"libquery-engine\";M.default.join(__dirname,\"../query-engine-darwin\");M.default.join(__dirname,\"../query-engine-darwin-arm64\");M.default.join(__dirname,\"../query-engine-debian-openssl-1.0.x\");M.default.join(__dirname,\"../query-engine-debian-openssl-1.1.x\");M.default.join(__dirname,\"../query-engine-debian-openssl-3.0.x\");M.default.join(__dirname,\"../query-engine-linux-static-x64\");M.default.join(__dirname,\"../query-engine-linux-static-arm64\");M.default.join(__dirname,\"../query-engine-rhel-openssl-1.0.x\");M.default.join(__dirname,\"../query-engine-rhel-openssl-1.1.x\");M.default.join(__dirname,\"../query-engine-rhel-openssl-3.0.x\");M.default.join(__dirname,\"../libquery_engine-darwin.dylib.node\");M.default.join(__dirname,\"../libquery_engine-darwin-arm64.dylib.node\");M.default.join(__dirname,\"../libquery_engine-debian-openssl-1.0.x.so.node\");M.default.join(__dirname,\"../libquery_engine-debian-openssl-1.1.x.so.node\");M.default.join(__dirname,\"../libquery_engine-debian-openssl-3.0.x.so.node\");M.default.join(__dirname,\"../libquery_engine-linux-arm64-openssl-1.0.x.so.node\");M.default.join(__dirname,\"../libquery_engine-linux-arm64-openssl-1.1.x.so.node\");M.default.join(__dirname,\"../libquery_engine-linux-arm64-openssl-3.0.x.so.node\");M.default.join(__dirname,\"../libquery_engine-linux-musl.so.node\");M.default.join(__dirname,\"../libquery_engine-linux-musl-openssl-3.0.x.so.node\");M.default.join(__dirname,\"../libquery_engine-rhel-openssl-1.0.x.so.node\");M.default.join(__dirname,\"../libquery_engine-rhel-openssl-1.1.x.so.node\");M.default.join(__dirname,\"../libquery_engine-rhel-openssl-3.0.x.so.node\");M.default.join(__dirname,\"../query_engine-windows.dll.node\");var Zn=k(require(\"fs\")),jo=L(\"chmodPlusX\");function Xn(e){if(process.platform===\"win32\")return;let r=Zn.default.statSync(e),t=r.mode|64|8|1;if(r.mode===t){jo(`Execution permissions of ${e} are fine`);return}let n=t.toString(8).slice(-3);jo(`Have to call chmodPlusX on ${e}`),Zn.default.chmodSync(e,n)}function ei(e){let r=e.e,t=a=>`Prisma cannot find the required \\`${a}\\` system library in your system`,n=r.message.includes(\"cannot open shared object file\"),i=`Please refer to the documentation about Prisma's system requirements: ${Kn(\"https://pris.ly/d/system-requirements\")}`,o=`Unable to require(\\`${Ie(e.id)}\\`).`,s=pr({message:r.message,code:r.code}).with({code:\"ENOENT\"},()=>\"File does not exist.\").when(({message:a})=>n&&a.includes(\"libz\"),()=>`${t(\"libz\")}. Please install it and try again.`).when(({message:a})=>n&&a.includes(\"libgcc_s\"),()=>`${t(\"libgcc_s\")}. Please install it and try again.`).when(({message:a})=>n&&a.includes(\"libssl\"),()=>{let a=e.platformInfo.libssl?`openssl-${e.platformInfo.libssl}`:\"openssl\";return`${t(\"libssl\")}. Please install ${a} and try again.`}).when(({message:a})=>a.includes(\"GLIBC\"),()=>`Prisma has detected an incompatible version of the \\`glibc\\` C standard library installed in your system. This probably means your system may be too old to run Prisma. ${i}`).when(({message:a})=>e.platformInfo.platform===\"linux\"&&a.includes(\"symbol not found\"),()=>`The Prisma engines are not compatible with your system ${e.platformInfo.originalDistro} on (${e.platformInfo.archFromUname}) which uses the \\`${e.platformInfo.binaryTarget}\\` binaryTarget by default. ${i}`).otherwise(()=>`The Prisma engines do not seem to be compatible with your system. ${i}`);return`${o}\n${s}\n\nDetails: ${r.message}`}var ni=k(Uo()),qt=k(require(\"fs\"));var fr=k(require(\"path\"));function Qo(e){let r=e.ignoreProcessEnv?{}:process.env,t=n=>n.match(/(.?\\${(?:[a-zA-Z0-9_]+)?})/g)?.reduce(function(o,s){let a=/(.?)\\${([a-zA-Z0-9_]+)?}/g.exec(s);if(!a)return o;let l=a[1],u,c;if(l===\"\\\\\")c=a[0],u=c.replace(\"\\\\$\",\"$\");else{let p=a[2];c=a[0].substring(l.length),u=Object.hasOwnProperty.call(r,p)?r[p]:e.parsed[p]||\"\",u=t(u)}return o.replace(c,u)},n)??n;for(let n in e.parsed){let i=Object.hasOwnProperty.call(r,n)?r[n]:e.parsed[n];e.parsed[n]=t(i)}for(let n in e.parsed)r[n]=e.parsed[n];return e}var ti=L(\"prisma:tryLoadEnv\");function Br({rootEnvPath:e,schemaEnvPath:r},t={conflictCheck:\"none\"}){let n=Go(e);t.conflictCheck!==\"none\"&&Uu(n,r,t.conflictCheck);let i=null;return Jo(n?.path,r)||(i=Go(r)),!n&&!i&&ti(\"No Environment variables loaded\"),i?.dotenvResult.error?console.error(ue(W(\"Schema Env Error: \"))+i.dotenvResult.error):{message:[n?.message,i?.message].filter(Boolean).join(`\n`),parsed:{...n?.dotenvResult?.parsed,...i?.dotenvResult?.parsed}}}function Uu(e,r,t){let n=e?.dotenvResult.parsed,i=!Jo(e?.path,r);if(n&&r&&i&&qt.default.existsSync(r)){let o=ni.default.parse(qt.default.readFileSync(r)),s=[];for(let a in o)n[a]===o[a]&&s.push(a);if(s.length>0){let a=fr.default.relative(process.cwd(),e.path),l=fr.default.relative(process.cwd(),r);if(t===\"error\"){let u=`There is a conflict between env var${s.length>1?\"s\":\"\"} in ${X(a)} and ${X(l)}\nConflicting env vars:\n${s.map(c=>`  ${W(c)}`).join(`\n`)}\n\nWe suggest to move the contents of ${X(l)} to ${X(a)} to consolidate your env vars.\n`;throw new Error(u)}else if(t===\"warn\"){let u=`Conflict for env var${s.length>1?\"s\":\"\"} ${s.map(c=>W(c)).join(\", \")} in ${X(a)} and ${X(l)}\nEnv vars from ${X(l)} overwrite the ones from ${X(a)}\n      `;console.warn(`${fe(\"warn(prisma)\")} ${u}`)}}}}function Go(e){if(Qu(e)){ti(`Environment variables loaded from ${e}`);let r=ni.default.config({path:e,debug:process.env.DOTENV_CONFIG_DEBUG?!0:void 0});return{dotenvResult:Qo(r),message:Ie(`Environment variables loaded from ${fr.default.relative(process.cwd(),e)}`),path:e}}else ti(`Environment variables not found at ${e}`);return null}function Jo(e,r){return e&&r&&fr.default.resolve(e)===fr.default.resolve(r)}function Qu(e){return!!(e&&qt.default.existsSync(e))}var Wo=\"library\";function Ur(e){let r=Gu();return r||(e?.config.engineType===\"library\"?\"library\":e?.config.engineType===\"binary\"?\"binary\":Wo)}function Gu(){let e=process.env.PRISMA_CLIENT_ENGINE_TYPE;return e===\"library\"?\"library\":e===\"binary\"?\"binary\":void 0}var De;(r=>{let e;(b=>(b.findUnique=\"findUnique\",b.findUniqueOrThrow=\"findUniqueOrThrow\",b.findFirst=\"findFirst\",b.findFirstOrThrow=\"findFirstOrThrow\",b.findMany=\"findMany\",b.create=\"create\",b.createMany=\"createMany\",b.createManyAndReturn=\"createManyAndReturn\",b.update=\"update\",b.updateMany=\"updateMany\",b.upsert=\"upsert\",b.delete=\"delete\",b.deleteMany=\"deleteMany\",b.groupBy=\"groupBy\",b.count=\"count\",b.aggregate=\"aggregate\",b.findRaw=\"findRaw\",b.aggregateRaw=\"aggregateRaw\"))(e=r.ModelAction||(r.ModelAction={}))})(De||(De={}));var Qr=k(require(\"path\"));function ii(e){return Qr.default.sep===Qr.default.posix.sep?e:e.split(Qr.default.sep).join(Qr.default.posix.sep)}var Xo=k(oi());function ai(e){return String(new si(e))}var si=class{constructor(r){this.config=r}toString(){let{config:r}=this,t=r.provider.fromEnvVar?`env(\"${r.provider.fromEnvVar}\")`:r.provider.value,n=JSON.parse(JSON.stringify({provider:t,binaryTargets:Wu(r.binaryTargets)}));return`generator ${r.name} {\n${(0,Xo.default)(Hu(n),2)}\n}`}};function Wu(e){let r;if(e.length>0){let t=e.find(n=>n.fromEnvVar!==null);t?r=`env(\"${t.fromEnvVar}\")`:r=e.map(n=>n.native?\"native\":n.value)}else r=void 0;return r}function Hu(e){let r=Object.keys(e).reduce((t,n)=>Math.max(t,n.length),0);return Object.entries(e).map(([t,n])=>`${t.padEnd(r)} = ${Ku(n)}`).join(`\n`)}function Ku(e){return JSON.parse(JSON.stringify(e,(r,t)=>Array.isArray(t)?`[${t.map(n=>JSON.stringify(n)).join(\", \")}]`:JSON.stringify(t)))}var Jr={};Fr(Jr,{error:()=>Zu,info:()=>zu,log:()=>Yu,query:()=>Xu,should:()=>es,tags:()=>Gr,warn:()=>li});var Gr={error:ue(\"prisma:error\"),warn:fe(\"prisma:warn\"),info:_e(\"prisma:info\"),query:ze(\"prisma:query\")},es={warn:()=>!process.env.PRISMA_DISABLE_WARNINGS};function Yu(...e){console.log(...e)}function li(e,...r){es.warn()&&console.warn(`${Gr.warn} ${e}`,...r)}function zu(e,...r){console.info(`${Gr.info} ${e}`,...r)}function Zu(e,...r){console.error(`${Gr.error} ${e}`,...r)}function Xu(e,...r){console.log(`${Gr.query} ${e}`,...r)}function jt(e,r){if(!e)throw new Error(`${r}. This should never happen. If you see this error, please, open an issue at https://pris.ly/prisma-prisma-bug-report`)}function rr(e,r){throw new Error(r)}function ci(e,r){return Object.prototype.hasOwnProperty.call(e,r)}var pi=(e,r)=>e.reduce((t,n)=>(t[r(n)]=n,t),{});function gr(e,r){let t={};for(let n of Object.keys(e))t[n]=r(e[n],n);return t}function di(e,r){if(e.length===0)return;let t=e[0];for(let n=1;n<e.length;n++)r(t,e[n])<0&&(t=e[n]);return t}function w(e,r){Object.defineProperty(e,\"name\",{value:r,configurable:!0})}var os=new Set,Wr=(e,r,...t)=>{os.has(e)||(os.add(e),li(r,...t))};var V=class extends Error{constructor(r,{code:t,clientVersion:n,meta:i,batchRequestIdx:o}){super(r),this.name=\"PrismaClientKnownRequestError\",this.code=t,this.clientVersion=n,this.meta=i,Object.defineProperty(this,\"batchRequestIdx\",{value:o,enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return\"PrismaClientKnownRequestError\"}};w(V,\"PrismaClientKnownRequestError\");var Oe=class extends V{constructor(r,t){super(r,{code:\"P2025\",clientVersion:t}),this.name=\"NotFoundError\"}};w(Oe,\"NotFoundError\");var R=class e extends Error{constructor(r,t,n){super(r),this.name=\"PrismaClientInitializationError\",this.clientVersion=t,this.errorCode=n,Error.captureStackTrace(e)}get[Symbol.toStringTag](){return\"PrismaClientInitializationError\"}};w(R,\"PrismaClientInitializationError\");var le=class extends Error{constructor(r,t){super(r),this.name=\"PrismaClientRustPanicError\",this.clientVersion=t}get[Symbol.toStringTag](){return\"PrismaClientRustPanicError\"}};w(le,\"PrismaClientRustPanicError\");var B=class extends Error{constructor(r,{clientVersion:t,batchRequestIdx:n}){super(r),this.name=\"PrismaClientUnknownRequestError\",this.clientVersion=t,Object.defineProperty(this,\"batchRequestIdx\",{value:n,writable:!0,enumerable:!1})}get[Symbol.toStringTag](){return\"PrismaClientUnknownRequestError\"}};w(B,\"PrismaClientUnknownRequestError\");var H=class extends Error{constructor(t,{clientVersion:n}){super(t);this.name=\"PrismaClientValidationError\";this.clientVersion=n}get[Symbol.toStringTag](){return\"PrismaClientValidationError\"}};w(H,\"PrismaClientValidationError\");var hr=class{constructor(r){this._engine=r}prometheus(r){return this._engine.metrics({format:\"prometheus\",...r})}json(r){return this._engine.metrics({format:\"json\",...r})}};function Hr(e){let r;return{get(){return r||(r={value:e()}),r.value}}}function ss(e,r){let t=Hr(()=>rc(r));Object.defineProperty(e,\"dmmf\",{get:()=>t.get()})}function rc(e){return{datamodel:{models:mi(e.models),enums:mi(e.enums),types:mi(e.types)}}}function mi(e){return Object.entries(e).map(([r,t])=>({name:r,...t}))}var Ut=Symbol(),fi=new WeakMap,Le=class{constructor(r){r===Ut?fi.set(this,`Prisma.${this._getName()}`):fi.set(this,`new Prisma.${this._getNamespace()}.${this._getName()}()`)}_getName(){return this.constructor.name}toString(){return fi.get(this)}},Kr=class extends Le{_getNamespace(){return\"NullTypes\"}},Yr=class extends Kr{};gi(Yr,\"DbNull\");var zr=class extends Kr{};gi(zr,\"JsonNull\");var Zr=class extends Kr{};gi(Zr,\"AnyNull\");var Qt={classes:{DbNull:Yr,JsonNull:zr,AnyNull:Zr},instances:{DbNull:new Yr(Ut),JsonNull:new zr(Ut),AnyNull:new Zr(Ut)}};function gi(e,r){Object.defineProperty(e,\"name\",{value:r,configurable:!0})}function Xr(e){return{ok:!1,error:e,map(){return Xr(e)},flatMap(){return Xr(e)}}}var hi=class{constructor(){this.registeredErrors=[]}consumeError(r){return this.registeredErrors[r]}registerNewError(r){let t=0;for(;this.registeredErrors[t]!==void 0;)t++;return this.registeredErrors[t]={error:r},t}},yi=e=>{let r=new hi,t=tr(r,e.startTransaction.bind(e)),n={adapterName:e.adapterName,errorRegistry:r,queryRaw:tr(r,e.queryRaw.bind(e)),executeRaw:tr(r,e.executeRaw.bind(e)),provider:e.provider,startTransaction:async(...i)=>(await t(...i)).map(s=>tc(r,s))};return e.getConnectionInfo&&(n.getConnectionInfo=nc(r,e.getConnectionInfo.bind(e))),n},tc=(e,r)=>({adapterName:r.adapterName,provider:r.provider,options:r.options,queryRaw:tr(e,r.queryRaw.bind(r)),executeRaw:tr(e,r.executeRaw.bind(r)),commit:tr(e,r.commit.bind(r)),rollback:tr(e,r.rollback.bind(r))});function tr(e,r){return async(...t)=>{try{return await r(...t)}catch(n){let i=e.registerNewError(n);return Xr({kind:\"GenericJs\",id:i})}}}function nc(e,r){return(...t)=>{try{return r(...t)}catch(n){let i=e.registerNewError(n);return Xr({kind:\"GenericJs\",id:i})}}}var _l=k(Yn());var kl=require(\"async_hooks\"),Dl=require(\"events\"),Ol=k(require(\"fs\")),vt=k(require(\"path\"));var ie=class e{constructor(r,t){if(r.length-1!==t.length)throw r.length===0?new TypeError(\"Expected at least 1 string\"):new TypeError(`Expected ${r.length} strings to have ${r.length-1} values`);let n=t.reduce((s,a)=>s+(a instanceof e?a.values.length:1),0);this.values=new Array(n),this.strings=new Array(n+1),this.strings[0]=r[0];let i=0,o=0;for(;i<t.length;){let s=t[i++],a=r[i];if(s instanceof e){this.strings[o]+=s.strings[0];let l=0;for(;l<s.values.length;)this.values[o++]=s.values[l++],this.strings[o]=s.strings[l];this.strings[o]+=a}else this.values[o++]=s,this.strings[o]=a}}get sql(){let r=this.strings.length,t=1,n=this.strings[0];for(;t<r;)n+=`?${this.strings[t++]}`;return n}get statement(){let r=this.strings.length,t=1,n=this.strings[0];for(;t<r;)n+=`:${t}${this.strings[t++]}`;return n}get text(){let r=this.strings.length,t=1,n=this.strings[0];for(;t<r;)n+=`$${t}${this.strings[t++]}`;return n}inspect(){return{sql:this.sql,statement:this.statement,text:this.text,values:this.values}}};function as(e,r=\",\",t=\"\",n=\"\"){if(e.length===0)throw new TypeError(\"Expected `join([])` to be called with an array of multiple elements, but got an empty array\");return new ie([t,...Array(e.length-1).fill(r),n],e)}function Ei(e){return new ie([e],[])}var ls=Ei(\"\");function bi(e,...r){return new ie(e,r)}function et(e){return{getKeys(){return Object.keys(e)},getPropertyValue(r){return e[r]}}}function te(e,r){return{getKeys(){return[e]},getPropertyValue(){return r()}}}var xe=class{constructor(){this._map=new Map}get(r){return this._map.get(r)?.value}set(r,t){this._map.set(r,{value:t})}getOrCreate(r,t){let n=this._map.get(r);if(n)return n.value;let i=t();return this.set(r,i),i}};function nr(e){let r=new xe;return{getKeys(){return e.getKeys()},getPropertyValue(t){return r.getOrCreate(t,()=>e.getPropertyValue(t))},getPropertyDescriptor(t){return e.getPropertyDescriptor?.(t)}}}var Gt={enumerable:!0,configurable:!0,writable:!0};function Jt(e){let r=new Set(e);return{getOwnPropertyDescriptor:()=>Gt,has:(t,n)=>r.has(n),set:(t,n,i)=>r.add(n)&&Reflect.set(t,n,i),ownKeys:()=>[...r]}}var us=Symbol.for(\"nodejs.util.inspect.custom\");function Pe(e,r){let t=ic(r),n=new Set,i=new Proxy(e,{get(o,s){if(n.has(s))return o[s];let a=t.get(s);return a?a.getPropertyValue(s):o[s]},has(o,s){if(n.has(s))return!0;let a=t.get(s);return a?a.has?.(s)??!0:Reflect.has(o,s)},ownKeys(o){let s=cs(Reflect.ownKeys(o),t),a=cs(Array.from(t.keys()),t);return[...new Set([...s,...a,...n])]},set(o,s,a){return t.get(s)?.getPropertyDescriptor?.(s)?.writable===!1?!1:(n.add(s),Reflect.set(o,s,a))},getOwnPropertyDescriptor(o,s){let a=Reflect.getOwnPropertyDescriptor(o,s);if(a&&!a.configurable)return a;let l=t.get(s);return l?l.getPropertyDescriptor?{...Gt,...l?.getPropertyDescriptor(s)}:Gt:a},defineProperty(o,s,a){return n.add(s),Reflect.defineProperty(o,s,a)}});return i[us]=function(){let o={...this};return delete o[us],o},i}function ic(e){let r=new Map;for(let t of e){let n=t.getKeys();for(let i of n)r.set(i,t)}return r}function cs(e,r){return e.filter(t=>r.get(t)?.has?.(t)??!0)}function yr(e){return{getKeys(){return e},has(){return!1},getPropertyValue(){}}}function Er(e,r){return{batch:e,transaction:r?.kind===\"batch\"?{isolationLevel:r.options.isolationLevel}:void 0}}var br=class{constructor(r=0,t){this.context=t;this.lines=[];this.currentLine=\"\";this.currentIndent=0;this.currentIndent=r}write(r){return typeof r==\"string\"?this.currentLine+=r:r.write(this),this}writeJoined(r,t){let n=t.length-1;for(let i=0;i<t.length;i++)this.write(t[i]),i!==n&&this.write(r);return this}writeLine(r){return this.write(r).newLine()}newLine(){this.lines.push(this.indentedCurrentLine()),this.currentLine=\"\",this.marginSymbol=void 0;let r=this.afterNextNewLineCallback;return this.afterNextNewLineCallback=void 0,r?.(),this}withIndent(r){return this.indent(),r(this),this.unindent(),this}afterNextNewline(r){return this.afterNextNewLineCallback=r,this}indent(){return this.currentIndent++,this}unindent(){return this.currentIndent>0&&this.currentIndent--,this}addMarginSymbol(r){return this.marginSymbol=r,this}toString(){return this.lines.concat(this.indentedCurrentLine()).join(`\n`)}getCurrentLineLength(){return this.currentLine.length}indentedCurrentLine(){let r=this.currentLine.padStart(this.currentLine.length+2*this.currentIndent);return this.marginSymbol?this.marginSymbol+r.slice(1):r}};function ps(e){return e.substring(0,1).toLowerCase()+e.substring(1)}function wr(e){return e instanceof Date||Object.prototype.toString.call(e)===\"[object Date]\"}function Wt(e){return e.toString()!==\"Invalid Date\"}var xr=9e15,Ge=1e9,wi=\"0123456789abcdef\",Kt=\"2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058\",Yt=\"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789\",xi={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-xr,maxE:xr,crypto:!1},gs,Fe,x=!0,Zt=\"[DecimalError] \",Qe=Zt+\"Invalid argument: \",hs=Zt+\"Precision limit exceeded\",ys=Zt+\"crypto unavailable\",Es=\"[object Decimal]\",ee=Math.floor,Q=Math.pow,oc=/^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,sc=/^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,ac=/^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,bs=/^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,he=1e7,E=7,lc=9007199254740991,uc=Kt.length-1,Pi=Yt.length-1,m={toStringTag:Es};m.absoluteValue=m.abs=function(){var e=new this.constructor(this);return e.s<0&&(e.s=1),y(e)};m.ceil=function(){return y(new this.constructor(this),this.e+1,2)};m.clampedTo=m.clamp=function(e,r){var t,n=this,i=n.constructor;if(e=new i(e),r=new i(r),!e.s||!r.s)return new i(NaN);if(e.gt(r))throw Error(Qe+r);return t=n.cmp(e),t<0?e:n.cmp(r)>0?r:new i(n)};m.comparedTo=m.cmp=function(e){var r,t,n,i,o=this,s=o.d,a=(e=new o.constructor(e)).d,l=o.s,u=e.s;if(!s||!a)return!l||!u?NaN:l!==u?l:s===a?0:!s^l<0?1:-1;if(!s[0]||!a[0])return s[0]?l:a[0]?-u:0;if(l!==u)return l;if(o.e!==e.e)return o.e>e.e^l<0?1:-1;for(n=s.length,i=a.length,r=0,t=n<i?n:i;r<t;++r)if(s[r]!==a[r])return s[r]>a[r]^l<0?1:-1;return n===i?0:n>i^l<0?1:-1};m.cosine=m.cos=function(){var e,r,t=this,n=t.constructor;return t.d?t.d[0]?(e=n.precision,r=n.rounding,n.precision=e+Math.max(t.e,t.sd())+E,n.rounding=1,t=cc(n,Ts(n,t)),n.precision=e,n.rounding=r,y(Fe==2||Fe==3?t.neg():t,e,r,!0)):new n(1):new n(NaN)};m.cubeRoot=m.cbrt=function(){var e,r,t,n,i,o,s,a,l,u,c=this,p=c.constructor;if(!c.isFinite()||c.isZero())return new p(c);for(x=!1,o=c.s*Q(c.s*c,1/3),!o||Math.abs(o)==1/0?(t=K(c.d),e=c.e,(o=(e-t.length+1)%3)&&(t+=o==1||o==-2?\"0\":\"00\"),o=Q(t,1/3),e=ee((e+1)/3)-(e%3==(e<0?-1:2)),o==1/0?t=\"5e\"+e:(t=o.toExponential(),t=t.slice(0,t.indexOf(\"e\")+1)+e),n=new p(t),n.s=c.s):n=new p(o.toString()),s=(e=p.precision)+3;;)if(a=n,l=a.times(a).times(a),u=l.plus(c),n=F(u.plus(c).times(a),u.plus(l),s+2,1),K(a.d).slice(0,s)===(t=K(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t==\"9999\"||!i&&t==\"4999\"){if(!i&&(y(a,e+1,0),a.times(a).times(a).eq(c))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)==\"5\")&&(y(n,e+1,1),r=!n.times(n).times(n).eq(c));break}return x=!0,y(n,e,p.rounding,r)};m.decimalPlaces=m.dp=function(){var e,r=this.d,t=NaN;if(r){if(e=r.length-1,t=(e-ee(this.e/E))*E,e=r[e],e)for(;e%10==0;e/=10)t--;t<0&&(t=0)}return t};m.dividedBy=m.div=function(e){return F(this,new this.constructor(e))};m.dividedToIntegerBy=m.divToInt=function(e){var r=this,t=r.constructor;return y(F(r,new t(e),0,1,1),t.precision,t.rounding)};m.equals=m.eq=function(e){return this.cmp(e)===0};m.floor=function(){return y(new this.constructor(this),this.e+1,3)};m.greaterThan=m.gt=function(e){return this.cmp(e)>0};m.greaterThanOrEqualTo=m.gte=function(e){var r=this.cmp(e);return r==1||r===0};m.hyperbolicCosine=m.cosh=function(){var e,r,t,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(e=Math.ceil(i/3),r=(1/en(4,e)).toString()):(e=16,r=\"2.3283064365386962890625e-10\"),o=Pr(s,1,o.times(r),new s(1),!0);for(var l,u=e,c=new s(8);u--;)l=o.times(o),o=a.minus(l.times(c.minus(l.times(c))));return y(o,s.precision=t,s.rounding=n,!0)};m.hyperbolicSine=m.sinh=function(){var e,r,t,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(r=o.precision,t=o.rounding,o.precision=r+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=Pr(o,2,i,i,!0);else{e=1.4*Math.sqrt(n),e=e>16?16:e|0,i=i.times(1/en(5,e)),i=Pr(o,2,i,i,!0);for(var s,a=new o(5),l=new o(16),u=new o(20);e--;)s=i.times(i),i=i.times(a.plus(s.times(l.times(s).plus(u))))}return o.precision=r,o.rounding=t,y(i,r,t,!0)};m.hyperbolicTangent=m.tanh=function(){var e,r,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(e=n.precision,r=n.rounding,n.precision=e+7,n.rounding=1,F(t.sinh(),t.cosh(),n.precision=e,n.rounding=r)):new n(t.s)};m.inverseCosine=m.acos=function(){var e,r=this,t=r.constructor,n=r.abs().cmp(1),i=t.precision,o=t.rounding;return n!==-1?n===0?r.isNeg()?ge(t,i,o):new t(0):new t(NaN):r.isZero()?ge(t,i+4,o).times(.5):(t.precision=i+6,t.rounding=1,r=r.asin(),e=ge(t,i+4,o).times(.5),t.precision=i,t.rounding=o,e.minus(r))};m.inverseHyperbolicCosine=m.acosh=function(){var e,r,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(e=n.precision,r=n.rounding,n.precision=e+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,x=!1,t=t.times(t).minus(1).sqrt().plus(t),x=!0,n.precision=e,n.rounding=r,t.ln()):new n(t)};m.inverseHyperbolicSine=m.asinh=function(){var e,r,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(e=n.precision,r=n.rounding,n.precision=e+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,x=!1,t=t.times(t).plus(1).sqrt().plus(t),x=!0,n.precision=e,n.rounding=r,t.ln())};m.inverseHyperbolicTangent=m.atanh=function(){var e,r,t,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(e=o.precision,r=o.rounding,n=i.sd(),Math.max(n,e)<2*-i.e-1?y(new o(i),e,r,!0):(o.precision=t=n-i.e,i=F(i.plus(1),new o(1).minus(i),t+e,1),o.precision=e+4,o.rounding=1,i=i.ln(),o.precision=e,o.rounding=r,i.times(.5))):new o(NaN)};m.inverseSine=m.asin=function(){var e,r,t,n,i=this,o=i.constructor;return i.isZero()?new o(i):(r=i.abs().cmp(1),t=o.precision,n=o.rounding,r!==-1?r===0?(e=ge(o,t+4,n).times(.5),e.s=i.s,e):new o(NaN):(o.precision=t+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,i.times(2)))};m.inverseTangent=m.atan=function(){var e,r,t,n,i,o,s,a,l,u=this,c=u.constructor,p=c.precision,d=c.rounding;if(u.isFinite()){if(u.isZero())return new c(u);if(u.abs().eq(1)&&p+4<=Pi)return s=ge(c,p+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new c(NaN);if(p+4<=Pi)return s=ge(c,p+4,d).times(.5),s.s=u.s,s}for(c.precision=a=p+10,c.rounding=1,t=Math.min(28,a/E+2|0),e=t;e;--e)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(x=!1,r=Math.ceil(a/E),n=1,l=u.times(u),s=new c(u),i=u;e!==-1;)if(i=i.times(l),o=s.minus(i.div(n+=2)),i=i.times(l),s=o.plus(i.div(n+=2)),s.d[r]!==void 0)for(e=r;s.d[e]===o.d[e]&&e--;);return t&&(s=s.times(2<<t-1)),x=!0,y(s,c.precision=p,c.rounding=d,!0)};m.isFinite=function(){return!!this.d};m.isInteger=m.isInt=function(){return!!this.d&&ee(this.e/E)>this.d.length-2};m.isNaN=function(){return!this.s};m.isNegative=m.isNeg=function(){return this.s<0};m.isPositive=m.isPos=function(){return this.s>0};m.isZero=function(){return!!this.d&&this.d[0]===0};m.lessThan=m.lt=function(e){return this.cmp(e)<0};m.lessThanOrEqualTo=m.lte=function(e){return this.cmp(e)<1};m.logarithm=m.log=function(e){var r,t,n,i,o,s,a,l,u=this,c=u.constructor,p=c.precision,d=c.rounding,f=5;if(e==null)e=new c(10),r=!0;else{if(e=new c(e),t=e.d,e.s<0||!t||!t[0]||e.eq(1))return new c(NaN);r=e.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new c(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(r)if(t.length>1)o=!0;else{for(i=t[0];i%10===0;)i/=10;o=i!==1}if(x=!1,a=p+f,s=Ue(u,a),n=r?zt(c,a+10):Ue(e,a),l=F(s,n,a,1),rt(l.d,i=p,d))do if(a+=10,s=Ue(u,a),n=r?zt(c,a+10):Ue(e,a),l=F(s,n,a,1),!o){+K(l.d).slice(i+1,i+15)+1==1e14&&(l=y(l,p+1,0));break}while(rt(l.d,i+=10,d));return x=!0,y(l,p,d)};m.minus=m.sub=function(e){var r,t,n,i,o,s,a,l,u,c,p,d,f=this,g=f.constructor;if(e=new g(e),!f.d||!e.d)return!f.s||!e.s?e=new g(NaN):f.d?e.s=-e.s:e=new g(e.d||f.s!==e.s?f:NaN),e;if(f.s!=e.s)return e.s=-e.s,f.plus(e);if(u=f.d,d=e.d,a=g.precision,l=g.rounding,!u[0]||!d[0]){if(d[0])e.s=-e.s;else if(u[0])e=new g(f);else return new g(l===3?-0:0);return x?y(e,a,l):e}if(t=ee(e.e/E),c=ee(f.e/E),u=u.slice(),o=c-t,o){for(p=o<0,p?(r=u,o=-o,s=d.length):(r=d,t=c,s=u.length),n=Math.max(Math.ceil(a/E),s)+2,o>n&&(o=n,r.length=1),r.reverse(),n=o;n--;)r.push(0);r.reverse()}else{for(n=u.length,s=d.length,p=n<s,p&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){p=u[n]<d[n];break}o=0}for(p&&(r=u,u=d,d=r,e.s=-e.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>o;){if(u[--n]<d[n]){for(i=n;i&&u[--i]===0;)u[i]=he-1;--u[i],u[n]+=he}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(e.d=u,e.e=Xt(u,t),x?y(e,a,l):e):new g(l===3?-0:0)};m.modulo=m.mod=function(e){var r,t=this,n=t.constructor;return e=new n(e),!t.d||!e.s||e.d&&!e.d[0]?new n(NaN):!e.d||t.d&&!t.d[0]?y(new n(t),n.precision,n.rounding):(x=!1,n.modulo==9?(r=F(t,e.abs(),0,3,1),r.s*=e.s):r=F(t,e,0,n.modulo,1),r=r.times(e),x=!0,t.minus(r))};m.naturalExponential=m.exp=function(){return vi(this)};m.naturalLogarithm=m.ln=function(){return Ue(this)};m.negated=m.neg=function(){var e=new this.constructor(this);return e.s=-e.s,y(e)};m.plus=m.add=function(e){var r,t,n,i,o,s,a,l,u,c,p=this,d=p.constructor;if(e=new d(e),!p.d||!e.d)return!p.s||!e.s?e=new d(NaN):p.d||(e=new d(e.d||p.s===e.s?p:NaN)),e;if(p.s!=e.s)return e.s=-e.s,p.minus(e);if(u=p.d,c=e.d,a=d.precision,l=d.rounding,!u[0]||!c[0])return c[0]||(e=new d(p)),x?y(e,a,l):e;if(o=ee(p.e/E),n=ee(e.e/E),u=u.slice(),i=o-n,i){for(i<0?(t=u,i=-i,s=c.length):(t=c,n=o,s=u.length),o=Math.ceil(a/E),s=o>s?o+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=u.length,i=c.length,s-i<0&&(i=s,t=c,c=u,u=t),r=0;i;)r=(u[--i]=u[i]+c[i]+r)/he|0,u[i]%=he;for(r&&(u.unshift(r),++n),s=u.length;u[--s]==0;)u.pop();return e.d=u,e.e=Xt(u,n),x?y(e,a,l):e};m.precision=m.sd=function(e){var r,t=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Qe+e);return t.d?(r=ws(t.d),e&&t.e+1>r&&(r=t.e+1)):r=NaN,r};m.round=function(){var e=this,r=e.constructor;return y(new r(e),e.e+1,r.rounding)};m.sine=m.sin=function(){var e,r,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(e=n.precision,r=n.rounding,n.precision=e+Math.max(t.e,t.sd())+E,n.rounding=1,t=dc(n,Ts(n,t)),n.precision=e,n.rounding=r,y(Fe>2?t.neg():t,e,r,!0)):new n(NaN)};m.squareRoot=m.sqrt=function(){var e,r,t,n,i,o,s=this,a=s.d,l=s.e,u=s.s,c=s.constructor;if(u!==1||!a||!a[0])return new c(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(x=!1,u=Math.sqrt(+s),u==0||u==1/0?(r=K(a),(r.length+l)%2==0&&(r+=\"0\"),u=Math.sqrt(r),l=ee((l+1)/2)-(l<0||l%2),u==1/0?r=\"5e\"+l:(r=u.toExponential(),r=r.slice(0,r.indexOf(\"e\")+1)+l),n=new c(r)):n=new c(u.toString()),t=(l=c.precision)+3;;)if(o=n,n=o.plus(F(s,o,t+2,1)).times(.5),K(o.d).slice(0,t)===(r=K(n.d)).slice(0,t))if(r=r.slice(t-3,t+1),r==\"9999\"||!i&&r==\"4999\"){if(!i&&(y(o,l+1,0),o.times(o).eq(s))){n=o;break}t+=4,i=1}else{(!+r||!+r.slice(1)&&r.charAt(0)==\"5\")&&(y(n,l+1,1),e=!n.times(n).eq(s));break}return x=!0,y(n,l,c.rounding,e)};m.tangent=m.tan=function(){var e,r,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(e=n.precision,r=n.rounding,n.precision=e+10,n.rounding=1,t=t.sin(),t.s=1,t=F(t,new n(1).minus(t.times(t)).sqrt(),e+10,0),n.precision=e,n.rounding=r,y(Fe==2||Fe==4?t.neg():t,e,r,!0)):new n(NaN)};m.times=m.mul=function(e){var r,t,n,i,o,s,a,l,u,c=this,p=c.constructor,d=c.d,f=(e=new p(e)).d;if(e.s*=c.s,!d||!d[0]||!f||!f[0])return new p(!e.s||d&&!d[0]&&!f||f&&!f[0]&&!d?NaN:!d||!f?e.s/0:e.s*0);for(t=ee(c.e/E)+ee(e.e/E),l=d.length,u=f.length,l<u&&(o=d,d=f,f=o,s=l,l=u,u=s),o=[],s=l+u,n=s;n--;)o.push(0);for(n=u;--n>=0;){for(r=0,i=l+n;i>n;)a=o[i]+f[n]*d[i-n-1]+r,o[i--]=a%he|0,r=a/he|0;o[i]=(o[i]+r)%he|0}for(;!o[--s];)o.pop();return r?++t:o.shift(),e.d=o,e.e=Xt(o,t),x?y(e,p.precision,p.rounding):e};m.toBinary=function(e,r){return Ci(this,2,e,r)};m.toDecimalPlaces=m.toDP=function(e,r){var t=this,n=t.constructor;return t=new n(t),e===void 0?t:(oe(e,0,Ge),r===void 0?r=n.rounding:oe(r,0,8),y(t,e+t.e+1,r))};m.toExponential=function(e,r){var t,n=this,i=n.constructor;return e===void 0?t=ve(n,!0):(oe(e,0,Ge),r===void 0?r=i.rounding:oe(r,0,8),n=y(new i(n),e+1,r),t=ve(n,!0,e+1)),n.isNeg()&&!n.isZero()?\"-\"+t:t};m.toFixed=function(e,r){var t,n,i=this,o=i.constructor;return e===void 0?t=ve(i):(oe(e,0,Ge),r===void 0?r=o.rounding:oe(r,0,8),n=y(new o(i),e+i.e+1,r),t=ve(n,!1,e+n.e+1)),i.isNeg()&&!i.isZero()?\"-\"+t:t};m.toFraction=function(e){var r,t,n,i,o,s,a,l,u,c,p,d,f=this,g=f.d,h=f.constructor;if(!g)return new h(f);if(u=t=new h(1),n=l=new h(0),r=new h(n),o=r.e=ws(g)-f.e-1,s=o%E,r.d[0]=Q(10,s<0?E+s:s),e==null)e=o>0?r:u;else{if(a=new h(e),!a.isInt()||a.lt(u))throw Error(Qe+a);e=a.gt(r)?o>0?r:u:a}for(x=!1,a=new h(K(g)),c=h.precision,h.precision=o=g.length*E*2;p=F(a,r,0,1,1),i=t.plus(p.times(n)),i.cmp(e)!=1;)t=n,n=i,i=u,u=l.plus(p.times(i)),l=i,i=r,r=a.minus(p.times(i)),a=i;return i=F(e.minus(t),n,0,1,1),l=l.plus(i.times(u)),t=t.plus(i.times(n)),l.s=u.s=f.s,d=F(u,n,o,1).minus(f).abs().cmp(F(l,t,o,1).minus(f).abs())<1?[u,n]:[l,t],h.precision=c,x=!0,d};m.toHexadecimal=m.toHex=function(e,r){return Ci(this,16,e,r)};m.toNearest=function(e,r){var t=this,n=t.constructor;if(t=new n(t),e==null){if(!t.d)return t;e=new n(1),r=n.rounding}else{if(e=new n(e),r===void 0?r=n.rounding:oe(r,0,8),!t.d)return e.s?t:e;if(!e.d)return e.s&&(e.s=t.s),e}return e.d[0]?(x=!1,t=F(t,e,0,r,1).times(e),x=!0,y(t)):(e.s=t.s,t=e),t};m.toNumber=function(){return+this};m.toOctal=function(e,r){return Ci(this,8,e,r)};m.toPower=m.pow=function(e){var r,t,n,i,o,s,a=this,l=a.constructor,u=+(e=new l(e));if(!a.d||!e.d||!a.d[0]||!e.d[0])return new l(Q(+a,u));if(a=new l(a),a.eq(1))return a;if(n=l.precision,o=l.rounding,e.eq(1))return y(a,n,o);if(r=ee(e.e/E),r>=e.d.length-1&&(t=u<0?-u:u)<=lc)return i=xs(l,a,t,n),e.s<0?new l(1).div(i):y(i,n,o);if(s=a.s,s<0){if(r<e.d.length-1)return new l(NaN);if(e.d[r]&1||(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Q(+a,u),r=t==0||!isFinite(t)?ee(u*(Math.log(\"0.\"+K(a.d))/Math.LN10+a.e+1)):new l(t+\"\").e,r>l.maxE+1||r<l.minE-1?new l(r>0?s/0:0):(x=!1,l.rounding=a.s=1,t=Math.min(12,(r+\"\").length),i=vi(e.times(Ue(a,n+t)),n),i.d&&(i=y(i,n+5,1),rt(i.d,n,o)&&(r=n+10,i=y(vi(e.times(Ue(a,r+t)),r),r+5,1),+K(i.d).slice(n+1,n+15)+1==1e14&&(i=y(i,n+1,0)))),i.s=s,x=!0,l.rounding=o,y(i,n,o))};m.toPrecision=function(e,r){var t,n=this,i=n.constructor;return e===void 0?t=ve(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(oe(e,1,Ge),r===void 0?r=i.rounding:oe(r,0,8),n=y(new i(n),e,r),t=ve(n,e<=n.e||n.e<=i.toExpNeg,e)),n.isNeg()&&!n.isZero()?\"-\"+t:t};m.toSignificantDigits=m.toSD=function(e,r){var t=this,n=t.constructor;return e===void 0?(e=n.precision,r=n.rounding):(oe(e,1,Ge),r===void 0?r=n.rounding:oe(r,0,8)),y(new n(t),e,r)};m.toString=function(){var e=this,r=e.constructor,t=ve(e,e.e<=r.toExpNeg||e.e>=r.toExpPos);return e.isNeg()&&!e.isZero()?\"-\"+t:t};m.truncated=m.trunc=function(){return y(new this.constructor(this),this.e+1,1)};m.valueOf=m.toJSON=function(){var e=this,r=e.constructor,t=ve(e,e.e<=r.toExpNeg||e.e>=r.toExpPos);return e.isNeg()?\"-\"+t:t};function K(e){var r,t,n,i=e.length-1,o=\"\",s=e[0];if(i>0){for(o+=s,r=1;r<i;r++)n=e[r]+\"\",t=E-n.length,t&&(o+=Be(t)),o+=n;s=e[r],n=s+\"\",t=E-n.length,t&&(o+=Be(t))}else if(s===0)return\"0\";for(;s%10===0;)s/=10;return o+s}function oe(e,r,t){if(e!==~~e||e<r||e>t)throw Error(Qe+e)}function rt(e,r,t,n){var i,o,s,a;for(o=e[0];o>=10;o/=10)--r;return--r<0?(r+=E,i=0):(i=Math.ceil((r+1)/E),r%=E),o=Q(10,E-r),a=e[i]%o|0,n==null?r<3?(r==0?a=a/100|0:r==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==o||t>3&&a+1==o/2)&&(e[i+1]/o/100|0)==Q(10,r-2)-1||(a==o/2||a==0)&&(e[i+1]/o/100|0)==0:r<4?(r==0?a=a/1e3|0:r==1?a=a/100|0:r==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==o||!n&&t>3&&a+1==o/2)&&(e[i+1]/o/1e3|0)==Q(10,r-3)-1,s}function Ht(e,r,t){for(var n,i=[0],o,s=0,a=e.length;s<a;){for(o=i.length;o--;)i[o]*=r;for(i[0]+=wi.indexOf(e.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function cc(e,r){var t,n,i;if(r.isZero())return r;n=r.d.length,n<32?(t=Math.ceil(n/3),i=(1/en(4,t)).toString()):(t=16,i=\"2.3283064365386962890625e-10\"),e.precision+=t,r=Pr(e,1,r.times(i),new e(1));for(var o=t;o--;){var s=r.times(r);r=s.times(s).minus(s).times(8).plus(1)}return e.precision-=t,r}var F=function(){function e(n,i,o){var s,a=0,l=n.length;for(n=n.slice();l--;)s=n[l]*i+a,n[l]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function r(n,i,o,s){var a,l;if(o!=s)l=o>s?1:-1;else for(a=l=0;a<o;a++)if(n[a]!=i[a]){l=n[a]>i[a]?1:-1;break}return l}function t(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,l){var u,c,p,d,f,g,h,I,T,S,C,b,me,ae,Lr,U,ne,Ae,Y,cr,Tt=n.constructor,_n=n.s==i.s?1:-1,z=n.d,O=i.d;if(!z||!z[0]||!O||!O[0])return new Tt(!n.s||!i.s||(z?O&&z[0]==O[0]:!O)?NaN:z&&z[0]==0||!O?_n*0:_n/0);for(l?(f=1,c=n.e-i.e):(l=he,f=E,c=ee(n.e/f)-ee(i.e/f)),Y=O.length,ne=z.length,T=new Tt(_n),S=T.d=[],p=0;O[p]==(z[p]||0);p++);if(O[p]>(z[p]||0)&&c--,o==null?(ae=o=Tt.precision,s=Tt.rounding):a?ae=o+(n.e-i.e)+1:ae=o,ae<0)S.push(1),g=!0;else{if(ae=ae/f+2|0,p=0,Y==1){for(d=0,O=O[0],ae++;(p<ne||d)&&ae--;p++)Lr=d*l+(z[p]||0),S[p]=Lr/O|0,d=Lr%O|0;g=d||p<ne}else{for(d=l/(O[0]+1)|0,d>1&&(O=e(O,d,l),z=e(z,d,l),Y=O.length,ne=z.length),U=Y,C=z.slice(0,Y),b=C.length;b<Y;)C[b++]=0;cr=O.slice(),cr.unshift(0),Ae=O[0],O[1]>=l/2&&++Ae;do d=0,u=r(O,C,Y,b),u<0?(me=C[0],Y!=b&&(me=me*l+(C[1]||0)),d=me/Ae|0,d>1?(d>=l&&(d=l-1),h=e(O,d,l),I=h.length,b=C.length,u=r(h,C,I,b),u==1&&(d--,t(h,Y<I?cr:O,I,l))):(d==0&&(u=d=1),h=O.slice()),I=h.length,I<b&&h.unshift(0),t(C,h,b,l),u==-1&&(b=C.length,u=r(O,C,Y,b),u<1&&(d++,t(C,Y<b?cr:O,b,l))),b=C.length):u===0&&(d++,C=[0]),S[p++]=d,u&&C[0]?C[b++]=z[U]||0:(C=[z[U]],b=1);while((U++<ne||C[0]!==void 0)&&ae--);g=C[0]!==void 0}S[0]||S.shift()}if(f==1)T.e=c,gs=g;else{for(p=1,d=S[0];d>=10;d/=10)p++;T.e=p+c*f-1,y(T,a?o+T.e+1:o,s,g)}return T}}();function y(e,r,t,n){var i,o,s,a,l,u,c,p,d,f=e.constructor;e:if(r!=null){if(p=e.d,!p)return e;for(i=1,a=p[0];a>=10;a/=10)i++;if(o=r-i,o<0)o+=E,s=r,c=p[d=0],l=c/Q(10,i-s-1)%10|0;else if(d=Math.ceil((o+1)/E),a=p.length,d>=a)if(n){for(;a++<=d;)p.push(0);c=l=0,i=1,o%=E,s=o-E+1}else break e;else{for(c=a=p[d],i=1;a>=10;a/=10)i++;o%=E,s=o-E+i,l=s<0?0:c/Q(10,i-s-1)%10|0}if(n=n||r<0||p[d+1]!==void 0||(s<0?c:c%Q(10,i-s-1)),u=t<4?(l||n)&&(t==0||t==(e.s<0?3:2)):l>5||l==5&&(t==4||n||t==6&&(o>0?s>0?c/Q(10,i-s):0:p[d-1])%10&1||t==(e.s<0?8:7)),r<1||!p[0])return p.length=0,u?(r-=e.e+1,p[0]=Q(10,(E-r%E)%E),e.e=-r||0):p[0]=e.e=0,e;if(o==0?(p.length=d,a=1,d--):(p.length=d+1,a=Q(10,E-o),p[d]=s>0?(c/Q(10,i-s)%Q(10,s)|0)*a:0),u)for(;;)if(d==0){for(o=1,s=p[0];s>=10;s/=10)o++;for(s=p[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(e.e++,p[0]==he&&(p[0]=1));break}else{if(p[d]+=a,p[d]!=he)break;p[d--]=0,a=1}for(o=p.length;p[--o]===0;)p.pop()}return x&&(e.e>f.maxE?(e.d=null,e.e=NaN):e.e<f.minE&&(e.e=0,e.d=[0])),e}function ve(e,r,t){if(!e.isFinite())return vs(e);var n,i=e.e,o=K(e.d),s=o.length;return r?(t&&(n=t-s)>0?o=o.charAt(0)+\".\"+o.slice(1)+Be(n):s>1&&(o=o.charAt(0)+\".\"+o.slice(1)),o=o+(e.e<0?\"e\":\"e+\")+e.e):i<0?(o=\"0.\"+Be(-i-1)+o,t&&(n=t-s)>0&&(o+=Be(n))):i>=s?(o+=Be(i+1-s),t&&(n=t-i-1)>0&&(o=o+\".\"+Be(n))):((n=i+1)<s&&(o=o.slice(0,n)+\".\"+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+=\".\"),o+=Be(n))),o}function Xt(e,r){var t=e[0];for(r*=E;t>=10;t/=10)r++;return r}function zt(e,r,t){if(r>uc)throw x=!0,t&&(e.precision=t),Error(hs);return y(new e(Kt),r,1,!0)}function ge(e,r,t){if(r>Pi)throw Error(hs);return y(new e(Yt),r,t,!0)}function ws(e){var r=e.length-1,t=r*E+1;if(r=e[r],r){for(;r%10==0;r/=10)t--;for(r=e[0];r>=10;r/=10)t++}return t}function Be(e){for(var r=\"\";e--;)r+=\"0\";return r}function xs(e,r,t,n){var i,o=new e(1),s=Math.ceil(n/E+4);for(x=!1;;){if(t%2&&(o=o.times(r),ms(o.d,s)&&(i=!0)),t=ee(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}r=r.times(r),ms(r.d,s)}return x=!0,o}function ds(e){return e.d[e.d.length-1]&1}function Ps(e,r,t){for(var n,i=new e(r[0]),o=0;++o<r.length;)if(n=new e(r[o]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function vi(e,r){var t,n,i,o,s,a,l,u=0,c=0,p=0,d=e.constructor,f=d.rounding,g=d.precision;if(!e.d||!e.d[0]||e.e>17)return new d(e.d?e.d[0]?e.s<0?0:1/0:1:e.s?e.s<0?0:e:NaN);for(r==null?(x=!1,l=g):l=r,a=new d(.03125);e.e>-2;)e=e.times(a),p+=5;for(n=Math.log(Q(2,p))/Math.LN10*2+5|0,l+=n,t=o=s=new d(1),d.precision=l;;){if(o=y(o.times(e),l,1),t=t.times(++c),a=s.plus(F(o,t,l,1)),K(a.d).slice(0,l)===K(s.d).slice(0,l)){for(i=p;i--;)s=y(s.times(s),l,1);if(r==null)if(u<3&&rt(s.d,l-n,f,u))d.precision=l+=10,t=o=a=new d(1),c=0,u++;else return y(s,d.precision=g,f,x=!0);else return d.precision=g,s}s=a}}function Ue(e,r){var t,n,i,o,s,a,l,u,c,p,d,f=1,g=10,h=e,I=h.d,T=h.constructor,S=T.rounding,C=T.precision;if(h.s<0||!I||!I[0]||!h.e&&I[0]==1&&I.length==1)return new T(I&&!I[0]?-1/0:h.s!=1?NaN:I?0:h);if(r==null?(x=!1,c=C):c=r,T.precision=c+=g,t=K(I),n=t.charAt(0),Math.abs(o=h.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)h=h.times(e),t=K(h.d),n=t.charAt(0),f++;o=h.e,n>1?(h=new T(\"0.\"+t),o++):h=new T(n+\".\"+t.slice(1))}else return u=zt(T,c+2,C).times(o+\"\"),h=Ue(new T(n+\".\"+t.slice(1)),c-g).plus(u),T.precision=C,r==null?y(h,C,S,x=!0):h;for(p=h,l=s=h=F(h.minus(1),h.plus(1),c,1),d=y(h.times(h),c,1),i=3;;){if(s=y(s.times(d),c,1),u=l.plus(F(s,new T(i),c,1)),K(u.d).slice(0,c)===K(l.d).slice(0,c))if(l=l.times(2),o!==0&&(l=l.plus(zt(T,c+2,C).times(o+\"\"))),l=F(l,new T(f),c,1),r==null)if(rt(l.d,c-g,S,a))T.precision=c+=g,u=s=h=F(p.minus(1),p.plus(1),c,1),d=y(h.times(h),c,1),i=a=1;else return y(l,T.precision=C,S,x=!0);else return T.precision=C,l;l=u,i+=2}}function vs(e){return String(e.s*e.s/0)}function Ti(e,r){var t,n,i;for((t=r.indexOf(\".\"))>-1&&(r=r.replace(\".\",\"\")),(n=r.search(/e/i))>0?(t<0&&(t=n),t+=+r.slice(n+1),r=r.substring(0,n)):t<0&&(t=r.length),n=0;r.charCodeAt(n)===48;n++);for(i=r.length;r.charCodeAt(i-1)===48;--i);if(r=r.slice(n,i),r){if(i-=n,e.e=t=t-n-1,e.d=[],n=(t+1)%E,t<0&&(n+=E),n<i){for(n&&e.d.push(+r.slice(0,n)),i-=E;n<i;)e.d.push(+r.slice(n,n+=E));r=r.slice(n),n=E-r.length}else n-=i;for(;n--;)r+=\"0\";e.d.push(+r),x&&(e.e>e.constructor.maxE?(e.d=null,e.e=NaN):e.e<e.constructor.minE&&(e.e=0,e.d=[0]))}else e.e=0,e.d=[0];return e}function pc(e,r){var t,n,i,o,s,a,l,u,c;if(r.indexOf(\"_\")>-1){if(r=r.replace(/(\\d)_(?=\\d)/g,\"$1\"),bs.test(r))return Ti(e,r)}else if(r===\"Infinity\"||r===\"NaN\")return+r||(e.s=NaN),e.e=NaN,e.d=null,e;if(sc.test(r))t=16,r=r.toLowerCase();else if(oc.test(r))t=2;else if(ac.test(r))t=8;else throw Error(Qe+r);for(o=r.search(/p/i),o>0?(l=+r.slice(o+1),r=r.substring(2,o)):r=r.slice(2),o=r.indexOf(\".\"),s=o>=0,n=e.constructor,s&&(r=r.replace(\".\",\"\"),a=r.length,o=a-o,i=xs(n,new n(t),o,o*2)),u=Ht(r,t,he),c=u.length-1,o=c;u[o]===0;--o)u.pop();return o<0?new n(e.s*0):(e.e=Xt(u,c),e.d=u,x=!1,s&&(e=F(e,i,a*4)),l&&(e=e.times(Math.abs(l)<54?Q(2,l):ir.pow(2,l))),x=!0,e)}function dc(e,r){var t,n=r.d.length;if(n<3)return r.isZero()?r:Pr(e,2,r,r);t=1.4*Math.sqrt(n),t=t>16?16:t|0,r=r.times(1/en(5,t)),r=Pr(e,2,r,r);for(var i,o=new e(5),s=new e(16),a=new e(20);t--;)i=r.times(r),r=r.times(o.plus(i.times(s.times(i).minus(a))));return r}function Pr(e,r,t,n,i){var o,s,a,l,u=1,c=e.precision,p=Math.ceil(c/E);for(x=!1,l=t.times(t),a=new e(n);;){if(s=F(a.times(l),new e(r++*r++),c,1),a=i?n.plus(s):n.minus(s),n=F(s.times(l),new e(r++*r++),c,1),s=a.plus(n),s.d[p]!==void 0){for(o=p;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,u++}return x=!0,s.d.length=p+1,s}function en(e,r){for(var t=e;--r;)t*=e;return t}function Ts(e,r){var t,n=r.s<0,i=ge(e,e.precision,1),o=i.times(.5);if(r=r.abs(),r.lte(o))return Fe=n?4:1,r;if(t=r.divToInt(i),t.isZero())Fe=n?3:2;else{if(r=r.minus(t.times(i)),r.lte(o))return Fe=ds(t)?n?2:3:n?4:1,r;Fe=ds(t)?n?1:4:n?3:2}return r.minus(i).abs()}function Ci(e,r,t,n){var i,o,s,a,l,u,c,p,d,f=e.constructor,g=t!==void 0;if(g?(oe(t,1,Ge),n===void 0?n=f.rounding:oe(n,0,8)):(t=f.precision,n=f.rounding),!e.isFinite())c=vs(e);else{for(c=ve(e),s=c.indexOf(\".\"),g?(i=2,r==16?t=t*4-3:r==8&&(t=t*3-2)):i=r,s>=0&&(c=c.replace(\".\",\"\"),d=new f(1),d.e=c.length-s,d.d=Ht(ve(d),10,i),d.e=d.d.length),p=Ht(c,10,i),o=l=p.length;p[--l]==0;)p.pop();if(!p[0])c=g?\"0p+0\":\"0\";else{if(s<0?o--:(e=new f(e),e.d=p,e.e=o,e=F(e,d,t,n,0,i),p=e.d,o=e.e,u=gs),s=p[t],a=i/2,u=u||p[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(e.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&p[t-1]&1||n===(e.s<0?8:7)),p.length=t,u)for(;++p[--t]>i-1;)p[t]=0,t||(++o,p.unshift(1));for(l=p.length;!p[l-1];--l);for(s=0,c=\"\";s<l;s++)c+=wi.charAt(p[s]);if(g){if(l>1)if(r==16||r==8){for(s=r==16?4:3,--l;l%s;l++)c+=\"0\";for(p=Ht(c,i,r),l=p.length;!p[l-1];--l);for(s=1,c=\"1.\";s<l;s++)c+=wi.charAt(p[s])}else c=c.charAt(0)+\".\"+c.slice(1);c=c+(o<0?\"p\":\"p+\")+o}else if(o<0){for(;++o;)c=\"0\"+c;c=\"0.\"+c}else if(++o>l)for(o-=l;o--;)c+=\"0\";else o<l&&(c=c.slice(0,o)+\".\"+c.slice(o))}c=(r==16?\"0x\":r==2?\"0b\":r==8?\"0o\":\"\")+c}return e.s<0?\"-\"+c:c}function ms(e,r){if(e.length>r)return e.length=r,!0}function mc(e){return new this(e).abs()}function fc(e){return new this(e).acos()}function gc(e){return new this(e).acosh()}function hc(e,r){return new this(e).plus(r)}function yc(e){return new this(e).asin()}function Ec(e){return new this(e).asinh()}function bc(e){return new this(e).atan()}function wc(e){return new this(e).atanh()}function xc(e,r){e=new this(e),r=new this(r);var t,n=this.precision,i=this.rounding,o=n+4;return!e.s||!r.s?t=new this(NaN):!e.d&&!r.d?(t=ge(this,o,1).times(r.s>0?.25:.75),t.s=e.s):!r.d||e.isZero()?(t=r.s<0?ge(this,n,i):new this(0),t.s=e.s):!e.d||r.isZero()?(t=ge(this,o,1).times(.5),t.s=e.s):r.s<0?(this.precision=o,this.rounding=1,t=this.atan(F(e,r,o,1)),r=ge(this,o,1),this.precision=n,this.rounding=i,t=e.s<0?t.minus(r):t.plus(r)):t=this.atan(F(e,r,o,1)),t}function Pc(e){return new this(e).cbrt()}function vc(e){return y(e=new this(e),e.e+1,2)}function Tc(e,r,t){return new this(e).clamp(r,t)}function Cc(e){if(!e||typeof e!=\"object\")throw Error(Zt+\"Object expected\");var r,t,n,i=e.defaults===!0,o=[\"precision\",1,Ge,\"rounding\",0,8,\"toExpNeg\",-xr,0,\"toExpPos\",0,xr,\"maxE\",0,xr,\"minE\",-xr,0,\"modulo\",0,9];for(r=0;r<o.length;r+=3)if(t=o[r],i&&(this[t]=xi[t]),(n=e[t])!==void 0)if(ee(n)===n&&n>=o[r+1]&&n<=o[r+2])this[t]=n;else throw Error(Qe+t+\": \"+n);if(t=\"crypto\",i&&(this[t]=xi[t]),(n=e[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<\"u\"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(ys);else this[t]=!1;else throw Error(Qe+t+\": \"+n);return this}function Sc(e){return new this(e).cos()}function Rc(e){return new this(e).cosh()}function Cs(e){var r,t,n;function i(o){var s,a,l,u=this;if(!(u instanceof i))return new i(o);if(u.constructor=i,fs(o)){u.s=o.s,x?!o.d||o.e>i.maxE?(u.e=NaN,u.d=null):o.e<i.minE?(u.e=0,u.d=[0]):(u.e=o.e,u.d=o.d.slice()):(u.e=o.e,u.d=o.d?o.d.slice():o.d);return}if(l=typeof o,l===\"number\"){if(o===0){u.s=1/o<0?-1:1,u.e=0,u.d=[0];return}if(o<0?(o=-o,u.s=-1):u.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;x?s>i.maxE?(u.e=NaN,u.d=null):s<i.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[o]):(u.e=s,u.d=[o]);return}else if(o*0!==0){o||(u.s=NaN),u.e=NaN,u.d=null;return}return Ti(u,o.toString())}else if(l!==\"string\")throw Error(Qe+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),u.s=-1):(a===43&&(o=o.slice(1)),u.s=1),bs.test(o)?Ti(u,o):pc(u,o)}if(i.prototype=m,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Cc,i.clone=Cs,i.isDecimal=fs,i.abs=mc,i.acos=fc,i.acosh=gc,i.add=hc,i.asin=yc,i.asinh=Ec,i.atan=bc,i.atanh=wc,i.atan2=xc,i.cbrt=Pc,i.ceil=vc,i.clamp=Tc,i.cos=Sc,i.cosh=Rc,i.div=Ac,i.exp=Ic,i.floor=_c,i.hypot=kc,i.ln=Dc,i.log=Oc,i.log10=Fc,i.log2=Lc,i.max=Nc,i.min=Mc,i.mod=$c,i.mul=qc,i.pow=jc,i.random=Vc,i.round=Bc,i.sign=Uc,i.sin=Qc,i.sinh=Gc,i.sqrt=Jc,i.sub=Wc,i.sum=Hc,i.tan=Kc,i.tanh=Yc,i.trunc=zc,e===void 0&&(e={}),e&&e.defaults!==!0)for(n=[\"precision\",\"rounding\",\"toExpNeg\",\"toExpPos\",\"maxE\",\"minE\",\"modulo\",\"crypto\"],r=0;r<n.length;)e.hasOwnProperty(t=n[r++])||(e[t]=this[t]);return i.config(e),i}function Ac(e,r){return new this(e).div(r)}function Ic(e){return new this(e).exp()}function _c(e){return y(e=new this(e),e.e+1,3)}function kc(){var e,r,t=new this(0);for(x=!1,e=0;e<arguments.length;)if(r=new this(arguments[e++]),r.d)t.d&&(t=t.plus(r.times(r)));else{if(r.s)return x=!0,new this(1/0);t=r}return x=!0,t.sqrt()}function fs(e){return e instanceof ir||e&&e.toStringTag===Es||!1}function Dc(e){return new this(e).ln()}function Oc(e,r){return new this(e).log(r)}function Lc(e){return new this(e).log(2)}function Fc(e){return new this(e).log(10)}function Nc(){return Ps(this,arguments,\"lt\")}function Mc(){return Ps(this,arguments,\"gt\")}function $c(e,r){return new this(e).mod(r)}function qc(e,r){return new this(e).mul(r)}function jc(e,r){return new this(e).pow(r)}function Vc(e){var r,t,n,i,o=0,s=new this(1),a=[];if(e===void 0?e=this.precision:oe(e,1,Ge),n=Math.ceil(e/E),this.crypto)if(crypto.getRandomValues)for(r=crypto.getRandomValues(new Uint32Array(n));o<n;)i=r[o],i>=429e7?r[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(r=crypto.randomBytes(n*=4);o<n;)i=r[o]+(r[o+1]<<8)+(r[o+2]<<16)+((r[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(r,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(ys);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],e%=E,n&&e&&(i=Q(10,E-e),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=E)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<E&&(t-=E-n)}return s.e=t,s.d=a,s}function Bc(e){return y(e=new this(e),e.e+1,this.rounding)}function Uc(e){return e=new this(e),e.d?e.d[0]?e.s:0*e.s:e.s||NaN}function Qc(e){return new this(e).sin()}function Gc(e){return new this(e).sinh()}function Jc(e){return new this(e).sqrt()}function Wc(e,r){return new this(e).sub(r)}function Hc(){var e=0,r=arguments,t=new this(r[e]);for(x=!1;t.s&&++e<r.length;)t=t.plus(r[e]);return x=!0,y(t,this.precision,this.rounding)}function Kc(e){return new this(e).tan()}function Yc(e){return new this(e).tanh()}function zc(e){return y(e=new this(e),e.e+1,1)}m[Symbol.for(\"nodejs.util.inspect.custom\")]=m.toString;m[Symbol.toStringTag]=\"Decimal\";var ir=m.constructor=Cs(xi);Kt=new ir(Kt);Yt=new ir(Yt);var Te=ir;function vr(e){return ir.isDecimal(e)?!0:e!==null&&typeof e==\"object\"&&typeof e.s==\"number\"&&typeof e.e==\"number\"&&typeof e.toFixed==\"function\"&&Array.isArray(e.d)}var tt=class{constructor(r,t,n,i,o){this.modelName=r,this.name=t,this.typeName=n,this.isList=i,this.isEnum=o}_toGraphQLInputType(){let r=this.isList?\"List\":\"\",t=this.isEnum?\"Enum\":\"\";return`${r}${t}${this.typeName}FieldRefInput<${this.modelName}>`}};function Tr(e){return e instanceof tt}var rn=class{constructor(r){this.value=r}write(r){r.write(this.value)}markAsError(){this.value.markAsError()}};var tn=e=>e,nn={bold:tn,red:tn,green:tn,dim:tn,enabled:!1},Ss={bold:W,red:ue,green:Me,dim:Ie,enabled:!0},Cr={write(e){e.writeLine(\",\")}};var Ce=class{constructor(r){this.contents=r;this.isUnderlined=!1;this.color=r=>r}underline(){return this.isUnderlined=!0,this}setColor(r){return this.color=r,this}write(r){let t=r.getCurrentLineLength();r.write(this.color(this.contents)),this.isUnderlined&&r.afterNextNewline(()=>{r.write(\" \".repeat(t)).writeLine(this.color(\"~\".repeat(this.contents.length)))})}};var Je=class{constructor(){this.hasError=!1}markAsError(){return this.hasError=!0,this}};var Sr=class extends Je{constructor(){super(...arguments);this.items=[]}addItem(t){return this.items.push(new rn(t)),this}getField(t){return this.items[t]}getPrintWidth(){return this.items.length===0?2:Math.max(...this.items.map(n=>n.value.getPrintWidth()))+2}write(t){if(this.items.length===0){this.writeEmpty(t);return}this.writeWithItems(t)}writeEmpty(t){let n=new Ce(\"[]\");this.hasError&&n.setColor(t.context.colors.red).underline(),t.write(n)}writeWithItems(t){let{colors:n}=t.context;t.writeLine(\"[\").withIndent(()=>t.writeJoined(Cr,this.items).newLine()).write(\"]\"),this.hasError&&t.afterNextNewline(()=>{t.writeLine(n.red(\"~\".repeat(this.getPrintWidth())))})}asObject(){}};var Rs=\": \",on=class{constructor(r,t){this.name=r;this.value=t;this.hasError=!1}markAsError(){this.hasError=!0}getPrintWidth(){return this.name.length+this.value.getPrintWidth()+Rs.length}write(r){let t=new Ce(this.name);this.hasError&&t.underline().setColor(r.context.colors.red),r.write(t).write(Rs).write(this.value)}};var sn=class e extends Je{constructor(){super(...arguments);this.fields={};this.suggestions=[]}addField(t){this.fields[t.name]=t}addSuggestion(t){this.suggestions.push(t)}getField(t){return this.fields[t]}getDeepField(t){let[n,...i]=t,o=this.getField(n);if(!o)return;let s=o;for(let a of i){let l;if(s.value instanceof e?l=s.value.getField(a):s.value instanceof Sr&&(l=s.value.getField(Number(a))),!l)return;s=l}return s}getDeepFieldValue(t){return t.length===0?this:this.getDeepField(t)?.value}hasField(t){return!!this.getField(t)}removeAllFields(){this.fields={}}removeField(t){delete this.fields[t]}getFields(){return this.fields}isEmpty(){return Object.keys(this.fields).length===0}getFieldValue(t){return this.getField(t)?.value}getDeepSubSelectionValue(t){let n=this;for(let i of t){if(!(n instanceof e))return;let o=n.getSubSelectionValue(i);if(!o)return;n=o}return n}getDeepSelectionParent(t){let n=this.getSelectionParent();if(!n)return;let i=n;for(let o of t){let s=i.value.getFieldValue(o);if(!s||!(s instanceof e))return;let a=s.getSelectionParent();if(!a)return;i=a}return i}getSelectionParent(){let t=this.getField(\"select\")?.value.asObject();if(t)return{kind:\"select\",value:t};let n=this.getField(\"include\")?.value.asObject();if(n)return{kind:\"include\",value:n}}getSubSelectionValue(t){return this.getSelectionParent()?.value.fields[t].value}getPrintWidth(){let t=Object.values(this.fields);return t.length==0?2:Math.max(...t.map(i=>i.getPrintWidth()))+2}write(t){let n=Object.values(this.fields);if(n.length===0&&this.suggestions.length===0){this.writeEmpty(t);return}this.writeWithContents(t,n)}asObject(){return this}writeEmpty(t){let n=new Ce(\"{}\");this.hasError&&n.setColor(t.context.colors.red).underline(),t.write(n)}writeWithContents(t,n){t.writeLine(\"{\").withIndent(()=>{t.writeJoined(Cr,[...n,...this.suggestions]).newLine()}),t.write(\"}\"),this.hasError&&t.afterNextNewline(()=>{t.writeLine(t.context.colors.red(\"~\".repeat(this.getPrintWidth())))})}};var J=class extends Je{constructor(t){super();this.text=t}getPrintWidth(){return this.text.length}write(t){let n=new Ce(this.text);this.hasError&&n.underline().setColor(t.context.colors.red),t.write(n)}asObject(){}};var Si=class{constructor(r){this.errorMessages=[];this.arguments=r}write(r){r.write(this.arguments)}addErrorMessage(r){this.errorMessages.push(r)}renderAllMessages(r){return this.errorMessages.map(t=>t(r)).join(`\n`)}};function an(e){return new Si(As(e))}function As(e){let r=new sn;for(let[t,n]of Object.entries(e)){let i=new on(t,Is(n));r.addField(i)}return r}function Is(e){if(typeof e==\"string\")return new J(JSON.stringify(e));if(typeof e==\"number\"||typeof e==\"boolean\")return new J(String(e));if(typeof e==\"bigint\")return new J(`${e}n`);if(e===null)return new J(\"null\");if(e===void 0)return new J(\"undefined\");if(vr(e))return new J(`new Prisma.Decimal(\"${e.toFixed()}\")`);if(e instanceof Uint8Array)return Buffer.isBuffer(e)?new J(`Buffer.alloc(${e.byteLength})`):new J(`new Uint8Array(${e.byteLength})`);if(e instanceof Date){let r=Wt(e)?e.toISOString():\"Invalid Date\";return new J(`new Date(\"${r}\")`)}return e instanceof Le?new J(`Prisma.${e._getName()}`):Tr(e)?new J(`prisma.${ps(e.modelName)}.$fields.${e.name}`):Array.isArray(e)?Xc(e):typeof e==\"object\"?As(e):new J(Object.prototype.toString.call(e))}function Xc(e){let r=new Sr;for(let t of e)r.addItem(Is(t));return r}function _s(e){if(e===void 0)return\"\";let r=an(e);return new br(0,{colors:nn}).write(r).toString()}var ep=\"P2037\";function or({error:e,user_facing_error:r},t,n){return r.error_code?new V(rp(r,n),{code:r.error_code,clientVersion:t,meta:r.meta,batchRequestIdx:r.batch_request_idx}):new B(e,{clientVersion:t,batchRequestIdx:r.batch_request_idx})}function rp(e,r){let t=e.message;return(r===\"postgresql\"||r===\"postgres\"||r===\"mysql\")&&e.error_code===ep&&(t+=`\nPrisma Accelerate has built-in connection pooling to prevent such errors: https://pris.ly/client/error-accelerate`),t}var nt=\"<unknown>\";function ks(e){var r=e.split(`\n`);return r.reduce(function(t,n){var i=ip(n)||sp(n)||up(n)||mp(n)||pp(n);return i&&t.push(i),t},[])}var tp=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,np=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;function ip(e){var r=tp.exec(e);if(!r)return null;var t=r[2]&&r[2].indexOf(\"native\")===0,n=r[2]&&r[2].indexOf(\"eval\")===0,i=np.exec(r[2]);return n&&i!=null&&(r[2]=i[1],r[3]=i[2],r[4]=i[3]),{file:t?null:r[2],methodName:r[1]||nt,arguments:t?[r[2]]:[],lineNumber:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}var op=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function sp(e){var r=op.exec(e);return r?{file:r[2],methodName:r[1]||nt,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}:null}var ap=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,lp=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;function up(e){var r=ap.exec(e);if(!r)return null;var t=r[3]&&r[3].indexOf(\" > eval\")>-1,n=lp.exec(r[3]);return t&&n!=null&&(r[3]=n[1],r[4]=n[2],r[5]=null),{file:r[3],methodName:r[1]||nt,arguments:r[2]?r[2].split(\",\"):[],lineNumber:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}var cp=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;function pp(e){var r=cp.exec(e);return r?{file:r[3],methodName:r[1]||nt,arguments:[],lineNumber:+r[4],column:r[5]?+r[5]:null}:null}var dp=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function mp(e){var r=dp.exec(e);return r?{file:r[2],methodName:r[1]||nt,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}:null}var Ri=class{getLocation(){return null}},Ai=class{constructor(){this._error=new Error}getLocation(){let r=this._error.stack;if(!r)return null;let n=ks(r).find(i=>{if(!i.file)return!1;let o=ii(i.file);return o!==\"<anonymous>\"&&!o.includes(\"@prisma\")&&!o.includes(\"/packages/client/src/runtime/\")&&!o.endsWith(\"/runtime/binary.js\")&&!o.endsWith(\"/runtime/library.js\")&&!o.endsWith(\"/runtime/edge.js\")&&!o.endsWith(\"/runtime/edge-esm.js\")&&!o.startsWith(\"internal/\")&&!i.methodName.includes(\"new \")&&!i.methodName.includes(\"getCallSite\")&&!i.methodName.includes(\"Proxy.\")&&i.methodName.split(\".\").length<4});return!n||!n.file?null:{fileName:n.file,lineNumber:n.lineNumber,columnNumber:n.column}}};function We(e){return e===\"minimal\"?typeof $EnabledCallSite==\"function\"&&e!==\"minimal\"?new $EnabledCallSite:new Ri:new Ai}var Ds={_avg:!0,_count:!0,_sum:!0,_min:!0,_max:!0};function Rr(e={}){let r=gp(e);return Object.entries(r).reduce((n,[i,o])=>(Ds[i]!==void 0?n.select[i]={select:o}:n[i]=o,n),{select:{}})}function gp(e={}){return typeof e._count==\"boolean\"?{...e,_count:{_all:e._count}}:e}function ln(e={}){return r=>(typeof e._count==\"boolean\"&&(r._count=r._count._all),r)}function Os(e,r){let t=ln(e);return r({action:\"aggregate\",unpacker:t,argsMapper:Rr})(e)}function hp(e={}){let{select:r,...t}=e;return typeof r==\"object\"?Rr({...t,_count:r}):Rr({...t,_count:{_all:!0}})}function yp(e={}){return typeof e.select==\"object\"?r=>ln(e)(r)._count:r=>ln(e)(r)._count._all}function Ls(e,r){return r({action:\"count\",unpacker:yp(e),argsMapper:hp})(e)}function Ep(e={}){let r=Rr(e);if(Array.isArray(r.by))for(let t of r.by)typeof t==\"string\"&&(r.select[t]=!0);else typeof r.by==\"string\"&&(r.select[r.by]=!0);return r}function bp(e={}){return r=>(typeof e?._count==\"boolean\"&&r.forEach(t=>{t._count=t._count._all}),r)}function Fs(e,r){return r({action:\"groupBy\",unpacker:bp(e),argsMapper:Ep})(e)}function Ns(e,r,t){if(r===\"aggregate\")return n=>Os(n,t);if(r===\"count\")return n=>Ls(n,t);if(r===\"groupBy\")return n=>Fs(n,t)}function Ms(e,r){let t=r.fields.filter(i=>!i.relationName),n=pi(t,i=>i.name);return new Proxy({},{get(i,o){if(o in i||typeof o==\"symbol\")return i[o];let s=n[o];if(s)return new tt(e,o,s.type,s.isList,s.kind===\"enum\")},...Jt(Object.keys(n))})}var $s=e=>Array.isArray(e)?e:e.split(\".\"),Ii=(e,r)=>$s(r).reduce((t,n)=>t&&t[n],e),qs=(e,r,t)=>$s(r).reduceRight((n,i,o,s)=>Object.assign({},Ii(e,s.slice(0,o)),{[i]:n}),t);function wp(e,r){return e===void 0||r===void 0?[]:[...r,\"select\",e]}function xp(e,r,t){return r===void 0?e??{}:qs(r,t,e||!0)}function _i(e,r,t,n,i,o){let a=e._runtimeDataModel.models[r].fields.reduce((l,u)=>({...l,[u.name]:u}),{});return l=>{let u=We(e._errorFormat),c=wp(n,i),p=xp(l,o,c),d=t({dataPath:c,callsite:u})(p),f=Pp(e,r);return new Proxy(d,{get(g,h){if(!f.includes(h))return g[h];let T=[a[h].type,t,h],S=[c,p];return _i(e,...T,...S)},...Jt([...f,...Object.getOwnPropertyNames(d)])})}}function Pp(e,r){return e._runtimeDataModel.models[r].fields.filter(t=>t.kind===\"object\").map(t=>t.name)}var Gs=k(oi());var Qs=k(require(\"fs\"));var js={keyword:_e,entity:_e,value:e=>W(ze(e)),punctuation:ze,directive:_e,function:_e,variable:e=>W(ze(e)),string:e=>W(Me(e)),boolean:fe,number:_e,comment:Nr};var vp=e=>e,un={},Tp=0,P={manual:un.Prism&&un.Prism.manual,disableWorkerMessageHandler:un.Prism&&un.Prism.disableWorkerMessageHandler,util:{encode:function(e){if(e instanceof ye){let r=e;return new ye(r.type,P.util.encode(r.content),r.alias)}else return Array.isArray(e)?e.map(P.util.encode):e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/\\u00a0/g,\" \")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,\"__id\",{value:++Tp}),e.__id},clone:function e(r,t){let n,i,o=P.util.type(r);switch(t=t||{},o){case\"Object\":if(i=P.util.objId(r),t[i])return t[i];n={},t[i]=n;for(let s in r)r.hasOwnProperty(s)&&(n[s]=e(r[s],t));return n;case\"Array\":return i=P.util.objId(r),t[i]?t[i]:(n=[],t[i]=n,r.forEach(function(s,a){n[a]=e(s,t)}),n);default:return r}}},languages:{extend:function(e,r){let t=P.util.clone(P.languages[e]);for(let n in r)t[n]=r[n];return t},insertBefore:function(e,r,t,n){n=n||P.languages;let i=n[e],o={};for(let a in i)if(i.hasOwnProperty(a)){if(a==r)for(let l in t)t.hasOwnProperty(l)&&(o[l]=t[l]);t.hasOwnProperty(a)||(o[a]=i[a])}let s=n[e];return n[e]=o,P.languages.DFS(P.languages,function(a,l){l===s&&a!=e&&(this[a]=o)}),o},DFS:function e(r,t,n,i){i=i||{};let o=P.util.objId;for(let s in r)if(r.hasOwnProperty(s)){t.call(r,s,r[s],n||s);let a=r[s],l=P.util.type(a);l===\"Object\"&&!i[o(a)]?(i[o(a)]=!0,e(a,t,null,i)):l===\"Array\"&&!i[o(a)]&&(i[o(a)]=!0,e(a,t,s,i))}}},plugins:{},highlight:function(e,r,t){let n={code:e,grammar:r,language:t};return P.hooks.run(\"before-tokenize\",n),n.tokens=P.tokenize(n.code,n.grammar),P.hooks.run(\"after-tokenize\",n),ye.stringify(P.util.encode(n.tokens),n.language)},matchGrammar:function(e,r,t,n,i,o,s){for(let h in t){if(!t.hasOwnProperty(h)||!t[h])continue;if(h==s)return;let I=t[h];I=P.util.type(I)===\"Array\"?I:[I];for(let T=0;T<I.length;++T){let S=I[T],C=S.inside,b=!!S.lookbehind,me=!!S.greedy,ae=0,Lr=S.alias;if(me&&!S.pattern.global){let U=S.pattern.toString().match(/[imuy]*$/)[0];S.pattern=RegExp(S.pattern.source,U+\"g\")}S=S.pattern||S;for(let U=n,ne=i;U<r.length;ne+=r[U].length,++U){let Ae=r[U];if(r.length>e.length)return;if(Ae instanceof ye)continue;if(me&&U!=r.length-1){S.lastIndex=ne;var p=S.exec(e);if(!p)break;var c=p.index+(b?p[1].length:0),d=p.index+p[0].length,a=U,l=ne;for(let O=r.length;a<O&&(l<d||!r[a].type&&!r[a-1].greedy);++a)l+=r[a].length,c>=l&&(++U,ne=l);if(r[U]instanceof ye)continue;u=a-U,Ae=e.slice(ne,l),p.index-=ne}else{S.lastIndex=0;var p=S.exec(Ae),u=1}if(!p){if(o)break;continue}b&&(ae=p[1]?p[1].length:0);var c=p.index+ae,p=p[0].slice(ae),d=c+p.length,f=Ae.slice(0,c),g=Ae.slice(d);let Y=[U,u];f&&(++U,ne+=f.length,Y.push(f));let cr=new ye(h,C?P.tokenize(p,C):p,Lr,p,me);if(Y.push(cr),g&&Y.push(g),Array.prototype.splice.apply(r,Y),u!=1&&P.matchGrammar(e,r,t,U,ne,!0,h),o)break}}}},tokenize:function(e,r){let t=[e],n=r.rest;if(n){for(let i in n)r[i]=n[i];delete r.rest}return P.matchGrammar(e,t,r,0,0,!1),t},hooks:{all:{},add:function(e,r){let t=P.hooks.all;t[e]=t[e]||[],t[e].push(r)},run:function(e,r){let t=P.hooks.all[e];if(!(!t||!t.length))for(var n=0,i;i=t[n++];)i(r)}},Token:ye};P.languages.clike={comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},\"class-name\":{pattern:/((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[\\w.\\\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\\\]/}},keyword:/\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,boolean:/\\b(?:true|false)\\b/,function:/\\w+(?=\\()/,number:/\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,operator:/--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,punctuation:/[{}[\\];(),.:]/};P.languages.javascript=P.languages.extend(\"clike\",{\"class-name\":[P.languages.clike[\"class-name\"],{pattern:/(^|[^$\\w\\xA0-\\uFFFF])[_$A-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\\s*)(?:catch|finally)\\b/,lookbehind:!0},{pattern:/(^|[^.])\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,lookbehind:!0}],number:/\\b(?:(?:0[xX](?:[\\dA-Fa-f](?:_[\\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\\d(?:_\\d)?)+n|NaN|Infinity)\\b|(?:\\b(?:\\d(?:_\\d)?)+\\.?(?:\\d(?:_\\d)?)*|\\B\\.(?:\\d(?:_\\d)?)+)(?:[Ee][+-]?(?:\\d(?:_\\d)?)+)?/,function:/[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,operator:/-[-=]?|\\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\\|[|=]?|\\*\\*?=?|\\/=?|~|\\^=?|%=?|\\?|\\.{3}/});P.languages.javascript[\"class-name\"][0].pattern=/(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/;P.languages.insertBefore(\"javascript\",\"keyword\",{regex:{pattern:/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s])\\s*)\\/(\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyus]{0,6}(?=\\s*($|[\\r\\n,.;})\\]]))/,lookbehind:!0,greedy:!0},\"function-variable\":{pattern:/[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/,alias:\"function\"},parameter:[{pattern:/(function(?:\\s+[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)?\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\))/,lookbehind:!0,inside:P.languages.javascript},{pattern:/[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=>)/i,inside:P.languages.javascript},{pattern:/(\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*=>)/,lookbehind:!0,inside:P.languages.javascript},{pattern:/((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*)\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*\\{)/,lookbehind:!0,inside:P.languages.javascript}],constant:/\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/});P.languages.markup&&P.languages.markup.tag.addInlined(\"script\",\"javascript\");P.languages.js=P.languages.javascript;P.languages.typescript=P.languages.extend(\"javascript\",{keyword:/\\b(?:abstract|as|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield)\\b/,builtin:/\\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\\b/});P.languages.ts=P.languages.typescript;function ye(e,r,t,n,i){this.type=e,this.content=r,this.alias=t,this.length=(n||\"\").length|0,this.greedy=!!i}ye.stringify=function(e,r){return typeof e==\"string\"?e:Array.isArray(e)?e.map(function(t){return ye.stringify(t,r)}).join(\"\"):Cp(e.type)(e.content)};function Cp(e){return js[e]||vp}function Vs(e){return Sp(e,P.languages.javascript)}function Sp(e,r){return P.tokenize(e,r).map(n=>ye.stringify(n)).join(\"\")}var Bs=k(zo());function Us(e){return(0,Bs.default)(e)}var cn=class e{static read(r){let t;try{t=Qs.default.readFileSync(r,\"utf-8\")}catch{return null}return e.fromContent(t)}static fromContent(r){let t=r.split(/\\r?\\n/);return new e(1,t)}constructor(r,t){this.firstLineNumber=r,this.lines=t}get lastLineNumber(){return this.firstLineNumber+this.lines.length-1}mapLineAt(r,t){if(r<this.firstLineNumber||r>this.lines.length+this.firstLineNumber)return this;let n=r-this.firstLineNumber,i=[...this.lines];return i[n]=t(i[n]),new e(this.firstLineNumber,i)}mapLines(r){return new e(this.firstLineNumber,this.lines.map((t,n)=>r(t,this.firstLineNumber+n)))}lineAt(r){return this.lines[r-this.firstLineNumber]}prependSymbolAt(r,t){return this.mapLines((n,i)=>i===r?`${t} ${n}`:`  ${n}`)}slice(r,t){let n=this.lines.slice(r-1,t).join(`\n`);return new e(r,Us(n).split(`\n`))}highlight(){let r=Vs(this.toString());return new e(this.firstLineNumber,r.split(`\n`))}toString(){return this.lines.join(`\n`)}};var Rp={red:ue,gray:Nr,dim:Ie,bold:W,underline:X,highlightSource:e=>e.highlight()},Ap={red:e=>e,gray:e=>e,dim:e=>e,bold:e=>e,underline:e=>e,highlightSource:e=>e};function Ip({message:e,originalMethod:r,isPanic:t,callArguments:n}){return{functionName:`prisma.${r}()`,message:e,isPanic:t??!1,callArguments:n}}function _p({callsite:e,message:r,originalMethod:t,isPanic:n,callArguments:i},o){let s=Ip({message:r,originalMethod:t,isPanic:n,callArguments:i});if(!e||typeof window<\"u\"||process.env.NODE_ENV===\"production\")return s;let a=e.getLocation();if(!a||!a.lineNumber||!a.columnNumber)return s;let l=Math.max(1,a.lineNumber-3),u=cn.read(a.fileName)?.slice(l,a.lineNumber),c=u?.lineAt(a.lineNumber);if(u&&c){let p=Dp(c),d=kp(c);if(!d)return s;s.functionName=`${d.code})`,s.location=a,n||(u=u.mapLineAt(a.lineNumber,g=>g.slice(0,d.openingBraceIndex))),u=o.highlightSource(u);let f=String(u.lastLineNumber).length;if(s.contextLines=u.mapLines((g,h)=>o.gray(String(h).padStart(f))+\" \"+g).mapLines(g=>o.dim(g)).prependSymbolAt(a.lineNumber,o.bold(o.red(\"\\u2192\"))),i){let g=p+f+1;g+=2,s.callArguments=(0,Gs.default)(i,g).slice(g)}}return s}function kp(e){let r=Object.keys(De.ModelAction).join(\"|\"),n=new RegExp(String.raw`\\.(${r})\\(`).exec(e);if(n){let i=n.index+n[0].length,o=e.lastIndexOf(\" \",n.index)+1;return{code:e.slice(o,i),openingBraceIndex:i}}return null}function Dp(e){let r=0;for(let t=0;t<e.length;t++){if(e.charAt(t)!==\" \")return r;r++}return r}function Op({functionName:e,location:r,message:t,isPanic:n,contextLines:i,callArguments:o},s){let a=[\"\"],l=r?\" in\":\":\";if(n?(a.push(s.red(`Oops, an unknown error occurred! This is ${s.bold(\"on us\")}, you did nothing wrong.`)),a.push(s.red(`It occurred in the ${s.bold(`\\`${e}\\``)} invocation${l}`))):a.push(s.red(`Invalid ${s.bold(`\\`${e}\\``)} invocation${l}`)),r&&a.push(s.underline(Lp(r))),i){a.push(\"\");let u=[i.toString()];o&&(u.push(o),u.push(s.dim(\")\"))),a.push(u.join(\"\")),o&&a.push(\"\")}else a.push(\"\"),o&&a.push(o),a.push(\"\");return a.push(t),a.join(`\n`)}function Lp(e){let r=[e.fileName];return e.lineNumber&&r.push(String(e.lineNumber)),e.columnNumber&&r.push(String(e.columnNumber)),r.join(\":\")}function Ar(e){let r=e.showColors?Rp:Ap,t;return t=_p(e,r),Op(t,r)}function Js(e,r,t,n){return e===De.ModelAction.findFirstOrThrow||e===De.ModelAction.findUniqueOrThrow?Fp(r,t,n):n}function Fp(e,r,t){return async n=>{if(\"rejectOnNotFound\"in n.args){let o=Ar({originalMethod:n.clientMethod,callsite:n.callsite,message:\"'rejectOnNotFound' option is not supported\"});throw new H(o,{clientVersion:r})}return await t(n).catch(o=>{throw o instanceof V&&o.code===\"P2025\"?new Oe(`No ${e} found`,r):o})}}function Se(e){return e.replace(/^./,r=>r.toLowerCase())}var Np=[\"findUnique\",\"findUniqueOrThrow\",\"findFirst\",\"findFirstOrThrow\",\"create\",\"update\",\"upsert\",\"delete\"],Mp=[\"aggregate\",\"count\",\"groupBy\"];function ki(e,r){let t=e._extensions.getAllModelExtensions(r)??{},n=[$p(e,r),jp(e,r),et(t),te(\"name\",()=>r),te(\"$name\",()=>r),te(\"$parent\",()=>e._appliedParent)];return Pe({},n)}function $p(e,r){let t=Se(r),n=Object.keys(De.ModelAction).concat(\"count\");return{getKeys(){return n},getPropertyValue(i){let o=i,s=l=>e._request(l);s=Js(o,r,e._clientVersion,s);let a=l=>u=>{let c=We(e._errorFormat);return e._createPrismaPromise(p=>{let d={args:u,dataPath:[],action:o,model:r,clientMethod:`${t}.${i}`,jsModelName:t,transaction:p,callsite:c};return s({...d,...l})})};return Np.includes(o)?_i(e,r,a):qp(i)?Ns(e,i,a):a({})}}}function qp(e){return Mp.includes(e)}function jp(e,r){return nr(te(\"fields\",()=>{let t=e._runtimeDataModel.models[r];return Ms(r,t)}))}function Ws(e){return e.replace(/^./,r=>r.toUpperCase())}var Di=Symbol();function it(e){let r=[Vp(e),te(Di,()=>e),te(\"$parent\",()=>e._appliedParent)],t=e._extensions.getAllClientExtensions();return t&&r.push(et(t)),Pe(e,r)}function Vp(e){let r=Object.keys(e._runtimeDataModel.models),t=r.map(Se),n=[...new Set(r.concat(t))];return nr({getKeys(){return n},getPropertyValue(i){let o=Ws(i);if(e._runtimeDataModel.models[o]!==void 0)return ki(e,o);if(e._runtimeDataModel.models[i]!==void 0)return ki(e,i)},getPropertyDescriptor(i){if(!t.includes(i))return{enumerable:!1}}})}function Hs(e){return e[Di]?e[Di]:e}function Ks(e){if(typeof e==\"function\")return e(this);if(e.client?.__AccelerateEngine){let t=e.client.__AccelerateEngine;this._originalClient._engine=new t(this._originalClient._accelerateEngineConfig)}let r=Object.create(this._originalClient,{_extensions:{value:this._extensions.append(e)},_appliedParent:{value:this,configurable:!0},$use:{value:void 0},$on:{value:void 0}});return it(r)}function Ys({result:e,modelName:r,select:t,omit:n,extensions:i}){let o=i.getAllComputedFields(r);if(!o)return e;let s=[],a=[];for(let l of Object.values(o)){if(n){if(n[l.name])continue;let u=l.needs.filter(c=>n[c]);u.length>0&&a.push(yr(u))}else if(t){if(!t[l.name])continue;let u=l.needs.filter(c=>!t[c]);u.length>0&&a.push(yr(u))}Bp(e,l.needs)&&s.push(Up(l,Pe(e,s)))}return s.length>0||a.length>0?Pe(e,[...s,...a]):e}function Bp(e,r){return r.every(t=>ci(e,t))}function Up(e,r){return nr(te(e.name,()=>e.compute(r)))}function pn({visitor:e,result:r,args:t,runtimeDataModel:n,modelName:i}){if(Array.isArray(r)){for(let s=0;s<r.length;s++)r[s]=pn({result:r[s],args:t,modelName:i,runtimeDataModel:n,visitor:e});return r}let o=e(r,i,t)??r;return t.include&&zs({includeOrSelect:t.include,result:o,parentModelName:i,runtimeDataModel:n,visitor:e}),t.select&&zs({includeOrSelect:t.select,result:o,parentModelName:i,runtimeDataModel:n,visitor:e}),o}function zs({includeOrSelect:e,result:r,parentModelName:t,runtimeDataModel:n,visitor:i}){for(let[o,s]of Object.entries(e)){if(!s||r[o]==null)continue;let l=n.models[t].fields.find(c=>c.name===o);if(!l||l.kind!==\"object\"||!l.relationName)continue;let u=typeof s==\"object\"?s:{};r[o]=pn({visitor:i,result:r[o],args:u,modelName:l.type,runtimeDataModel:n})}}function Zs({result:e,modelName:r,args:t,extensions:n,runtimeDataModel:i}){return n.isEmpty()||e==null||typeof e!=\"object\"||!i.models[r]?e:pn({result:e,args:t??{},modelName:r,runtimeDataModel:i,visitor:(s,a,l)=>Ys({result:s,modelName:Se(a),select:l.select,omit:l.omit,extensions:n})})}function Xs(e){if(e instanceof ie)return Qp(e);if(Array.isArray(e)){let t=[e[0]];for(let n=1;n<e.length;n++)t[n]=ot(e[n]);return t}let r={};for(let t in e)r[t]=ot(e[t]);return r}function Qp(e){return new ie(e.strings,e.values)}function ot(e){if(typeof e!=\"object\"||e==null||e instanceof Le||Tr(e))return e;if(vr(e))return new Te(e.toFixed());if(wr(e))return new Date(+e);if(ArrayBuffer.isView(e))return e.slice(0);if(Array.isArray(e)){let r=e.length,t;for(t=Array(r);r--;)t[r]=ot(e[r]);return t}if(typeof e==\"object\"){let r={};for(let t in e)t===\"__proto__\"?Object.defineProperty(r,t,{value:ot(e[t]),configurable:!0,enumerable:!0,writable:!0}):r[t]=ot(e[t]);return r}rr(e,\"Unknown value\")}function ra(e,r,t,n=0){return e._createPrismaPromise(i=>{let o=r.customDataProxyFetch;return\"transaction\"in r&&i!==void 0&&(r.transaction?.kind===\"batch\"&&r.transaction.lock.then(),r.transaction=i),n===t.length?e._executeRequest(r):t[n]({model:r.model,operation:r.model?r.action:r.clientMethod,args:Xs(r.args??{}),__internalParams:r,query:(s,a=r)=>{let l=a.customDataProxyFetch;return a.customDataProxyFetch=oa(o,l),a.args=s,ra(e,a,t,n+1)}})})}function ta(e,r){let{jsModelName:t,action:n,clientMethod:i}=r,o=t?n:i;if(e._extensions.isEmpty())return e._executeRequest(r);let s=e._extensions.getAllQueryCallbacks(t??\"$none\",o);return ra(e,r,s)}function na(e){return r=>{let t={requests:r},n=r[0].extensions.getAllBatchQueryCallbacks();return n.length?ia(t,n,0,e):e(t)}}function ia(e,r,t,n){if(t===r.length)return n(e);let i=e.customDataProxyFetch,o=e.requests[0].transaction;return r[t]({args:{queries:e.requests.map(s=>({model:s.modelName,operation:s.action,args:s.args})),transaction:o?{isolationLevel:o.kind===\"batch\"?o.isolationLevel:void 0}:void 0},__internalParams:e,query(s,a=e){let l=a.customDataProxyFetch;return a.customDataProxyFetch=oa(i,l),ia(a,r,t+1,n)}})}var ea=e=>e;function oa(e=ea,r=ea){return t=>e(r(t))}function aa(e,r,t){let n=Se(t);return!r.result||!(r.result.$allModels||r.result[n])?e:Gp({...e,...sa(r.name,e,r.result.$allModels),...sa(r.name,e,r.result[n])})}function Gp(e){let r=new xe,t=(n,i)=>r.getOrCreate(n,()=>i.has(n)?[n]:(i.add(n),e[n]?e[n].needs.flatMap(o=>t(o,i)):[n]));return gr(e,n=>({...n,needs:t(n.name,new Set)}))}function sa(e,r,t){return t?gr(t,({needs:n,compute:i},o)=>({name:o,needs:n?Object.keys(n).filter(s=>n[s]):[],compute:Jp(r,o,i)})):{}}function Jp(e,r,t){let n=e?.[r]?.compute;return n?i=>t({...i,[r]:n(i)}):t}function la(e,r){if(!r)return e;let t={...e};for(let n of Object.values(r))if(e[n.name])for(let i of n.needs)t[i]=!0;return t}function ua(e,r){if(!r)return e;let t={...e};for(let n of Object.values(r))if(!e[n.name])for(let i of n.needs)delete t[i];return t}var dn=class{constructor(r,t){this.extension=r;this.previous=t;this.computedFieldsCache=new xe;this.modelExtensionsCache=new xe;this.queryCallbacksCache=new xe;this.clientExtensions=Hr(()=>this.extension.client?{...this.previous?.getAllClientExtensions(),...this.extension.client}:this.previous?.getAllClientExtensions());this.batchCallbacks=Hr(()=>{let r=this.previous?.getAllBatchQueryCallbacks()??[],t=this.extension.query?.$__internalBatch;return t?r.concat(t):r})}getAllComputedFields(r){return this.computedFieldsCache.getOrCreate(r,()=>aa(this.previous?.getAllComputedFields(r),this.extension,r))}getAllClientExtensions(){return this.clientExtensions.get()}getAllModelExtensions(r){return this.modelExtensionsCache.getOrCreate(r,()=>{let t=Se(r);return!this.extension.model||!(this.extension.model[t]||this.extension.model.$allModels)?this.previous?.getAllModelExtensions(r):{...this.previous?.getAllModelExtensions(r),...this.extension.model.$allModels,...this.extension.model[t]}})}getAllQueryCallbacks(r,t){return this.queryCallbacksCache.getOrCreate(`${r}:${t}`,()=>{let n=this.previous?.getAllQueryCallbacks(r,t)??[],i=[],o=this.extension.query;return!o||!(o[r]||o.$allModels||o[t]||o.$allOperations)?n:(o[r]!==void 0&&(o[r][t]!==void 0&&i.push(o[r][t]),o[r].$allOperations!==void 0&&i.push(o[r].$allOperations)),r!==\"$none\"&&o.$allModels!==void 0&&(o.$allModels[t]!==void 0&&i.push(o.$allModels[t]),o.$allModels.$allOperations!==void 0&&i.push(o.$allModels.$allOperations)),o[t]!==void 0&&i.push(o[t]),o.$allOperations!==void 0&&i.push(o.$allOperations),n.concat(i))})}getAllBatchQueryCallbacks(){return this.batchCallbacks.get()}},mn=class e{constructor(r){this.head=r}static empty(){return new e}static single(r){return new e(new dn(r))}isEmpty(){return this.head===void 0}append(r){return new e(new dn(r,this.head))}getAllComputedFields(r){return this.head?.getAllComputedFields(r)}getAllClientExtensions(){return this.head?.getAllClientExtensions()}getAllModelExtensions(r){return this.head?.getAllModelExtensions(r)}getAllQueryCallbacks(r,t){return this.head?.getAllQueryCallbacks(r,t)??[]}getAllBatchQueryCallbacks(){return this.head?.getAllBatchQueryCallbacks()??[]}};var ca=L(\"prisma:client\"),pa={Vercel:\"vercel\",\"Netlify CI\":\"netlify\"};function da({postinstall:e,ciName:r,clientVersion:t}){if(ca(\"checkPlatformCaching:postinstall\",e),ca(\"checkPlatformCaching:ciName\",r),e===!0&&r&&r in pa){let n=`Prisma has detected that this project was built on ${r}, which caches dependencies. This leads to an outdated Prisma Client because Prisma's auto-generation isn't triggered. To fix this, make sure to run the \\`prisma generate\\` command during the build process.\n\nLearn how: https://pris.ly/d/${pa[r]}-build`;throw console.error(n),new R(n,t)}}function ma(e,r){return e?e.datasources?e.datasources:e.datasourceUrl?{[r[0]]:{url:e.datasourceUrl}}:{}:{}}var Wp=\"Cloudflare-Workers\",Hp=\"node\";function fa(){return typeof Netlify==\"object\"?\"netlify\":typeof EdgeRuntime==\"string\"?\"edge-light\":globalThis.navigator?.userAgent===Wp?\"workerd\":globalThis.Deno?\"deno\":globalThis.__lagon__?\"lagon\":globalThis.process?.release?.name===Hp?\"node\":globalThis.Bun?\"bun\":globalThis.fastly?\"fastly\":\"unknown\"}var Kp={node:\"Node.js\",workerd:\"Cloudflare Workers\",deno:\"Deno and Deno Deploy\",netlify:\"Netlify Edge Functions\",\"edge-light\":\"Vercel Edge Functions or Edge Middleware\"};function fn(){let e=fa();return{id:e,prettyName:Kp[e]||e,isEdge:[\"workerd\",\"deno\",\"netlify\",\"edge-light\"].includes(e)}}var ba=k(require(\"fs\")),st=k(require(\"path\"));function gn(e){let{runtimeBinaryTarget:r}=e;return`Add \"${r}\" to \\`binaryTargets\\` in the \"schema.prisma\" file and run \\`prisma generate\\` after saving it:\n\n${Yp(e)}`}function Yp(e){let{generator:r,generatorBinaryTargets:t,runtimeBinaryTarget:n}=e,i={fromEnvVar:null,value:n},o=[...t,i];return ai({...r,binaryTargets:o})}function He(e){let{runtimeBinaryTarget:r}=e;return`Prisma Client could not locate the Query Engine for runtime \"${r}\".`}function Ke(e){let{searchedLocations:r}=e;return`The following locations have been searched:\n${[...new Set(r)].map(i=>`  ${i}`).join(`\n`)}`}function ga(e){let{runtimeBinaryTarget:r}=e;return`${He(e)}\n\nThis happened because \\`binaryTargets\\` have been pinned, but the actual deployment also required \"${r}\".\n${gn(e)}\n\n${Ke(e)}`}function hn(e){return`We would appreciate if you could take the time to share some information with us.\nPlease help us by answering a few questions: https://pris.ly/${e}`}function yn(e){let{errorStack:r}=e;return r?.match(/\\/\\.next|\\/next@|\\/next\\//)?`\n\nWe detected that you are using Next.js, learn how to fix this: https://pris.ly/d/engine-not-found-nextjs.`:\"\"}function ha(e){let{queryEngineName:r}=e;return`${He(e)}${yn(e)}\n\nThis is likely caused by a bundler that has not copied \"${r}\" next to the resulting bundle.\nEnsure that \"${r}\" has been copied next to the bundle or in \"${e.expectedLocation}\".\n\n${hn(\"engine-not-found-bundler-investigation\")}\n\n${Ke(e)}`}function ya(e){let{runtimeBinaryTarget:r,generatorBinaryTargets:t}=e,n=t.find(i=>i.native);return`${He(e)}\n\nThis happened because Prisma Client was generated for \"${n?.value??\"unknown\"}\", but the actual deployment required \"${r}\".\n${gn(e)}\n\n${Ke(e)}`}function Ea(e){let{queryEngineName:r}=e;return`${He(e)}${yn(e)}\n\nThis is likely caused by tooling that has not copied \"${r}\" to the deployment folder.\nEnsure that you ran \\`prisma generate\\` and that \"${r}\" has been copied to \"${e.expectedLocation}\".\n\n${hn(\"engine-not-found-tooling-investigation\")}\n\n${Ke(e)}`}var zp=L(\"prisma:client:engines:resolveEnginePath\"),Zp=()=>new RegExp(\"runtime[\\\\\\\\/]library\\\\.m?js$\");async function wa(e,r){let t={binary:process.env.PRISMA_QUERY_ENGINE_BINARY,library:process.env.PRISMA_QUERY_ENGINE_LIBRARY}[e]??r.prismaPath;if(t!==void 0)return t;let{enginePath:n,searchedLocations:i}=await Xp(e,r);if(zp(\"enginePath\",n),n!==void 0&&e===\"binary\"&&Xn(n),n!==void 0)return r.prismaPath=n;let o=await er(),s=r.generator?.binaryTargets??[],a=s.some(d=>d.native),l=!s.some(d=>d.value===o),u=__filename.match(Zp())===null,c={searchedLocations:i,generatorBinaryTargets:s,generator:r.generator,runtimeBinaryTarget:o,queryEngineName:xa(e,o),expectedLocation:st.default.relative(process.cwd(),r.dirname),errorStack:new Error().stack},p;throw a&&l?p=ya(c):l?p=ga(c):u?p=ha(c):p=Ea(c),new R(p,r.clientVersion)}async function Xp(engineType,config){let binaryTarget=await er(),searchedLocations=[],dirname=eval(\"__dirname\"),searchLocations=[config.dirname,st.default.resolve(dirname,\"..\"),config.generator?.output?.value??dirname,st.default.resolve(dirname,\"../../../.prisma/client\"),\"/tmp/prisma-engines\",config.cwd];__filename.includes(\"resolveEnginePath\")&&searchLocations.push(qo());for(let e of searchLocations){let r=xa(engineType,binaryTarget),t=st.default.join(e,r);if(searchedLocations.push(e),ba.default.existsSync(t))return{enginePath:t,searchedLocations}}return{enginePath:void 0,searchedLocations}}function xa(e,r){return e===\"library\"?At(r,\"fs\"):`query-engine-${r}${r===\"windows\"?\".exe\":\"\"}`}var Oi=k(ui());function Pa(e){return e?e.replace(/\".*\"/g,'\"X\"').replace(/[\\s:\\[]([+-]?([0-9]*[.])?[0-9]+)/g,r=>`${r[0]}5`):\"\"}function va(e){return e.split(`\n`).map(r=>r.replace(/^\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z)\\s*/,\"\").replace(/\\+\\d+\\s*ms$/,\"\")).join(`\n`)}var Ta=k(is());function Ca({title:e,user:r=\"prisma\",repo:t=\"prisma\",template:n=\"bug_report.yml\",body:i}){return(0,Ta.default)({user:r,repo:t,template:n,title:e,body:i})}function Sa({version:e,binaryTarget:r,title:t,description:n,engineVersion:i,database:o,query:s}){let a=go(6e3-(s?.length??0)),l=va((0,Oi.default)(a)),u=n?`# Description\n\\`\\`\\`\n${n}\n\\`\\`\\``:\"\",c=(0,Oi.default)(`Hi Prisma Team! My Prisma Client just crashed. This is the report:\n## Versions\n\n| Name            | Version            |\n|-----------------|--------------------|\n| Node            | ${process.version?.padEnd(19)}| \n| OS              | ${r?.padEnd(19)}|\n| Prisma Client   | ${e?.padEnd(19)}|\n| Query Engine    | ${i?.padEnd(19)}|\n| Database        | ${o?.padEnd(19)}|\n\n${u}\n\n## Logs\n\\`\\`\\`\n${l}\n\\`\\`\\`\n\n## Client Snippet\n\\`\\`\\`ts\n// PLEASE FILL YOUR CODE SNIPPET HERE\n\\`\\`\\`\n\n## Schema\n\\`\\`\\`prisma\n// PLEASE ADD YOUR SCHEMA HERE IF POSSIBLE\n\\`\\`\\`\n\n## Prisma Engine Query\n\\`\\`\\`\n${s?Pa(s):\"\"}\n\\`\\`\\`\n`),p=Ca({title:t,body:c});return`${t}\n\nThis is a non-recoverable error which probably happens when the Prisma Query Engine has a panic.\n\n${X(p)}\n\nIf you want the Prisma team to look into it, please open the link above \\u{1F64F}\nTo increase the chance of success, please post your schema and a snippet of\nhow you used Prisma Client in the issue. \n`}function Ir({inlineDatasources:e,overrideDatasources:r,env:t,clientVersion:n}){let i,o=Object.keys(e)[0],s=e[o]?.url,a=r[o]?.url;if(o===void 0?i=void 0:a?i=a:s?.value?i=s.value:s?.fromEnvVar&&(i=t[s.fromEnvVar]),s?.fromEnvVar!==void 0&&i===void 0)throw new R(`error: Environment variable not found: ${s.fromEnvVar}.`,n);if(i===void 0)throw new R(\"error: Missing URL environment variable, value, or override.\",n);return i}var En=class extends Error{constructor(r,t){super(r),this.clientVersion=t.clientVersion,this.cause=t.cause}get[Symbol.toStringTag](){return this.name}};var se=class extends En{constructor(r,t){super(r,t),this.isRetryable=t.isRetryable??!0}};function A(e,r){return{...e,isRetryable:r}}var _r=class extends se{constructor(t){super(\"This request must be retried\",A(t,!0));this.name=\"ForcedRetryError\";this.code=\"P5001\"}};w(_r,\"ForcedRetryError\");var sr=class extends se{constructor(t,n){super(t,A(n,!1));this.name=\"InvalidDatasourceError\";this.code=\"P6001\"}};w(sr,\"InvalidDatasourceError\");var ar=class extends se{constructor(t,n){super(t,A(n,!1));this.name=\"NotImplementedYetError\";this.code=\"P5004\"}};w(ar,\"NotImplementedYetError\");var $=class extends se{constructor(r,t){super(r,t),this.response=t.response;let n=this.response.headers.get(\"prisma-request-id\");if(n){let i=`(The request id was: ${n})`;this.message=this.message+\" \"+i}}};var lr=class extends ${constructor(t){super(\"Schema needs to be uploaded\",A(t,!0));this.name=\"SchemaMissingError\";this.code=\"P5005\"}};w(lr,\"SchemaMissingError\");var Li=\"This request could not be understood by the server\",at=class extends ${constructor(t,n,i){super(n||Li,A(t,!1));this.name=\"BadRequestError\";this.code=\"P5000\";i&&(this.code=i)}};w(at,\"BadRequestError\");var lt=class extends ${constructor(t,n){super(\"Engine not started: healthcheck timeout\",A(t,!0));this.name=\"HealthcheckTimeoutError\";this.code=\"P5013\";this.logs=n}};w(lt,\"HealthcheckTimeoutError\");var ut=class extends ${constructor(t,n,i){super(n,A(t,!0));this.name=\"EngineStartupError\";this.code=\"P5014\";this.logs=i}};w(ut,\"EngineStartupError\");var ct=class extends ${constructor(t){super(\"Engine version is not supported\",A(t,!1));this.name=\"EngineVersionNotSupportedError\";this.code=\"P5012\"}};w(ct,\"EngineVersionNotSupportedError\");var Fi=\"Request timed out\",pt=class extends ${constructor(t,n=Fi){super(n,A(t,!1));this.name=\"GatewayTimeoutError\";this.code=\"P5009\"}};w(pt,\"GatewayTimeoutError\");var ed=\"Interactive transaction error\",dt=class extends ${constructor(t,n=ed){super(n,A(t,!1));this.name=\"InteractiveTransactionError\";this.code=\"P5015\"}};w(dt,\"InteractiveTransactionError\");var rd=\"Request parameters are invalid\",mt=class extends ${constructor(t,n=rd){super(n,A(t,!1));this.name=\"InvalidRequestError\";this.code=\"P5011\"}};w(mt,\"InvalidRequestError\");var Ni=\"Requested resource does not exist\",ft=class extends ${constructor(t,n=Ni){super(n,A(t,!1));this.name=\"NotFoundError\";this.code=\"P5003\"}};w(ft,\"NotFoundError\");var Mi=\"Unknown server error\",kr=class extends ${constructor(t,n,i){super(n||Mi,A(t,!0));this.name=\"ServerError\";this.code=\"P5006\";this.logs=i}};w(kr,\"ServerError\");var $i=\"Unauthorized, check your connection string\",gt=class extends ${constructor(t,n=$i){super(n,A(t,!1));this.name=\"UnauthorizedError\";this.code=\"P5007\"}};w(gt,\"UnauthorizedError\");var qi=\"Usage exceeded, retry again later\",ht=class extends ${constructor(t,n=qi){super(n,A(t,!0));this.name=\"UsageExceededError\";this.code=\"P5008\"}};w(ht,\"UsageExceededError\");async function td(e){let r;try{r=await e.text()}catch{return{type:\"EmptyError\"}}try{let t=JSON.parse(r);if(typeof t==\"string\")switch(t){case\"InternalDataProxyError\":return{type:\"DataProxyError\",body:t};default:return{type:\"UnknownTextError\",body:t}}if(typeof t==\"object\"&&t!==null){if(\"is_panic\"in t&&\"message\"in t&&\"error_code\"in t)return{type:\"QueryEngineError\",body:t};if(\"EngineNotStarted\"in t||\"InteractiveTransactionMisrouted\"in t||\"InvalidRequestError\"in t){let n=Object.values(t)[0].reason;return typeof n==\"string\"&&![\"SchemaMissing\",\"EngineVersionNotSupported\"].includes(n)?{type:\"UnknownJsonError\",body:t}:{type:\"DataProxyError\",body:t}}}return{type:\"UnknownJsonError\",body:t}}catch{return r===\"\"?{type:\"EmptyError\"}:{type:\"UnknownTextError\",body:r}}}async function yt(e,r){if(e.ok)return;let t={clientVersion:r,response:e},n=await td(e);if(n.type===\"QueryEngineError\")throw new V(n.body.message,{code:n.body.error_code,clientVersion:r});if(n.type===\"DataProxyError\"){if(n.body===\"InternalDataProxyError\")throw new kr(t,\"Internal Data Proxy error\");if(\"EngineNotStarted\"in n.body){if(n.body.EngineNotStarted.reason===\"SchemaMissing\")return new lr(t);if(n.body.EngineNotStarted.reason===\"EngineVersionNotSupported\")throw new ct(t);if(\"EngineStartupError\"in n.body.EngineNotStarted.reason){let{msg:i,logs:o}=n.body.EngineNotStarted.reason.EngineStartupError;throw new ut(t,i,o)}if(\"KnownEngineStartupError\"in n.body.EngineNotStarted.reason){let{msg:i,error_code:o}=n.body.EngineNotStarted.reason.KnownEngineStartupError;throw new R(i,r,o)}if(\"HealthcheckTimeout\"in n.body.EngineNotStarted.reason){let{logs:i}=n.body.EngineNotStarted.reason.HealthcheckTimeout;throw new lt(t,i)}}if(\"InteractiveTransactionMisrouted\"in n.body){let i={IDParseError:\"Could not parse interactive transaction ID\",NoQueryEngineFoundError:\"Could not find Query Engine for the specified host and transaction ID\",TransactionStartError:\"Could not start interactive transaction\"};throw new dt(t,i[n.body.InteractiveTransactionMisrouted.reason])}if(\"InvalidRequestError\"in n.body)throw new mt(t,n.body.InvalidRequestError.reason)}if(e.status===401||e.status===403)throw new gt(t,Dr($i,n));if(e.status===404)return new ft(t,Dr(Ni,n));if(e.status===429)throw new ht(t,Dr(qi,n));if(e.status===504)throw new pt(t,Dr(Fi,n));if(e.status>=500)throw new kr(t,Dr(Mi,n));if(e.status>=400)throw new at(t,Dr(Li,n))}function Dr(e,r){return r.type===\"EmptyError\"?e:`${e}: ${JSON.stringify(r)}`}function Ra(e){let r=Math.pow(2,e)*50,t=Math.ceil(Math.random()*r)-Math.ceil(r/2),n=r+t;return new Promise(i=>setTimeout(()=>i(n),n))}var Ne=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";function Aa(e){let r=new TextEncoder().encode(e),t=\"\",n=r.byteLength,i=n%3,o=n-i,s,a,l,u,c;for(let p=0;p<o;p=p+3)c=r[p]<<16|r[p+1]<<8|r[p+2],s=(c&16515072)>>18,a=(c&258048)>>12,l=(c&4032)>>6,u=c&63,t+=Ne[s]+Ne[a]+Ne[l]+Ne[u];return i==1?(c=r[o],s=(c&252)>>2,a=(c&3)<<4,t+=Ne[s]+Ne[a]+\"==\"):i==2&&(c=r[o]<<8|r[o+1],s=(c&64512)>>10,a=(c&1008)>>4,l=(c&15)<<2,t+=Ne[s]+Ne[a]+Ne[l]+\"=\"),t}function Ia(e){if(!!e.generator?.previewFeatures.some(t=>t.toLowerCase().includes(\"metrics\")))throw new R(\"The `metrics` preview feature is not yet available with Accelerate.\\nPlease remove `metrics` from the `previewFeatures` in your schema.\\n\\nMore information about Accelerate: https://pris.ly/d/accelerate\",e.clientVersion)}function nd(e){return e[0]*1e3+e[1]/1e6}function _a(e){return new Date(nd(e))}var ka={\"@prisma/debug\":\"workspace:*\",\"@prisma/engines-version\":\"5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\",\"@prisma/fetch-engine\":\"workspace:*\",\"@prisma/get-platform\":\"workspace:*\"};var Et=class extends se{constructor(t,n){super(`Cannot fetch data from service:\n${t}`,A(n,!0));this.name=\"RequestError\";this.code=\"P5010\"}};w(Et,\"RequestError\");async function ur(e,r,t=n=>n){let n=r.clientVersion;try{return typeof fetch==\"function\"?await t(fetch)(e,r):await t(ji)(e,r)}catch(i){let o=i.message??\"Unknown error\";throw new Et(o,{clientVersion:n})}}function od(e){return{...e.headers,\"Content-Type\":\"application/json\"}}function sd(e){return{method:e.method,headers:od(e)}}function ad(e,r){return{text:()=>Promise.resolve(Buffer.concat(e).toString()),json:()=>Promise.resolve().then(()=>JSON.parse(Buffer.concat(e).toString())),ok:r.statusCode>=200&&r.statusCode<=299,status:r.statusCode,url:r.url,headers:new Vi(r.headers)}}async function ji(e,r={}){let t=ld(\"https\"),n=sd(r),i=[],{origin:o}=new URL(e);return new Promise((s,a)=>{let l=t.request(e,n,u=>{let{statusCode:c,headers:{location:p}}=u;c>=301&&c<=399&&p&&(p.startsWith(\"http\")===!1?s(ji(`${o}${p}`,r)):s(ji(p,r))),u.on(\"data\",d=>i.push(d)),u.on(\"end\",()=>s(ad(i,u))),u.on(\"error\",a)});l.on(\"error\",a),l.end(r.body??\"\")})}var ld=typeof require<\"u\"?require:()=>{},Vi=class{constructor(r={}){this.headers=new Map;for(let[t,n]of Object.entries(r))if(typeof n==\"string\")this.headers.set(t,n);else if(Array.isArray(n))for(let i of n)this.headers.set(t,i)}append(r,t){this.headers.set(r,t)}delete(r){this.headers.delete(r)}get(r){return this.headers.get(r)??null}has(r){return this.headers.has(r)}set(r,t){this.headers.set(r,t)}forEach(r,t){for(let[n,i]of this.headers)r.call(t,i,n,this)}};var ud=/^[1-9][0-9]*\\.[0-9]+\\.[0-9]+$/,Da=L(\"prisma:client:dataproxyEngine\");async function cd(e,r){let t=ka[\"@prisma/engines-version\"],n=r.clientVersion??\"unknown\";if(process.env.PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION)return process.env.PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION;if(e.includes(\"accelerate\")&&n!==\"0.0.0\"&&n!==\"in-memory\")return n;let[i,o]=n?.split(\"-\")??[];if(o===void 0&&ud.test(i))return i;if(o!==void 0||n===\"0.0.0\"||n===\"in-memory\"){if(e.startsWith(\"localhost\")||e.startsWith(\"127.0.0.1\"))return\"0.0.0\";let[s]=t.split(\"-\")??[],[a,l,u]=s.split(\".\"),c=pd(`<=${a}.${l}.${u}`),p=await ur(c,{clientVersion:n});if(!p.ok)throw new Error(`Failed to fetch stable Prisma version, unpkg.com status ${p.status} ${p.statusText}, response body: ${await p.text()||\"<empty body>\"}`);let d=await p.text();Da(\"length of body fetched from unpkg.com\",d.length);let f;try{f=JSON.parse(d)}catch(g){throw console.error(\"JSON.parse error: body fetched from unpkg.com: \",d),g}return f.version}throw new ar(\"Only `major.minor.patch` versions are supported by Accelerate.\",{clientVersion:n})}async function Oa(e,r){let t=await cd(e,r);return Da(\"version\",t),t}function pd(e){return encodeURI(`https://unpkg.com/prisma@${e}/package.json`)}var La=3,Bi=L(\"prisma:client:dataproxyEngine\"),Ui=class{constructor({apiKey:r,tracingHelper:t,logLevel:n,logQueries:i,engineHash:o}){this.apiKey=r,this.tracingHelper=t,this.logLevel=n,this.logQueries=i,this.engineHash=o}build({traceparent:r,interactiveTransaction:t}={}){let n={Authorization:`Bearer ${this.apiKey}`,\"Prisma-Engine-Hash\":this.engineHash};this.tracingHelper.isEnabled()&&(n.traceparent=r??this.tracingHelper.getTraceParent()),t&&(n[\"X-transaction-id\"]=t.id);let i=this.buildCaptureSettings();return i.length>0&&(n[\"X-capture-telemetry\"]=i.join(\", \")),n}buildCaptureSettings(){let r=[];return this.tracingHelper.isEnabled()&&r.push(\"tracing\"),this.logLevel&&r.push(this.logLevel),this.logQueries&&r.push(\"query\"),r}},bt=class{constructor(r){this.name=\"DataProxyEngine\";Ia(r),this.config=r,this.env={...r.env,...typeof process<\"u\"?process.env:{}},this.inlineSchema=Aa(r.inlineSchema),this.inlineDatasources=r.inlineDatasources,this.inlineSchemaHash=r.inlineSchemaHash,this.clientVersion=r.clientVersion,this.engineHash=r.engineVersion,this.logEmitter=r.logEmitter,this.tracingHelper=r.tracingHelper}apiKey(){return this.headerBuilder.apiKey}version(){return this.engineHash}async start(){this.startPromise!==void 0&&await this.startPromise,this.startPromise=(async()=>{let[r,t]=this.extractHostAndApiKey();this.host=r,this.headerBuilder=new Ui({apiKey:t,tracingHelper:this.tracingHelper,logLevel:this.config.logLevel,logQueries:this.config.logQueries,engineHash:this.engineHash}),this.remoteClientVersion=await Oa(r,this.config),Bi(\"host\",this.host)})(),await this.startPromise}async stop(){}propagateResponseExtensions(r){r?.logs?.length&&r.logs.forEach(t=>{switch(t.level){case\"debug\":case\"error\":case\"trace\":case\"warn\":case\"info\":break;case\"query\":{let n=typeof t.attributes.query==\"string\"?t.attributes.query:\"\";if(!this.tracingHelper.isEnabled()){let[i]=n.split(\"/* traceparent\");n=i}this.logEmitter.emit(\"query\",{query:n,timestamp:_a(t.timestamp),duration:Number(t.attributes.duration_ms),params:t.attributes.params,target:t.attributes.target})}}}),r?.traces?.length&&this.tracingHelper.createEngineSpan({span:!0,spans:r.traces})}onBeforeExit(){throw new Error('\"beforeExit\" hook is not applicable to the remote query engine')}async url(r){return await this.start(),`https://${this.host}/${this.remoteClientVersion}/${this.inlineSchemaHash}/${r}`}async uploadSchema(){let r={name:\"schemaUpload\",internal:!0};return this.tracingHelper.runInChildSpan(r,async()=>{let t=await ur(await this.url(\"schema\"),{method:\"PUT\",headers:this.headerBuilder.build(),body:this.inlineSchema,clientVersion:this.clientVersion});t.ok||Bi(\"schema response status\",t.status);let n=await yt(t,this.clientVersion);if(n)throw this.logEmitter.emit(\"warn\",{message:`Error while uploading schema: ${n.message}`,timestamp:new Date,target:\"\"}),n;this.logEmitter.emit(\"info\",{message:`Schema (re)uploaded (hash: ${this.inlineSchemaHash})`,timestamp:new Date,target:\"\"})})}request(r,{traceparent:t,interactiveTransaction:n,customDataProxyFetch:i}){return this.requestInternal({body:r,traceparent:t,interactiveTransaction:n,customDataProxyFetch:i})}async requestBatch(r,{traceparent:t,transaction:n,customDataProxyFetch:i}){let o=n?.kind===\"itx\"?n.options:void 0,s=Er(r,n),{batchResult:a,elapsed:l}=await this.requestInternal({body:s,customDataProxyFetch:i,interactiveTransaction:o,traceparent:t});return a.map(u=>\"errors\"in u&&u.errors.length>0?or(u.errors[0],this.clientVersion,this.config.activeProvider):{data:u,elapsed:l})}requestInternal({body:r,traceparent:t,customDataProxyFetch:n,interactiveTransaction:i}){return this.withRetry({actionGerund:\"querying\",callback:async({logHttpCall:o})=>{let s=i?`${i.payload.endpoint}/graphql`:await this.url(\"graphql\");o(s);let a=await ur(s,{method:\"POST\",headers:this.headerBuilder.build({traceparent:t,interactiveTransaction:i}),body:JSON.stringify(r),clientVersion:this.clientVersion},n);a.ok||Bi(\"graphql response status\",a.status),await this.handleError(await yt(a,this.clientVersion));let l=await a.json(),u=l.extensions;if(u&&this.propagateResponseExtensions(u),l.errors)throw l.errors.length===1?or(l.errors[0],this.config.clientVersion,this.config.activeProvider):new B(l.errors,{clientVersion:this.config.clientVersion});return l}})}async transaction(r,t,n){let i={start:\"starting\",commit:\"committing\",rollback:\"rolling back\"};return this.withRetry({actionGerund:`${i[r]} transaction`,callback:async({logHttpCall:o})=>{if(r===\"start\"){let s=JSON.stringify({max_wait:n.maxWait,timeout:n.timeout,isolation_level:n.isolationLevel}),a=await this.url(\"transaction/start\");o(a);let l=await ur(a,{method:\"POST\",headers:this.headerBuilder.build({traceparent:t.traceparent}),body:s,clientVersion:this.clientVersion});await this.handleError(await yt(l,this.clientVersion));let u=await l.json(),c=u.extensions;c&&this.propagateResponseExtensions(c);let p=u.id,d=u[\"data-proxy\"].endpoint;return{id:p,payload:{endpoint:d}}}else{let s=`${n.payload.endpoint}/${r}`;o(s);let a=await ur(s,{method:\"POST\",headers:this.headerBuilder.build({traceparent:t.traceparent}),clientVersion:this.clientVersion});await this.handleError(await yt(a,this.clientVersion));let u=(await a.json()).extensions;u&&this.propagateResponseExtensions(u);return}}})}extractHostAndApiKey(){let r={clientVersion:this.clientVersion},t=Object.keys(this.inlineDatasources)[0],n=Ir({inlineDatasources:this.inlineDatasources,overrideDatasources:this.config.overrideDatasources,clientVersion:this.clientVersion,env:this.env}),i;try{i=new URL(n)}catch{throw new sr(`Error validating datasource \\`${t}\\`: the URL must start with the protocol \\`prisma://\\``,r)}let{protocol:o,host:s,searchParams:a}=i;if(o!==\"prisma:\")throw new sr(`Error validating datasource \\`${t}\\`: the URL must start with the protocol \\`prisma://\\``,r);let l=a.get(\"api_key\");if(l===null||l.length<1)throw new sr(`Error validating datasource \\`${t}\\`: the URL must contain a valid API key`,r);return[s,l]}metrics(){throw new ar(\"Metrics are not yet supported for Accelerate\",{clientVersion:this.clientVersion})}async withRetry(r){for(let t=0;;t++){let n=i=>{this.logEmitter.emit(\"info\",{message:`Calling ${i} (n=${t})`,timestamp:new Date,target:\"\"})};try{return await r.callback({logHttpCall:n})}catch(i){if(!(i instanceof se)||!i.isRetryable)throw i;if(t>=La)throw i instanceof _r?i.cause:i;this.logEmitter.emit(\"warn\",{message:`Attempt ${t+1}/${La} failed for ${r.actionGerund}: ${i.message??\"(unknown)\"}`,timestamp:new Date,target:\"\"});let o=await Ra(t);this.logEmitter.emit(\"warn\",{message:`Retrying after ${o}ms`,timestamp:new Date,target:\"\"})}}}async handleError(r){if(r instanceof lr)throw await this.uploadSchema(),new _r({clientVersion:this.clientVersion,cause:r});if(r)throw r}applyPendingMigrations(){throw new Error(\"Method not implemented.\")}};function Fa(e){if(e?.kind===\"itx\")return e.options.id}var Gi=k(require(\"os\")),Na=k(require(\"path\"));var Qi=Symbol(\"PrismaLibraryEngineCache\");function dd(){let e=globalThis;return e[Qi]===void 0&&(e[Qi]={}),e[Qi]}function md(e){let r=dd();if(r[e]!==void 0)return r[e];let t=Na.default.toNamespacedPath(e),n={exports:{}},i=0;return process.platform!==\"win32\"&&(i=Gi.default.constants.dlopen.RTLD_LAZY|Gi.default.constants.dlopen.RTLD_DEEPBIND),process.dlopen(n,t,i),r[e]=n.exports,n.exports}var Ma={async loadLibrary(e){let r=await Bn(),t=await wa(\"library\",e);try{return e.tracingHelper.runInChildSpan({name:\"loadLibrary\",internal:!0},()=>md(t))}catch(n){let i=ei({e:n,platformInfo:r,id:t});throw new R(i,e.clientVersion)}}};var Ji,$a={async loadLibrary(e){let{clientVersion:r,adapter:t,engineWasm:n}=e;if(t===void 0)throw new R(`The \\`adapter\\` option for \\`PrismaClient\\` is required in this context (${fn().prettyName})`,r);if(n===void 0)throw new R(\"WASM engine was unexpectedly `undefined`\",r);Ji===void 0&&(Ji=(async()=>{let o=n.getRuntime(),s=await n.getQueryEngineWasmModule();if(s==null)throw new R(\"The loaded wasm module was unexpectedly `undefined` or `null` once loaded\",r);let a={\"./query_engine_bg.js\":o},l=new WebAssembly.Instance(s,a);return o.__wbg_set_wasm(l.exports),o.QueryEngine})());let i=await Ji;return{debugPanic(){return Promise.reject(\"{}\")},dmmf(){return Promise.resolve(\"{}\")},version(){return{commit:\"unknown\",version:\"unknown\"}},QueryEngine:i}}};var fd=\"P2036\",Re=L(\"prisma:client:libraryEngine\");function gd(e){return e.item_type===\"query\"&&\"query\"in e}function hd(e){return\"level\"in e?e.level===\"error\"&&e.message===\"PANIC\":!1}var qa=[...Mn,\"native\"],ja=0,wt=class{constructor(r,t){this.name=\"LibraryEngine\";this.libraryLoader=t??Ma,r.engineWasm!==void 0&&(this.libraryLoader=t??$a),this.config=r,this.libraryStarted=!1,this.logQueries=r.logQueries??!1,this.logLevel=r.logLevel??\"error\",this.logEmitter=r.logEmitter,this.datamodel=r.inlineSchema,r.enableDebugLogs&&(this.logLevel=\"debug\");let n=Object.keys(r.overrideDatasources)[0],i=r.overrideDatasources[n]?.url;n!==void 0&&i!==void 0&&(this.datasourceOverrides={[n]:i}),this.libraryInstantiationPromise=this.instantiateLibrary(),this.checkForTooManyEngines()}checkForTooManyEngines(){this.config.adapter&&[\"wasm\"].includes(\"library\")||ja===10&&console.warn(`${fe(\"warn(prisma-client)\")} This is the 10th instance of Prisma Client being started. Make sure this is intentional.`)}async applyPendingMigrations(){throw new Error(\"Cannot call this method from this type of engine instance\")}async transaction(r,t,n){await this.start();let i=JSON.stringify(t),o;if(r===\"start\"){let a=JSON.stringify({max_wait:n.maxWait,timeout:n.timeout,isolation_level:n.isolationLevel});o=await this.engine?.startTransaction(a,i)}else r===\"commit\"?o=await this.engine?.commitTransaction(n.id,i):r===\"rollback\"&&(o=await this.engine?.rollbackTransaction(n.id,i));let s=this.parseEngineResponse(o);if(yd(s)){let a=this.getExternalAdapterError(s);throw a?a.error:new V(s.message,{code:s.error_code,clientVersion:this.config.clientVersion,meta:s.meta})}return s}async instantiateLibrary(){if(Re(\"internalSetup\"),this.libraryInstantiationPromise)return this.libraryInstantiationPromise;Nn(),this.binaryTarget=await this.getCurrentBinaryTarget(),await this.loadEngine(),this.version()}async getCurrentBinaryTarget(){{if(this.binaryTarget)return this.binaryTarget;let r=await er();if(!qa.includes(r))throw new R(`Unknown ${ue(\"PRISMA_QUERY_ENGINE_LIBRARY\")} ${ue(W(r))}. Possible binaryTargets: ${Me(qa.join(\", \"))} or a path to the query engine library.\nYou may have to run ${Me(\"prisma generate\")} for your changes to take effect.`,this.config.clientVersion);return r}}parseEngineResponse(r){if(!r)throw new B(\"Response from the Engine was empty\",{clientVersion:this.config.clientVersion});try{return JSON.parse(r)}catch{throw new B(\"Unable to JSON.parse response from engine\",{clientVersion:this.config.clientVersion})}}async loadEngine(){if(!this.engine){this.QueryEngineConstructor||(this.library=await this.libraryLoader.loadLibrary(this.config),this.QueryEngineConstructor=this.library.QueryEngine);try{let r=new WeakRef(this),{adapter:t}=this.config;t&&Re(\"Using driver adapter: %O\",t),this.engine=new this.QueryEngineConstructor({datamodel:this.datamodel,env:process.env,logQueries:this.config.logQueries??!1,ignoreEnvVarErrors:!0,datasourceOverrides:this.datasourceOverrides??{},logLevel:this.logLevel,configDir:this.config.cwd,engineProtocol:\"json\"},n=>{r.deref()?.logger(n)},t),ja++}catch(r){let t=r,n=this.parseInitError(t.message);throw typeof n==\"string\"?t:new R(n.message,this.config.clientVersion,n.error_code)}}}logger(r){let t=this.parseEngineResponse(r);if(t){if(\"span\"in t){this.config.tracingHelper.createEngineSpan(t);return}t.level=t?.level.toLowerCase()??\"unknown\",gd(t)?this.logEmitter.emit(\"query\",{timestamp:new Date,query:t.query,params:t.params,duration:Number(t.duration_ms),target:t.module_path}):hd(t)?this.loggerRustPanic=new le(Wi(this,`${t.message}: ${t.reason} in ${t.file}:${t.line}:${t.column}`),this.config.clientVersion):this.logEmitter.emit(t.level,{timestamp:new Date,message:t.message,target:t.module_path})}}parseInitError(r){try{return JSON.parse(r)}catch{}return r}parseRequestError(r){try{return JSON.parse(r)}catch{}return r}onBeforeExit(){throw new Error('\"beforeExit\" hook is not applicable to the library engine since Prisma 5.0.0, it is only relevant and implemented for the binary engine. Please add your event listener to the `process` object directly instead.')}async start(){if(await this.libraryInstantiationPromise,await this.libraryStoppingPromise,this.libraryStartingPromise)return Re(`library already starting, this.libraryStarted: ${this.libraryStarted}`),this.libraryStartingPromise;if(this.libraryStarted)return;let r=async()=>{Re(\"library starting\");try{let t={traceparent:this.config.tracingHelper.getTraceParent()};await this.engine?.connect(JSON.stringify(t)),this.libraryStarted=!0,Re(\"library started\")}catch(t){let n=this.parseInitError(t.message);throw typeof n==\"string\"?t:new R(n.message,this.config.clientVersion,n.error_code)}finally{this.libraryStartingPromise=void 0}};return this.libraryStartingPromise=this.config.tracingHelper.runInChildSpan(\"connect\",r),this.libraryStartingPromise}async stop(){if(await this.libraryStartingPromise,await this.executingQueryPromise,this.libraryStoppingPromise)return Re(\"library is already stopping\"),this.libraryStoppingPromise;if(!this.libraryStarted)return;let r=async()=>{await new Promise(n=>setTimeout(n,5)),Re(\"library stopping\");let t={traceparent:this.config.tracingHelper.getTraceParent()};await this.engine?.disconnect(JSON.stringify(t)),this.libraryStarted=!1,this.libraryStoppingPromise=void 0,Re(\"library stopped\")};return this.libraryStoppingPromise=this.config.tracingHelper.runInChildSpan(\"disconnect\",r),this.libraryStoppingPromise}version(){return this.versionInfo=this.library?.version(),this.versionInfo?.version??\"unknown\"}debugPanic(r){return this.library?.debugPanic(r)}async request(r,{traceparent:t,interactiveTransaction:n}){Re(`sending request, this.libraryStarted: ${this.libraryStarted}`);let i=JSON.stringify({traceparent:t}),o=JSON.stringify(r);try{await this.start(),this.executingQueryPromise=this.engine?.query(o,i,n?.id),this.lastQuery=o;let s=this.parseEngineResponse(await this.executingQueryPromise);if(s.errors)throw s.errors.length===1?this.buildQueryError(s.errors[0]):new B(JSON.stringify(s.errors),{clientVersion:this.config.clientVersion});if(this.loggerRustPanic)throw this.loggerRustPanic;return{data:s,elapsed:0}}catch(s){if(s instanceof R)throw s;if(s.code===\"GenericFailure\"&&s.message?.startsWith(\"PANIC:\"))throw new le(Wi(this,s.message),this.config.clientVersion);let a=this.parseRequestError(s.message);throw typeof a==\"string\"?s:new B(`${a.message}\n${a.backtrace}`,{clientVersion:this.config.clientVersion})}}async requestBatch(r,{transaction:t,traceparent:n}){Re(\"requestBatch\");let i=Er(r,t);await this.start(),this.lastQuery=JSON.stringify(i),this.executingQueryPromise=this.engine.query(this.lastQuery,JSON.stringify({traceparent:n}),Fa(t));let o=await this.executingQueryPromise,s=this.parseEngineResponse(o);if(s.errors)throw s.errors.length===1?this.buildQueryError(s.errors[0]):new B(JSON.stringify(s.errors),{clientVersion:this.config.clientVersion});let{batchResult:a,errors:l}=s;if(Array.isArray(a))return a.map(u=>u.errors&&u.errors.length>0?this.loggerRustPanic??this.buildQueryError(u.errors[0]):{data:u,elapsed:0});throw l&&l.length===1?new Error(l[0].error):new Error(JSON.stringify(s))}buildQueryError(r){if(r.user_facing_error.is_panic)return new le(Wi(this,r.user_facing_error.message),this.config.clientVersion);let t=this.getExternalAdapterError(r.user_facing_error);return t?t.error:or(r,this.config.clientVersion,this.config.activeProvider)}getExternalAdapterError(r){if(r.error_code===fd&&this.config.adapter){let t=r.meta?.id;jt(typeof t==\"number\",\"Malformed external JS error received from the engine\");let n=this.config.adapter.errorRegistry.consumeError(t);return jt(n,\"External error with reported id was not registered\"),n}}async metrics(r){await this.start();let t=await this.engine.metrics(JSON.stringify(r));return r.format===\"prometheus\"?t:this.parseEngineResponse(t)}};function yd(e){return typeof e==\"object\"&&e!==null&&e.error_code!==void 0}function Wi(e,r){return Sa({binaryTarget:e.binaryTarget,title:r,version:e.config.clientVersion,engineVersion:e.versionInfo?.commit,database:e.config.activeProvider,query:e.lastQuery})}function Va({copyEngine:e=!0},r){let t;try{t=Ir({inlineDatasources:r.inlineDatasources,overrideDatasources:r.overrideDatasources,env:{...r.env,...process.env},clientVersion:r.clientVersion})}catch{}e&&t?.startsWith(\"prisma://\")&&Wr(\"recommend--no-engine\",\"In production, we recommend using `prisma generate --no-engine` (See: `prisma generate --help`)\");let n=Ur(r.generator),i=!!(t?.startsWith(\"prisma://\")||!e),o=!!r.adapter,s=n===\"library\",a=n===\"binary\";if(i&&o||o&&!1){let l;throw e?t?.startsWith(\"prisma://\")?l=[\"Prisma Client was configured to use the `adapter` option but the URL was a `prisma://` URL.\",\"Please either use the `prisma://` URL or remove the `adapter` from the Prisma Client constructor.\"]:l=[\"Prisma Client was configured to use both the `adapter` and Accelerate, please chose one.\"]:l=[\"Prisma Client was configured to use the `adapter` option but `prisma generate` was run with `--no-engine`.\",\"Please run `prisma generate` without `--no-engine` to be able to use Prisma Client with the adapter.\"],new H(l.join(`\n`),{clientVersion:r.clientVersion})}if(i)return new bt(r);if(s)return new wt(r);throw new H(\"Invalid client engine type, please use `library` or `binary`\",{clientVersion:r.clientVersion})}function bn({generator:e}){return e?.previewFeatures??[]}var Wa=k(Hi());function Ga(e,r){let t=Ja(e),n=Ed(t),i=wd(n);i?wn(i,r):r.addErrorMessage(()=>\"Unknown error\")}function Ja(e){return e.errors.flatMap(r=>r.kind===\"Union\"?Ja(r):[r])}function Ed(e){let r=new Map,t=[];for(let n of e){if(n.kind!==\"InvalidArgumentType\"){t.push(n);continue}let i=`${n.selectionPath.join(\".\")}:${n.argumentPath.join(\".\")}`,o=r.get(i);o?r.set(i,{...n,argument:{...n.argument,typeNames:bd(o.argument.typeNames,n.argument.typeNames)}}):r.set(i,n)}return t.push(...r.values()),t}function bd(e,r){return[...new Set(e.concat(r))]}function wd(e){return di(e,(r,t)=>{let n=Ua(r),i=Ua(t);return n!==i?n-i:Qa(r)-Qa(t)})}function Ua(e){let r=0;return Array.isArray(e.selectionPath)&&(r+=e.selectionPath.length),Array.isArray(e.argumentPath)&&(r+=e.argumentPath.length),r}function Qa(e){switch(e.kind){case\"InvalidArgumentValue\":case\"ValueTooLarge\":return 20;case\"InvalidArgumentType\":return 10;case\"RequiredArgumentMissing\":return-10;default:return 0}}var de=class{constructor(r,t){this.name=r;this.value=t;this.isRequired=!1}makeRequired(){return this.isRequired=!0,this}write(r){let{colors:{green:t}}=r.context;r.addMarginSymbol(t(this.isRequired?\"+\":\"?\")),r.write(t(this.name)),this.isRequired||r.write(t(\"?\")),r.write(t(\": \")),typeof this.value==\"string\"?r.write(t(this.value)):r.write(this.value)}};var xn=class{constructor(){this.fields=[]}addField(r,t){return this.fields.push({write(n){let{green:i,dim:o}=n.context.colors;n.write(i(o(`${r}: ${t}`))).addMarginSymbol(i(o(\"+\")))}}),this}write(r){let{colors:{green:t}}=r.context;r.writeLine(t(\"{\")).withIndent(()=>{r.writeJoined(Cr,this.fields).newLine()}).write(t(\"}\")).addMarginSymbol(t(\"+\"))}};function wn(e,r){switch(e.kind){case\"MutuallyExclusiveFields\":xd(e,r);break;case\"IncludeOnScalar\":Pd(e,r);break;case\"EmptySelection\":vd(e,r);break;case\"UnknownSelectionField\":Sd(e,r);break;case\"UnknownArgument\":Rd(e,r);break;case\"UnknownInputField\":Ad(e,r);break;case\"RequiredArgumentMissing\":Id(e,r);break;case\"InvalidArgumentType\":_d(e,r);break;case\"InvalidArgumentValue\":kd(e,r);break;case\"ValueTooLarge\":Dd(e,r);break;case\"SomeFieldsMissing\":Od(e,r);break;case\"TooManyFieldsGiven\":Ld(e,r);break;case\"Union\":Ga(e,r);break;default:throw new Error(\"not implemented: \"+e.kind)}}function xd(e,r){let t=r.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();t&&(t.getField(e.firstField)?.markAsError(),t.getField(e.secondField)?.markAsError()),r.addErrorMessage(n=>`Please ${n.bold(\"either\")} use ${n.green(`\\`${e.firstField}\\``)} or ${n.green(`\\`${e.secondField}\\``)}, but ${n.red(\"not both\")} at the same time.`)}function Pd(e,r){let[t,n]=Pn(e.selectionPath),i=e.outputType,o=r.arguments.getDeepSelectionParent(t)?.value;if(o&&(o.getField(n)?.markAsError(),i))for(let s of i.fields)s.isRelation&&o.addSuggestion(new de(s.name,\"true\"));r.addErrorMessage(s=>{let a=`Invalid scalar field ${s.red(`\\`${n}\\``)} for ${s.bold(\"include\")} statement`;return i?a+=` on model ${s.bold(i.name)}. ${xt(s)}`:a+=\".\",a+=`\nNote that ${s.bold(\"include\")} statements only accept relation fields.`,a})}function vd(e,r){let t=r.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(t){let n=t.getField(\"omit\")?.value.asObject();if(n){Td(e,r,n);return}}Cd(e,r)}function Td(e,r,t){t.removeAllFields();for(let n of e.outputType.fields)t.addSuggestion(new de(n.name,\"false\"));r.addErrorMessage(n=>`The ${n.red(\"omit\")} statement includes every field of the model ${n.bold(e.outputType.name)}. At least one field must be included in the result`)}function Cd(e,r){let t=e.outputType,n=r.arguments.getDeepSelectionParent(e.selectionPath)?.value,i=n?.isEmpty()??!1;n&&(n.removeAllFields(),Ya(n,t)),r.addErrorMessage(o=>i?`The ${o.red(\"`select`\")} statement for type ${o.bold(t.name)} must not be empty. ${xt(o)}`:`The ${o.red(\"`select`\")} statement for type ${o.bold(t.name)} needs ${o.bold(\"at least one truthy value\")}.`)}function Sd(e,r){let[t,n]=Pn(e.selectionPath),i=r.arguments.getDeepSubSelectionValue(t)?.asObject(),o;if(i){let s=i.getFieldValue(\"select\")?.asObject(),a=i.getFieldValue(\"include\")?.asObject(),l=i.getFieldValue(\"omit\")?.asObject();s?.hasField(n)?(o=\"select\",s.getField(n)?.markAsError(),Ya(s,e.outputType)):a?.hasField(n)?(o=\"include\",a.getField(n)?.markAsError(),Fd(a,e.outputType)):l?.hasField(n)&&(o=\"omit\",l.getField(n)?.markAsError(),Nd(l,e.outputType))}r.addErrorMessage(s=>{let a=[`Unknown field ${s.red(`\\`${n}\\``)}`];return o&&a.push(`for ${s.bold(o)} statement`),a.push(`on model ${s.bold(`\\`${e.outputType.name}\\``)}.`),a.push(xt(s)),a.join(\" \")})}function Rd(e,r){let t=e.argumentPath[0],n=r.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&(n.getField(t)?.markAsError(),Md(n,e.arguments)),r.addErrorMessage(i=>Ha(i,t,e.arguments.map(o=>o.name)))}function Ad(e,r){let[t,n]=Pn(e.argumentPath),i=r.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(i){i.getDeepField(e.argumentPath)?.markAsError();let o=i.getDeepFieldValue(t)?.asObject();o&&za(o,e.inputType)}r.addErrorMessage(o=>Ha(o,n,e.inputType.fields.map(s=>s.name)))}function Ha(e,r,t){let n=[`Unknown argument \\`${e.red(r)}\\`.`],i=qd(r,t);return i&&n.push(`Did you mean \\`${e.green(i)}\\`?`),t.length>0&&n.push(xt(e)),n.join(\" \")}function Id(e,r){let t;r.addErrorMessage(l=>t?.value instanceof J&&t.value.text===\"null\"?`Argument \\`${l.green(o)}\\` must not be ${l.red(\"null\")}.`:`Argument \\`${l.green(o)}\\` is missing.`);let n=r.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(!n)return;let[i,o]=Pn(e.argumentPath),s=new xn,a=n.getDeepFieldValue(i)?.asObject();if(a)if(t=a.getField(o),t&&a.removeField(o),e.inputTypes.length===1&&e.inputTypes[0].kind===\"object\"){for(let l of e.inputTypes[0].fields)s.addField(l.name,l.typeNames.join(\" | \"));a.addSuggestion(new de(o,s).makeRequired())}else{let l=e.inputTypes.map(Ka).join(\" | \");a.addSuggestion(new de(o,l).makeRequired())}}function Ka(e){return e.kind===\"list\"?`${Ka(e.elementType)}[]`:e.name}function _d(e,r){let t=e.argument.name,n=r.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&n.getDeepFieldValue(e.argumentPath)?.markAsError(),r.addErrorMessage(i=>{let o=vn(\"or\",e.argument.typeNames.map(s=>i.green(s)));return`Argument \\`${i.bold(t)}\\`: Invalid value provided. Expected ${o}, provided ${i.red(e.inferredType)}.`})}function kd(e,r){let t=e.argument.name,n=r.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&n.getDeepFieldValue(e.argumentPath)?.markAsError(),r.addErrorMessage(i=>{let o=[`Invalid value for argument \\`${i.bold(t)}\\``];if(e.underlyingError&&o.push(`: ${e.underlyingError}`),o.push(\".\"),e.argument.typeNames.length>0){let s=vn(\"or\",e.argument.typeNames.map(a=>i.green(a)));o.push(` Expected ${s}.`)}return o.join(\"\")})}function Dd(e,r){let t=e.argument.name,n=r.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject(),i;if(n){let s=n.getDeepField(e.argumentPath)?.value;s?.markAsError(),s instanceof J&&(i=s.text)}r.addErrorMessage(o=>{let s=[\"Unable to fit value\"];return i&&s.push(o.red(i)),s.push(`into a 64-bit signed integer for field \\`${o.bold(t)}\\``),s.join(\" \")})}function Od(e,r){let t=e.argumentPath[e.argumentPath.length-1],n=r.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(n){let i=n.getDeepFieldValue(e.argumentPath)?.asObject();i&&za(i,e.inputType)}r.addErrorMessage(i=>{let o=[`Argument \\`${i.bold(t)}\\` of type ${i.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1?e.constraints.requiredFields?o.push(`${i.green(\"at least one of\")} ${vn(\"or\",e.constraints.requiredFields.map(s=>`\\`${i.bold(s)}\\``))} arguments.`):o.push(`${i.green(\"at least one\")} argument.`):o.push(`${i.green(`at least ${e.constraints.minFieldCount}`)} arguments.`),o.push(xt(i)),o.join(\" \")})}function Ld(e,r){let t=e.argumentPath[e.argumentPath.length-1],n=r.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject(),i=[];if(n){let o=n.getDeepFieldValue(e.argumentPath)?.asObject();o&&(o.markAsError(),i=Object.keys(o.getFields()))}r.addErrorMessage(o=>{let s=[`Argument \\`${o.bold(t)}\\` of type ${o.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1&&e.constraints.maxFieldCount==1?s.push(`${o.green(\"exactly one\")} argument,`):e.constraints.maxFieldCount==1?s.push(`${o.green(\"at most one\")} argument,`):s.push(`${o.green(`at most ${e.constraints.maxFieldCount}`)} arguments,`),s.push(`but you provided ${vn(\"and\",i.map(a=>o.red(a)))}. Please choose`),e.constraints.maxFieldCount===1?s.push(\"one.\"):s.push(`${e.constraints.maxFieldCount}.`),s.join(\" \")})}function Ya(e,r){for(let t of r.fields)e.hasField(t.name)||e.addSuggestion(new de(t.name,\"true\"))}function Fd(e,r){for(let t of r.fields)t.isRelation&&!e.hasField(t.name)&&e.addSuggestion(new de(t.name,\"true\"))}function Nd(e,r){for(let t of r.fields)!e.hasField(t.name)&&!t.isRelation&&e.addSuggestion(new de(t.name,\"true\"))}function Md(e,r){for(let t of r)e.hasField(t.name)||e.addSuggestion(new de(t.name,t.typeNames.join(\" | \")))}function za(e,r){if(r.kind===\"object\")for(let t of r.fields)e.hasField(t.name)||e.addSuggestion(new de(t.name,t.typeNames.join(\" | \")))}function Pn(e){let r=[...e],t=r.pop();if(!t)throw new Error(\"unexpected empty path\");return[r,t]}function xt({green:e,enabled:r}){return\"Available options are \"+(r?`listed in ${e(\"green\")}`:\"marked with ?\")+\".\"}function vn(e,r){if(r.length===1)return r[0];let t=[...r],n=t.pop();return`${t.join(\", \")} ${e} ${n}`}var $d=3;function qd(e,r){let t=1/0,n;for(let i of r){let o=(0,Wa.default)(e,i);o>$d||o<t&&(t=o,n=i)}return n}function Tn({args:e,errors:r,errorFormat:t,callsite:n,originalMethod:i,clientVersion:o}){let s=an(e);for(let p of r)wn(p,s);let a=t===\"pretty\"?Ss:nn,l=s.renderAllMessages(a),u=new br(0,{colors:a}).write(s).toString(),c=Ar({message:l,callsite:n,originalMethod:i,showColors:t===\"pretty\",callArguments:u});throw new H(c,{clientVersion:o})}var jd={findUnique:\"findUnique\",findUniqueOrThrow:\"findUniqueOrThrow\",findFirst:\"findFirst\",findFirstOrThrow:\"findFirstOrThrow\",findMany:\"findMany\",count:\"aggregate\",create:\"createOne\",createMany:\"createMany\",createManyAndReturn:\"createManyAndReturn\",update:\"updateOne\",updateMany:\"updateMany\",upsert:\"upsertOne\",delete:\"deleteOne\",deleteMany:\"deleteMany\",executeRaw:\"executeRaw\",queryRaw:\"queryRaw\",aggregate:\"aggregate\",groupBy:\"groupBy\",runCommandRaw:\"runCommandRaw\",findRaw:\"findRaw\",aggregateRaw:\"aggregateRaw\"};function Za({modelName:e,action:r,args:t,runtimeDataModel:n,extensions:i,callsite:o,clientMethod:s,errorFormat:a,clientVersion:l,previewFeatures:u}){let c=new Ki({runtimeDataModel:n,modelName:e,action:r,rootArgs:t,callsite:o,extensions:i,selectionPath:[],argumentPath:[],originalMethod:s,errorFormat:a,clientVersion:l,previewFeatures:u});return{modelName:e,action:jd[r],query:Yi(t,c)}}function Yi({select:e,include:r,...t}={},n){let i;return n.isPreviewFeatureOn(\"omitApi\")&&(i=t.omit,delete t.omit),{arguments:el(t,n),selection:Vd(e,r,i,n)}}function Vd(e,r,t,n){return e?(r?n.throwValidationError({kind:\"MutuallyExclusiveFields\",firstField:\"include\",secondField:\"select\",selectionPath:n.getSelectionPath()}):t&&n.isPreviewFeatureOn(\"omitApi\")&&n.throwValidationError({kind:\"MutuallyExclusiveFields\",firstField:\"omit\",secondField:\"select\",selectionPath:n.getSelectionPath()}),Gd(e,n)):Bd(n,r,t)}function Bd(e,r,t){let n={};return e.model&&!e.isRawAction()&&(n.$composites=!0,n.$scalars=!0),r&&Ud(n,r,e),t&&e.isPreviewFeatureOn(\"omitApi\")&&Qd(n,t,e),n}function Ud(e,r,t){for(let[n,i]of Object.entries(r)){let o=t.findField(n);o&&o?.kind!==\"object\"&&t.throwValidationError({kind:\"IncludeOnScalar\",selectionPath:t.getSelectionPath().concat(n),outputType:t.getOutputTypeDescription()}),i===!0?e[n]=!0:typeof i==\"object\"&&(e[n]=Yi(i,t.nestSelection(n)))}}function Qd(e,r,t){let n=t.getComputedFields(),i=ua(r,n);for(let[o,s]of Object.entries(i)){let a=t.findField(o);n?.[o]&&!a||(e[o]=!s)}}function Gd(e,r){let t={},n=r.getComputedFields(),i=la(e,n);for(let[o,s]of Object.entries(i)){let a=r.findField(o);n?.[o]&&!a||(s===!0?t[o]=!0:typeof s==\"object\"&&(t[o]=Yi(s,r.nestSelection(o))))}return t}function Xa(e,r){if(e===null)return null;if(typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\")return e;if(typeof e==\"bigint\")return{$type:\"BigInt\",value:String(e)};if(wr(e)){if(Wt(e))return{$type:\"DateTime\",value:e.toISOString()};r.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:r.getSelectionPath(),argumentPath:r.getArgumentPath(),argument:{name:r.getArgumentName(),typeNames:[\"Date\"]},underlyingError:\"Provided Date object is invalid\"})}if(Tr(e))return{$type:\"FieldRef\",value:{_ref:e.name,_container:e.modelName}};if(Array.isArray(e))return Jd(e,r);if(ArrayBuffer.isView(e))return{$type:\"Bytes\",value:Buffer.from(e).toString(\"base64\")};if(Wd(e))return e.values;if(vr(e))return{$type:\"Decimal\",value:e.toFixed()};if(e instanceof Le){if(e!==Qt.instances[e._getName()])throw new Error(\"Invalid ObjectEnumValue\");return{$type:\"Enum\",value:e._getName()}}if(Hd(e))return e.toJSON();if(typeof e==\"object\")return el(e,r);r.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:r.getSelectionPath(),argumentPath:r.getArgumentPath(),argument:{name:r.getArgumentName(),typeNames:[]},underlyingError:`We could not serialize ${Object.prototype.toString.call(e)} value. Serialize the object to JSON or implement a \".toJSON()\" method on it`})}function el(e,r){if(e.$type)return{$type:\"Raw\",value:e};let t={};for(let n in e){let i=e[n];i!==void 0&&(t[n]=Xa(i,r.nestArgument(n)))}return t}function Jd(e,r){let t=[];for(let n=0;n<e.length;n++){let i=r.nestArgument(String(n)),o=e[n];o===void 0&&r.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:i.getSelectionPath(),argumentPath:i.getArgumentPath(),argument:{name:`${r.getArgumentName()}[${n}]`,typeNames:[]},underlyingError:\"Can not use `undefined` value within array. Use `null` or filter out `undefined` values\"}),t.push(Xa(o,i))}return t}function Wd(e){return typeof e==\"object\"&&e!==null&&e.__prismaRawParameters__===!0}function Hd(e){return typeof e==\"object\"&&e!==null&&typeof e.toJSON==\"function\"}var Ki=class e{constructor(r){this.params=r;this.params.modelName&&(this.model=this.params.runtimeDataModel.models[this.params.modelName])}throwValidationError(r){Tn({errors:[r],originalMethod:this.params.originalMethod,args:this.params.rootArgs??{},callsite:this.params.callsite,errorFormat:this.params.errorFormat,clientVersion:this.params.clientVersion})}getSelectionPath(){return this.params.selectionPath}getArgumentPath(){return this.params.argumentPath}getArgumentName(){return this.params.argumentPath[this.params.argumentPath.length-1]}getOutputTypeDescription(){if(!(!this.params.modelName||!this.model))return{name:this.params.modelName,fields:this.model.fields.map(r=>({name:r.name,typeName:\"boolean\",isRelation:r.kind===\"object\"}))}}isRawAction(){return[\"executeRaw\",\"queryRaw\",\"runCommandRaw\",\"findRaw\",\"aggregateRaw\"].includes(this.params.action)}isPreviewFeatureOn(r){return this.params.previewFeatures.includes(r)}getComputedFields(){if(this.params.modelName)return this.params.extensions.getAllComputedFields(this.params.modelName)}findField(r){return this.model?.fields.find(t=>t.name===r)}nestSelection(r){let t=this.findField(r),n=t?.kind===\"object\"?t.type:void 0;return new e({...this.params,modelName:n,selectionPath:this.params.selectionPath.concat(r)})}nestArgument(r){return new e({...this.params,argumentPath:this.params.argumentPath.concat(r)})}};var rl=e=>({command:e});var tl=e=>e.strings.reduce((r,t,n)=>`${r}@P${n}${t}`);function Pt(e){try{return nl(e,\"fast\")}catch{return nl(e,\"slow\")}}function nl(e,r){return JSON.stringify(e.map(t=>Kd(t,r)))}function Kd(e,r){return typeof e==\"bigint\"?{prisma__type:\"bigint\",prisma__value:e.toString()}:wr(e)?{prisma__type:\"date\",prisma__value:e.toJSON()}:Te.isDecimal(e)?{prisma__type:\"decimal\",prisma__value:e.toJSON()}:Buffer.isBuffer(e)?{prisma__type:\"bytes\",prisma__value:e.toString(\"base64\")}:Yd(e)||ArrayBuffer.isView(e)?{prisma__type:\"bytes\",prisma__value:Buffer.from(e).toString(\"base64\")}:typeof e==\"object\"&&r===\"slow\"?ol(e):e}function Yd(e){return e instanceof ArrayBuffer||e instanceof SharedArrayBuffer?!0:typeof e==\"object\"&&e!==null?e[Symbol.toStringTag]===\"ArrayBuffer\"||e[Symbol.toStringTag]===\"SharedArrayBuffer\":!1}function ol(e){if(typeof e!=\"object\"||e===null)return e;if(typeof e.toJSON==\"function\")return e.toJSON();if(Array.isArray(e))return e.map(il);let r={};for(let t of Object.keys(e))r[t]=il(e[t]);return r}function il(e){return typeof e==\"bigint\"?e.toString():ol(e)}var zd=/^(\\s*alter\\s)/i,sl=L(\"prisma:client\");function zi(e,r,t,n){if(!(e!==\"postgresql\"&&e!==\"cockroachdb\")&&t.length>0&&zd.exec(r))throw new Error(`Running ALTER using ${n} is not supported\nUsing the example below you can still execute your query with Prisma, but please note that it is vulnerable to SQL injection attacks and requires you to take care of input sanitization.\n\nExample:\n  await prisma.$executeRawUnsafe(\\`ALTER USER prisma WITH PASSWORD '\\${password}'\\`)\n\nMore Information: https://pris.ly/d/execute-raw\n`)}var Zi=({clientMethod:e,activeProvider:r})=>t=>{let n=\"\",i;if(Array.isArray(t)){let[o,...s]=t;n=o,i={values:Pt(s||[]),__prismaRawParameters__:!0}}else switch(r){case\"sqlite\":case\"mysql\":{n=t.sql,i={values:Pt(t.values),__prismaRawParameters__:!0};break}case\"cockroachdb\":case\"postgresql\":case\"postgres\":{n=t.text,i={values:Pt(t.values),__prismaRawParameters__:!0};break}case\"sqlserver\":{n=tl(t),i={values:Pt(t.values),__prismaRawParameters__:!0};break}default:throw new Error(`The ${r} provider does not support ${e}`)}return i?.values?sl(`prisma.${e}(${n}, ${i.values})`):sl(`prisma.${e}(${n})`),{query:n,parameters:i}},al={requestArgsToMiddlewareArgs(e){return[e.strings,...e.values]},middlewareArgsToRequestArgs(e){let[r,...t]=e;return new ie(r,t)}},ll={requestArgsToMiddlewareArgs(e){return[e]},middlewareArgsToRequestArgs(e){return e[0]}};function Xi(e){return function(t){let n,i=(o=e)=>{try{return o===void 0||o?.kind===\"itx\"?n??(n=ul(t(o))):ul(t(o))}catch(s){return Promise.reject(s)}};return{then(o,s){return i().then(o,s)},catch(o){return i().catch(o)},finally(o){return i().finally(o)},requestTransaction(o){let s=i(o);return s.requestTransaction?s.requestTransaction(o):s},[Symbol.toStringTag]:\"PrismaPromise\"}}}function ul(e){return typeof e.then==\"function\"?e:Promise.resolve(e)}var cl={isEnabled(){return!1},getTraceParent(){return\"00-10-10-00\"},async createEngineSpan(){},getActiveContext(){},runInChildSpan(e,r){return r()}},eo=class{isEnabled(){return this.getGlobalTracingHelper().isEnabled()}getTraceParent(r){return this.getGlobalTracingHelper().getTraceParent(r)}createEngineSpan(r){return this.getGlobalTracingHelper().createEngineSpan(r)}getActiveContext(){return this.getGlobalTracingHelper().getActiveContext()}runInChildSpan(r,t){return this.getGlobalTracingHelper().runInChildSpan(r,t)}getGlobalTracingHelper(){return globalThis.PRISMA_INSTRUMENTATION?.helper??cl}};function pl(e){return e.includes(\"tracing\")?new eo:cl}function dl(e,r=()=>{}){let t,n=new Promise(i=>t=i);return{then(i){return--e===0&&t(r()),i?.(n)}}}var Zd=[\"$connect\",\"$disconnect\",\"$on\",\"$transaction\",\"$use\",\"$extends\"],ml=Zd;function fl(e){return typeof e==\"string\"?e:e.reduce((r,t)=>{let n=typeof t==\"string\"?t:t.level;return n===\"query\"?r:r&&(t===\"info\"||r===\"info\")?\"info\":n},void 0)}var Cn=class{constructor(){this._middlewares=[]}use(r){this._middlewares.push(r)}get(r){return this._middlewares[r]}has(r){return!!this._middlewares[r]}length(){return this._middlewares.length}};var hl=k(ui());function Sn(e){return typeof e.batchRequestIdx==\"number\"}function Rn(e){return e===null?e:Array.isArray(e)?e.map(Rn):typeof e==\"object\"?Xd(e)?em(e):gr(e,Rn):e}function Xd(e){return e!==null&&typeof e==\"object\"&&typeof e.$type==\"string\"}function em({$type:e,value:r}){switch(e){case\"BigInt\":return BigInt(r);case\"Bytes\":return Buffer.from(r,\"base64\");case\"DateTime\":return new Date(r);case\"Decimal\":return new Te(r);case\"Json\":return JSON.parse(r);default:rr(r,\"Unknown tagged value\")}}function gl(e){if(e.action!==\"findUnique\"&&e.action!==\"findUniqueOrThrow\")return;let r=[];return e.modelName&&r.push(e.modelName),e.query.arguments&&r.push(ro(e.query.arguments)),r.push(ro(e.query.selection)),r.join(\"\")}function ro(e){return`(${Object.keys(e).sort().map(t=>{let n=e[t];return typeof n==\"object\"&&n!==null?`(${t} ${ro(n)})`:t}).join(\" \")})`}var rm={aggregate:!1,aggregateRaw:!1,createMany:!0,createManyAndReturn:!0,createOne:!0,deleteMany:!0,deleteOne:!0,executeRaw:!0,findFirst:!1,findFirstOrThrow:!1,findMany:!1,findRaw:!1,findUnique:!1,findUniqueOrThrow:!1,groupBy:!1,queryRaw:!1,runCommandRaw:!0,updateMany:!0,updateOne:!0,upsertOne:!0};function to(e){return rm[e]}var An=class{constructor(r){this.options=r;this.tickActive=!1;this.batches={}}request(r){let t=this.options.batchBy(r);return t?(this.batches[t]||(this.batches[t]=[],this.tickActive||(this.tickActive=!0,process.nextTick(()=>{this.dispatchBatches(),this.tickActive=!1}))),new Promise((n,i)=>{this.batches[t].push({request:r,resolve:n,reject:i})})):this.options.singleLoader(r)}dispatchBatches(){for(let r in this.batches){let t=this.batches[r];delete this.batches[r],t.length===1?this.options.singleLoader(t[0].request).then(n=>{n instanceof Error?t[0].reject(n):t[0].resolve(n)}).catch(n=>{t[0].reject(n)}):(t.sort((n,i)=>this.options.batchOrder(n.request,i.request)),this.options.batchLoader(t.map(n=>n.request)).then(n=>{if(n instanceof Error)for(let i=0;i<t.length;i++)t[i].reject(n);else for(let i=0;i<t.length;i++){let o=n[i];o instanceof Error?t[i].reject(o):t[i].resolve(o)}}).catch(n=>{for(let i=0;i<t.length;i++)t[i].reject(n)}))}}get[Symbol.toStringTag](){return\"DataLoader\"}};var tm=L(\"prisma:client:request_handler\"),In=class{constructor(r,t){this.logEmitter=t,this.client=r,this.dataloader=new An({batchLoader:na(async({requests:n,customDataProxyFetch:i})=>{let{transaction:o,otelParentCtx:s}=n[0],a=n.map(p=>p.protocolQuery),l=this.client._tracingHelper.getTraceParent(s),u=n.some(p=>to(p.protocolQuery.action));return(await this.client._engine.requestBatch(a,{traceparent:l,transaction:nm(o),containsWrite:u,customDataProxyFetch:i})).map((p,d)=>{if(p instanceof Error)return p;try{return this.mapQueryEngineResult(n[d],p)}catch(f){return f}})}),singleLoader:async n=>{let i=n.transaction?.kind===\"itx\"?yl(n.transaction):void 0,o=await this.client._engine.request(n.protocolQuery,{traceparent:this.client._tracingHelper.getTraceParent(),interactiveTransaction:i,isWrite:to(n.protocolQuery.action),customDataProxyFetch:n.customDataProxyFetch});return this.mapQueryEngineResult(n,o)},batchBy:n=>n.transaction?.id?`transaction-${n.transaction.id}`:gl(n.protocolQuery),batchOrder(n,i){return n.transaction?.kind===\"batch\"&&i.transaction?.kind===\"batch\"?n.transaction.index-i.transaction.index:0}})}async request(r){try{return await this.dataloader.request(r)}catch(t){let{clientMethod:n,callsite:i,transaction:o,args:s,modelName:a}=r;this.handleAndLogRequestError({error:t,clientMethod:n,callsite:i,transaction:o,args:s,modelName:a})}}mapQueryEngineResult({dataPath:r,unpacker:t},n){let i=n?.data,o=n?.elapsed,s=this.unpack(i,r,t);return process.env.PRISMA_CLIENT_GET_TIME?{data:s,elapsed:o}:s}handleAndLogRequestError(r){try{this.handleRequestError(r)}catch(t){throw this.logEmitter&&this.logEmitter.emit(\"error\",{message:t.message,target:r.clientMethod,timestamp:new Date}),t}}handleRequestError({error:r,clientMethod:t,callsite:n,transaction:i,args:o,modelName:s}){if(tm(r),im(r,i)||r instanceof Oe)throw r;if(r instanceof V&&om(r)){let l=El(r.meta);Tn({args:o,errors:[l],callsite:n,errorFormat:this.client._errorFormat,originalMethod:t,clientVersion:this.client._clientVersion})}let a=r.message;if(n&&(a=Ar({callsite:n,originalMethod:t,isPanic:r.isPanic,showColors:this.client._errorFormat===\"pretty\",message:a})),a=this.sanitizeMessage(a),r.code){let l=s?{modelName:s,...r.meta}:r.meta;throw new V(a,{code:r.code,clientVersion:this.client._clientVersion,meta:l,batchRequestIdx:r.batchRequestIdx})}else{if(r.isPanic)throw new le(a,this.client._clientVersion);if(r instanceof B)throw new B(a,{clientVersion:this.client._clientVersion,batchRequestIdx:r.batchRequestIdx});if(r instanceof R)throw new R(a,this.client._clientVersion);if(r instanceof le)throw new le(a,this.client._clientVersion)}throw r.clientVersion=this.client._clientVersion,r}sanitizeMessage(r){return this.client._errorFormat&&this.client._errorFormat!==\"pretty\"?(0,hl.default)(r):r}unpack(r,t,n){if(!r||(r.data&&(r=r.data),!r))return r;let i=Object.values(r)[0],o=t.filter(a=>a!==\"select\"&&a!==\"include\"),s=Rn(Ii(i,o));return n?n(s):s}get[Symbol.toStringTag](){return\"RequestHandler\"}};function nm(e){if(e){if(e.kind===\"batch\")return{kind:\"batch\",options:{isolationLevel:e.isolationLevel}};if(e.kind===\"itx\")return{kind:\"itx\",options:yl(e)};rr(e,\"Unknown transaction kind\")}}function yl(e){return{id:e.id,payload:e.payload}}function im(e,r){return Sn(e)&&r?.kind===\"batch\"&&e.batchRequestIdx!==r.index}function om(e){return e.code===\"P2009\"||e.code===\"P2012\"}function El(e){if(e.kind===\"Union\")return{kind:\"Union\",errors:e.errors.map(El)};if(Array.isArray(e.selectionPath)){let[,...r]=e.selectionPath;return{...e,selectionPath:r}}return e}var bl=\"5.15.0\";var wl=bl;function xl(e){return e.map(r=>{let t={};for(let n of Object.keys(r))t[n]=Pl(r[n]);return t})}function Pl({prisma__type:e,prisma__value:r}){switch(e){case\"bigint\":return BigInt(r);case\"bytes\":return Buffer.from(r,\"base64\");case\"decimal\":return new Te(r);case\"datetime\":case\"date\":return new Date(r);case\"time\":return new Date(`1970-01-01T${r}Z`);case\"array\":return r.map(Pl);default:return r}}var Sl=k(Hi());var q=class extends Error{constructor(r){super(r+`\nRead more at https://pris.ly/d/client-constructor`),this.name=\"PrismaClientConstructorValidationError\"}get[Symbol.toStringTag](){return\"PrismaClientConstructorValidationError\"}};w(q,\"PrismaClientConstructorValidationError\");var vl=[\"datasources\",\"datasourceUrl\",\"errorFormat\",\"adapter\",\"log\",\"transactionOptions\",\"__internal\"],Tl=[\"pretty\",\"colorless\",\"minimal\"],Cl=[\"info\",\"query\",\"warn\",\"error\"],am={datasources:(e,{datasourceNames:r})=>{if(e){if(typeof e!=\"object\"||Array.isArray(e))throw new q(`Invalid value ${JSON.stringify(e)} for \"datasources\" provided to PrismaClient constructor`);for(let[t,n]of Object.entries(e)){if(!r.includes(t)){let i=Or(t,r)||` Available datasources: ${r.join(\", \")}`;throw new q(`Unknown datasource ${t} provided to PrismaClient constructor.${i}`)}if(typeof n!=\"object\"||Array.isArray(n))throw new q(`Invalid value ${JSON.stringify(e)} for datasource \"${t}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`);if(n&&typeof n==\"object\")for(let[i,o]of Object.entries(n)){if(i!==\"url\")throw new q(`Invalid value ${JSON.stringify(e)} for datasource \"${t}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`);if(typeof o!=\"string\")throw new q(`Invalid value ${JSON.stringify(o)} for datasource \"${t}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`)}}}},adapter:(e,r)=>{if(e===null)return;if(e===void 0)throw new q('\"adapter\" property must not be undefined, use null to conditionally disable driver adapters.');if(!bn(r).includes(\"driverAdapters\"))throw new q('\"adapter\" property can only be provided to PrismaClient constructor when \"driverAdapters\" preview feature is enabled.');if(Ur()===\"binary\")throw new q('Cannot use a driver adapter with the \"binary\" Query Engine. Please use the \"library\" Query Engine.')},datasourceUrl:e=>{if(typeof e<\"u\"&&typeof e!=\"string\")throw new q(`Invalid value ${JSON.stringify(e)} for \"datasourceUrl\" provided to PrismaClient constructor.\nExpected string or undefined.`)},errorFormat:e=>{if(e){if(typeof e!=\"string\")throw new q(`Invalid value ${JSON.stringify(e)} for \"errorFormat\" provided to PrismaClient constructor.`);if(!Tl.includes(e)){let r=Or(e,Tl);throw new q(`Invalid errorFormat ${e} provided to PrismaClient constructor.${r}`)}}},log:e=>{if(!e)return;if(!Array.isArray(e))throw new q(`Invalid value ${JSON.stringify(e)} for \"log\" provided to PrismaClient constructor.`);function r(t){if(typeof t==\"string\"&&!Cl.includes(t)){let n=Or(t,Cl);throw new q(`Invalid log level \"${t}\" provided to PrismaClient constructor.${n}`)}}for(let t of e){r(t);let n={level:r,emit:i=>{let o=[\"stdout\",\"event\"];if(!o.includes(i)){let s=Or(i,o);throw new q(`Invalid value ${JSON.stringify(i)} for \"emit\" in logLevel provided to PrismaClient constructor.${s}`)}}};if(t&&typeof t==\"object\")for(let[i,o]of Object.entries(t))if(n[i])n[i](o);else throw new q(`Invalid property ${i} for \"log\" provided to PrismaClient constructor`)}},transactionOptions:e=>{if(!e)return;let r=e.maxWait;if(r!=null&&r<=0)throw new q(`Invalid value ${r} for maxWait in \"transactionOptions\" provided to PrismaClient constructor. maxWait needs to be greater than 0`);let t=e.timeout;if(t!=null&&t<=0)throw new q(`Invalid value ${t} for timeout in \"transactionOptions\" provided to PrismaClient constructor. timeout needs to be greater than 0`)},__internal:e=>{if(!e)return;let r=[\"debug\",\"engine\",\"configOverride\"];if(typeof e!=\"object\")throw new q(`Invalid value ${JSON.stringify(e)} for \"__internal\" to PrismaClient constructor`);for(let[t]of Object.entries(e))if(!r.includes(t)){let n=Or(t,r);throw new q(`Invalid property ${JSON.stringify(t)} for \"__internal\" provided to PrismaClient constructor.${n}`)}}};function Rl(e,r){for(let[t,n]of Object.entries(e)){if(!vl.includes(t)){let i=Or(t,vl);throw new q(`Unknown property ${t} provided to PrismaClient constructor.${i}`)}am[t](n,r)}if(e.datasourceUrl&&e.datasources)throw new q('Can not use \"datasourceUrl\" and \"datasources\" options at the same time. Pick one of them')}function Or(e,r){if(r.length===0||typeof e!=\"string\")return\"\";let t=lm(e,r);return t?` Did you mean \"${t}\"?`:\"\"}function lm(e,r){if(r.length===0)return null;let t=r.map(i=>({value:i,distance:(0,Sl.default)(e,i)}));t.sort((i,o)=>i.distance<o.distance?-1:1);let n=t[0];return n.distance<3?n.value:null}function Al(e){return e.length===0?Promise.resolve([]):new Promise((r,t)=>{let n=new Array(e.length),i=null,o=!1,s=0,a=()=>{o||(s++,s===e.length&&(o=!0,i?t(i):r(n)))},l=u=>{o||(o=!0,t(u))};for(let u=0;u<e.length;u++)e[u].then(c=>{n[u]=c,a()},c=>{if(!Sn(c)){l(c);return}c.batchRequestIdx===u?l(c):(i||(i=c),a())})})}var Ye=L(\"prisma:client\");typeof globalThis==\"object\"&&(globalThis.NODE_CLIENT=!0);var um={requestArgsToMiddlewareArgs:e=>e,middlewareArgsToRequestArgs:e=>e},cm=Symbol.for(\"prisma.client.transaction.id\"),pm={id:0,nextId(){return++this.id}};function Ll(e){class r{constructor(n){this._originalClient=this;this._middlewares=new Cn;this._createPrismaPromise=Xi();this.$extends=Ks;e=n?.__internal?.configOverride?.(e)??e,da(e),n&&Rl(n,e);let i=n?.adapter?yi(n.adapter):void 0,o=new Dl.EventEmitter().on(\"error\",()=>{});this._extensions=mn.empty(),this._previewFeatures=bn(e),this._clientVersion=e.clientVersion??wl,this._activeProvider=e.activeProvider,this._tracingHelper=pl(this._previewFeatures);let s={rootEnvPath:e.relativeEnvPaths.rootEnvPath&&vt.default.resolve(e.dirname,e.relativeEnvPaths.rootEnvPath),schemaEnvPath:e.relativeEnvPaths.schemaEnvPath&&vt.default.resolve(e.dirname,e.relativeEnvPaths.schemaEnvPath)},a=!i&&Br(s,{conflictCheck:\"none\"})||e.injectableEdgeEnv?.();try{let l=n??{},u=l.__internal??{},c=u.debug===!0;c&&L.enable(\"prisma:client\");let p=vt.default.resolve(e.dirname,e.relativePath);Ol.default.existsSync(p)||(p=e.dirname),Ye(\"dirname\",e.dirname),Ye(\"relativePath\",e.relativePath),Ye(\"cwd\",p);let d=u.engine||{};if(l.errorFormat?this._errorFormat=l.errorFormat:process.env.NODE_ENV===\"production\"?this._errorFormat=\"minimal\":process.env.NO_COLOR?this._errorFormat=\"colorless\":this._errorFormat=\"colorless\",this._runtimeDataModel=e.runtimeDataModel,this._engineConfig={cwd:p,dirname:e.dirname,enableDebugLogs:c,allowTriggerPanic:d.allowTriggerPanic,datamodelPath:vt.default.join(e.dirname,e.filename??\"schema.prisma\"),prismaPath:d.binaryPath??void 0,engineEndpoint:d.endpoint,generator:e.generator,showColors:this._errorFormat===\"pretty\",logLevel:l.log&&fl(l.log),logQueries:l.log&&!!(typeof l.log==\"string\"?l.log===\"query\":l.log.find(f=>typeof f==\"string\"?f===\"query\":f.level===\"query\")),env:a?.parsed??{},flags:[],engineWasm:e.engineWasm,clientVersion:e.clientVersion,engineVersion:e.engineVersion,previewFeatures:this._previewFeatures,activeProvider:e.activeProvider,inlineSchema:e.inlineSchema,overrideDatasources:ma(l,e.datasourceNames),inlineDatasources:e.inlineDatasources,inlineSchemaHash:e.inlineSchemaHash,tracingHelper:this._tracingHelper,transactionOptions:{maxWait:l.transactionOptions?.maxWait??2e3,timeout:l.transactionOptions?.timeout??5e3,isolationLevel:l.transactionOptions?.isolationLevel},logEmitter:o,isBundled:e.isBundled,adapter:i},this._accelerateEngineConfig={...this._engineConfig,accelerateUtils:{resolveDatasourceUrl:Ir,getBatchRequestPayload:Er,prismaGraphQLToJSError:or,PrismaClientUnknownRequestError:B,PrismaClientInitializationError:R,PrismaClientKnownRequestError:V,debug:L(\"prisma:client:accelerateEngine\"),engineVersion:_l.version,clientVersion:e.clientVersion}},Ye(\"clientVersion\",e.clientVersion),this._engine=Va(e,this._engineConfig),this._requestHandler=new In(this,o),l.log)for(let f of l.log){let g=typeof f==\"string\"?f:f.emit===\"stdout\"?f.level:null;g&&this.$on(g,h=>{Jr.log(`${Jr.tags[g]??\"\"}`,h.message||h.query)})}this._metrics=new hr(this._engine)}catch(l){throw l.clientVersion=this._clientVersion,l}return this._appliedParent=it(this)}get[Symbol.toStringTag](){return\"PrismaClient\"}$use(n){this._middlewares.use(n)}$on(n,i){n===\"beforeExit\"?this._engine.onBeforeExit(i):n&&this._engineConfig.logEmitter.on(n,i)}$connect(){try{return this._engine.start()}catch(n){throw n.clientVersion=this._clientVersion,n}}async $disconnect(){try{await this._engine.stop()}catch(n){throw n.clientVersion=this._clientVersion,n}finally{ho()}}$executeRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:\"executeRaw\",args:o,transaction:n,clientMethod:i,argsMapper:Zi({clientMethod:i,activeProvider:a}),callsite:We(this._errorFormat),dataPath:[],middlewareArgsMapper:s})}$executeRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0){let[s,a]=Il(n,i);return zi(this._activeProvider,s.text,s.values,Array.isArray(n)?\"prisma.$executeRaw`<SQL>`\":\"prisma.$executeRaw(sql`<SQL>`)\"),this.$executeRawInternal(o,\"$executeRaw\",s,a)}throw new H(\"`$executeRaw` is a tag function, please use it like the following:\\n```\\nconst result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`\\n```\\n\\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#executeraw\\n\",{clientVersion:this._clientVersion})})}$executeRawUnsafe(n,...i){return this._createPrismaPromise(o=>(zi(this._activeProvider,n,i,\"prisma.$executeRawUnsafe(<SQL>, [...values])\"),this.$executeRawInternal(o,\"$executeRawUnsafe\",[n,...i])))}$runCommandRaw(n){if(e.activeProvider!==\"mongodb\")throw new H(`The ${e.activeProvider} provider does not support $runCommandRaw. Use the mongodb provider.`,{clientVersion:this._clientVersion});return this._createPrismaPromise(i=>this._request({args:n,clientMethod:\"$runCommandRaw\",dataPath:[],action:\"runCommandRaw\",argsMapper:rl,callsite:We(this._errorFormat),transaction:i}))}async $queryRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:\"queryRaw\",args:o,transaction:n,clientMethod:i,argsMapper:Zi({clientMethod:i,activeProvider:a}),callsite:We(this._errorFormat),dataPath:[],middlewareArgsMapper:s}).then(xl)}$queryRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0)return this.$queryRawInternal(o,\"$queryRaw\",...Il(n,i));throw new H(\"`$queryRaw` is a tag function, please use it like the following:\\n```\\nconst result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`\\n```\\n\\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#queryraw\\n\",{clientVersion:this._clientVersion})})}$queryRawUnsafe(n,...i){return this._createPrismaPromise(o=>this.$queryRawInternal(o,\"$queryRawUnsafe\",[n,...i]))}_transactionWithArray({promises:n,options:i}){let o=pm.nextId(),s=dl(n.length),a=n.map((l,u)=>{if(l?.[Symbol.toStringTag]!==\"PrismaPromise\")throw new Error(\"All elements of the array need to be Prisma Client promises. Hint: Please make sure you are not awaiting the Prisma client calls you intended to pass in the $transaction function.\");let c=i?.isolationLevel??this._engineConfig.transactionOptions.isolationLevel,p={kind:\"batch\",id:o,index:u,isolationLevel:c,lock:s};return l.requestTransaction?.(p)??l});return Al(a)}async _transactionWithCallback({callback:n,options:i}){let o={traceparent:this._tracingHelper.getTraceParent()},s={maxWait:i?.maxWait??this._engineConfig.transactionOptions.maxWait,timeout:i?.timeout??this._engineConfig.transactionOptions.timeout,isolationLevel:i?.isolationLevel??this._engineConfig.transactionOptions.isolationLevel},a=await this._engine.transaction(\"start\",o,s),l;try{let u={kind:\"itx\",...a};l=await n(this._createItxClient(u)),await this._engine.transaction(\"commit\",o,a)}catch(u){throw await this._engine.transaction(\"rollback\",o,a).catch(()=>{}),u}return l}_createItxClient(n){return it(Pe(Hs(this),[te(\"_appliedParent\",()=>this._appliedParent._createItxClient(n)),te(\"_createPrismaPromise\",()=>Xi(n)),te(cm,()=>n.id),yr(ml)]))}$transaction(n,i){let o;typeof n==\"function\"?this._engineConfig.adapter?.adapterName===\"@prisma/adapter-d1\"?o=()=>{throw new Error(\"Cloudflare D1 does not support interactive transactions. We recommend you to refactor your queries with that limitation in mind, and use batch transactions with `prisma.$transactions([])` where applicable.\")}:o=()=>this._transactionWithCallback({callback:n,options:i}):o=()=>this._transactionWithArray({promises:n,options:i});let s={name:\"transaction\",attributes:{method:\"$transaction\"}};return this._tracingHelper.runInChildSpan(s,o)}_request(n){n.otelParentCtx=this._tracingHelper.getActiveContext();let i=n.middlewareArgsMapper??um,o={args:i.requestArgsToMiddlewareArgs(n.args),dataPath:n.dataPath,runInTransaction:!!n.transaction,action:n.action,model:n.model},s={middleware:{name:\"middleware\",middleware:!0,attributes:{method:\"$use\"},active:!1},operation:{name:\"operation\",attributes:{method:o.action,model:o.model,name:o.model?`${o.model}.${o.action}`:o.action}}},a=-1,l=async u=>{let c=this._middlewares.get(++a);if(c)return this._tracingHelper.runInChildSpan(s.middleware,I=>c(u,T=>(I?.end(),l(T))));let{runInTransaction:p,args:d,...f}=u,g={...n,...f};d&&(g.args=i.middlewareArgsToRequestArgs(d)),n.transaction!==void 0&&p===!1&&delete g.transaction;let h=await ta(this,g);return g.model?Zs({result:h,modelName:g.model,args:g.args,extensions:this._extensions,runtimeDataModel:this._runtimeDataModel}):h};return this._tracingHelper.runInChildSpan(s.operation,()=>new kl.AsyncResource(\"prisma-client-request\").runInAsyncScope(()=>l(o)))}async _executeRequest({args:n,clientMethod:i,dataPath:o,callsite:s,action:a,model:l,argsMapper:u,transaction:c,unpacker:p,otelParentCtx:d,customDataProxyFetch:f}){try{n=u?u(n):n;let g={name:\"serialize\"},h=this._tracingHelper.runInChildSpan(g,()=>Za({modelName:l,runtimeDataModel:this._runtimeDataModel,action:a,args:n,clientMethod:i,callsite:s,extensions:this._extensions,errorFormat:this._errorFormat,clientVersion:this._clientVersion,previewFeatures:this._previewFeatures}));return L.enabled(\"prisma:client\")&&(Ye(\"Prisma Client call:\"),Ye(`prisma.${i}(${_s(n)})`),Ye(\"Generated request:\"),Ye(JSON.stringify(h,null,2)+`\n`)),c?.kind===\"batch\"&&await c.lock,this._requestHandler.request({protocolQuery:h,modelName:l,action:a,clientMethod:i,dataPath:o,callsite:s,args:n,extensions:this._extensions,transaction:c,unpacker:p,otelParentCtx:d,otelChildCtx:this._tracingHelper.getActiveContext(),customDataProxyFetch:f})}catch(g){throw g.clientVersion=this._clientVersion,g}}get $metrics(){if(!this._hasPreviewFlag(\"metrics\"))throw new H(\"`metrics` preview feature must be enabled in order to access metrics API\",{clientVersion:this._clientVersion});return this._metrics}_hasPreviewFlag(n){return!!this._engineConfig.previewFeatures?.includes(n)}$applyPendingMigrations(){return this._engine.applyPendingMigrations()}}return r}function Il(e,r){return dm(e)?[new ie(e,r),al]:[e,ll]}function dm(e){return Array.isArray(e)&&Array.isArray(e.raw)}var mm=new Set([\"toJSON\",\"$$typeof\",\"asymmetricMatch\",Symbol.iterator,Symbol.toStringTag,Symbol.isConcatSpreadable,Symbol.toPrimitive]);function Fl(e){return new Proxy(e,{get(r,t){if(t in r)return r[t];if(!mm.has(t))throw new TypeError(`Invalid enum value: ${String(t)}`)}})}function Nl(e){Br(e,{conflictCheck:\"warn\"})}0&&(module.exports={Debug,Decimal,Extensions,MetricsClient,NotFoundError,PrismaClientInitializationError,PrismaClientKnownRequestError,PrismaClientRustPanicError,PrismaClientUnknownRequestError,PrismaClientValidationError,Public,Sql,defineDmmfProperty,empty,getPrismaClient,getRuntime,join,makeStrictEnum,objectEnumValues,raw,sqltag,warnEnvConflicts,warnOnce});\n/*! Bundled license information:\n\ndecimal.js/decimal.mjs:\n  (*!\n   *  decimal.js v10.4.3\n   *  An arbitrary-precision Decimal type for JavaScript.\n   *  https://github.com/MikeMcl/decimal.js\n   *  Copyright (c) 2022 Michael Mclaughlin <M8ch88l@gmail.com>\n   *  MIT Licence\n   *)\n*/\n//# sourceMappingURL=library.js.map\n"
  },
  {
    "path": "server/src/common/prisma-client/runtime/react-native.js",
    "content": "\"use strict\";var ea=Object.create;var Qt=Object.defineProperty;var ta=Object.getOwnPropertyDescriptor;var ra=Object.getOwnPropertyNames;var na=Object.getPrototypeOf,ia=Object.prototype.hasOwnProperty;var Se=(e,t)=>()=>(e&&(t=e(e=0)),t);var ce=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ye=(e,t)=>{for(var r in t)Qt(e,r,{get:t[r],enumerable:!0})},jn=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of ra(t))!ia.call(e,i)&&i!==r&&Qt(e,i,{get:()=>t[i],enumerable:!(n=ta(t,i))||n.enumerable});return e};var fe=(e,t,r)=>(r=e!=null?ea(na(e)):{},jn(t||!e||!e.__esModule?Qt(r,\"default\",{value:e,enumerable:!0}):r,e)),Dr=e=>jn(Qt({},\"__esModule\",{value:!0}),e);var y,c=Se(()=>{\"use strict\";y={nextTick:(e,...t)=>{setTimeout(()=>{e(...t)},0)},env:{},version:\"\",cwd:()=>\"/\",stderr:{},argv:[\"/bin/node\"]}});var x,p=Se(()=>{\"use strict\";x=globalThis.performance??(()=>{let e=Date.now();return{now:()=>Date.now()-e}})()});var E,f=Se(()=>{\"use strict\";E=()=>{};E.prototype=E});var b,d=Se(()=>{\"use strict\";b=class{constructor(t){this.value=t}deref(){return this.value}}});var oi=ce(tt=>{\"use strict\";m();c();p();f();d();var Jn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),oa=Jn(e=>{\"use strict\";e.byteLength=l,e.toByteArray=g,e.fromByteArray=R;var t=[],r=[],n=typeof Uint8Array<\"u\"?Uint8Array:Array,i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";for(o=0,s=i.length;o<s;++o)t[o]=i[o],r[i.charCodeAt(o)]=o;var o,s;r[45]=62,r[95]=63;function a(C){var A=C.length;if(A%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var F=C.indexOf(\"=\");F===-1&&(F=A);var L=F===A?0:4-F%4;return[F,L]}function l(C){var A=a(C),F=A[0],L=A[1];return(F+L)*3/4-L}function u(C,A,F){return(A+F)*3/4-F}function g(C){var A,F=a(C),L=F[0],N=F[1],M=new n(u(C,L,N)),k=0,z=N>0?L-4:L,j;for(j=0;j<z;j+=4)A=r[C.charCodeAt(j)]<<18|r[C.charCodeAt(j+1)]<<12|r[C.charCodeAt(j+2)]<<6|r[C.charCodeAt(j+3)],M[k++]=A>>16&255,M[k++]=A>>8&255,M[k++]=A&255;return N===2&&(A=r[C.charCodeAt(j)]<<2|r[C.charCodeAt(j+1)]>>4,M[k++]=A&255),N===1&&(A=r[C.charCodeAt(j)]<<10|r[C.charCodeAt(j+1)]<<4|r[C.charCodeAt(j+2)]>>2,M[k++]=A>>8&255,M[k++]=A&255),M}function h(C){return t[C>>18&63]+t[C>>12&63]+t[C>>6&63]+t[C&63]}function v(C,A,F){for(var L,N=[],M=A;M<F;M+=3)L=(C[M]<<16&16711680)+(C[M+1]<<8&65280)+(C[M+2]&255),N.push(h(L));return N.join(\"\")}function R(C){for(var A,F=C.length,L=F%3,N=[],M=16383,k=0,z=F-L;k<z;k+=M)N.push(v(C,k,k+M>z?z:k+M));return L===1?(A=C[F-1],N.push(t[A>>2]+t[A<<4&63]+\"==\")):L===2&&(A=(C[F-2]<<8)+C[F-1],N.push(t[A>>10]+t[A>>4&63]+t[A<<2&63]+\"=\")),N.join(\"\")}}),sa=Jn(e=>{e.read=function(t,r,n,i,o){var s,a,l=o*8-i-1,u=(1<<l)-1,g=u>>1,h=-7,v=n?o-1:0,R=n?-1:1,C=t[r+v];for(v+=R,s=C&(1<<-h)-1,C>>=-h,h+=l;h>0;s=s*256+t[r+v],v+=R,h-=8);for(a=s&(1<<-h)-1,s>>=-h,h+=i;h>0;a=a*256+t[r+v],v+=R,h-=8);if(s===0)s=1-g;else{if(s===u)return a?NaN:(C?-1:1)*(1/0);a=a+Math.pow(2,i),s=s-g}return(C?-1:1)*a*Math.pow(2,s-i)},e.write=function(t,r,n,i,o,s){var a,l,u,g=s*8-o-1,h=(1<<g)-1,v=h>>1,R=o===23?Math.pow(2,-24)-Math.pow(2,-77):0,C=i?0:s-1,A=i?1:-1,F=r<0||r===0&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(l=isNaN(r)?1:0,a=h):(a=Math.floor(Math.log(r)/Math.LN2),r*(u=Math.pow(2,-a))<1&&(a--,u*=2),a+v>=1?r+=R/u:r+=R*Math.pow(2,1-v),r*u>=2&&(a++,u/=2),a+v>=h?(l=0,a=h):a+v>=1?(l=(r*u-1)*Math.pow(2,o),a=a+v):(l=r*Math.pow(2,v-1)*Math.pow(2,o),a=0));o>=8;t[n+C]=l&255,C+=A,l/=256,o-=8);for(a=a<<o|l,g+=o;g>0;t[n+C]=a&255,C+=A,a/=256,g-=8);t[n+C-A]|=F*128}}),Br=oa(),Xe=sa(),Un=typeof Symbol==\"function\"&&typeof Symbol.for==\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;tt.Buffer=T;tt.SlowBuffer=fa;tt.INSPECT_MAX_BYTES=50;var Jt=2147483647;tt.kMaxLength=Jt;T.TYPED_ARRAY_SUPPORT=aa();!T.TYPED_ARRAY_SUPPORT&&typeof console<\"u\"&&typeof console.error==\"function\"&&console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");function aa(){try{let e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),e.foo()===42}catch{return!1}}Object.defineProperty(T.prototype,\"parent\",{enumerable:!0,get:function(){if(T.isBuffer(this))return this.buffer}});Object.defineProperty(T.prototype,\"offset\",{enumerable:!0,get:function(){if(T.isBuffer(this))return this.byteOffset}});function Re(e){if(e>Jt)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');let t=new Uint8Array(e);return Object.setPrototypeOf(t,T.prototype),t}function T(e,t,r){if(typeof e==\"number\"){if(typeof t==\"string\")throw new TypeError('The \"string\" argument must be of type string. Received type number');return Ur(e)}return Wn(e,t,r)}T.poolSize=8192;function Wn(e,t,r){if(typeof e==\"string\")return ua(e,t);if(ArrayBuffer.isView(e))return ca(e);if(e==null)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(ye(e,ArrayBuffer)||e&&ye(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer<\"u\"&&(ye(e,SharedArrayBuffer)||e&&ye(e.buffer,SharedArrayBuffer)))return Hn(e,t,r);if(typeof e==\"number\")throw new TypeError('The \"value\" argument must not be of type number. Received type number');let n=e.valueOf&&e.valueOf();if(n!=null&&n!==e)return T.from(n,t,r);let i=pa(e);if(i)return i;if(typeof Symbol<\"u\"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]==\"function\")return T.from(e[Symbol.toPrimitive](\"string\"),t,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}T.from=function(e,t,r){return Wn(e,t,r)};Object.setPrototypeOf(T.prototype,Uint8Array.prototype);Object.setPrototypeOf(T,Uint8Array);function Gn(e){if(typeof e!=\"number\")throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function la(e,t,r){return Gn(e),e<=0?Re(e):t!==void 0?typeof r==\"string\"?Re(e).fill(t,r):Re(e).fill(t):Re(e)}T.alloc=function(e,t,r){return la(e,t,r)};function Ur(e){return Gn(e),Re(e<0?0:qr(e)|0)}T.allocUnsafe=function(e){return Ur(e)};T.allocUnsafeSlow=function(e){return Ur(e)};function ua(e,t){if((typeof t!=\"string\"||t===\"\")&&(t=\"utf8\"),!T.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);let r=Kn(e,t)|0,n=Re(r),i=n.write(e,t);return i!==r&&(n=n.slice(0,i)),n}function $r(e){let t=e.length<0?0:qr(e.length)|0,r=Re(t);for(let n=0;n<t;n+=1)r[n]=e[n]&255;return r}function ca(e){if(ye(e,Uint8Array)){let t=new Uint8Array(e);return Hn(t.buffer,t.byteOffset,t.byteLength)}return $r(e)}function Hn(e,t,r){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw new RangeError('\"length\" is outside of buffer bounds');let n;return t===void 0&&r===void 0?n=new Uint8Array(e):r===void 0?n=new Uint8Array(e,t):n=new Uint8Array(e,t,r),Object.setPrototypeOf(n,T.prototype),n}function pa(e){if(T.isBuffer(e)){let t=qr(e.length)|0,r=Re(t);return r.length===0||e.copy(r,0,0,t),r}if(e.length!==void 0)return typeof e.length!=\"number\"||Qr(e.length)?Re(0):$r(e);if(e.type===\"Buffer\"&&Array.isArray(e.data))return $r(e.data)}function qr(e){if(e>=Jt)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+Jt.toString(16)+\" bytes\");return e|0}function fa(e){return+e!=e&&(e=0),T.alloc(+e)}T.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==T.prototype};T.compare=function(e,t){if(ye(e,Uint8Array)&&(e=T.from(e,e.offset,e.byteLength)),ye(t,Uint8Array)&&(t=T.from(t,t.offset,t.byteLength)),!T.isBuffer(e)||!T.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let r=e.length,n=t.length;for(let i=0,o=Math.min(r,n);i<o;++i)if(e[i]!==t[i]){r=e[i],n=t[i];break}return r<n?-1:n<r?1:0};T.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}};T.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(e.length===0)return T.alloc(0);let r;if(t===void 0)for(t=0,r=0;r<e.length;++r)t+=e[r].length;let n=T.allocUnsafe(t),i=0;for(r=0;r<e.length;++r){let o=e[r];if(ye(o,Uint8Array))i+o.length>n.length?(T.isBuffer(o)||(o=T.from(o)),o.copy(n,i)):Uint8Array.prototype.set.call(n,o,i);else if(T.isBuffer(o))o.copy(n,i);else throw new TypeError('\"list\" argument must be an Array of Buffers');i+=o.length}return n};function Kn(e,t){if(T.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||ye(e,ArrayBuffer))return e.byteLength;if(typeof e!=\"string\")throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let r=e.length,n=arguments.length>2&&arguments[2]===!0;if(!n&&r===0)return 0;let i=!1;for(;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return jr(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return r*2;case\"hex\":return r>>>1;case\"base64\":return ii(e).length;default:if(i)return n?-1:jr(e).length;t=(\"\"+t).toLowerCase(),i=!0}}T.byteLength=Kn;function da(e,t,r){let n=!1;if((t===void 0||t<0)&&(t=0),t>this.length||((r===void 0||r>this.length)&&(r=this.length),r<=0)||(r>>>=0,t>>>=0,r<=t))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return Pa(this,t,r);case\"utf8\":case\"utf-8\":return Yn(this,t,r);case\"ascii\":return xa(this,t,r);case\"latin1\":case\"binary\":return va(this,t,r);case\"base64\":return ba(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return Ta(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}T.prototype._isBuffer=!0;function qe(e,t,r){let n=e[t];e[t]=e[r],e[r]=n}T.prototype.swap16=function(){let e=this.length;if(e%2!==0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let t=0;t<e;t+=2)qe(this,t,t+1);return this};T.prototype.swap32=function(){let e=this.length;if(e%4!==0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let t=0;t<e;t+=4)qe(this,t,t+3),qe(this,t+1,t+2);return this};T.prototype.swap64=function(){let e=this.length;if(e%8!==0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let t=0;t<e;t+=8)qe(this,t,t+7),qe(this,t+1,t+6),qe(this,t+2,t+5),qe(this,t+3,t+4);return this};T.prototype.toString=function(){let e=this.length;return e===0?\"\":arguments.length===0?Yn(this,0,e):da.apply(this,arguments)};T.prototype.toLocaleString=T.prototype.toString;T.prototype.equals=function(e){if(!T.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e?!0:T.compare(this,e)===0};T.prototype.inspect=function(){let e=\"\",t=tt.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,t).replace(/(.{2})/g,\"$1 \").trim(),this.length>t&&(e+=\" ... \"),\"<Buffer \"+e+\">\"};Un&&(T.prototype[Un]=T.prototype.inspect);T.prototype.compare=function(e,t,r,n,i){if(ye(e,Uint8Array)&&(e=T.from(e,e.offset,e.byteLength)),!T.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(t===void 0&&(t=0),r===void 0&&(r=e?e.length:0),n===void 0&&(n=0),i===void 0&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;let o=i-n,s=r-t,a=Math.min(o,s),l=this.slice(n,i),u=e.slice(t,r);for(let g=0;g<a;++g)if(l[g]!==u[g]){o=l[g],s=u[g];break}return o<s?-1:s<o?1:0};function zn(e,t,r,n,i){if(e.length===0)return-1;if(typeof r==\"string\"?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,Qr(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0)if(i)r=0;else return-1;if(typeof t==\"string\"&&(t=T.from(t,n)),T.isBuffer(t))return t.length===0?-1:qn(e,t,r,n,i);if(typeof t==\"number\")return t=t&255,typeof Uint8Array.prototype.indexOf==\"function\"?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):qn(e,[t],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function qn(e,t,r,n,i){let o=1,s=e.length,a=t.length;if(n!==void 0&&(n=String(n).toLowerCase(),n===\"ucs2\"||n===\"ucs-2\"||n===\"utf16le\"||n===\"utf-16le\")){if(e.length<2||t.length<2)return-1;o=2,s/=2,a/=2,r/=2}function l(g,h){return o===1?g[h]:g.readUInt16BE(h*o)}let u;if(i){let g=-1;for(u=r;u<s;u++)if(l(e,u)===l(t,g===-1?0:u-g)){if(g===-1&&(g=u),u-g+1===a)return g*o}else g!==-1&&(u-=u-g),g=-1}else for(r+a>s&&(r=s-a),u=r;u>=0;u--){let g=!0;for(let h=0;h<a;h++)if(l(e,u+h)!==l(t,h)){g=!1;break}if(g)return u}return-1}T.prototype.includes=function(e,t,r){return this.indexOf(e,t,r)!==-1};T.prototype.indexOf=function(e,t,r){return zn(this,e,t,r,!0)};T.prototype.lastIndexOf=function(e,t,r){return zn(this,e,t,r,!1)};function ma(e,t,r,n){r=Number(r)||0;let i=e.length-r;n?(n=Number(n),n>i&&(n=i)):n=i;let o=t.length;n>o/2&&(n=o/2);let s;for(s=0;s<n;++s){let a=parseInt(t.substr(s*2,2),16);if(Qr(a))return s;e[r+s]=a}return s}function ga(e,t,r,n){return Wt(jr(t,e.length-r),e,r,n)}function ha(e,t,r,n){return Wt(Ra(t),e,r,n)}function ya(e,t,r,n){return Wt(ii(t),e,r,n)}function wa(e,t,r,n){return Wt(ka(t,e.length-r),e,r,n)}T.prototype.write=function(e,t,r,n){if(t===void 0)n=\"utf8\",r=this.length,t=0;else if(r===void 0&&typeof t==\"string\")n=t,r=this.length,t=0;else if(isFinite(t))t=t>>>0,isFinite(r)?(r=r>>>0,n===void 0&&(n=\"utf8\")):(n=r,r=void 0);else throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");let i=this.length-t;if((r===void 0||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");let o=!1;for(;;)switch(n){case\"hex\":return ma(this,e,t,r);case\"utf8\":case\"utf-8\":return ga(this,e,t,r);case\"ascii\":case\"latin1\":case\"binary\":return ha(this,e,t,r);case\"base64\":return ya(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return wa(this,e,t,r);default:if(o)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),o=!0}};T.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function ba(e,t,r){return t===0&&r===e.length?Br.fromByteArray(e):Br.fromByteArray(e.slice(t,r))}function Yn(e,t,r){r=Math.min(e.length,r);let n=[],i=t;for(;i<r;){let o=e[i],s=null,a=o>239?4:o>223?3:o>191?2:1;if(i+a<=r){let l,u,g,h;switch(a){case 1:o<128&&(s=o);break;case 2:l=e[i+1],(l&192)===128&&(h=(o&31)<<6|l&63,h>127&&(s=h));break;case 3:l=e[i+1],u=e[i+2],(l&192)===128&&(u&192)===128&&(h=(o&15)<<12|(l&63)<<6|u&63,h>2047&&(h<55296||h>57343)&&(s=h));break;case 4:l=e[i+1],u=e[i+2],g=e[i+3],(l&192)===128&&(u&192)===128&&(g&192)===128&&(h=(o&15)<<18|(l&63)<<12|(u&63)<<6|g&63,h>65535&&h<1114112&&(s=h))}}s===null?(s=65533,a=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),i+=a}return Ea(n)}var Vn=4096;function Ea(e){let t=e.length;if(t<=Vn)return String.fromCharCode.apply(String,e);let r=\"\",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=Vn));return r}function xa(e,t,r){let n=\"\";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]&127);return n}function va(e,t,r){let n=\"\";r=Math.min(e.length,r);for(let i=t;i<r;++i)n+=String.fromCharCode(e[i]);return n}function Pa(e,t,r){let n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);let i=\"\";for(let o=t;o<r;++o)i+=Oa[e[o]];return i}function Ta(e,t,r){let n=e.slice(t,r),i=\"\";for(let o=0;o<n.length-1;o+=2)i+=String.fromCharCode(n[o]+n[o+1]*256);return i}T.prototype.slice=function(e,t){let r=this.length;e=~~e,t=t===void 0?r:~~t,e<0?(e+=r,e<0&&(e=0)):e>r&&(e=r),t<0?(t+=r,t<0&&(t=0)):t>r&&(t=r),t<e&&(t=e);let n=this.subarray(e,t);return Object.setPrototypeOf(n,T.prototype),n};function W(e,t,r){if(e%1!==0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>r)throw new RangeError(\"Trying to access beyond buffer length\")}T.prototype.readUintLE=T.prototype.readUIntLE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=this[e],i=1,o=0;for(;++o<t&&(i*=256);)n+=this[e+o]*i;return n};T.prototype.readUintBE=T.prototype.readUIntBE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=this[e+--t],i=1;for(;t>0&&(i*=256);)n+=this[e+--t]*i;return n};T.prototype.readUint8=T.prototype.readUInt8=function(e,t){return e=e>>>0,t||W(e,1,this.length),this[e]};T.prototype.readUint16LE=T.prototype.readUInt16LE=function(e,t){return e=e>>>0,t||W(e,2,this.length),this[e]|this[e+1]<<8};T.prototype.readUint16BE=T.prototype.readUInt16BE=function(e,t){return e=e>>>0,t||W(e,2,this.length),this[e]<<8|this[e+1]};T.prototype.readUint32LE=T.prototype.readUInt32LE=function(e,t){return e=e>>>0,t||W(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216};T.prototype.readUint32BE=T.prototype.readUInt32BE=function(e,t){return e=e>>>0,t||W(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])};T.prototype.readBigUInt64LE=_e(function(e){e=e>>>0,et(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&yt(e,this.length-8);let n=t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24,i=this[++e]+this[++e]*2**8+this[++e]*2**16+r*2**24;return BigInt(n)+(BigInt(i)<<BigInt(32))});T.prototype.readBigUInt64BE=_e(function(e){e=e>>>0,et(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&yt(e,this.length-8);let n=t*2**24+this[++e]*2**16+this[++e]*2**8+this[++e],i=this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+r;return(BigInt(n)<<BigInt(32))+BigInt(i)});T.prototype.readIntLE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=this[e],i=1,o=0;for(;++o<t&&(i*=256);)n+=this[e+o]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*t)),n};T.prototype.readIntBE=function(e,t,r){e=e>>>0,t=t>>>0,r||W(e,t,this.length);let n=t,i=1,o=this[e+--n];for(;n>0&&(i*=256);)o+=this[e+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o};T.prototype.readInt8=function(e,t){return e=e>>>0,t||W(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]};T.prototype.readInt16LE=function(e,t){e=e>>>0,t||W(e,2,this.length);let r=this[e]|this[e+1]<<8;return r&32768?r|4294901760:r};T.prototype.readInt16BE=function(e,t){e=e>>>0,t||W(e,2,this.length);let r=this[e+1]|this[e]<<8;return r&32768?r|4294901760:r};T.prototype.readInt32LE=function(e,t){return e=e>>>0,t||W(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24};T.prototype.readInt32BE=function(e,t){return e=e>>>0,t||W(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]};T.prototype.readBigInt64LE=_e(function(e){e=e>>>0,et(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&yt(e,this.length-8);let n=this[e+4]+this[e+5]*2**8+this[e+6]*2**16+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24)});T.prototype.readBigInt64BE=_e(function(e){e=e>>>0,et(e,\"offset\");let t=this[e],r=this[e+7];(t===void 0||r===void 0)&&yt(e,this.length-8);let n=(t<<24)+this[++e]*2**16+this[++e]*2**8+this[++e];return(BigInt(n)<<BigInt(32))+BigInt(this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+r)});T.prototype.readFloatLE=function(e,t){return e=e>>>0,t||W(e,4,this.length),Xe.read(this,e,!0,23,4)};T.prototype.readFloatBE=function(e,t){return e=e>>>0,t||W(e,4,this.length),Xe.read(this,e,!1,23,4)};T.prototype.readDoubleLE=function(e,t){return e=e>>>0,t||W(e,8,this.length),Xe.read(this,e,!0,52,8)};T.prototype.readDoubleBE=function(e,t){return e=e>>>0,t||W(e,8,this.length),Xe.read(this,e,!1,52,8)};function oe(e,t,r,n,i,o){if(!T.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>i||t<o)throw new RangeError('\"value\" argument is out of bounds');if(r+n>e.length)throw new RangeError(\"Index out of range\")}T.prototype.writeUintLE=T.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t=t>>>0,r=r>>>0,!n){let s=Math.pow(2,8*r)-1;oe(this,e,t,r,s,0)}let i=1,o=0;for(this[t]=e&255;++o<r&&(i*=256);)this[t+o]=e/i&255;return t+r};T.prototype.writeUintBE=T.prototype.writeUIntBE=function(e,t,r,n){if(e=+e,t=t>>>0,r=r>>>0,!n){let s=Math.pow(2,8*r)-1;oe(this,e,t,r,s,0)}let i=r-1,o=1;for(this[t+i]=e&255;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r};T.prototype.writeUint8=T.prototype.writeUInt8=function(e,t,r){return e=+e,t=t>>>0,r||oe(this,e,t,1,255,0),this[t]=e&255,t+1};T.prototype.writeUint16LE=T.prototype.writeUInt16LE=function(e,t,r){return e=+e,t=t>>>0,r||oe(this,e,t,2,65535,0),this[t]=e&255,this[t+1]=e>>>8,t+2};T.prototype.writeUint16BE=T.prototype.writeUInt16BE=function(e,t,r){return e=+e,t=t>>>0,r||oe(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=e&255,t+2};T.prototype.writeUint32LE=T.prototype.writeUInt32LE=function(e,t,r){return e=+e,t=t>>>0,r||oe(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=e&255,t+4};T.prototype.writeUint32BE=T.prototype.writeUInt32BE=function(e,t,r){return e=+e,t=t>>>0,r||oe(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};function Zn(e,t,r,n,i){ni(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o=o>>8,e[r++]=o,o=o>>8,e[r++]=o,o=o>>8,e[r++]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,s=s>>8,e[r++]=s,r}function Xn(e,t,r,n,i){ni(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o=o>>8,e[r+6]=o,o=o>>8,e[r+5]=o,o=o>>8,e[r+4]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s=s>>8,e[r+2]=s,s=s>>8,e[r+1]=s,s=s>>8,e[r]=s,r+8}T.prototype.writeBigUInt64LE=_e(function(e,t=0){return Zn(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))});T.prototype.writeBigUInt64BE=_e(function(e,t=0){return Xn(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))});T.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t=t>>>0,!n){let a=Math.pow(2,8*r-1);oe(this,e,t,r,a-1,-a)}let i=0,o=1,s=0;for(this[t]=e&255;++i<r&&(o*=256);)e<0&&s===0&&this[t+i-1]!==0&&(s=1),this[t+i]=(e/o>>0)-s&255;return t+r};T.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t=t>>>0,!n){let a=Math.pow(2,8*r-1);oe(this,e,t,r,a-1,-a)}let i=r-1,o=1,s=0;for(this[t+i]=e&255;--i>=0&&(o*=256);)e<0&&s===0&&this[t+i+1]!==0&&(s=1),this[t+i]=(e/o>>0)-s&255;return t+r};T.prototype.writeInt8=function(e,t,r){return e=+e,t=t>>>0,r||oe(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=e&255,t+1};T.prototype.writeInt16LE=function(e,t,r){return e=+e,t=t>>>0,r||oe(this,e,t,2,32767,-32768),this[t]=e&255,this[t+1]=e>>>8,t+2};T.prototype.writeInt16BE=function(e,t,r){return e=+e,t=t>>>0,r||oe(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=e&255,t+2};T.prototype.writeInt32LE=function(e,t,r){return e=+e,t=t>>>0,r||oe(this,e,t,4,2147483647,-2147483648),this[t]=e&255,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4};T.prototype.writeInt32BE=function(e,t,r){return e=+e,t=t>>>0,r||oe(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};T.prototype.writeBigInt64LE=_e(function(e,t=0){return Zn(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});T.prototype.writeBigInt64BE=_e(function(e,t=0){return Xn(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});function ei(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function ti(e,t,r,n,i){return t=+t,r=r>>>0,i||ei(e,t,r,4,34028234663852886e22,-34028234663852886e22),Xe.write(e,t,r,n,23,4),r+4}T.prototype.writeFloatLE=function(e,t,r){return ti(this,e,t,!0,r)};T.prototype.writeFloatBE=function(e,t,r){return ti(this,e,t,!1,r)};function ri(e,t,r,n,i){return t=+t,r=r>>>0,i||ei(e,t,r,8,17976931348623157e292,-17976931348623157e292),Xe.write(e,t,r,n,52,8),r+8}T.prototype.writeDoubleLE=function(e,t,r){return ri(this,e,t,!0,r)};T.prototype.writeDoubleBE=function(e,t,r){return ri(this,e,t,!1,r)};T.prototype.copy=function(e,t,r,n){if(!T.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(r||(r=0),!n&&n!==0&&(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r||e.length===0||this.length===0)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(r<0||r>=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);let i=n-r;return this===e&&typeof Uint8Array.prototype.copyWithin==\"function\"?this.copyWithin(t,r,n):Uint8Array.prototype.set.call(e,this.subarray(r,n),t),i};T.prototype.fill=function(e,t,r,n){if(typeof e==\"string\"){if(typeof t==\"string\"?(n=t,t=0,r=this.length):typeof r==\"string\"&&(n=r,r=this.length),n!==void 0&&typeof n!=\"string\")throw new TypeError(\"encoding must be a string\");if(typeof n==\"string\"&&!T.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n);if(e.length===1){let o=e.charCodeAt(0);(n===\"utf8\"&&o<128||n===\"latin1\")&&(e=o)}}else typeof e==\"number\"?e=e&255:typeof e==\"boolean\"&&(e=Number(e));if(t<0||this.length<t||this.length<r)throw new RangeError(\"Out of range index\");if(r<=t)return this;t=t>>>0,r=r===void 0?this.length:r>>>0,e||(e=0);let i;if(typeof e==\"number\")for(i=t;i<r;++i)this[i]=e;else{let o=T.isBuffer(e)?e:T.from(e,n),s=o.length;if(s===0)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(i=0;i<r-t;++i)this[i+t]=o[i%s]}return this};var Ze={};function Vr(e,t,r){Ze[e]=class extends r{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(n){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:n,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}Vr(\"ERR_BUFFER_OUT_OF_BOUNDS\",function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"},RangeError);Vr(\"ERR_INVALID_ARG_TYPE\",function(e,t){return`The \"${e}\" argument must be of type number. Received type ${typeof t}`},TypeError);Vr(\"ERR_OUT_OF_RANGE\",function(e,t,r){let n=`The value of \"${e}\" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=Qn(String(r)):typeof r==\"bigint\"&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=Qn(i)),i+=\"n\"),n+=` It must be ${t}. Received ${i}`,n},RangeError);function Qn(e){let t=\"\",r=e.length,n=e[0]===\"-\"?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function Ca(e,t,r){et(t,\"offset\"),(e[t]===void 0||e[t+r]===void 0)&&yt(t,e.length-(r+1))}function ni(e,t,r,n,i,o){if(e>r||e<t){let s=typeof t==\"bigint\"?\"n\":\"\",a;throw o>3?t===0||t===BigInt(0)?a=`>= 0${s} and < 2${s} ** ${(o+1)*8}${s}`:a=`>= -(2${s} ** ${(o+1)*8-1}${s}) and < 2 ** ${(o+1)*8-1}${s}`:a=`>= ${t}${s} and <= ${r}${s}`,new Ze.ERR_OUT_OF_RANGE(\"value\",a,e)}Ca(n,i,o)}function et(e,t){if(typeof e!=\"number\")throw new Ze.ERR_INVALID_ARG_TYPE(t,\"number\",e)}function yt(e,t,r){throw Math.floor(e)!==e?(et(e,r),new Ze.ERR_OUT_OF_RANGE(r||\"offset\",\"an integer\",e)):t<0?new Ze.ERR_BUFFER_OUT_OF_BOUNDS:new Ze.ERR_OUT_OF_RANGE(r||\"offset\",`>= ${r?1:0} and <= ${t}`,e)}var Aa=/[^+/0-9A-Za-z-_]/g;function Sa(e){if(e=e.split(\"=\")[0],e=e.trim().replace(Aa,\"\"),e.length<2)return\"\";for(;e.length%4!==0;)e=e+\"=\";return e}function jr(e,t){t=t||1/0;let r,n=e.length,i=null,o=[];for(let s=0;s<n;++s){if(r=e.charCodeAt(s),r>55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}else if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,r&63|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else throw new Error(\"Invalid code point\")}return o}function Ra(e){let t=[];for(let r=0;r<e.length;++r)t.push(e.charCodeAt(r)&255);return t}function ka(e,t){let r,n,i,o=[];for(let s=0;s<e.length&&!((t-=2)<0);++s)r=e.charCodeAt(s),n=r>>8,i=r%256,o.push(i),o.push(n);return o}function ii(e){return Br.toByteArray(Sa(e))}function Wt(e,t,r,n){let i;for(i=0;i<n&&!(i+r>=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function ye(e,t){return e instanceof t||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===t.name}function Qr(e){return e!==e}var Oa=function(){let e=\"0123456789abcdef\",t=new Array(256);for(let r=0;r<16;++r){let n=r*16;for(let i=0;i<16;++i)t[n+i]=e[r]+e[i]}return t}();function _e(e){return typeof BigInt>\"u\"?Fa:e}function Fa(){throw new Error(\"BigInt not supported\")}});var w,m=Se(()=>{\"use strict\";w=fe(oi())});function Ma(){return!1}var _a,La,Gt,Gr=Se(()=>{\"use strict\";m();c();p();f();d();_a={},La={existsSync:Ma,promises:_a},Gt=La});var gi=ce((gf,mi)=>{\"use strict\";m();c();p();f();d();mi.exports=(zr(),Dr(Kr)).format});var Kr={};Ye(Kr,{default:()=>Xa,deprecate:()=>yi,format:()=>bi,inspect:()=>wi,promisify:()=>hi});function hi(e){return(...t)=>new Promise((r,n)=>{e(...t,(i,o)=>{i?n(i):r(o)})})}function yi(e,t){return(...r)=>(console.warn(t),e(...r))}function wi(e){return JSON.stringify(e,(t,r)=>typeof r==\"function\"?r.toString():typeof r==\"bigint\"?`${r}n`:r instanceof Error?{...r,message:r.message,stack:r.stack}:r)}var bi,Za,Xa,zr=Se(()=>{\"use strict\";m();c();p();f();d();bi=gi(),Za={promisify:hi,deprecate:yi,inspect:wi,format:bi},Xa=Za});function il(...e){return e.join(\"/\")}function ol(...e){return e.join(\"/\")}var Ti,sl,al,we,en=Se(()=>{\"use strict\";m();c();p();f();d();Ti=\"/\",sl={sep:Ti},al={resolve:il,posix:sl,join:ol,sep:Ti},we=al});var Ci=ce(()=>{\"use strict\";m();c();p();f();d()});var Ri=ce((fd,Si)=>{\"use strict\";m();c();p();f();d();Si.exports=e=>{let t=e.match(/^[ \\t]*(?=\\S)/gm);return t?t.reduce((r,n)=>Math.min(r,n.length),1/0):0}});var Oi=ce((wd,ki)=>{\"use strict\";m();c();p();f();d();var ul=Ri();ki.exports=e=>{let t=ul(e);if(t===0)return e;let r=new RegExp(`^[ \\\\t]{${t}}`,\"gm\");return e.replace(r,\"\")}});var Kt,Fi=Se(()=>{\"use strict\";m();c();p();f();d();Kt=class{constructor(){this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),this}emit(t,...r){return this.events[t]?(this.events[t].forEach(n=>{n(...r)}),!0):!1}}});var _i=ce((Yd,Mi)=>{\"use strict\";m();c();p();f();d();Mi.exports=(e,t=1,r)=>{if(r={indent:\" \",includeEmptyLines:!1,...r},typeof e!=\"string\")throw new TypeError(`Expected \\`input\\` to be a \\`string\\`, got \\`${typeof e}\\``);if(typeof t!=\"number\")throw new TypeError(`Expected \\`count\\` to be a \\`number\\`, got \\`${typeof t}\\``);if(typeof r.indent!=\"string\")throw new TypeError(`Expected \\`options.indent\\` to be a \\`string\\`, got \\`${typeof r.indent}\\``);if(t===0)return e;let n=r.includeEmptyLines?/^/gm:/^(?!\\s*$)/gm;return e.replace(n,r.indent.repeat(t))}});var Ni=ce((um,Ii)=>{\"use strict\";m();c();p();f();d();Ii.exports=({onlyFirst:e=!1}={})=>{let t=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(t,e?void 0:\"g\")}});var nn=ce((gm,Di)=>{\"use strict\";m();c();p();f();d();var ml=Ni();Di.exports=e=>typeof e==\"string\"?e.replace(ml(),\"\"):e});var Bi=ce((_m,Yt)=>{\"use strict\";m();c();p();f();d();Yt.exports=(e={})=>{let t;if(e.repoUrl)t=e.repoUrl;else if(e.user&&e.repo)t=`https://github.com/${e.user}/${e.repo}`;else throw new Error(\"You need to specify either the `repoUrl` option or both the `user` and `repo` options\");let r=new URL(`${t}/issues/new`),n=[\"body\",\"title\",\"labels\",\"template\",\"milestone\",\"assignee\",\"projects\"];for(let i of n){let o=e[i];if(o!==void 0){if(i===\"labels\"||i===\"projects\"){if(!Array.isArray(o))throw new TypeError(`The \\`${i}\\` option should be an array`);o=o.join(\",\")}r.searchParams.set(i,o)}}return r.toString()};Yt.exports.default=Yt.exports});var qi=ce((ky,wl)=>{wl.exports={name:\"@prisma/engines-version\",version:\"5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\",main:\"index.js\",types:\"index.d.ts\",license:\"Apache-2.0\",author:\"Tim Suchanek <suchanek@prisma.io>\",prisma:{enginesVersion:\"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\"},repository:{type:\"git\",url:\"https://github.com/prisma/engines-wrapper.git\",directory:\"packages/engines-version\"},devDependencies:{\"@types/node\":\"18.19.33\",typescript:\"4.9.5\"},files:[\"index.js\",\"index.d.ts\"],scripts:{build:\"tsc -d\"}}});var Vi=ce(()=>{\"use strict\";m();c();p();f();d()});var Fn=ce((cA,ls)=>{\"use strict\";m();c();p();f();d();ls.exports=function(){function e(t,r,n,i,o){return t<r||n<r?t>n?n+1:t+1:i===o?r:r+1}return function(t,r){if(t===r)return 0;if(t.length>r.length){var n=t;t=r,r=n}for(var i=t.length,o=r.length;i>0&&t.charCodeAt(i-1)===r.charCodeAt(o-1);)i--,o--;for(var s=0;s<i&&t.charCodeAt(s)===r.charCodeAt(s);)s++;if(i-=s,o-=s,i===0||o<3)return o;var a=0,l,u,g,h,v,R,C,A,F,L,N,M,k=[];for(l=0;l<i;l++)k.push(l+1),k.push(t.charCodeAt(s+l));for(var z=k.length-1;a<o-3;)for(F=r.charCodeAt(s+(u=a)),L=r.charCodeAt(s+(g=a+1)),N=r.charCodeAt(s+(h=a+2)),M=r.charCodeAt(s+(v=a+3)),R=a+=4,l=0;l<z;l+=2)C=k[l],A=k[l+1],u=e(C,u,g,F,A),g=e(u,g,h,L,A),h=e(g,h,v,N,A),R=e(h,v,R,M,A),k[l]=R,v=h,h=g,g=u,u=C;for(;a<o;)for(F=r.charCodeAt(s+(u=a)),R=++a,l=0;l<z;l+=2)C=k[l],k[l]=R=e(C,u,R,F,k[l+1]),u=C;return R}}()});var fp={};Ye(fp,{Debug:()=>Zr,Decimal:()=>ve,Extensions:()=>Jr,MetricsClient:()=>nt,NotFoundError:()=>Oe,PrismaClientInitializationError:()=>V,PrismaClientKnownRequestError:()=>G,PrismaClientRustPanicError:()=>ue,PrismaClientUnknownRequestError:()=>H,PrismaClientValidationError:()=>Y,Public:()=>Wr,Sql:()=>se,defineDmmfProperty:()=>Ui,empty:()=>Ji,getPrismaClient:()=>Ys,getRuntime:()=>Zo,join:()=>Qi,makeStrictEnum:()=>Zs,objectEnumValues:()=>Xt,raw:()=>dn,sqltag:()=>mn,warnEnvConflicts:()=>void 0,warnOnce:()=>St});module.exports=Dr(fp);m();c();p();f();d();var Jr={};Ye(Jr,{defineExtension:()=>si,getExtensionContext:()=>ai});m();c();p();f();d();m();c();p();f();d();function si(e){return typeof e==\"function\"?e:t=>t.$extends(e)}m();c();p();f();d();function ai(e){return e}var Wr={};Ye(Wr,{validator:()=>li});m();c();p();f();d();m();c();p();f();d();function li(...e){return t=>t}m();c();p();f();d();m();c();p();f();d();var Ht={};Ye(Ht,{$:()=>di,bgBlack:()=>Qa,bgBlue:()=>Ha,bgCyan:()=>za,bgGreen:()=>Wa,bgMagenta:()=>Ka,bgRed:()=>Ja,bgWhite:()=>Ya,bgYellow:()=>Ga,black:()=>ja,blue:()=>Je,bold:()=>de,cyan:()=>ke,dim:()=>wt,gray:()=>xt,green:()=>Et,grey:()=>Va,hidden:()=>Ba,inverse:()=>Da,italic:()=>Na,magenta:()=>Ua,red:()=>Ve,reset:()=>Ia,strikethrough:()=>$a,underline:()=>bt,white:()=>qa,yellow:()=>Qe});m();c();p();f();d();var Hr,ui,ci,pi,fi=!0;typeof y<\"u\"&&({FORCE_COLOR:Hr,NODE_DISABLE_COLORS:ui,NO_COLOR:ci,TERM:pi}=y.env||{},fi=y.stdout&&y.stdout.isTTY);var di={enabled:!ui&&ci==null&&pi!==\"dumb\"&&(Hr!=null&&Hr!==\"0\"||fi)};function U(e,t){let r=new RegExp(`\\\\x1b\\\\[${t}m`,\"g\"),n=`\\x1B[${e}m`,i=`\\x1B[${t}m`;return function(o){return!di.enabled||o==null?o:n+(~(\"\"+o).indexOf(i)?o.replace(r,i+n):o)+i}}var Ia=U(0,0),de=U(1,22),wt=U(2,22),Na=U(3,23),bt=U(4,24),Da=U(7,27),Ba=U(8,28),$a=U(9,29),ja=U(30,39),Ve=U(31,39),Et=U(32,39),Qe=U(33,39),Je=U(34,39),Ua=U(35,39),ke=U(36,39),qa=U(37,39),xt=U(90,39),Va=U(90,39),Qa=U(40,49),Ja=U(41,49),Wa=U(42,49),Ga=U(43,49),Ha=U(44,49),Ka=U(45,49),za=U(46,49),Ya=U(47,49);m();c();p();f();d();var el=100,Ei=[\"green\",\"yellow\",\"blue\",\"magenta\",\"cyan\",\"red\"],vt=[],xi=Date.now(),tl=0,Yr=typeof y<\"u\"?y.env:{};globalThis.DEBUG??=Yr.DEBUG??\"\";globalThis.DEBUG_COLORS??=Yr.DEBUG_COLORS?Yr.DEBUG_COLORS===\"true\":!0;var Pt={enable(e){typeof e==\"string\"&&(globalThis.DEBUG=e)},disable(){let e=globalThis.DEBUG;return globalThis.DEBUG=\"\",e},enabled(e){let t=globalThis.DEBUG.split(\",\").map(i=>i.replace(/[.+?^${}()|[\\]\\\\]/g,\"\\\\$&\")),r=t.some(i=>i===\"\"||i[0]===\"-\"?!1:e.match(RegExp(i.split(\"*\").join(\".*\")+\"$\"))),n=t.some(i=>i===\"\"||i[0]!==\"-\"?!1:e.match(RegExp(i.slice(1).split(\"*\").join(\".*\")+\"$\")));return r&&!n},log:(...e)=>{let[t,r,...n]=e,i;typeof require==\"function\"&&typeof y<\"u\"&&typeof y.stderr<\"u\"&&typeof y.stderr.write==\"function\"?i=(...o)=>{try{let s=(zr(),Dr(Kr));y.stderr.write(s.format(...o)+`\n`)}catch{i=console.warn??console.log}}:i=console.warn??console.log,i(`${t} ${r}`,...n)},formatters:{}};function rl(e){let t={color:Ei[tl++%Ei.length],enabled:Pt.enabled(e),namespace:e,log:Pt.log,extend:()=>{}},r=(...n)=>{let{enabled:i,namespace:o,color:s,log:a}=t;if(n.length!==0&&vt.push([o,...n]),vt.length>el&&vt.shift(),Pt.enabled(o)||i){let l=n.map(g=>typeof g==\"string\"?g:nl(g)),u=`+${Date.now()-xi}ms`;xi=Date.now(),globalThis.DEBUG_COLORS?a(Ht[s](de(o)),...l,Ht[s](u)):a(o,...l,u)}};return new Proxy(r,{get:(n,i)=>t[i],set:(n,i,o)=>t[i]=o})}var Zr=new Proxy(rl,{get:(e,t)=>Pt[t],set:(e,t,r)=>Pt[t]=r});function nl(e,t=2){let r=new Set;return JSON.stringify(e,(n,i)=>{if(typeof i==\"object\"&&i!==null){if(r.has(i))return\"[Circular *]\";r.add(i)}else if(typeof i==\"bigint\")return i.toString();return i},t)}function vi(e=7500){let t=vt.map(([r,...n])=>`${r} ${n.map(i=>typeof i==\"string\"?i:JSON.stringify(i)).join(\" \")}`).join(`\n`);return t.length<e?t:t.slice(-e)}function Pi(){vt.length=0}var le=Zr;m();c();p();f();d();m();c();p();f();d();var Xr=[\"darwin\",\"darwin-arm64\",\"debian-openssl-1.0.x\",\"debian-openssl-1.1.x\",\"debian-openssl-3.0.x\",\"rhel-openssl-1.0.x\",\"rhel-openssl-1.1.x\",\"rhel-openssl-3.0.x\",\"linux-arm64-openssl-1.1.x\",\"linux-arm64-openssl-1.0.x\",\"linux-arm64-openssl-3.0.x\",\"linux-arm-openssl-1.1.x\",\"linux-arm-openssl-1.0.x\",\"linux-arm-openssl-3.0.x\",\"linux-musl\",\"linux-musl-openssl-3.0.x\",\"linux-musl-arm64-openssl-1.1.x\",\"linux-musl-arm64-openssl-3.0.x\",\"linux-nixos\",\"linux-static-x64\",\"linux-static-arm64\",\"windows\",\"freebsd11\",\"freebsd12\",\"freebsd13\",\"freebsd14\",\"freebsd15\",\"openbsd\",\"netbsd\",\"arm\"];m();c();p();f();d();var Ai=\"library\";function Tt(e){let t=ll();return t||(e?.config.engineType===\"library\"?\"library\":e?.config.engineType===\"binary\"?\"binary\":Ai)}function ll(){let e=y.env.PRISMA_CLIENT_ENGINE_TYPE;return e===\"library\"?\"library\":e===\"binary\"?\"binary\":void 0}m();c();p();f();d();m();c();p();f();d();var Le;(t=>{let e;(k=>(k.findUnique=\"findUnique\",k.findUniqueOrThrow=\"findUniqueOrThrow\",k.findFirst=\"findFirst\",k.findFirstOrThrow=\"findFirstOrThrow\",k.findMany=\"findMany\",k.create=\"create\",k.createMany=\"createMany\",k.createManyAndReturn=\"createManyAndReturn\",k.update=\"update\",k.updateMany=\"updateMany\",k.upsert=\"upsert\",k.delete=\"delete\",k.deleteMany=\"deleteMany\",k.groupBy=\"groupBy\",k.count=\"count\",k.aggregate=\"aggregate\",k.findRaw=\"findRaw\",k.aggregateRaw=\"aggregateRaw\"))(e=t.ModelAction||={})})(Le||={});m();c();p();f();d();en();function tn(e){return we.sep===we.posix.sep?e:e.split(we.sep).join(we.posix.sep)}var At={};Ye(At,{error:()=>fl,info:()=>pl,log:()=>cl,query:()=>dl,should:()=>Li,tags:()=>Ct,warn:()=>rn});m();c();p();f();d();var Ct={error:Ve(\"prisma:error\"),warn:Qe(\"prisma:warn\"),info:ke(\"prisma:info\"),query:Je(\"prisma:query\")},Li={warn:()=>!y.env.PRISMA_DISABLE_WARNINGS};function cl(...e){console.log(...e)}function rn(e,...t){Li.warn()&&console.warn(`${Ct.warn} ${e}`,...t)}function pl(e,...t){console.info(`${Ct.info} ${e}`,...t)}function fl(e,...t){console.error(`${Ct.error} ${e}`,...t)}function dl(e,...t){console.log(`${Ct.query} ${e}`,...t)}m();c();p();f();d();function zt(e,t){if(!e)throw new Error(`${t}. This should never happen. If you see this error, please, open an issue at https://pris.ly/prisma-prisma-bug-report`)}m();c();p();f();d();function We(e,t){throw new Error(t)}m();c();p();f();d();function on(e,t){return Object.prototype.hasOwnProperty.call(e,t)}m();c();p();f();d();var sn=(e,t)=>e.reduce((r,n)=>(r[t(n)]=n,r),{});m();c();p();f();d();function rt(e,t){let r={};for(let n of Object.keys(e))r[n]=t(e[n],n);return r}m();c();p();f();d();function an(e,t){if(e.length===0)return;let r=e[0];for(let n=1;n<e.length;n++)t(r,e[n])<0&&(r=e[n]);return r}m();c();p();f();d();function re(e,t){Object.defineProperty(e,\"name\",{value:t,configurable:!0})}m();c();p();f();d();var $i=new Set,St=(e,t,...r)=>{$i.has(e)||($i.add(e),rn(t,...r))};m();c();p();f();d();var G=class extends Error{constructor(t,{code:r,clientVersion:n,meta:i,batchRequestIdx:o}){super(t),this.name=\"PrismaClientKnownRequestError\",this.code=r,this.clientVersion=n,this.meta=i,Object.defineProperty(this,\"batchRequestIdx\",{value:o,enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return\"PrismaClientKnownRequestError\"}};re(G,\"PrismaClientKnownRequestError\");var Oe=class extends G{constructor(t,r){super(t,{code:\"P2025\",clientVersion:r}),this.name=\"NotFoundError\"}};re(Oe,\"NotFoundError\");m();c();p();f();d();var V=class e extends Error{constructor(t,r,n){super(t),this.name=\"PrismaClientInitializationError\",this.clientVersion=r,this.errorCode=n,Error.captureStackTrace(e)}get[Symbol.toStringTag](){return\"PrismaClientInitializationError\"}};re(V,\"PrismaClientInitializationError\");m();c();p();f();d();var ue=class extends Error{constructor(t,r){super(t),this.name=\"PrismaClientRustPanicError\",this.clientVersion=r}get[Symbol.toStringTag](){return\"PrismaClientRustPanicError\"}};re(ue,\"PrismaClientRustPanicError\");m();c();p();f();d();var H=class extends Error{constructor(t,{clientVersion:r,batchRequestIdx:n}){super(t),this.name=\"PrismaClientUnknownRequestError\",this.clientVersion=r,Object.defineProperty(this,\"batchRequestIdx\",{value:n,writable:!0,enumerable:!1})}get[Symbol.toStringTag](){return\"PrismaClientUnknownRequestError\"}};re(H,\"PrismaClientUnknownRequestError\");m();c();p();f();d();var Y=class extends Error{constructor(r,{clientVersion:n}){super(r);this.name=\"PrismaClientValidationError\";this.clientVersion=n}get[Symbol.toStringTag](){return\"PrismaClientValidationError\"}};re(Y,\"PrismaClientValidationError\");m();c();p();f();d();var nt=class{constructor(t){this._engine=t}prometheus(t){return this._engine.metrics({format:\"prometheus\",...t})}json(t){return this._engine.metrics({format:\"json\",...t})}};m();c();p();f();d();m();c();p();f();d();function Rt(e){let t;return{get(){return t||(t={value:e()}),t.value}}}function Ui(e,t){let r=Rt(()=>gl(t));Object.defineProperty(e,\"dmmf\",{get:()=>r.get()})}function gl(e){return{datamodel:{models:ln(e.models),enums:ln(e.enums),types:ln(e.types)}}}function ln(e){return Object.entries(e).map(([t,r])=>({name:t,...r}))}m();c();p();f();d();var Zt=Symbol(),un=new WeakMap,Fe=class{constructor(t){t===Zt?un.set(this,`Prisma.${this._getName()}`):un.set(this,`new Prisma.${this._getNamespace()}.${this._getName()}()`)}_getName(){return this.constructor.name}toString(){return un.get(this)}},kt=class extends Fe{_getNamespace(){return\"NullTypes\"}},Ot=class extends kt{};cn(Ot,\"DbNull\");var Ft=class extends kt{};cn(Ft,\"JsonNull\");var Mt=class extends kt{};cn(Mt,\"AnyNull\");var Xt={classes:{DbNull:Ot,JsonNull:Ft,AnyNull:Mt},instances:{DbNull:new Ot(Zt),JsonNull:new Ft(Zt),AnyNull:new Mt(Zt)}};function cn(e,t){Object.defineProperty(e,\"name\",{value:t,configurable:!0})}m();c();p();f();d();m();c();p();f();d();m();c();p();f();d();m();c();p();f();d();function _t(e){return{ok:!1,error:e,map(){return _t(e)},flatMap(){return _t(e)}}}var pn=class{constructor(){this.registeredErrors=[]}consumeError(t){return this.registeredErrors[t]}registerNewError(t){let r=0;for(;this.registeredErrors[r]!==void 0;)r++;return this.registeredErrors[r]={error:t},r}},fn=e=>{let t=new pn,r=Ge(t,e.startTransaction.bind(e)),n={adapterName:e.adapterName,errorRegistry:t,queryRaw:Ge(t,e.queryRaw.bind(e)),executeRaw:Ge(t,e.executeRaw.bind(e)),provider:e.provider,startTransaction:async(...i)=>(await r(...i)).map(s=>hl(t,s))};return e.getConnectionInfo&&(n.getConnectionInfo=yl(t,e.getConnectionInfo.bind(e))),n},hl=(e,t)=>({adapterName:t.adapterName,provider:t.provider,options:t.options,queryRaw:Ge(e,t.queryRaw.bind(t)),executeRaw:Ge(e,t.executeRaw.bind(t)),commit:Ge(e,t.commit.bind(t)),rollback:Ge(e,t.rollback.bind(t))});function Ge(e,t){return async(...r)=>{try{return await t(...r)}catch(n){let i=e.registerNewError(n);return _t({kind:\"GenericJs\",id:i})}}}function yl(e,t){return(...r)=>{try{return t(...r)}catch(n){let i=e.registerNewError(n);return _t({kind:\"GenericJs\",id:i})}}}var zs=fe(qi());var wk=fe(Vi());Fi();Gr();en();m();c();p();f();d();var se=class e{constructor(t,r){if(t.length-1!==r.length)throw t.length===0?new TypeError(\"Expected at least 1 string\"):new TypeError(`Expected ${t.length} strings to have ${t.length-1} values`);let n=r.reduce((s,a)=>s+(a instanceof e?a.values.length:1),0);this.values=new Array(n),this.strings=new Array(n+1),this.strings[0]=t[0];let i=0,o=0;for(;i<r.length;){let s=r[i++],a=t[i];if(s instanceof e){this.strings[o]+=s.strings[0];let l=0;for(;l<s.values.length;)this.values[o++]=s.values[l++],this.strings[o]=s.strings[l];this.strings[o]+=a}else this.values[o++]=s,this.strings[o]=a}}get sql(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`?${this.strings[r++]}`;return n}get statement(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`:${r}${this.strings[r++]}`;return n}get text(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`$${r}${this.strings[r++]}`;return n}inspect(){return{sql:this.sql,statement:this.statement,text:this.text,values:this.values}}};function Qi(e,t=\",\",r=\"\",n=\"\"){if(e.length===0)throw new TypeError(\"Expected `join([])` to be called with an array of multiple elements, but got an empty array\");return new se([r,...Array(e.length-1).fill(t),n],e)}function dn(e){return new se([e],[])}var Ji=dn(\"\");function mn(e,...t){return new se(e,t)}m();c();p();f();d();m();c();p();f();d();function Lt(e){return{getKeys(){return Object.keys(e)},getPropertyValue(t){return e[t]}}}m();c();p();f();d();function ne(e,t){return{getKeys(){return[e]},getPropertyValue(){return t()}}}m();c();p();f();d();m();c();p();f();d();var be=class{constructor(){this._map=new Map}get(t){return this._map.get(t)?.value}set(t,r){this._map.set(t,{value:r})}getOrCreate(t,r){let n=this._map.get(t);if(n)return n.value;let i=r();return this.set(t,i),i}};function He(e){let t=new be;return{getKeys(){return e.getKeys()},getPropertyValue(r){return t.getOrCreate(r,()=>e.getPropertyValue(r))},getPropertyDescriptor(r){return e.getPropertyDescriptor?.(r)}}}m();c();p();f();d();m();c();p();f();d();var er={enumerable:!0,configurable:!0,writable:!0};function tr(e){let t=new Set(e);return{getOwnPropertyDescriptor:()=>er,has:(r,n)=>t.has(n),set:(r,n,i)=>t.add(n)&&Reflect.set(r,n,i),ownKeys:()=>[...t]}}var Wi=Symbol.for(\"nodejs.util.inspect.custom\");function Ee(e,t){let r=bl(t),n=new Set,i=new Proxy(e,{get(o,s){if(n.has(s))return o[s];let a=r.get(s);return a?a.getPropertyValue(s):o[s]},has(o,s){if(n.has(s))return!0;let a=r.get(s);return a?a.has?.(s)??!0:Reflect.has(o,s)},ownKeys(o){let s=Gi(Reflect.ownKeys(o),r),a=Gi(Array.from(r.keys()),r);return[...new Set([...s,...a,...n])]},set(o,s,a){return r.get(s)?.getPropertyDescriptor?.(s)?.writable===!1?!1:(n.add(s),Reflect.set(o,s,a))},getOwnPropertyDescriptor(o,s){let a=Reflect.getOwnPropertyDescriptor(o,s);if(a&&!a.configurable)return a;let l=r.get(s);return l?l.getPropertyDescriptor?{...er,...l?.getPropertyDescriptor(s)}:er:a},defineProperty(o,s,a){return n.add(s),Reflect.defineProperty(o,s,a)}});return i[Wi]=function(){let o={...this};return delete o[Wi],o},i}function bl(e){let t=new Map;for(let r of e){let n=r.getKeys();for(let i of n)t.set(i,r)}return t}function Gi(e,t){return e.filter(r=>t.get(r)?.has?.(r)??!0)}m();c();p();f();d();function it(e){return{getKeys(){return e},has(){return!1},getPropertyValue(){}}}m();c();p();f();d();function rr(e,t){return{batch:e,transaction:t?.kind===\"batch\"?{isolationLevel:t.options.isolationLevel}:void 0}}m();c();p();f();d();m();c();p();f();d();var ot=class{constructor(t=0,r){this.context=r;this.lines=[];this.currentLine=\"\";this.currentIndent=0;this.currentIndent=t}write(t){return typeof t==\"string\"?this.currentLine+=t:t.write(this),this}writeJoined(t,r){let n=r.length-1;for(let i=0;i<r.length;i++)this.write(r[i]),i!==n&&this.write(t);return this}writeLine(t){return this.write(t).newLine()}newLine(){this.lines.push(this.indentedCurrentLine()),this.currentLine=\"\",this.marginSymbol=void 0;let t=this.afterNextNewLineCallback;return this.afterNextNewLineCallback=void 0,t?.(),this}withIndent(t){return this.indent(),t(this),this.unindent(),this}afterNextNewline(t){return this.afterNextNewLineCallback=t,this}indent(){return this.currentIndent++,this}unindent(){return this.currentIndent>0&&this.currentIndent--,this}addMarginSymbol(t){return this.marginSymbol=t,this}toString(){return this.lines.concat(this.indentedCurrentLine()).join(`\n`)}getCurrentLineLength(){return this.currentLine.length}indentedCurrentLine(){let t=this.currentLine.padStart(this.currentLine.length+2*this.currentIndent);return this.marginSymbol?this.marginSymbol+t.slice(1):t}};m();c();p();f();d();m();c();p();f();d();function Hi(e){return e.substring(0,1).toLowerCase()+e.substring(1)}m();c();p();f();d();function st(e){return e instanceof Date||Object.prototype.toString.call(e)===\"[object Date]\"}function nr(e){return e.toString()!==\"Invalid Date\"}m();c();p();f();d();m();c();p();f();d();var at=9e15,Be=1e9,gn=\"0123456789abcdef\",or=\"2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058\",sr=\"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789\",hn={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-at,maxE:at,crypto:!1},Zi,Me,I=!0,lr=\"[DecimalError] \",De=lr+\"Invalid argument: \",Xi=lr+\"Precision limit exceeded\",eo=lr+\"crypto unavailable\",to=\"[object Decimal]\",te=Math.floor,J=Math.pow,El=/^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,xl=/^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,vl=/^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,ro=/^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,ge=1e7,_=7,Pl=9007199254740991,Tl=or.length-1,yn=sr.length-1,S={toStringTag:to};S.absoluteValue=S.abs=function(){var e=new this.constructor(this);return e.s<0&&(e.s=1),O(e)};S.ceil=function(){return O(new this.constructor(this),this.e+1,2)};S.clampedTo=S.clamp=function(e,t){var r,n=this,i=n.constructor;if(e=new i(e),t=new i(t),!e.s||!t.s)return new i(NaN);if(e.gt(t))throw Error(De+t);return r=n.cmp(e),r<0?e:n.cmp(t)>0?t:new i(n)};S.comparedTo=S.cmp=function(e){var t,r,n,i,o=this,s=o.d,a=(e=new o.constructor(e)).d,l=o.s,u=e.s;if(!s||!a)return!l||!u?NaN:l!==u?l:s===a?0:!s^l<0?1:-1;if(!s[0]||!a[0])return s[0]?l:a[0]?-u:0;if(l!==u)return l;if(o.e!==e.e)return o.e>e.e^l<0?1:-1;for(n=s.length,i=a.length,t=0,r=n<i?n:i;t<r;++t)if(s[t]!==a[t])return s[t]>a[t]^l<0?1:-1;return n===i?0:n>i^l<0?1:-1};S.cosine=S.cos=function(){var e,t,r=this,n=r.constructor;return r.d?r.d[0]?(e=n.precision,t=n.rounding,n.precision=e+Math.max(r.e,r.sd())+_,n.rounding=1,r=Cl(n,ao(n,r)),n.precision=e,n.rounding=t,O(Me==2||Me==3?r.neg():r,e,t,!0)):new n(1):new n(NaN)};S.cubeRoot=S.cbrt=function(){var e,t,r,n,i,o,s,a,l,u,g=this,h=g.constructor;if(!g.isFinite()||g.isZero())return new h(g);for(I=!1,o=g.s*J(g.s*g,1/3),!o||Math.abs(o)==1/0?(r=Z(g.d),e=g.e,(o=(e-r.length+1)%3)&&(r+=o==1||o==-2?\"0\":\"00\"),o=J(r,1/3),e=te((e+1)/3)-(e%3==(e<0?-1:2)),o==1/0?r=\"5e\"+e:(r=o.toExponential(),r=r.slice(0,r.indexOf(\"e\")+1)+e),n=new h(r),n.s=g.s):n=new h(o.toString()),s=(e=h.precision)+3;;)if(a=n,l=a.times(a).times(a),u=l.plus(g),n=$(u.plus(g).times(a),u.plus(l),s+2,1),Z(a.d).slice(0,s)===(r=Z(n.d)).slice(0,s))if(r=r.slice(s-3,s+1),r==\"9999\"||!i&&r==\"4999\"){if(!i&&(O(a,e+1,0),a.times(a).times(a).eq(g))){n=a;break}s+=4,i=1}else{(!+r||!+r.slice(1)&&r.charAt(0)==\"5\")&&(O(n,e+1,1),t=!n.times(n).times(n).eq(g));break}return I=!0,O(n,e,h.rounding,t)};S.decimalPlaces=S.dp=function(){var e,t=this.d,r=NaN;if(t){if(e=t.length-1,r=(e-te(this.e/_))*_,e=t[e],e)for(;e%10==0;e/=10)r--;r<0&&(r=0)}return r};S.dividedBy=S.div=function(e){return $(this,new this.constructor(e))};S.dividedToIntegerBy=S.divToInt=function(e){var t=this,r=t.constructor;return O($(t,new r(e),0,1,1),r.precision,r.rounding)};S.equals=S.eq=function(e){return this.cmp(e)===0};S.floor=function(){return O(new this.constructor(this),this.e+1,3)};S.greaterThan=S.gt=function(e){return this.cmp(e)>0};S.greaterThanOrEqualTo=S.gte=function(e){var t=this.cmp(e);return t==1||t===0};S.hyperbolicCosine=S.cosh=function(){var e,t,r,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;r=s.precision,n=s.rounding,s.precision=r+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(e=Math.ceil(i/3),t=(1/cr(4,e)).toString()):(e=16,t=\"2.3283064365386962890625e-10\"),o=lt(s,1,o.times(t),new s(1),!0);for(var l,u=e,g=new s(8);u--;)l=o.times(o),o=a.minus(l.times(g.minus(l.times(g))));return O(o,s.precision=r,s.rounding=n,!0)};S.hyperbolicSine=S.sinh=function(){var e,t,r,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(t=o.precision,r=o.rounding,o.precision=t+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=lt(o,2,i,i,!0);else{e=1.4*Math.sqrt(n),e=e>16?16:e|0,i=i.times(1/cr(5,e)),i=lt(o,2,i,i,!0);for(var s,a=new o(5),l=new o(16),u=new o(20);e--;)s=i.times(i),i=i.times(a.plus(s.times(l.times(s).plus(u))))}return o.precision=t,o.rounding=r,O(i,t,r,!0)};S.hyperbolicTangent=S.tanh=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+7,n.rounding=1,$(r.sinh(),r.cosh(),n.precision=e,n.rounding=t)):new n(r.s)};S.inverseCosine=S.acos=function(){var e,t=this,r=t.constructor,n=t.abs().cmp(1),i=r.precision,o=r.rounding;return n!==-1?n===0?t.isNeg()?me(r,i,o):new r(0):new r(NaN):t.isZero()?me(r,i+4,o).times(.5):(r.precision=i+6,r.rounding=1,t=t.asin(),e=me(r,i+4,o).times(.5),r.precision=i,r.rounding=o,e.minus(t))};S.inverseHyperbolicCosine=S.acosh=function(){var e,t,r=this,n=r.constructor;return r.lte(1)?new n(r.eq(1)?0:NaN):r.isFinite()?(e=n.precision,t=n.rounding,n.precision=e+Math.max(Math.abs(r.e),r.sd())+4,n.rounding=1,I=!1,r=r.times(r).minus(1).sqrt().plus(r),I=!0,n.precision=e,n.rounding=t,r.ln()):new n(r)};S.inverseHyperbolicSine=S.asinh=function(){var e,t,r=this,n=r.constructor;return!r.isFinite()||r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+2*Math.max(Math.abs(r.e),r.sd())+6,n.rounding=1,I=!1,r=r.times(r).plus(1).sqrt().plus(r),I=!0,n.precision=e,n.rounding=t,r.ln())};S.inverseHyperbolicTangent=S.atanh=function(){var e,t,r,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(e=o.precision,t=o.rounding,n=i.sd(),Math.max(n,e)<2*-i.e-1?O(new o(i),e,t,!0):(o.precision=r=n-i.e,i=$(i.plus(1),new o(1).minus(i),r+e,1),o.precision=e+4,o.rounding=1,i=i.ln(),o.precision=e,o.rounding=t,i.times(.5))):new o(NaN)};S.inverseSine=S.asin=function(){var e,t,r,n,i=this,o=i.constructor;return i.isZero()?new o(i):(t=i.abs().cmp(1),r=o.precision,n=o.rounding,t!==-1?t===0?(e=me(o,r+4,n).times(.5),e.s=i.s,e):new o(NaN):(o.precision=r+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=r,o.rounding=n,i.times(2)))};S.inverseTangent=S.atan=function(){var e,t,r,n,i,o,s,a,l,u=this,g=u.constructor,h=g.precision,v=g.rounding;if(u.isFinite()){if(u.isZero())return new g(u);if(u.abs().eq(1)&&h+4<=yn)return s=me(g,h+4,v).times(.25),s.s=u.s,s}else{if(!u.s)return new g(NaN);if(h+4<=yn)return s=me(g,h+4,v).times(.5),s.s=u.s,s}for(g.precision=a=h+10,g.rounding=1,r=Math.min(28,a/_+2|0),e=r;e;--e)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(I=!1,t=Math.ceil(a/_),n=1,l=u.times(u),s=new g(u),i=u;e!==-1;)if(i=i.times(l),o=s.minus(i.div(n+=2)),i=i.times(l),s=o.plus(i.div(n+=2)),s.d[t]!==void 0)for(e=t;s.d[e]===o.d[e]&&e--;);return r&&(s=s.times(2<<r-1)),I=!0,O(s,g.precision=h,g.rounding=v,!0)};S.isFinite=function(){return!!this.d};S.isInteger=S.isInt=function(){return!!this.d&&te(this.e/_)>this.d.length-2};S.isNaN=function(){return!this.s};S.isNegative=S.isNeg=function(){return this.s<0};S.isPositive=S.isPos=function(){return this.s>0};S.isZero=function(){return!!this.d&&this.d[0]===0};S.lessThan=S.lt=function(e){return this.cmp(e)<0};S.lessThanOrEqualTo=S.lte=function(e){return this.cmp(e)<1};S.logarithm=S.log=function(e){var t,r,n,i,o,s,a,l,u=this,g=u.constructor,h=g.precision,v=g.rounding,R=5;if(e==null)e=new g(10),t=!0;else{if(e=new g(e),r=e.d,e.s<0||!r||!r[0]||e.eq(1))return new g(NaN);t=e.eq(10)}if(r=u.d,u.s<0||!r||!r[0]||u.eq(1))return new g(r&&!r[0]?-1/0:u.s!=1?NaN:r?0:1/0);if(t)if(r.length>1)o=!0;else{for(i=r[0];i%10===0;)i/=10;o=i!==1}if(I=!1,a=h+R,s=Ne(u,a),n=t?ar(g,a+10):Ne(e,a),l=$(s,n,a,1),It(l.d,i=h,v))do if(a+=10,s=Ne(u,a),n=t?ar(g,a+10):Ne(e,a),l=$(s,n,a,1),!o){+Z(l.d).slice(i+1,i+15)+1==1e14&&(l=O(l,h+1,0));break}while(It(l.d,i+=10,v));return I=!0,O(l,h,v)};S.minus=S.sub=function(e){var t,r,n,i,o,s,a,l,u,g,h,v,R=this,C=R.constructor;if(e=new C(e),!R.d||!e.d)return!R.s||!e.s?e=new C(NaN):R.d?e.s=-e.s:e=new C(e.d||R.s!==e.s?R:NaN),e;if(R.s!=e.s)return e.s=-e.s,R.plus(e);if(u=R.d,v=e.d,a=C.precision,l=C.rounding,!u[0]||!v[0]){if(v[0])e.s=-e.s;else if(u[0])e=new C(R);else return new C(l===3?-0:0);return I?O(e,a,l):e}if(r=te(e.e/_),g=te(R.e/_),u=u.slice(),o=g-r,o){for(h=o<0,h?(t=u,o=-o,s=v.length):(t=v,r=g,s=u.length),n=Math.max(Math.ceil(a/_),s)+2,o>n&&(o=n,t.length=1),t.reverse(),n=o;n--;)t.push(0);t.reverse()}else{for(n=u.length,s=v.length,h=n<s,h&&(s=n),n=0;n<s;n++)if(u[n]!=v[n]){h=u[n]<v[n];break}o=0}for(h&&(t=u,u=v,v=t,e.s=-e.s),s=u.length,n=v.length-s;n>0;--n)u[s++]=0;for(n=v.length;n>o;){if(u[--n]<v[n]){for(i=n;i&&u[--i]===0;)u[i]=ge-1;--u[i],u[n]+=ge}u[n]-=v[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--r;return u[0]?(e.d=u,e.e=ur(u,r),I?O(e,a,l):e):new C(l===3?-0:0)};S.modulo=S.mod=function(e){var t,r=this,n=r.constructor;return e=new n(e),!r.d||!e.s||e.d&&!e.d[0]?new n(NaN):!e.d||r.d&&!r.d[0]?O(new n(r),n.precision,n.rounding):(I=!1,n.modulo==9?(t=$(r,e.abs(),0,3,1),t.s*=e.s):t=$(r,e,0,n.modulo,1),t=t.times(e),I=!0,r.minus(t))};S.naturalExponential=S.exp=function(){return wn(this)};S.naturalLogarithm=S.ln=function(){return Ne(this)};S.negated=S.neg=function(){var e=new this.constructor(this);return e.s=-e.s,O(e)};S.plus=S.add=function(e){var t,r,n,i,o,s,a,l,u,g,h=this,v=h.constructor;if(e=new v(e),!h.d||!e.d)return!h.s||!e.s?e=new v(NaN):h.d||(e=new v(e.d||h.s===e.s?h:NaN)),e;if(h.s!=e.s)return e.s=-e.s,h.minus(e);if(u=h.d,g=e.d,a=v.precision,l=v.rounding,!u[0]||!g[0])return g[0]||(e=new v(h)),I?O(e,a,l):e;if(o=te(h.e/_),n=te(e.e/_),u=u.slice(),i=o-n,i){for(i<0?(r=u,i=-i,s=g.length):(r=g,n=o,s=u.length),o=Math.ceil(a/_),s=o>s?o+1:s+1,i>s&&(i=s,r.length=1),r.reverse();i--;)r.push(0);r.reverse()}for(s=u.length,i=g.length,s-i<0&&(i=s,r=g,g=u,u=r),t=0;i;)t=(u[--i]=u[i]+g[i]+t)/ge|0,u[i]%=ge;for(t&&(u.unshift(t),++n),s=u.length;u[--s]==0;)u.pop();return e.d=u,e.e=ur(u,n),I?O(e,a,l):e};S.precision=S.sd=function(e){var t,r=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(De+e);return r.d?(t=no(r.d),e&&r.e+1>t&&(t=r.e+1)):t=NaN,t};S.round=function(){var e=this,t=e.constructor;return O(new t(e),e.e+1,t.rounding)};S.sine=S.sin=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+Math.max(r.e,r.sd())+_,n.rounding=1,r=Sl(n,ao(n,r)),n.precision=e,n.rounding=t,O(Me>2?r.neg():r,e,t,!0)):new n(NaN)};S.squareRoot=S.sqrt=function(){var e,t,r,n,i,o,s=this,a=s.d,l=s.e,u=s.s,g=s.constructor;if(u!==1||!a||!a[0])return new g(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(I=!1,u=Math.sqrt(+s),u==0||u==1/0?(t=Z(a),(t.length+l)%2==0&&(t+=\"0\"),u=Math.sqrt(t),l=te((l+1)/2)-(l<0||l%2),u==1/0?t=\"5e\"+l:(t=u.toExponential(),t=t.slice(0,t.indexOf(\"e\")+1)+l),n=new g(t)):n=new g(u.toString()),r=(l=g.precision)+3;;)if(o=n,n=o.plus($(s,o,r+2,1)).times(.5),Z(o.d).slice(0,r)===(t=Z(n.d)).slice(0,r))if(t=t.slice(r-3,r+1),t==\"9999\"||!i&&t==\"4999\"){if(!i&&(O(o,l+1,0),o.times(o).eq(s))){n=o;break}r+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)==\"5\")&&(O(n,l+1,1),e=!n.times(n).eq(s));break}return I=!0,O(n,l,g.rounding,e)};S.tangent=S.tan=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+10,n.rounding=1,r=r.sin(),r.s=1,r=$(r,new n(1).minus(r.times(r)).sqrt(),e+10,0),n.precision=e,n.rounding=t,O(Me==2||Me==4?r.neg():r,e,t,!0)):new n(NaN)};S.times=S.mul=function(e){var t,r,n,i,o,s,a,l,u,g=this,h=g.constructor,v=g.d,R=(e=new h(e)).d;if(e.s*=g.s,!v||!v[0]||!R||!R[0])return new h(!e.s||v&&!v[0]&&!R||R&&!R[0]&&!v?NaN:!v||!R?e.s/0:e.s*0);for(r=te(g.e/_)+te(e.e/_),l=v.length,u=R.length,l<u&&(o=v,v=R,R=o,s=l,l=u,u=s),o=[],s=l+u,n=s;n--;)o.push(0);for(n=u;--n>=0;){for(t=0,i=l+n;i>n;)a=o[i]+R[n]*v[i-n-1]+t,o[i--]=a%ge|0,t=a/ge|0;o[i]=(o[i]+t)%ge|0}for(;!o[--s];)o.pop();return t?++r:o.shift(),e.d=o,e.e=ur(o,r),I?O(e,h.precision,h.rounding):e};S.toBinary=function(e,t){return En(this,2,e,t)};S.toDecimalPlaces=S.toDP=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(ae(e,0,Be),t===void 0?t=n.rounding:ae(t,0,8),O(r,e+r.e+1,t))};S.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=xe(n,!0):(ae(e,0,Be),t===void 0?t=i.rounding:ae(t,0,8),n=O(new i(n),e+1,t),r=xe(n,!0,e+1)),n.isNeg()&&!n.isZero()?\"-\"+r:r};S.toFixed=function(e,t){var r,n,i=this,o=i.constructor;return e===void 0?r=xe(i):(ae(e,0,Be),t===void 0?t=o.rounding:ae(t,0,8),n=O(new o(i),e+i.e+1,t),r=xe(n,!1,e+n.e+1)),i.isNeg()&&!i.isZero()?\"-\"+r:r};S.toFraction=function(e){var t,r,n,i,o,s,a,l,u,g,h,v,R=this,C=R.d,A=R.constructor;if(!C)return new A(R);if(u=r=new A(1),n=l=new A(0),t=new A(n),o=t.e=no(C)-R.e-1,s=o%_,t.d[0]=J(10,s<0?_+s:s),e==null)e=o>0?t:u;else{if(a=new A(e),!a.isInt()||a.lt(u))throw Error(De+a);e=a.gt(t)?o>0?t:u:a}for(I=!1,a=new A(Z(C)),g=A.precision,A.precision=o=C.length*_*2;h=$(a,t,0,1,1),i=r.plus(h.times(n)),i.cmp(e)!=1;)r=n,n=i,i=u,u=l.plus(h.times(i)),l=i,i=t,t=a.minus(h.times(i)),a=i;return i=$(e.minus(r),n,0,1,1),l=l.plus(i.times(u)),r=r.plus(i.times(n)),l.s=u.s=R.s,v=$(u,n,o,1).minus(R).abs().cmp($(l,r,o,1).minus(R).abs())<1?[u,n]:[l,r],A.precision=g,I=!0,v};S.toHexadecimal=S.toHex=function(e,t){return En(this,16,e,t)};S.toNearest=function(e,t){var r=this,n=r.constructor;if(r=new n(r),e==null){if(!r.d)return r;e=new n(1),t=n.rounding}else{if(e=new n(e),t===void 0?t=n.rounding:ae(t,0,8),!r.d)return e.s?r:e;if(!e.d)return e.s&&(e.s=r.s),e}return e.d[0]?(I=!1,r=$(r,e,0,t,1).times(e),I=!0,O(r)):(e.s=r.s,r=e),r};S.toNumber=function(){return+this};S.toOctal=function(e,t){return En(this,8,e,t)};S.toPower=S.pow=function(e){var t,r,n,i,o,s,a=this,l=a.constructor,u=+(e=new l(e));if(!a.d||!e.d||!a.d[0]||!e.d[0])return new l(J(+a,u));if(a=new l(a),a.eq(1))return a;if(n=l.precision,o=l.rounding,e.eq(1))return O(a,n,o);if(t=te(e.e/_),t>=e.d.length-1&&(r=u<0?-u:u)<=Pl)return i=io(l,a,r,n),e.s<0?new l(1).div(i):O(i,n,o);if(s=a.s,s<0){if(t<e.d.length-1)return new l(NaN);if(e.d[t]&1||(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return r=J(+a,u),t=r==0||!isFinite(r)?te(u*(Math.log(\"0.\"+Z(a.d))/Math.LN10+a.e+1)):new l(r+\"\").e,t>l.maxE+1||t<l.minE-1?new l(t>0?s/0:0):(I=!1,l.rounding=a.s=1,r=Math.min(12,(t+\"\").length),i=wn(e.times(Ne(a,n+r)),n),i.d&&(i=O(i,n+5,1),It(i.d,n,o)&&(t=n+10,i=O(wn(e.times(Ne(a,t+r)),t),t+5,1),+Z(i.d).slice(n+1,n+15)+1==1e14&&(i=O(i,n+1,0)))),i.s=s,I=!0,l.rounding=o,O(i,n,o))};S.toPrecision=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=xe(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(ae(e,1,Be),t===void 0?t=i.rounding:ae(t,0,8),n=O(new i(n),e,t),r=xe(n,e<=n.e||n.e<=i.toExpNeg,e)),n.isNeg()&&!n.isZero()?\"-\"+r:r};S.toSignificantDigits=S.toSD=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(ae(e,1,Be),t===void 0?t=n.rounding:ae(t,0,8)),O(new n(r),e,t)};S.toString=function(){var e=this,t=e.constructor,r=xe(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()&&!e.isZero()?\"-\"+r:r};S.truncated=S.trunc=function(){return O(new this.constructor(this),this.e+1,1)};S.valueOf=S.toJSON=function(){var e=this,t=e.constructor,r=xe(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()?\"-\"+r:r};function Z(e){var t,r,n,i=e.length-1,o=\"\",s=e[0];if(i>0){for(o+=s,t=1;t<i;t++)n=e[t]+\"\",r=_-n.length,r&&(o+=Ie(r)),o+=n;s=e[t],n=s+\"\",r=_-n.length,r&&(o+=Ie(r))}else if(s===0)return\"0\";for(;s%10===0;)s/=10;return o+s}function ae(e,t,r){if(e!==~~e||e<t||e>r)throw Error(De+e)}function It(e,t,r,n){var i,o,s,a;for(o=e[0];o>=10;o/=10)--t;return--t<0?(t+=_,i=0):(i=Math.ceil((t+1)/_),t%=_),o=J(10,_-t),a=e[i]%o|0,n==null?t<3?(t==0?a=a/100|0:t==1&&(a=a/10|0),s=r<4&&a==99999||r>3&&a==49999||a==5e4||a==0):s=(r<4&&a+1==o||r>3&&a+1==o/2)&&(e[i+1]/o/100|0)==J(10,t-2)-1||(a==o/2||a==0)&&(e[i+1]/o/100|0)==0:t<4?(t==0?a=a/1e3|0:t==1?a=a/100|0:t==2&&(a=a/10|0),s=(n||r<4)&&a==9999||!n&&r>3&&a==4999):s=((n||r<4)&&a+1==o||!n&&r>3&&a+1==o/2)&&(e[i+1]/o/1e3|0)==J(10,t-3)-1,s}function ir(e,t,r){for(var n,i=[0],o,s=0,a=e.length;s<a;){for(o=i.length;o--;)i[o]*=t;for(i[0]+=gn.indexOf(e.charAt(s++)),n=0;n<i.length;n++)i[n]>r-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/r|0,i[n]%=r)}return i.reverse()}function Cl(e,t){var r,n,i;if(t.isZero())return t;n=t.d.length,n<32?(r=Math.ceil(n/3),i=(1/cr(4,r)).toString()):(r=16,i=\"2.3283064365386962890625e-10\"),e.precision+=r,t=lt(e,1,t.times(i),new e(1));for(var o=r;o--;){var s=t.times(t);t=s.times(s).minus(s).times(8).plus(1)}return e.precision-=r,t}var $=function(){function e(n,i,o){var s,a=0,l=n.length;for(n=n.slice();l--;)s=n[l]*i+a,n[l]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function t(n,i,o,s){var a,l;if(o!=s)l=o>s?1:-1;else for(a=l=0;a<o;a++)if(n[a]!=i[a]){l=n[a]>i[a]?1:-1;break}return l}function r(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,l){var u,g,h,v,R,C,A,F,L,N,M,k,z,j,ht,Q,ie,Ae,X,ze,Vt=n.constructor,Nr=n.s==i.s?1:-1,ee=n.d,B=i.d;if(!ee||!ee[0]||!B||!B[0])return new Vt(!n.s||!i.s||(ee?B&&ee[0]==B[0]:!B)?NaN:ee&&ee[0]==0||!B?Nr*0:Nr/0);for(l?(R=1,g=n.e-i.e):(l=ge,R=_,g=te(n.e/R)-te(i.e/R)),X=B.length,ie=ee.length,L=new Vt(Nr),N=L.d=[],h=0;B[h]==(ee[h]||0);h++);if(B[h]>(ee[h]||0)&&g--,o==null?(j=o=Vt.precision,s=Vt.rounding):a?j=o+(n.e-i.e)+1:j=o,j<0)N.push(1),C=!0;else{if(j=j/R+2|0,h=0,X==1){for(v=0,B=B[0],j++;(h<ie||v)&&j--;h++)ht=v*l+(ee[h]||0),N[h]=ht/B|0,v=ht%B|0;C=v||h<ie}else{for(v=l/(B[0]+1)|0,v>1&&(B=e(B,v,l),ee=e(ee,v,l),X=B.length,ie=ee.length),Q=X,M=ee.slice(0,X),k=M.length;k<X;)M[k++]=0;ze=B.slice(),ze.unshift(0),Ae=B[0],B[1]>=l/2&&++Ae;do v=0,u=t(B,M,X,k),u<0?(z=M[0],X!=k&&(z=z*l+(M[1]||0)),v=z/Ae|0,v>1?(v>=l&&(v=l-1),A=e(B,v,l),F=A.length,k=M.length,u=t(A,M,F,k),u==1&&(v--,r(A,X<F?ze:B,F,l))):(v==0&&(u=v=1),A=B.slice()),F=A.length,F<k&&A.unshift(0),r(M,A,k,l),u==-1&&(k=M.length,u=t(B,M,X,k),u<1&&(v++,r(M,X<k?ze:B,k,l))),k=M.length):u===0&&(v++,M=[0]),N[h++]=v,u&&M[0]?M[k++]=ee[Q]||0:(M=[ee[Q]],k=1);while((Q++<ie||M[0]!==void 0)&&j--);C=M[0]!==void 0}N[0]||N.shift()}if(R==1)L.e=g,Zi=C;else{for(h=1,v=N[0];v>=10;v/=10)h++;L.e=h+g*R-1,O(L,a?o+L.e+1:o,s,C)}return L}}();function O(e,t,r,n){var i,o,s,a,l,u,g,h,v,R=e.constructor;e:if(t!=null){if(h=e.d,!h)return e;for(i=1,a=h[0];a>=10;a/=10)i++;if(o=t-i,o<0)o+=_,s=t,g=h[v=0],l=g/J(10,i-s-1)%10|0;else if(v=Math.ceil((o+1)/_),a=h.length,v>=a)if(n){for(;a++<=v;)h.push(0);g=l=0,i=1,o%=_,s=o-_+1}else break e;else{for(g=a=h[v],i=1;a>=10;a/=10)i++;o%=_,s=o-_+i,l=s<0?0:g/J(10,i-s-1)%10|0}if(n=n||t<0||h[v+1]!==void 0||(s<0?g:g%J(10,i-s-1)),u=r<4?(l||n)&&(r==0||r==(e.s<0?3:2)):l>5||l==5&&(r==4||n||r==6&&(o>0?s>0?g/J(10,i-s):0:h[v-1])%10&1||r==(e.s<0?8:7)),t<1||!h[0])return h.length=0,u?(t-=e.e+1,h[0]=J(10,(_-t%_)%_),e.e=-t||0):h[0]=e.e=0,e;if(o==0?(h.length=v,a=1,v--):(h.length=v+1,a=J(10,_-o),h[v]=s>0?(g/J(10,i-s)%J(10,s)|0)*a:0),u)for(;;)if(v==0){for(o=1,s=h[0];s>=10;s/=10)o++;for(s=h[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(e.e++,h[0]==ge&&(h[0]=1));break}else{if(h[v]+=a,h[v]!=ge)break;h[v--]=0,a=1}for(o=h.length;h[--o]===0;)h.pop()}return I&&(e.e>R.maxE?(e.d=null,e.e=NaN):e.e<R.minE&&(e.e=0,e.d=[0])),e}function xe(e,t,r){if(!e.isFinite())return so(e);var n,i=e.e,o=Z(e.d),s=o.length;return t?(r&&(n=r-s)>0?o=o.charAt(0)+\".\"+o.slice(1)+Ie(n):s>1&&(o=o.charAt(0)+\".\"+o.slice(1)),o=o+(e.e<0?\"e\":\"e+\")+e.e):i<0?(o=\"0.\"+Ie(-i-1)+o,r&&(n=r-s)>0&&(o+=Ie(n))):i>=s?(o+=Ie(i+1-s),r&&(n=r-i-1)>0&&(o=o+\".\"+Ie(n))):((n=i+1)<s&&(o=o.slice(0,n)+\".\"+o.slice(n)),r&&(n=r-s)>0&&(i+1===s&&(o+=\".\"),o+=Ie(n))),o}function ur(e,t){var r=e[0];for(t*=_;r>=10;r/=10)t++;return t}function ar(e,t,r){if(t>Tl)throw I=!0,r&&(e.precision=r),Error(Xi);return O(new e(or),t,1,!0)}function me(e,t,r){if(t>yn)throw Error(Xi);return O(new e(sr),t,r,!0)}function no(e){var t=e.length-1,r=t*_+1;if(t=e[t],t){for(;t%10==0;t/=10)r--;for(t=e[0];t>=10;t/=10)r++}return r}function Ie(e){for(var t=\"\";e--;)t+=\"0\";return t}function io(e,t,r,n){var i,o=new e(1),s=Math.ceil(n/_+4);for(I=!1;;){if(r%2&&(o=o.times(t),zi(o.d,s)&&(i=!0)),r=te(r/2),r===0){r=o.d.length-1,i&&o.d[r]===0&&++o.d[r];break}t=t.times(t),zi(t.d,s)}return I=!0,o}function Ki(e){return e.d[e.d.length-1]&1}function oo(e,t,r){for(var n,i=new e(t[0]),o=0;++o<t.length;)if(n=new e(t[o]),n.s)i[r](n)&&(i=n);else{i=n;break}return i}function wn(e,t){var r,n,i,o,s,a,l,u=0,g=0,h=0,v=e.constructor,R=v.rounding,C=v.precision;if(!e.d||!e.d[0]||e.e>17)return new v(e.d?e.d[0]?e.s<0?0:1/0:1:e.s?e.s<0?0:e:NaN);for(t==null?(I=!1,l=C):l=t,a=new v(.03125);e.e>-2;)e=e.times(a),h+=5;for(n=Math.log(J(2,h))/Math.LN10*2+5|0,l+=n,r=o=s=new v(1),v.precision=l;;){if(o=O(o.times(e),l,1),r=r.times(++g),a=s.plus($(o,r,l,1)),Z(a.d).slice(0,l)===Z(s.d).slice(0,l)){for(i=h;i--;)s=O(s.times(s),l,1);if(t==null)if(u<3&&It(s.d,l-n,R,u))v.precision=l+=10,r=o=a=new v(1),g=0,u++;else return O(s,v.precision=C,R,I=!0);else return v.precision=C,s}s=a}}function Ne(e,t){var r,n,i,o,s,a,l,u,g,h,v,R=1,C=10,A=e,F=A.d,L=A.constructor,N=L.rounding,M=L.precision;if(A.s<0||!F||!F[0]||!A.e&&F[0]==1&&F.length==1)return new L(F&&!F[0]?-1/0:A.s!=1?NaN:F?0:A);if(t==null?(I=!1,g=M):g=t,L.precision=g+=C,r=Z(F),n=r.charAt(0),Math.abs(o=A.e)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)A=A.times(e),r=Z(A.d),n=r.charAt(0),R++;o=A.e,n>1?(A=new L(\"0.\"+r),o++):A=new L(n+\".\"+r.slice(1))}else return u=ar(L,g+2,M).times(o+\"\"),A=Ne(new L(n+\".\"+r.slice(1)),g-C).plus(u),L.precision=M,t==null?O(A,M,N,I=!0):A;for(h=A,l=s=A=$(A.minus(1),A.plus(1),g,1),v=O(A.times(A),g,1),i=3;;){if(s=O(s.times(v),g,1),u=l.plus($(s,new L(i),g,1)),Z(u.d).slice(0,g)===Z(l.d).slice(0,g))if(l=l.times(2),o!==0&&(l=l.plus(ar(L,g+2,M).times(o+\"\"))),l=$(l,new L(R),g,1),t==null)if(It(l.d,g-C,N,a))L.precision=g+=C,u=s=A=$(h.minus(1),h.plus(1),g,1),v=O(A.times(A),g,1),i=a=1;else return O(l,L.precision=M,N,I=!0);else return L.precision=M,l;l=u,i+=2}}function so(e){return String(e.s*e.s/0)}function bn(e,t){var r,n,i;for((r=t.indexOf(\".\"))>-1&&(t=t.replace(\".\",\"\")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;n++);for(i=t.length;t.charCodeAt(i-1)===48;--i);if(t=t.slice(n,i),t){if(i-=n,e.e=r=r-n-1,e.d=[],n=(r+1)%_,r<0&&(n+=_),n<i){for(n&&e.d.push(+t.slice(0,n)),i-=_;n<i;)e.d.push(+t.slice(n,n+=_));t=t.slice(n),n=_-t.length}else n-=i;for(;n--;)t+=\"0\";e.d.push(+t),I&&(e.e>e.constructor.maxE?(e.d=null,e.e=NaN):e.e<e.constructor.minE&&(e.e=0,e.d=[0]))}else e.e=0,e.d=[0];return e}function Al(e,t){var r,n,i,o,s,a,l,u,g;if(t.indexOf(\"_\")>-1){if(t=t.replace(/(\\d)_(?=\\d)/g,\"$1\"),ro.test(t))return bn(e,t)}else if(t===\"Infinity\"||t===\"NaN\")return+t||(e.s=NaN),e.e=NaN,e.d=null,e;if(xl.test(t))r=16,t=t.toLowerCase();else if(El.test(t))r=2;else if(vl.test(t))r=8;else throw Error(De+t);for(o=t.search(/p/i),o>0?(l=+t.slice(o+1),t=t.substring(2,o)):t=t.slice(2),o=t.indexOf(\".\"),s=o>=0,n=e.constructor,s&&(t=t.replace(\".\",\"\"),a=t.length,o=a-o,i=io(n,new n(r),o,o*2)),u=ir(t,r,ge),g=u.length-1,o=g;u[o]===0;--o)u.pop();return o<0?new n(e.s*0):(e.e=ur(u,g),e.d=u,I=!1,s&&(e=$(e,i,a*4)),l&&(e=e.times(Math.abs(l)<54?J(2,l):Ke.pow(2,l))),I=!0,e)}function Sl(e,t){var r,n=t.d.length;if(n<3)return t.isZero()?t:lt(e,2,t,t);r=1.4*Math.sqrt(n),r=r>16?16:r|0,t=t.times(1/cr(5,r)),t=lt(e,2,t,t);for(var i,o=new e(5),s=new e(16),a=new e(20);r--;)i=t.times(t),t=t.times(o.plus(i.times(s.times(i).minus(a))));return t}function lt(e,t,r,n,i){var o,s,a,l,u=1,g=e.precision,h=Math.ceil(g/_);for(I=!1,l=r.times(r),a=new e(n);;){if(s=$(a.times(l),new e(t++*t++),g,1),a=i?n.plus(s):n.minus(s),n=$(s.times(l),new e(t++*t++),g,1),s=a.plus(n),s.d[h]!==void 0){for(o=h;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,u++}return I=!0,s.d.length=h+1,s}function cr(e,t){for(var r=e;--t;)r*=e;return r}function ao(e,t){var r,n=t.s<0,i=me(e,e.precision,1),o=i.times(.5);if(t=t.abs(),t.lte(o))return Me=n?4:1,t;if(r=t.divToInt(i),r.isZero())Me=n?3:2;else{if(t=t.minus(r.times(i)),t.lte(o))return Me=Ki(r)?n?2:3:n?4:1,t;Me=Ki(r)?n?1:4:n?3:2}return t.minus(i).abs()}function En(e,t,r,n){var i,o,s,a,l,u,g,h,v,R=e.constructor,C=r!==void 0;if(C?(ae(r,1,Be),n===void 0?n=R.rounding:ae(n,0,8)):(r=R.precision,n=R.rounding),!e.isFinite())g=so(e);else{for(g=xe(e),s=g.indexOf(\".\"),C?(i=2,t==16?r=r*4-3:t==8&&(r=r*3-2)):i=t,s>=0&&(g=g.replace(\".\",\"\"),v=new R(1),v.e=g.length-s,v.d=ir(xe(v),10,i),v.e=v.d.length),h=ir(g,10,i),o=l=h.length;h[--l]==0;)h.pop();if(!h[0])g=C?\"0p+0\":\"0\";else{if(s<0?o--:(e=new R(e),e.d=h,e.e=o,e=$(e,v,r,n,0,i),h=e.d,o=e.e,u=Zi),s=h[r],a=i/2,u=u||h[r+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(e.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&h[r-1]&1||n===(e.s<0?8:7)),h.length=r,u)for(;++h[--r]>i-1;)h[r]=0,r||(++o,h.unshift(1));for(l=h.length;!h[l-1];--l);for(s=0,g=\"\";s<l;s++)g+=gn.charAt(h[s]);if(C){if(l>1)if(t==16||t==8){for(s=t==16?4:3,--l;l%s;l++)g+=\"0\";for(h=ir(g,i,t),l=h.length;!h[l-1];--l);for(s=1,g=\"1.\";s<l;s++)g+=gn.charAt(h[s])}else g=g.charAt(0)+\".\"+g.slice(1);g=g+(o<0?\"p\":\"p+\")+o}else if(o<0){for(;++o;)g=\"0\"+g;g=\"0.\"+g}else if(++o>l)for(o-=l;o--;)g+=\"0\";else o<l&&(g=g.slice(0,o)+\".\"+g.slice(o))}g=(t==16?\"0x\":t==2?\"0b\":t==8?\"0o\":\"\")+g}return e.s<0?\"-\"+g:g}function zi(e,t){if(e.length>t)return e.length=t,!0}function Rl(e){return new this(e).abs()}function kl(e){return new this(e).acos()}function Ol(e){return new this(e).acosh()}function Fl(e,t){return new this(e).plus(t)}function Ml(e){return new this(e).asin()}function _l(e){return new this(e).asinh()}function Ll(e){return new this(e).atan()}function Il(e){return new this(e).atanh()}function Nl(e,t){e=new this(e),t=new this(t);var r,n=this.precision,i=this.rounding,o=n+4;return!e.s||!t.s?r=new this(NaN):!e.d&&!t.d?(r=me(this,o,1).times(t.s>0?.25:.75),r.s=e.s):!t.d||e.isZero()?(r=t.s<0?me(this,n,i):new this(0),r.s=e.s):!e.d||t.isZero()?(r=me(this,o,1).times(.5),r.s=e.s):t.s<0?(this.precision=o,this.rounding=1,r=this.atan($(e,t,o,1)),t=me(this,o,1),this.precision=n,this.rounding=i,r=e.s<0?r.minus(t):r.plus(t)):r=this.atan($(e,t,o,1)),r}function Dl(e){return new this(e).cbrt()}function Bl(e){return O(e=new this(e),e.e+1,2)}function $l(e,t,r){return new this(e).clamp(t,r)}function jl(e){if(!e||typeof e!=\"object\")throw Error(lr+\"Object expected\");var t,r,n,i=e.defaults===!0,o=[\"precision\",1,Be,\"rounding\",0,8,\"toExpNeg\",-at,0,\"toExpPos\",0,at,\"maxE\",0,at,\"minE\",-at,0,\"modulo\",0,9];for(t=0;t<o.length;t+=3)if(r=o[t],i&&(this[r]=hn[r]),(n=e[r])!==void 0)if(te(n)===n&&n>=o[t+1]&&n<=o[t+2])this[r]=n;else throw Error(De+r+\": \"+n);if(r=\"crypto\",i&&(this[r]=hn[r]),(n=e[r])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<\"u\"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[r]=!0;else throw Error(eo);else this[r]=!1;else throw Error(De+r+\": \"+n);return this}function Ul(e){return new this(e).cos()}function ql(e){return new this(e).cosh()}function lo(e){var t,r,n;function i(o){var s,a,l,u=this;if(!(u instanceof i))return new i(o);if(u.constructor=i,Yi(o)){u.s=o.s,I?!o.d||o.e>i.maxE?(u.e=NaN,u.d=null):o.e<i.minE?(u.e=0,u.d=[0]):(u.e=o.e,u.d=o.d.slice()):(u.e=o.e,u.d=o.d?o.d.slice():o.d);return}if(l=typeof o,l===\"number\"){if(o===0){u.s=1/o<0?-1:1,u.e=0,u.d=[0];return}if(o<0?(o=-o,u.s=-1):u.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;I?s>i.maxE?(u.e=NaN,u.d=null):s<i.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[o]):(u.e=s,u.d=[o]);return}else if(o*0!==0){o||(u.s=NaN),u.e=NaN,u.d=null;return}return bn(u,o.toString())}else if(l!==\"string\")throw Error(De+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),u.s=-1):(a===43&&(o=o.slice(1)),u.s=1),ro.test(o)?bn(u,o):Al(u,o)}if(i.prototype=S,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=jl,i.clone=lo,i.isDecimal=Yi,i.abs=Rl,i.acos=kl,i.acosh=Ol,i.add=Fl,i.asin=Ml,i.asinh=_l,i.atan=Ll,i.atanh=Il,i.atan2=Nl,i.cbrt=Dl,i.ceil=Bl,i.clamp=$l,i.cos=Ul,i.cosh=ql,i.div=Vl,i.exp=Ql,i.floor=Jl,i.hypot=Wl,i.ln=Gl,i.log=Hl,i.log10=zl,i.log2=Kl,i.max=Yl,i.min=Zl,i.mod=Xl,i.mul=eu,i.pow=tu,i.random=ru,i.round=nu,i.sign=iu,i.sin=ou,i.sinh=su,i.sqrt=au,i.sub=lu,i.sum=uu,i.tan=cu,i.tanh=pu,i.trunc=fu,e===void 0&&(e={}),e&&e.defaults!==!0)for(n=[\"precision\",\"rounding\",\"toExpNeg\",\"toExpPos\",\"maxE\",\"minE\",\"modulo\",\"crypto\"],t=0;t<n.length;)e.hasOwnProperty(r=n[t++])||(e[r]=this[r]);return i.config(e),i}function Vl(e,t){return new this(e).div(t)}function Ql(e){return new this(e).exp()}function Jl(e){return O(e=new this(e),e.e+1,3)}function Wl(){var e,t,r=new this(0);for(I=!1,e=0;e<arguments.length;)if(t=new this(arguments[e++]),t.d)r.d&&(r=r.plus(t.times(t)));else{if(t.s)return I=!0,new this(1/0);r=t}return I=!0,r.sqrt()}function Yi(e){return e instanceof Ke||e&&e.toStringTag===to||!1}function Gl(e){return new this(e).ln()}function Hl(e,t){return new this(e).log(t)}function Kl(e){return new this(e).log(2)}function zl(e){return new this(e).log(10)}function Yl(){return oo(this,arguments,\"lt\")}function Zl(){return oo(this,arguments,\"gt\")}function Xl(e,t){return new this(e).mod(t)}function eu(e,t){return new this(e).mul(t)}function tu(e,t){return new this(e).pow(t)}function ru(e){var t,r,n,i,o=0,s=new this(1),a=[];if(e===void 0?e=this.precision:ae(e,1,Be),n=Math.ceil(e/_),this.crypto)if(crypto.getRandomValues)for(t=crypto.getRandomValues(new Uint32Array(n));o<n;)i=t[o],i>=429e7?t[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(t=crypto.randomBytes(n*=4);o<n;)i=t[o]+(t[o+1]<<8)+(t[o+2]<<16)+((t[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(t,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(eo);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],e%=_,n&&e&&(i=J(10,_-e),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<0)r=0,a=[0];else{for(r=-1;a[0]===0;r-=_)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<_&&(r-=_-n)}return s.e=r,s.d=a,s}function nu(e){return O(e=new this(e),e.e+1,this.rounding)}function iu(e){return e=new this(e),e.d?e.d[0]?e.s:0*e.s:e.s||NaN}function ou(e){return new this(e).sin()}function su(e){return new this(e).sinh()}function au(e){return new this(e).sqrt()}function lu(e,t){return new this(e).sub(t)}function uu(){var e=0,t=arguments,r=new this(t[e]);for(I=!1;r.s&&++e<t.length;)r=r.plus(t[e]);return I=!0,O(r,this.precision,this.rounding)}function cu(e){return new this(e).tan()}function pu(e){return new this(e).tanh()}function fu(e){return O(e=new this(e),e.e+1,1)}S[Symbol.for(\"nodejs.util.inspect.custom\")]=S.toString;S[Symbol.toStringTag]=\"Decimal\";var Ke=S.constructor=lo(hn);or=new Ke(or);sr=new Ke(sr);var ve=Ke;function ut(e){return Ke.isDecimal(e)?!0:e!==null&&typeof e==\"object\"&&typeof e.s==\"number\"&&typeof e.e==\"number\"&&typeof e.toFixed==\"function\"&&Array.isArray(e.d)}m();c();p();f();d();var Nt=class{constructor(t,r,n,i,o){this.modelName=t,this.name=r,this.typeName=n,this.isList=i,this.isEnum=o}_toGraphQLInputType(){let t=this.isList?\"List\":\"\",r=this.isEnum?\"Enum\":\"\";return`${t}${r}${this.typeName}FieldRefInput<${this.modelName}>`}};function ct(e){return e instanceof Nt}m();c();p();f();d();m();c();p();f();d();var pr=class{constructor(t){this.value=t}write(t){t.write(this.value)}markAsError(){this.value.markAsError()}};m();c();p();f();d();var fr=e=>e,dr={bold:fr,red:fr,green:fr,dim:fr,enabled:!1},uo={bold:de,red:Ve,green:Et,dim:wt,enabled:!0},pt={write(e){e.writeLine(\",\")}};m();c();p();f();d();var Pe=class{constructor(t){this.contents=t;this.isUnderlined=!1;this.color=t=>t}underline(){return this.isUnderlined=!0,this}setColor(t){return this.color=t,this}write(t){let r=t.getCurrentLineLength();t.write(this.color(this.contents)),this.isUnderlined&&t.afterNextNewline(()=>{t.write(\" \".repeat(r)).writeLine(this.color(\"~\".repeat(this.contents.length)))})}};m();c();p();f();d();var $e=class{constructor(){this.hasError=!1}markAsError(){return this.hasError=!0,this}};var ft=class extends $e{constructor(){super(...arguments);this.items=[]}addItem(r){return this.items.push(new pr(r)),this}getField(r){return this.items[r]}getPrintWidth(){return this.items.length===0?2:Math.max(...this.items.map(n=>n.value.getPrintWidth()))+2}write(r){if(this.items.length===0){this.writeEmpty(r);return}this.writeWithItems(r)}writeEmpty(r){let n=new Pe(\"[]\");this.hasError&&n.setColor(r.context.colors.red).underline(),r.write(n)}writeWithItems(r){let{colors:n}=r.context;r.writeLine(\"[\").withIndent(()=>r.writeJoined(pt,this.items).newLine()).write(\"]\"),this.hasError&&r.afterNextNewline(()=>{r.writeLine(n.red(\"~\".repeat(this.getPrintWidth())))})}asObject(){}};m();c();p();f();d();var co=\": \",mr=class{constructor(t,r){this.name=t;this.value=r;this.hasError=!1}markAsError(){this.hasError=!0}getPrintWidth(){return this.name.length+this.value.getPrintWidth()+co.length}write(t){let r=new Pe(this.name);this.hasError&&r.underline().setColor(t.context.colors.red),t.write(r).write(co).write(this.value)}};m();c();p();f();d();var gr=class e extends $e{constructor(){super(...arguments);this.fields={};this.suggestions=[]}addField(r){this.fields[r.name]=r}addSuggestion(r){this.suggestions.push(r)}getField(r){return this.fields[r]}getDeepField(r){let[n,...i]=r,o=this.getField(n);if(!o)return;let s=o;for(let a of i){let l;if(s.value instanceof e?l=s.value.getField(a):s.value instanceof ft&&(l=s.value.getField(Number(a))),!l)return;s=l}return s}getDeepFieldValue(r){return r.length===0?this:this.getDeepField(r)?.value}hasField(r){return!!this.getField(r)}removeAllFields(){this.fields={}}removeField(r){delete this.fields[r]}getFields(){return this.fields}isEmpty(){return Object.keys(this.fields).length===0}getFieldValue(r){return this.getField(r)?.value}getDeepSubSelectionValue(r){let n=this;for(let i of r){if(!(n instanceof e))return;let o=n.getSubSelectionValue(i);if(!o)return;n=o}return n}getDeepSelectionParent(r){let n=this.getSelectionParent();if(!n)return;let i=n;for(let o of r){let s=i.value.getFieldValue(o);if(!s||!(s instanceof e))return;let a=s.getSelectionParent();if(!a)return;i=a}return i}getSelectionParent(){let r=this.getField(\"select\")?.value.asObject();if(r)return{kind:\"select\",value:r};let n=this.getField(\"include\")?.value.asObject();if(n)return{kind:\"include\",value:n}}getSubSelectionValue(r){return this.getSelectionParent()?.value.fields[r].value}getPrintWidth(){let r=Object.values(this.fields);return r.length==0?2:Math.max(...r.map(i=>i.getPrintWidth()))+2}write(r){let n=Object.values(this.fields);if(n.length===0&&this.suggestions.length===0){this.writeEmpty(r);return}this.writeWithContents(r,n)}asObject(){return this}writeEmpty(r){let n=new Pe(\"{}\");this.hasError&&n.setColor(r.context.colors.red).underline(),r.write(n)}writeWithContents(r,n){r.writeLine(\"{\").withIndent(()=>{r.writeJoined(pt,[...n,...this.suggestions]).newLine()}),r.write(\"}\"),this.hasError&&r.afterNextNewline(()=>{r.writeLine(r.context.colors.red(\"~\".repeat(this.getPrintWidth())))})}};m();c();p();f();d();var K=class extends $e{constructor(r){super();this.text=r}getPrintWidth(){return this.text.length}write(r){let n=new Pe(this.text);this.hasError&&n.underline().setColor(r.context.colors.red),r.write(n)}asObject(){}};var xn=class{constructor(t){this.errorMessages=[];this.arguments=t}write(t){t.write(this.arguments)}addErrorMessage(t){this.errorMessages.push(t)}renderAllMessages(t){return this.errorMessages.map(r=>r(t)).join(`\n`)}};function hr(e){return new xn(po(e))}function po(e){let t=new gr;for(let[r,n]of Object.entries(e)){let i=new mr(r,fo(n));t.addField(i)}return t}function fo(e){if(typeof e==\"string\")return new K(JSON.stringify(e));if(typeof e==\"number\"||typeof e==\"boolean\")return new K(String(e));if(typeof e==\"bigint\")return new K(`${e}n`);if(e===null)return new K(\"null\");if(e===void 0)return new K(\"undefined\");if(ut(e))return new K(`new Prisma.Decimal(\"${e.toFixed()}\")`);if(e instanceof Uint8Array)return w.Buffer.isBuffer(e)?new K(`Buffer.alloc(${e.byteLength})`):new K(`new Uint8Array(${e.byteLength})`);if(e instanceof Date){let t=nr(e)?e.toISOString():\"Invalid Date\";return new K(`new Date(\"${t}\")`)}return e instanceof Fe?new K(`Prisma.${e._getName()}`):ct(e)?new K(`prisma.${Hi(e.modelName)}.$fields.${e.name}`):Array.isArray(e)?mu(e):typeof e==\"object\"?po(e):new K(Object.prototype.toString.call(e))}function mu(e){let t=new ft;for(let r of e)t.addItem(fo(r));return t}function mo(e){if(e===void 0)return\"\";let t=hr(e);return new ot(0,{colors:dr}).write(t).toString()}m();c();p();f();d();var gu=\"P2037\";function yr({error:e,user_facing_error:t},r,n){return t.error_code?new G(hu(t,n),{code:t.error_code,clientVersion:r,meta:t.meta,batchRequestIdx:t.batch_request_idx}):new H(e,{clientVersion:r,batchRequestIdx:t.batch_request_idx})}function hu(e,t){let r=e.message;return(t===\"postgresql\"||t===\"postgres\"||t===\"mysql\")&&e.error_code===gu&&(r+=`\nPrisma Accelerate has built-in connection pooling to prevent such errors: https://pris.ly/client/error-accelerate`),r}m();c();p();f();d();m();c();p();f();d();m();c();p();f();d();m();c();p();f();d();m();c();p();f();d();var Dt=\"<unknown>\";function go(e){var t=e.split(`\n`);return t.reduce(function(r,n){var i=bu(n)||xu(n)||Tu(n)||Ru(n)||Au(n);return i&&r.push(i),r},[])}var yu=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,wu=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;function bu(e){var t=yu.exec(e);if(!t)return null;var r=t[2]&&t[2].indexOf(\"native\")===0,n=t[2]&&t[2].indexOf(\"eval\")===0,i=wu.exec(t[2]);return n&&i!=null&&(t[2]=i[1],t[3]=i[2],t[4]=i[3]),{file:r?null:t[2],methodName:t[1]||Dt,arguments:r?[t[2]]:[],lineNumber:t[3]?+t[3]:null,column:t[4]?+t[4]:null}}var Eu=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function xu(e){var t=Eu.exec(e);return t?{file:t[2],methodName:t[1]||Dt,arguments:[],lineNumber:+t[3],column:t[4]?+t[4]:null}:null}var vu=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,Pu=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;function Tu(e){var t=vu.exec(e);if(!t)return null;var r=t[3]&&t[3].indexOf(\" > eval\")>-1,n=Pu.exec(t[3]);return r&&n!=null&&(t[3]=n[1],t[4]=n[2],t[5]=null),{file:t[3],methodName:t[1]||Dt,arguments:t[2]?t[2].split(\",\"):[],lineNumber:t[4]?+t[4]:null,column:t[5]?+t[5]:null}}var Cu=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;function Au(e){var t=Cu.exec(e);return t?{file:t[3],methodName:t[1]||Dt,arguments:[],lineNumber:+t[4],column:t[5]?+t[5]:null}:null}var Su=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function Ru(e){var t=Su.exec(e);return t?{file:t[2],methodName:t[1]||Dt,arguments:[],lineNumber:+t[3],column:t[4]?+t[4]:null}:null}var vn=class{getLocation(){return null}},Pn=class{constructor(){this._error=new Error}getLocation(){let t=this._error.stack;if(!t)return null;let n=go(t).find(i=>{if(!i.file)return!1;let o=tn(i.file);return o!==\"<anonymous>\"&&!o.includes(\"@prisma\")&&!o.includes(\"/packages/client/src/runtime/\")&&!o.endsWith(\"/runtime/binary.js\")&&!o.endsWith(\"/runtime/library.js\")&&!o.endsWith(\"/runtime/edge.js\")&&!o.endsWith(\"/runtime/edge-esm.js\")&&!o.startsWith(\"internal/\")&&!i.methodName.includes(\"new \")&&!i.methodName.includes(\"getCallSite\")&&!i.methodName.includes(\"Proxy.\")&&i.methodName.split(\".\").length<4});return!n||!n.file?null:{fileName:n.file,lineNumber:n.lineNumber,columnNumber:n.column}}};function je(e){return e===\"minimal\"?typeof $EnabledCallSite==\"function\"&&e!==\"minimal\"?new $EnabledCallSite:new vn:new Pn}m();c();p();f();d();m();c();p();f();d();m();c();p();f();d();var ho={_avg:!0,_count:!0,_sum:!0,_min:!0,_max:!0};function dt(e={}){let t=Ou(e);return Object.entries(t).reduce((n,[i,o])=>(ho[i]!==void 0?n.select[i]={select:o}:n[i]=o,n),{select:{}})}function Ou(e={}){return typeof e._count==\"boolean\"?{...e,_count:{_all:e._count}}:e}function wr(e={}){return t=>(typeof e._count==\"boolean\"&&(t._count=t._count._all),t)}function yo(e,t){let r=wr(e);return t({action:\"aggregate\",unpacker:r,argsMapper:dt})(e)}m();c();p();f();d();function Fu(e={}){let{select:t,...r}=e;return typeof t==\"object\"?dt({...r,_count:t}):dt({...r,_count:{_all:!0}})}function Mu(e={}){return typeof e.select==\"object\"?t=>wr(e)(t)._count:t=>wr(e)(t)._count._all}function wo(e,t){return t({action:\"count\",unpacker:Mu(e),argsMapper:Fu})(e)}m();c();p();f();d();function _u(e={}){let t=dt(e);if(Array.isArray(t.by))for(let r of t.by)typeof r==\"string\"&&(t.select[r]=!0);else typeof t.by==\"string\"&&(t.select[t.by]=!0);return t}function Lu(e={}){return t=>(typeof e?._count==\"boolean\"&&t.forEach(r=>{r._count=r._count._all}),t)}function bo(e,t){return t({action:\"groupBy\",unpacker:Lu(e),argsMapper:_u})(e)}function Eo(e,t,r){if(t===\"aggregate\")return n=>yo(n,r);if(t===\"count\")return n=>wo(n,r);if(t===\"groupBy\")return n=>bo(n,r)}m();c();p();f();d();function xo(e,t){let r=t.fields.filter(i=>!i.relationName),n=sn(r,i=>i.name);return new Proxy({},{get(i,o){if(o in i||typeof o==\"symbol\")return i[o];let s=n[o];if(s)return new Nt(e,o,s.type,s.isList,s.kind===\"enum\")},...tr(Object.keys(n))})}m();c();p();f();d();m();c();p();f();d();var vo=e=>Array.isArray(e)?e:e.split(\".\"),Tn=(e,t)=>vo(t).reduce((r,n)=>r&&r[n],e),Po=(e,t,r)=>vo(t).reduceRight((n,i,o,s)=>Object.assign({},Tn(e,s.slice(0,o)),{[i]:n}),r);function Iu(e,t){return e===void 0||t===void 0?[]:[...t,\"select\",e]}function Nu(e,t,r){return t===void 0?e??{}:Po(t,r,e||!0)}function Cn(e,t,r,n,i,o){let a=e._runtimeDataModel.models[t].fields.reduce((l,u)=>({...l,[u.name]:u}),{});return l=>{let u=je(e._errorFormat),g=Iu(n,i),h=Nu(l,o,g),v=r({dataPath:g,callsite:u})(h),R=Du(e,t);return new Proxy(v,{get(C,A){if(!R.includes(A))return C[A];let L=[a[A].type,r,A],N=[g,h];return Cn(e,...L,...N)},...tr([...R,...Object.getOwnPropertyNames(v)])})}}function Du(e,t){return e._runtimeDataModel.models[t].fields.filter(r=>r.kind===\"object\").map(r=>r.name)}m();c();p();f();d();m();c();p();f();d();var Ro=fe(_i());m();c();p();f();d();Gr();m();c();p();f();d();m();c();p();f();d();m();c();p();f();d();var To={keyword:ke,entity:ke,value:e=>de(Je(e)),punctuation:Je,directive:ke,function:ke,variable:e=>de(Je(e)),string:e=>de(Et(e)),boolean:Qe,number:ke,comment:xt};var Bu=e=>e,br={},$u=0,D={manual:br.Prism&&br.Prism.manual,disableWorkerMessageHandler:br.Prism&&br.Prism.disableWorkerMessageHandler,util:{encode:function(e){if(e instanceof he){let t=e;return new he(t.type,D.util.encode(t.content),t.alias)}else return Array.isArray(e)?e.map(D.util.encode):e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/\\u00a0/g,\" \")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,\"__id\",{value:++$u}),e.__id},clone:function e(t,r){let n,i,o=D.util.type(t);switch(r=r||{},o){case\"Object\":if(i=D.util.objId(t),r[i])return r[i];n={},r[i]=n;for(let s in t)t.hasOwnProperty(s)&&(n[s]=e(t[s],r));return n;case\"Array\":return i=D.util.objId(t),r[i]?r[i]:(n=[],r[i]=n,t.forEach(function(s,a){n[a]=e(s,r)}),n);default:return t}}},languages:{extend:function(e,t){let r=D.util.clone(D.languages[e]);for(let n in t)r[n]=t[n];return r},insertBefore:function(e,t,r,n){n=n||D.languages;let i=n[e],o={};for(let a in i)if(i.hasOwnProperty(a)){if(a==t)for(let l in r)r.hasOwnProperty(l)&&(o[l]=r[l]);r.hasOwnProperty(a)||(o[a]=i[a])}let s=n[e];return n[e]=o,D.languages.DFS(D.languages,function(a,l){l===s&&a!=e&&(this[a]=o)}),o},DFS:function e(t,r,n,i){i=i||{};let o=D.util.objId;for(let s in t)if(t.hasOwnProperty(s)){r.call(t,s,t[s],n||s);let a=t[s],l=D.util.type(a);l===\"Object\"&&!i[o(a)]?(i[o(a)]=!0,e(a,r,null,i)):l===\"Array\"&&!i[o(a)]&&(i[o(a)]=!0,e(a,r,s,i))}}},plugins:{},highlight:function(e,t,r){let n={code:e,grammar:t,language:r};return D.hooks.run(\"before-tokenize\",n),n.tokens=D.tokenize(n.code,n.grammar),D.hooks.run(\"after-tokenize\",n),he.stringify(D.util.encode(n.tokens),n.language)},matchGrammar:function(e,t,r,n,i,o,s){for(let A in r){if(!r.hasOwnProperty(A)||!r[A])continue;if(A==s)return;let F=r[A];F=D.util.type(F)===\"Array\"?F:[F];for(let L=0;L<F.length;++L){let N=F[L],M=N.inside,k=!!N.lookbehind,z=!!N.greedy,j=0,ht=N.alias;if(z&&!N.pattern.global){let Q=N.pattern.toString().match(/[imuy]*$/)[0];N.pattern=RegExp(N.pattern.source,Q+\"g\")}N=N.pattern||N;for(let Q=n,ie=i;Q<t.length;ie+=t[Q].length,++Q){let Ae=t[Q];if(t.length>e.length)return;if(Ae instanceof he)continue;if(z&&Q!=t.length-1){N.lastIndex=ie;var h=N.exec(e);if(!h)break;var g=h.index+(k?h[1].length:0),v=h.index+h[0].length,a=Q,l=ie;for(let B=t.length;a<B&&(l<v||!t[a].type&&!t[a-1].greedy);++a)l+=t[a].length,g>=l&&(++Q,ie=l);if(t[Q]instanceof he)continue;u=a-Q,Ae=e.slice(ie,l),h.index-=ie}else{N.lastIndex=0;var h=N.exec(Ae),u=1}if(!h){if(o)break;continue}k&&(j=h[1]?h[1].length:0);var g=h.index+j,h=h[0].slice(j),v=g+h.length,R=Ae.slice(0,g),C=Ae.slice(v);let X=[Q,u];R&&(++Q,ie+=R.length,X.push(R));let ze=new he(A,M?D.tokenize(h,M):h,ht,h,z);if(X.push(ze),C&&X.push(C),Array.prototype.splice.apply(t,X),u!=1&&D.matchGrammar(e,t,r,Q,ie,!0,A),o)break}}}},tokenize:function(e,t){let r=[e],n=t.rest;if(n){for(let i in n)t[i]=n[i];delete t.rest}return D.matchGrammar(e,r,t,0,0,!1),r},hooks:{all:{},add:function(e,t){let r=D.hooks.all;r[e]=r[e]||[],r[e].push(t)},run:function(e,t){let r=D.hooks.all[e];if(!(!r||!r.length))for(var n=0,i;i=r[n++];)i(t)}},Token:he};D.languages.clike={comment:[{pattern:/(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,lookbehind:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,greedy:!0},\"class-name\":{pattern:/((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[\\w.\\\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\\\]/}},keyword:/\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,boolean:/\\b(?:true|false)\\b/,function:/\\w+(?=\\()/,number:/\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,operator:/--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,punctuation:/[{}[\\];(),.:]/};D.languages.javascript=D.languages.extend(\"clike\",{\"class-name\":[D.languages.clike[\"class-name\"],{pattern:/(^|[^$\\w\\xA0-\\uFFFF])[_$A-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\\s*)(?:catch|finally)\\b/,lookbehind:!0},{pattern:/(^|[^.])\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,lookbehind:!0}],number:/\\b(?:(?:0[xX](?:[\\dA-Fa-f](?:_[\\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\\d(?:_\\d)?)+n|NaN|Infinity)\\b|(?:\\b(?:\\d(?:_\\d)?)+\\.?(?:\\d(?:_\\d)?)*|\\B\\.(?:\\d(?:_\\d)?)+)(?:[Ee][+-]?(?:\\d(?:_\\d)?)+)?/,function:/[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,operator:/-[-=]?|\\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\\|[|=]?|\\*\\*?=?|\\/=?|~|\\^=?|%=?|\\?|\\.{3}/});D.languages.javascript[\"class-name\"][0].pattern=/(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/;D.languages.insertBefore(\"javascript\",\"keyword\",{regex:{pattern:/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s])\\s*)\\/(\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyus]{0,6}(?=\\s*($|[\\r\\n,.;})\\]]))/,lookbehind:!0,greedy:!0},\"function-variable\":{pattern:/[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/,alias:\"function\"},parameter:[{pattern:/(function(?:\\s+[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)?\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\))/,lookbehind:!0,inside:D.languages.javascript},{pattern:/[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=>)/i,inside:D.languages.javascript},{pattern:/(\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*=>)/,lookbehind:!0,inside:D.languages.javascript},{pattern:/((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*)\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*\\{)/,lookbehind:!0,inside:D.languages.javascript}],constant:/\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/});D.languages.markup&&D.languages.markup.tag.addInlined(\"script\",\"javascript\");D.languages.js=D.languages.javascript;D.languages.typescript=D.languages.extend(\"javascript\",{keyword:/\\b(?:abstract|as|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield)\\b/,builtin:/\\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\\b/});D.languages.ts=D.languages.typescript;function he(e,t,r,n,i){this.type=e,this.content=t,this.alias=r,this.length=(n||\"\").length|0,this.greedy=!!i}he.stringify=function(e,t){return typeof e==\"string\"?e:Array.isArray(e)?e.map(function(r){return he.stringify(r,t)}).join(\"\"):ju(e.type)(e.content)};function ju(e){return To[e]||Bu}function Co(e){return Uu(e,D.languages.javascript)}function Uu(e,t){return D.tokenize(e,t).map(n=>he.stringify(n)).join(\"\")}m();c();p();f();d();var Ao=fe(Oi());function So(e){return(0,Ao.default)(e)}var Er=class e{static read(t){let r;try{r=Gt.readFileSync(t,\"utf-8\")}catch{return null}return e.fromContent(r)}static fromContent(t){let r=t.split(/\\r?\\n/);return new e(1,r)}constructor(t,r){this.firstLineNumber=t,this.lines=r}get lastLineNumber(){return this.firstLineNumber+this.lines.length-1}mapLineAt(t,r){if(t<this.firstLineNumber||t>this.lines.length+this.firstLineNumber)return this;let n=t-this.firstLineNumber,i=[...this.lines];return i[n]=r(i[n]),new e(this.firstLineNumber,i)}mapLines(t){return new e(this.firstLineNumber,this.lines.map((r,n)=>t(r,this.firstLineNumber+n)))}lineAt(t){return this.lines[t-this.firstLineNumber]}prependSymbolAt(t,r){return this.mapLines((n,i)=>i===t?`${r} ${n}`:`  ${n}`)}slice(t,r){let n=this.lines.slice(t-1,r).join(`\n`);return new e(t,So(n).split(`\n`))}highlight(){let t=Co(this.toString());return new e(this.firstLineNumber,t.split(`\n`))}toString(){return this.lines.join(`\n`)}};var qu={red:Ve,gray:xt,dim:wt,bold:de,underline:bt,highlightSource:e=>e.highlight()},Vu={red:e=>e,gray:e=>e,dim:e=>e,bold:e=>e,underline:e=>e,highlightSource:e=>e};function Qu({message:e,originalMethod:t,isPanic:r,callArguments:n}){return{functionName:`prisma.${t}()`,message:e,isPanic:r??!1,callArguments:n}}function Ju({callsite:e,message:t,originalMethod:r,isPanic:n,callArguments:i},o){let s=Qu({message:t,originalMethod:r,isPanic:n,callArguments:i});if(!e||typeof window<\"u\"||y.env.NODE_ENV===\"production\")return s;let a=e.getLocation();if(!a||!a.lineNumber||!a.columnNumber)return s;let l=Math.max(1,a.lineNumber-3),u=Er.read(a.fileName)?.slice(l,a.lineNumber),g=u?.lineAt(a.lineNumber);if(u&&g){let h=Gu(g),v=Wu(g);if(!v)return s;s.functionName=`${v.code})`,s.location=a,n||(u=u.mapLineAt(a.lineNumber,C=>C.slice(0,v.openingBraceIndex))),u=o.highlightSource(u);let R=String(u.lastLineNumber).length;if(s.contextLines=u.mapLines((C,A)=>o.gray(String(A).padStart(R))+\" \"+C).mapLines(C=>o.dim(C)).prependSymbolAt(a.lineNumber,o.bold(o.red(\"\\u2192\"))),i){let C=h+R+1;C+=2,s.callArguments=(0,Ro.default)(i,C).slice(C)}}return s}function Wu(e){let t=Object.keys(Le.ModelAction).join(\"|\"),n=new RegExp(String.raw`\\.(${t})\\(`).exec(e);if(n){let i=n.index+n[0].length,o=e.lastIndexOf(\" \",n.index)+1;return{code:e.slice(o,i),openingBraceIndex:i}}return null}function Gu(e){let t=0;for(let r=0;r<e.length;r++){if(e.charAt(r)!==\" \")return t;t++}return t}function Hu({functionName:e,location:t,message:r,isPanic:n,contextLines:i,callArguments:o},s){let a=[\"\"],l=t?\" in\":\":\";if(n?(a.push(s.red(`Oops, an unknown error occurred! This is ${s.bold(\"on us\")}, you did nothing wrong.`)),a.push(s.red(`It occurred in the ${s.bold(`\\`${e}\\``)} invocation${l}`))):a.push(s.red(`Invalid ${s.bold(`\\`${e}\\``)} invocation${l}`)),t&&a.push(s.underline(Ku(t))),i){a.push(\"\");let u=[i.toString()];o&&(u.push(o),u.push(s.dim(\")\"))),a.push(u.join(\"\")),o&&a.push(\"\")}else a.push(\"\"),o&&a.push(o),a.push(\"\");return a.push(r),a.join(`\n`)}function Ku(e){let t=[e.fileName];return e.lineNumber&&t.push(String(e.lineNumber)),e.columnNumber&&t.push(String(e.columnNumber)),t.join(\":\")}function mt(e){let t=e.showColors?qu:Vu,r;return r=Ju(e,t),Hu(r,t)}function ko(e,t,r,n){return e===Le.ModelAction.findFirstOrThrow||e===Le.ModelAction.findUniqueOrThrow?zu(t,r,n):n}function zu(e,t,r){return async n=>{if(\"rejectOnNotFound\"in n.args){let o=mt({originalMethod:n.clientMethod,callsite:n.callsite,message:\"'rejectOnNotFound' option is not supported\"});throw new Y(o,{clientVersion:t})}return await r(n).catch(o=>{throw o instanceof G&&o.code===\"P2025\"?new Oe(`No ${e} found`,t):o})}}m();c();p();f();d();function Te(e){return e.replace(/^./,t=>t.toLowerCase())}var Yu=[\"findUnique\",\"findUniqueOrThrow\",\"findFirst\",\"findFirstOrThrow\",\"create\",\"update\",\"upsert\",\"delete\"],Zu=[\"aggregate\",\"count\",\"groupBy\"];function An(e,t){let r=e._extensions.getAllModelExtensions(t)??{},n=[Xu(e,t),tc(e,t),Lt(r),ne(\"name\",()=>t),ne(\"$name\",()=>t),ne(\"$parent\",()=>e._appliedParent)];return Ee({},n)}function Xu(e,t){let r=Te(t),n=Object.keys(Le.ModelAction).concat(\"count\");return{getKeys(){return n},getPropertyValue(i){let o=i,s=l=>e._request(l);s=ko(o,t,e._clientVersion,s);let a=l=>u=>{let g=je(e._errorFormat);return e._createPrismaPromise(h=>{let v={args:u,dataPath:[],action:o,model:t,clientMethod:`${r}.${i}`,jsModelName:r,transaction:h,callsite:g};return s({...v,...l})})};return Yu.includes(o)?Cn(e,t,a):ec(i)?Eo(e,i,a):a({})}}}function ec(e){return Zu.includes(e)}function tc(e,t){return He(ne(\"fields\",()=>{let r=e._runtimeDataModel.models[t];return xo(t,r)}))}m();c();p();f();d();function Oo(e){return e.replace(/^./,t=>t.toUpperCase())}var Sn=Symbol();function Bt(e){let t=[rc(e),ne(Sn,()=>e),ne(\"$parent\",()=>e._appliedParent)],r=e._extensions.getAllClientExtensions();return r&&t.push(Lt(r)),Ee(e,t)}function rc(e){let t=Object.keys(e._runtimeDataModel.models),r=t.map(Te),n=[...new Set(t.concat(r))];return He({getKeys(){return n},getPropertyValue(i){let o=Oo(i);if(e._runtimeDataModel.models[o]!==void 0)return An(e,o);if(e._runtimeDataModel.models[i]!==void 0)return An(e,i)},getPropertyDescriptor(i){if(!r.includes(i))return{enumerable:!1}}})}function Fo(e){return e[Sn]?e[Sn]:e}function Mo(e){if(typeof e==\"function\")return e(this);if(e.client?.__AccelerateEngine){let r=e.client.__AccelerateEngine;this._originalClient._engine=new r(this._originalClient._accelerateEngineConfig)}let t=Object.create(this._originalClient,{_extensions:{value:this._extensions.append(e)},_appliedParent:{value:this,configurable:!0},$use:{value:void 0},$on:{value:void 0}});return Bt(t)}m();c();p();f();d();m();c();p();f();d();function _o({result:e,modelName:t,select:r,omit:n,extensions:i}){let o=i.getAllComputedFields(t);if(!o)return e;let s=[],a=[];for(let l of Object.values(o)){if(n){if(n[l.name])continue;let u=l.needs.filter(g=>n[g]);u.length>0&&a.push(it(u))}else if(r){if(!r[l.name])continue;let u=l.needs.filter(g=>!r[g]);u.length>0&&a.push(it(u))}nc(e,l.needs)&&s.push(ic(l,Ee(e,s)))}return s.length>0||a.length>0?Ee(e,[...s,...a]):e}function nc(e,t){return t.every(r=>on(e,r))}function ic(e,t){return He(ne(e.name,()=>e.compute(t)))}m();c();p();f();d();function xr({visitor:e,result:t,args:r,runtimeDataModel:n,modelName:i}){if(Array.isArray(t)){for(let s=0;s<t.length;s++)t[s]=xr({result:t[s],args:r,modelName:i,runtimeDataModel:n,visitor:e});return t}let o=e(t,i,r)??t;return r.include&&Lo({includeOrSelect:r.include,result:o,parentModelName:i,runtimeDataModel:n,visitor:e}),r.select&&Lo({includeOrSelect:r.select,result:o,parentModelName:i,runtimeDataModel:n,visitor:e}),o}function Lo({includeOrSelect:e,result:t,parentModelName:r,runtimeDataModel:n,visitor:i}){for(let[o,s]of Object.entries(e)){if(!s||t[o]==null)continue;let l=n.models[r].fields.find(g=>g.name===o);if(!l||l.kind!==\"object\"||!l.relationName)continue;let u=typeof s==\"object\"?s:{};t[o]=xr({visitor:i,result:t[o],args:u,modelName:l.type,runtimeDataModel:n})}}function Io({result:e,modelName:t,args:r,extensions:n,runtimeDataModel:i}){return n.isEmpty()||e==null||typeof e!=\"object\"||!i.models[t]?e:xr({result:e,args:r??{},modelName:t,runtimeDataModel:i,visitor:(s,a,l)=>_o({result:s,modelName:Te(a),select:l.select,omit:l.omit,extensions:n})})}m();c();p();f();d();m();c();p();f();d();function No(e){if(e instanceof se)return oc(e);if(Array.isArray(e)){let r=[e[0]];for(let n=1;n<e.length;n++)r[n]=$t(e[n]);return r}let t={};for(let r in e)t[r]=$t(e[r]);return t}function oc(e){return new se(e.strings,e.values)}function $t(e){if(typeof e!=\"object\"||e==null||e instanceof Fe||ct(e))return e;if(ut(e))return new ve(e.toFixed());if(st(e))return new Date(+e);if(ArrayBuffer.isView(e))return e.slice(0);if(Array.isArray(e)){let t=e.length,r;for(r=Array(t);t--;)r[t]=$t(e[t]);return r}if(typeof e==\"object\"){let t={};for(let r in e)r===\"__proto__\"?Object.defineProperty(t,r,{value:$t(e[r]),configurable:!0,enumerable:!0,writable:!0}):t[r]=$t(e[r]);return t}We(e,\"Unknown value\")}function Bo(e,t,r,n=0){return e._createPrismaPromise(i=>{let o=t.customDataProxyFetch;return\"transaction\"in t&&i!==void 0&&(t.transaction?.kind===\"batch\"&&t.transaction.lock.then(),t.transaction=i),n===r.length?e._executeRequest(t):r[n]({model:t.model,operation:t.model?t.action:t.clientMethod,args:No(t.args??{}),__internalParams:t,query:(s,a=t)=>{let l=a.customDataProxyFetch;return a.customDataProxyFetch=qo(o,l),a.args=s,Bo(e,a,r,n+1)}})})}function $o(e,t){let{jsModelName:r,action:n,clientMethod:i}=t,o=r?n:i;if(e._extensions.isEmpty())return e._executeRequest(t);let s=e._extensions.getAllQueryCallbacks(r??\"$none\",o);return Bo(e,t,s)}function jo(e){return t=>{let r={requests:t},n=t[0].extensions.getAllBatchQueryCallbacks();return n.length?Uo(r,n,0,e):e(r)}}function Uo(e,t,r,n){if(r===t.length)return n(e);let i=e.customDataProxyFetch,o=e.requests[0].transaction;return t[r]({args:{queries:e.requests.map(s=>({model:s.modelName,operation:s.action,args:s.args})),transaction:o?{isolationLevel:o.kind===\"batch\"?o.isolationLevel:void 0}:void 0},__internalParams:e,query(s,a=e){let l=a.customDataProxyFetch;return a.customDataProxyFetch=qo(i,l),Uo(a,t,r+1,n)}})}var Do=e=>e;function qo(e=Do,t=Do){return r=>e(t(r))}m();c();p();f();d();m();c();p();f();d();function Qo(e,t,r){let n=Te(r);return!t.result||!(t.result.$allModels||t.result[n])?e:sc({...e,...Vo(t.name,e,t.result.$allModels),...Vo(t.name,e,t.result[n])})}function sc(e){let t=new be,r=(n,i)=>t.getOrCreate(n,()=>i.has(n)?[n]:(i.add(n),e[n]?e[n].needs.flatMap(o=>r(o,i)):[n]));return rt(e,n=>({...n,needs:r(n.name,new Set)}))}function Vo(e,t,r){return r?rt(r,({needs:n,compute:i},o)=>({name:o,needs:n?Object.keys(n).filter(s=>n[s]):[],compute:ac(t,o,i)})):{}}function ac(e,t,r){let n=e?.[t]?.compute;return n?i=>r({...i,[t]:n(i)}):r}function Jo(e,t){if(!t)return e;let r={...e};for(let n of Object.values(t))if(e[n.name])for(let i of n.needs)r[i]=!0;return r}function Wo(e,t){if(!t)return e;let r={...e};for(let n of Object.values(t))if(!e[n.name])for(let i of n.needs)delete r[i];return r}var vr=class{constructor(t,r){this.extension=t;this.previous=r;this.computedFieldsCache=new be;this.modelExtensionsCache=new be;this.queryCallbacksCache=new be;this.clientExtensions=Rt(()=>this.extension.client?{...this.previous?.getAllClientExtensions(),...this.extension.client}:this.previous?.getAllClientExtensions());this.batchCallbacks=Rt(()=>{let t=this.previous?.getAllBatchQueryCallbacks()??[],r=this.extension.query?.$__internalBatch;return r?t.concat(r):t})}getAllComputedFields(t){return this.computedFieldsCache.getOrCreate(t,()=>Qo(this.previous?.getAllComputedFields(t),this.extension,t))}getAllClientExtensions(){return this.clientExtensions.get()}getAllModelExtensions(t){return this.modelExtensionsCache.getOrCreate(t,()=>{let r=Te(t);return!this.extension.model||!(this.extension.model[r]||this.extension.model.$allModels)?this.previous?.getAllModelExtensions(t):{...this.previous?.getAllModelExtensions(t),...this.extension.model.$allModels,...this.extension.model[r]}})}getAllQueryCallbacks(t,r){return this.queryCallbacksCache.getOrCreate(`${t}:${r}`,()=>{let n=this.previous?.getAllQueryCallbacks(t,r)??[],i=[],o=this.extension.query;return!o||!(o[t]||o.$allModels||o[r]||o.$allOperations)?n:(o[t]!==void 0&&(o[t][r]!==void 0&&i.push(o[t][r]),o[t].$allOperations!==void 0&&i.push(o[t].$allOperations)),t!==\"$none\"&&o.$allModels!==void 0&&(o.$allModels[r]!==void 0&&i.push(o.$allModels[r]),o.$allModels.$allOperations!==void 0&&i.push(o.$allModels.$allOperations)),o[r]!==void 0&&i.push(o[r]),o.$allOperations!==void 0&&i.push(o.$allOperations),n.concat(i))})}getAllBatchQueryCallbacks(){return this.batchCallbacks.get()}},Pr=class e{constructor(t){this.head=t}static empty(){return new e}static single(t){return new e(new vr(t))}isEmpty(){return this.head===void 0}append(t){return new e(new vr(t,this.head))}getAllComputedFields(t){return this.head?.getAllComputedFields(t)}getAllClientExtensions(){return this.head?.getAllClientExtensions()}getAllModelExtensions(t){return this.head?.getAllModelExtensions(t)}getAllQueryCallbacks(t,r){return this.head?.getAllQueryCallbacks(t,r)??[]}getAllBatchQueryCallbacks(){return this.head?.getAllBatchQueryCallbacks()??[]}};m();c();p();f();d();var Go=le(\"prisma:client\"),Ho={Vercel:\"vercel\",\"Netlify CI\":\"netlify\"};function Ko({postinstall:e,ciName:t,clientVersion:r}){if(Go(\"checkPlatformCaching:postinstall\",e),Go(\"checkPlatformCaching:ciName\",t),e===!0&&t&&t in Ho){let n=`Prisma has detected that this project was built on ${t}, which caches dependencies. This leads to an outdated Prisma Client because Prisma's auto-generation isn't triggered. To fix this, make sure to run the \\`prisma generate\\` command during the build process.\n\nLearn how: https://pris.ly/d/${Ho[t]}-build`;throw console.error(n),new V(n,r)}}m();c();p();f();d();function zo(e,t){return e?e.datasources?e.datasources:e.datasourceUrl?{[t[0]]:{url:e.datasourceUrl}}:{}:{}}m();c();p();f();d();m();c();p();f();d();m();c();p();f();d();var lc=\"Cloudflare-Workers\",uc=\"node\";function Yo(){return typeof Netlify==\"object\"?\"netlify\":typeof EdgeRuntime==\"string\"?\"edge-light\":globalThis.navigator?.userAgent===lc?\"workerd\":globalThis.Deno?\"deno\":globalThis.__lagon__?\"lagon\":globalThis.process?.release?.name===uc?\"node\":globalThis.Bun?\"bun\":globalThis.fastly?\"fastly\":\"unknown\"}var cc={node:\"Node.js\",workerd:\"Cloudflare Workers\",deno:\"Deno and Deno Deploy\",netlify:\"Netlify Edge Functions\",\"edge-light\":\"Vercel Edge Functions or Edge Middleware\"};function Zo(){let e=Yo();return{id:e,prettyName:cc[e]||e,isEdge:[\"workerd\",\"deno\",\"netlify\",\"edge-light\"].includes(e)}}m();c();p();f();d();m();c();p();f();d();var Rn=fe(nn());m();c();p();f();d();function Xo(e){return e?e.replace(/\".*\"/g,'\"X\"').replace(/[\\s:\\[]([+-]?([0-9]*[.])?[0-9]+)/g,t=>`${t[0]}5`):\"\"}m();c();p();f();d();function es(e){return e.split(`\n`).map(t=>t.replace(/^\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z)\\s*/,\"\").replace(/\\+\\d+\\s*ms$/,\"\")).join(`\n`)}m();c();p();f();d();var pc=fe(Ci()),ts=fe(Bi());function rs({title:e,user:t=\"prisma\",repo:r=\"prisma\",template:n=\"bug_report.yml\",body:i}){return(0,ts.default)({user:t,repo:r,template:n,title:e,body:i})}function ns({version:e,binaryTarget:t,title:r,description:n,engineVersion:i,database:o,query:s}){let a=vi(6e3-(s?.length??0)),l=es((0,Rn.default)(a)),u=n?`# Description\n\\`\\`\\`\n${n}\n\\`\\`\\``:\"\",g=(0,Rn.default)(`Hi Prisma Team! My Prisma Client just crashed. This is the report:\n## Versions\n\n| Name            | Version            |\n|-----------------|--------------------|\n| Node            | ${y.version?.padEnd(19)}| \n| OS              | ${t?.padEnd(19)}|\n| Prisma Client   | ${e?.padEnd(19)}|\n| Query Engine    | ${i?.padEnd(19)}|\n| Database        | ${o?.padEnd(19)}|\n\n${u}\n\n## Logs\n\\`\\`\\`\n${l}\n\\`\\`\\`\n\n## Client Snippet\n\\`\\`\\`ts\n// PLEASE FILL YOUR CODE SNIPPET HERE\n\\`\\`\\`\n\n## Schema\n\\`\\`\\`prisma\n// PLEASE ADD YOUR SCHEMA HERE IF POSSIBLE\n\\`\\`\\`\n\n## Prisma Engine Query\n\\`\\`\\`\n${s?Xo(s):\"\"}\n\\`\\`\\`\n`),h=rs({title:r,body:g});return`${r}\n\nThis is a non-recoverable error which probably happens when the Prisma Query Engine has a panic.\n\n${bt(h)}\n\nIf you want the Prisma team to look into it, please open the link above \\u{1F64F}\nTo increase the chance of success, please post your schema and a snippet of\nhow you used Prisma Client in the issue. \n`}m();c();p();f();d();function Tr({inlineDatasources:e,overrideDatasources:t,env:r,clientVersion:n}){let i,o=Object.keys(e)[0],s=e[o]?.url,a=t[o]?.url;if(o===void 0?i=void 0:a?i=a:s?.value?i=s.value:s?.fromEnvVar&&(i=r[s.fromEnvVar]),s?.fromEnvVar!==void 0&&i===void 0)throw new V(`error: Environment variable not found: ${s.fromEnvVar}.`,n);if(i===void 0)throw new V(\"error: Missing URL environment variable, value, or override.\",n);return i}m();c();p();f();d();m();c();p();f();d();function is(e){if(e?.kind===\"itx\")return e.options.id}m();c();p();f();d();var kn=class{constructor(t,r,n){this.engineObject=__PrismaProxy.create({datamodel:t.datamodel,env:y.env,ignoreEnvVarErrors:!0,datasourceOverrides:t.datasourceOverrides??{},logLevel:t.logLevel,logQueries:t.logQueries??!1,logCallback:r})}async connect(t){return __PrismaProxy.connect(this.engineObject,t)}async disconnect(t){return __PrismaProxy.disconnect(this.engineObject,t)}query(t,r,n){return __PrismaProxy.execute(this.engineObject,t,r,n)}sdlSchema(){return Promise.resolve(\"{}\")}dmmf(t){return Promise.resolve(\"{}\")}async startTransaction(t,r){return __PrismaProxy.startTransaction(this.engineObject,t,r)}async commitTransaction(t,r){return __PrismaProxy.commitTransaction(this.engineObject,t,r)}async rollbackTransaction(t,r){return __PrismaProxy.rollbackTransaction(this.engineObject,t,r)}metrics(t){return Promise.resolve(\"{}\")}async applyPendingMigrations(){return __PrismaProxy.applyPendingMigrations(this.engineObject)}},os={async loadLibrary(e){if(!__PrismaProxy)throw new V(\"__PrismaProxy not detected make sure React Native bindings are installed\",e.clientVersion);return{debugPanic(){return Promise.reject(\"{}\")},dmmf(){return Promise.resolve(\"{}\")},version(){return{commit:\"unknown\",version:\"unknown\"}},QueryEngine:kn}}};var fc=\"P2036\",Ce=le(\"prisma:client:libraryEngine\");function dc(e){return e.item_type===\"query\"&&\"query\"in e}function mc(e){return\"level\"in e?e.level===\"error\"&&e.message===\"PANIC\":!1}var RC=[...Xr,\"native\"],ss=0,jt=class{constructor(t,r){this.name=\"LibraryEngine\";this.libraryLoader=os,this.config=t,this.libraryStarted=!1,this.logQueries=t.logQueries??!1,this.logLevel=t.logLevel??\"error\",this.logEmitter=t.logEmitter,this.datamodel=t.inlineSchema,t.enableDebugLogs&&(this.logLevel=\"debug\");let n=Object.keys(t.overrideDatasources)[0],i=t.overrideDatasources[n]?.url;n!==void 0&&i!==void 0&&(this.datasourceOverrides={[n]:i}),this.libraryInstantiationPromise=this.instantiateLibrary(),this.checkForTooManyEngines()}checkForTooManyEngines(){this.config.adapter&&[\"wasm\"].includes(\"react-native\")||ss===10&&console.warn(`${Qe(\"warn(prisma-client)\")} This is the 10th instance of Prisma Client being started. Make sure this is intentional.`)}async applyPendingMigrations(){await this.start(),await this.engine?.applyPendingMigrations()}async transaction(t,r,n){await this.start();let i=JSON.stringify(r),o;if(t===\"start\"){let a=JSON.stringify({max_wait:n.maxWait,timeout:n.timeout,isolation_level:n.isolationLevel});o=await this.engine?.startTransaction(a,i)}else t===\"commit\"?o=await this.engine?.commitTransaction(n.id,i):t===\"rollback\"&&(o=await this.engine?.rollbackTransaction(n.id,i));let s=this.parseEngineResponse(o);if(gc(s)){let a=this.getExternalAdapterError(s);throw a?a.error:new G(s.message,{code:s.error_code,clientVersion:this.config.clientVersion,meta:s.meta})}return s}async instantiateLibrary(){if(Ce(\"internalSetup\"),this.libraryInstantiationPromise)return this.libraryInstantiationPromise;this.binaryTarget=await this.getCurrentBinaryTarget(),await this.loadEngine(),this.version()}async getCurrentBinaryTarget(){}parseEngineResponse(t){if(!t)throw new H(\"Response from the Engine was empty\",{clientVersion:this.config.clientVersion});try{return JSON.parse(t)}catch{throw new H(\"Unable to JSON.parse response from engine\",{clientVersion:this.config.clientVersion})}}async loadEngine(){if(!this.engine){this.QueryEngineConstructor||(this.library=await this.libraryLoader.loadLibrary(this.config),this.QueryEngineConstructor=this.library.QueryEngine);try{let t=new b(this),{adapter:r}=this.config;r&&Ce(\"Using driver adapter: %O\",r),this.engine=new this.QueryEngineConstructor({datamodel:this.datamodel,env:y.env,logQueries:this.config.logQueries??!1,ignoreEnvVarErrors:!0,datasourceOverrides:this.datasourceOverrides??{},logLevel:this.logLevel,configDir:this.config.cwd,engineProtocol:\"json\"},n=>{t.deref()?.logger(n)},r),ss++}catch(t){let r=t,n=this.parseInitError(r.message);throw typeof n==\"string\"?r:new V(n.message,this.config.clientVersion,n.error_code)}}}logger(t){let r=this.parseEngineResponse(t);if(r){if(\"span\"in r){this.config.tracingHelper.createEngineSpan(r);return}r.level=r?.level.toLowerCase()??\"unknown\",dc(r)?this.logEmitter.emit(\"query\",{timestamp:new Date,query:r.query,params:r.params,duration:Number(r.duration_ms),target:r.module_path}):mc(r)?this.loggerRustPanic=new ue(On(this,`${r.message}: ${r.reason} in ${r.file}:${r.line}:${r.column}`),this.config.clientVersion):this.logEmitter.emit(r.level,{timestamp:new Date,message:r.message,target:r.module_path})}}parseInitError(t){try{return JSON.parse(t)}catch{}return t}parseRequestError(t){try{return JSON.parse(t)}catch{}return t}onBeforeExit(){throw new Error('\"beforeExit\" hook is not applicable to the library engine since Prisma 5.0.0, it is only relevant and implemented for the binary engine. Please add your event listener to the `process` object directly instead.')}async start(){if(await this.libraryInstantiationPromise,await this.libraryStoppingPromise,this.libraryStartingPromise)return Ce(`library already starting, this.libraryStarted: ${this.libraryStarted}`),this.libraryStartingPromise;if(this.libraryStarted)return;let t=async()=>{Ce(\"library starting\");try{let r={traceparent:this.config.tracingHelper.getTraceParent()};await this.engine?.connect(JSON.stringify(r)),this.libraryStarted=!0,Ce(\"library started\")}catch(r){let n=this.parseInitError(r.message);throw typeof n==\"string\"?r:new V(n.message,this.config.clientVersion,n.error_code)}finally{this.libraryStartingPromise=void 0}};return this.libraryStartingPromise=this.config.tracingHelper.runInChildSpan(\"connect\",t),this.libraryStartingPromise}async stop(){if(await this.libraryStartingPromise,await this.executingQueryPromise,this.libraryStoppingPromise)return Ce(\"library is already stopping\"),this.libraryStoppingPromise;if(!this.libraryStarted)return;let t=async()=>{await new Promise(n=>setTimeout(n,5)),Ce(\"library stopping\");let r={traceparent:this.config.tracingHelper.getTraceParent()};await this.engine?.disconnect(JSON.stringify(r)),this.libraryStarted=!1,this.libraryStoppingPromise=void 0,Ce(\"library stopped\")};return this.libraryStoppingPromise=this.config.tracingHelper.runInChildSpan(\"disconnect\",t),this.libraryStoppingPromise}version(){return this.versionInfo=this.library?.version(),this.versionInfo?.version??\"unknown\"}debugPanic(t){return this.library?.debugPanic(t)}async request(t,{traceparent:r,interactiveTransaction:n}){Ce(`sending request, this.libraryStarted: ${this.libraryStarted}`);let i=JSON.stringify({traceparent:r}),o=JSON.stringify(t);try{await this.start(),this.executingQueryPromise=this.engine?.query(o,i,n?.id),this.lastQuery=o;let s=this.parseEngineResponse(await this.executingQueryPromise);if(s.errors)throw s.errors.length===1?this.buildQueryError(s.errors[0]):new H(JSON.stringify(s.errors),{clientVersion:this.config.clientVersion});if(this.loggerRustPanic)throw this.loggerRustPanic;return{data:s,elapsed:0}}catch(s){if(s instanceof V)throw s;if(s.code===\"GenericFailure\"&&s.message?.startsWith(\"PANIC:\"))throw new ue(On(this,s.message),this.config.clientVersion);let a=this.parseRequestError(s.message);throw typeof a==\"string\"?s:new H(`${a.message}\n${a.backtrace}`,{clientVersion:this.config.clientVersion})}}async requestBatch(t,{transaction:r,traceparent:n}){Ce(\"requestBatch\");let i=rr(t,r);await this.start(),this.lastQuery=JSON.stringify(i),this.executingQueryPromise=this.engine.query(this.lastQuery,JSON.stringify({traceparent:n}),is(r));let o=await this.executingQueryPromise,s=this.parseEngineResponse(o);if(s.errors)throw s.errors.length===1?this.buildQueryError(s.errors[0]):new H(JSON.stringify(s.errors),{clientVersion:this.config.clientVersion});let{batchResult:a,errors:l}=s;if(Array.isArray(a))return a.map(u=>u.errors&&u.errors.length>0?this.loggerRustPanic??this.buildQueryError(u.errors[0]):{data:u,elapsed:0});throw l&&l.length===1?new Error(l[0].error):new Error(JSON.stringify(s))}buildQueryError(t){if(t.user_facing_error.is_panic)return new ue(On(this,t.user_facing_error.message),this.config.clientVersion);let r=this.getExternalAdapterError(t.user_facing_error);return r?r.error:yr(t,this.config.clientVersion,this.config.activeProvider)}getExternalAdapterError(t){if(t.error_code===fc&&this.config.adapter){let r=t.meta?.id;zt(typeof r==\"number\",\"Malformed external JS error received from the engine\");let n=this.config.adapter.errorRegistry.consumeError(r);return zt(n,\"External error with reported id was not registered\"),n}}async metrics(t){await this.start();let r=await this.engine.metrics(JSON.stringify(t));return t.format===\"prometheus\"?r:this.parseEngineResponse(r)}};function gc(e){return typeof e==\"object\"&&e!==null&&e.error_code!==void 0}function On(e,t){return ns({binaryTarget:e.binaryTarget,title:t,version:e.config.clientVersion,engineVersion:e.versionInfo?.commit,database:e.config.activeProvider,query:e.lastQuery})}function as({copyEngine:e=!0},t){let r;try{r=Tr({inlineDatasources:t.inlineDatasources,overrideDatasources:t.overrideDatasources,env:{...t.env,...y.env},clientVersion:t.clientVersion})}catch{}e&&r?.startsWith(\"prisma://\")&&St(\"recommend--no-engine\",\"In production, we recommend using `prisma generate --no-engine` (See: `prisma generate --help`)\");let n=Tt(t.generator),i=!!(r?.startsWith(\"prisma://\")||!e),o=!!t.adapter,s=n===\"library\",a=n===\"binary\";if(i&&o||o&&!1){let l;throw e?r?.startsWith(\"prisma://\")?l=[\"Prisma Client was configured to use the `adapter` option but the URL was a `prisma://` URL.\",\"Please either use the `prisma://` URL or remove the `adapter` from the Prisma Client constructor.\"]:l=[\"Prisma Client was configured to use both the `adapter` and Accelerate, please chose one.\"]:l=[\"Prisma Client was configured to use the `adapter` option but `prisma generate` was run with `--no-engine`.\",\"Please run `prisma generate` without `--no-engine` to be able to use Prisma Client with the adapter.\"],new Y(l.join(`\n`),{clientVersion:t.clientVersion})}return new jt(t)}m();c();p();f();d();function Cr({generator:e}){return e?.previewFeatures??[]}m();c();p();f();d();m();c();p();f();d();m();c();p();f();d();var ds=fe(Fn());m();c();p();f();d();function ps(e,t){let r=fs(e),n=hc(r),i=wc(n);i?Ar(i,t):t.addErrorMessage(()=>\"Unknown error\")}function fs(e){return e.errors.flatMap(t=>t.kind===\"Union\"?fs(t):[t])}function hc(e){let t=new Map,r=[];for(let n of e){if(n.kind!==\"InvalidArgumentType\"){r.push(n);continue}let i=`${n.selectionPath.join(\".\")}:${n.argumentPath.join(\".\")}`,o=t.get(i);o?t.set(i,{...n,argument:{...n.argument,typeNames:yc(o.argument.typeNames,n.argument.typeNames)}}):t.set(i,n)}return r.push(...t.values()),r}function yc(e,t){return[...new Set(e.concat(t))]}function wc(e){return an(e,(t,r)=>{let n=us(t),i=us(r);return n!==i?n-i:cs(t)-cs(r)})}function us(e){let t=0;return Array.isArray(e.selectionPath)&&(t+=e.selectionPath.length),Array.isArray(e.argumentPath)&&(t+=e.argumentPath.length),t}function cs(e){switch(e.kind){case\"InvalidArgumentValue\":case\"ValueTooLarge\":return 20;case\"InvalidArgumentType\":return 10;case\"RequiredArgumentMissing\":return-10;default:return 0}}m();c();p();f();d();var pe=class{constructor(t,r){this.name=t;this.value=r;this.isRequired=!1}makeRequired(){return this.isRequired=!0,this}write(t){let{colors:{green:r}}=t.context;t.addMarginSymbol(r(this.isRequired?\"+\":\"?\")),t.write(r(this.name)),this.isRequired||t.write(r(\"?\")),t.write(r(\": \")),typeof this.value==\"string\"?t.write(r(this.value)):t.write(this.value)}};m();c();p();f();d();var Sr=class{constructor(){this.fields=[]}addField(t,r){return this.fields.push({write(n){let{green:i,dim:o}=n.context.colors;n.write(i(o(`${t}: ${r}`))).addMarginSymbol(i(o(\"+\")))}}),this}write(t){let{colors:{green:r}}=t.context;t.writeLine(r(\"{\")).withIndent(()=>{t.writeJoined(pt,this.fields).newLine()}).write(r(\"}\")).addMarginSymbol(r(\"+\"))}};function Ar(e,t){switch(e.kind){case\"MutuallyExclusiveFields\":bc(e,t);break;case\"IncludeOnScalar\":Ec(e,t);break;case\"EmptySelection\":xc(e,t);break;case\"UnknownSelectionField\":Tc(e,t);break;case\"UnknownArgument\":Cc(e,t);break;case\"UnknownInputField\":Ac(e,t);break;case\"RequiredArgumentMissing\":Sc(e,t);break;case\"InvalidArgumentType\":Rc(e,t);break;case\"InvalidArgumentValue\":kc(e,t);break;case\"ValueTooLarge\":Oc(e,t);break;case\"SomeFieldsMissing\":Fc(e,t);break;case\"TooManyFieldsGiven\":Mc(e,t);break;case\"Union\":ps(e,t);break;default:throw new Error(\"not implemented: \"+e.kind)}}function bc(e,t){let r=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();r&&(r.getField(e.firstField)?.markAsError(),r.getField(e.secondField)?.markAsError()),t.addErrorMessage(n=>`Please ${n.bold(\"either\")} use ${n.green(`\\`${e.firstField}\\``)} or ${n.green(`\\`${e.secondField}\\``)}, but ${n.red(\"not both\")} at the same time.`)}function Ec(e,t){let[r,n]=Rr(e.selectionPath),i=e.outputType,o=t.arguments.getDeepSelectionParent(r)?.value;if(o&&(o.getField(n)?.markAsError(),i))for(let s of i.fields)s.isRelation&&o.addSuggestion(new pe(s.name,\"true\"));t.addErrorMessage(s=>{let a=`Invalid scalar field ${s.red(`\\`${n}\\``)} for ${s.bold(\"include\")} statement`;return i?a+=` on model ${s.bold(i.name)}. ${Ut(s)}`:a+=\".\",a+=`\nNote that ${s.bold(\"include\")} statements only accept relation fields.`,a})}function xc(e,t){let r=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(r){let n=r.getField(\"omit\")?.value.asObject();if(n){vc(e,t,n);return}}Pc(e,t)}function vc(e,t,r){r.removeAllFields();for(let n of e.outputType.fields)r.addSuggestion(new pe(n.name,\"false\"));t.addErrorMessage(n=>`The ${n.red(\"omit\")} statement includes every field of the model ${n.bold(e.outputType.name)}. At least one field must be included in the result`)}function Pc(e,t){let r=e.outputType,n=t.arguments.getDeepSelectionParent(e.selectionPath)?.value,i=n?.isEmpty()??!1;n&&(n.removeAllFields(),hs(n,r)),t.addErrorMessage(o=>i?`The ${o.red(\"`select`\")} statement for type ${o.bold(r.name)} must not be empty. ${Ut(o)}`:`The ${o.red(\"`select`\")} statement for type ${o.bold(r.name)} needs ${o.bold(\"at least one truthy value\")}.`)}function Tc(e,t){let[r,n]=Rr(e.selectionPath),i=t.arguments.getDeepSubSelectionValue(r)?.asObject(),o;if(i){let s=i.getFieldValue(\"select\")?.asObject(),a=i.getFieldValue(\"include\")?.asObject(),l=i.getFieldValue(\"omit\")?.asObject();s?.hasField(n)?(o=\"select\",s.getField(n)?.markAsError(),hs(s,e.outputType)):a?.hasField(n)?(o=\"include\",a.getField(n)?.markAsError(),_c(a,e.outputType)):l?.hasField(n)&&(o=\"omit\",l.getField(n)?.markAsError(),Lc(l,e.outputType))}t.addErrorMessage(s=>{let a=[`Unknown field ${s.red(`\\`${n}\\``)}`];return o&&a.push(`for ${s.bold(o)} statement`),a.push(`on model ${s.bold(`\\`${e.outputType.name}\\``)}.`),a.push(Ut(s)),a.join(\" \")})}function Cc(e,t){let r=e.argumentPath[0],n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&(n.getField(r)?.markAsError(),Ic(n,e.arguments)),t.addErrorMessage(i=>ms(i,r,e.arguments.map(o=>o.name)))}function Ac(e,t){let[r,n]=Rr(e.argumentPath),i=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(i){i.getDeepField(e.argumentPath)?.markAsError();let o=i.getDeepFieldValue(r)?.asObject();o&&ys(o,e.inputType)}t.addErrorMessage(o=>ms(o,n,e.inputType.fields.map(s=>s.name)))}function ms(e,t,r){let n=[`Unknown argument \\`${e.red(t)}\\`.`],i=Dc(t,r);return i&&n.push(`Did you mean \\`${e.green(i)}\\`?`),r.length>0&&n.push(Ut(e)),n.join(\" \")}function Sc(e,t){let r;t.addErrorMessage(l=>r?.value instanceof K&&r.value.text===\"null\"?`Argument \\`${l.green(o)}\\` must not be ${l.red(\"null\")}.`:`Argument \\`${l.green(o)}\\` is missing.`);let n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(!n)return;let[i,o]=Rr(e.argumentPath),s=new Sr,a=n.getDeepFieldValue(i)?.asObject();if(a)if(r=a.getField(o),r&&a.removeField(o),e.inputTypes.length===1&&e.inputTypes[0].kind===\"object\"){for(let l of e.inputTypes[0].fields)s.addField(l.name,l.typeNames.join(\" | \"));a.addSuggestion(new pe(o,s).makeRequired())}else{let l=e.inputTypes.map(gs).join(\" | \");a.addSuggestion(new pe(o,l).makeRequired())}}function gs(e){return e.kind===\"list\"?`${gs(e.elementType)}[]`:e.name}function Rc(e,t){let r=e.argument.name,n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&n.getDeepFieldValue(e.argumentPath)?.markAsError(),t.addErrorMessage(i=>{let o=kr(\"or\",e.argument.typeNames.map(s=>i.green(s)));return`Argument \\`${i.bold(r)}\\`: Invalid value provided. Expected ${o}, provided ${i.red(e.inferredType)}.`})}function kc(e,t){let r=e.argument.name,n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&n.getDeepFieldValue(e.argumentPath)?.markAsError(),t.addErrorMessage(i=>{let o=[`Invalid value for argument \\`${i.bold(r)}\\``];if(e.underlyingError&&o.push(`: ${e.underlyingError}`),o.push(\".\"),e.argument.typeNames.length>0){let s=kr(\"or\",e.argument.typeNames.map(a=>i.green(a)));o.push(` Expected ${s}.`)}return o.join(\"\")})}function Oc(e,t){let r=e.argument.name,n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject(),i;if(n){let s=n.getDeepField(e.argumentPath)?.value;s?.markAsError(),s instanceof K&&(i=s.text)}t.addErrorMessage(o=>{let s=[\"Unable to fit value\"];return i&&s.push(o.red(i)),s.push(`into a 64-bit signed integer for field \\`${o.bold(r)}\\``),s.join(\" \")})}function Fc(e,t){let r=e.argumentPath[e.argumentPath.length-1],n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(n){let i=n.getDeepFieldValue(e.argumentPath)?.asObject();i&&ys(i,e.inputType)}t.addErrorMessage(i=>{let o=[`Argument \\`${i.bold(r)}\\` of type ${i.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1?e.constraints.requiredFields?o.push(`${i.green(\"at least one of\")} ${kr(\"or\",e.constraints.requiredFields.map(s=>`\\`${i.bold(s)}\\``))} arguments.`):o.push(`${i.green(\"at least one\")} argument.`):o.push(`${i.green(`at least ${e.constraints.minFieldCount}`)} arguments.`),o.push(Ut(i)),o.join(\" \")})}function Mc(e,t){let r=e.argumentPath[e.argumentPath.length-1],n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject(),i=[];if(n){let o=n.getDeepFieldValue(e.argumentPath)?.asObject();o&&(o.markAsError(),i=Object.keys(o.getFields()))}t.addErrorMessage(o=>{let s=[`Argument \\`${o.bold(r)}\\` of type ${o.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1&&e.constraints.maxFieldCount==1?s.push(`${o.green(\"exactly one\")} argument,`):e.constraints.maxFieldCount==1?s.push(`${o.green(\"at most one\")} argument,`):s.push(`${o.green(`at most ${e.constraints.maxFieldCount}`)} arguments,`),s.push(`but you provided ${kr(\"and\",i.map(a=>o.red(a)))}. Please choose`),e.constraints.maxFieldCount===1?s.push(\"one.\"):s.push(`${e.constraints.maxFieldCount}.`),s.join(\" \")})}function hs(e,t){for(let r of t.fields)e.hasField(r.name)||e.addSuggestion(new pe(r.name,\"true\"))}function _c(e,t){for(let r of t.fields)r.isRelation&&!e.hasField(r.name)&&e.addSuggestion(new pe(r.name,\"true\"))}function Lc(e,t){for(let r of t.fields)!e.hasField(r.name)&&!r.isRelation&&e.addSuggestion(new pe(r.name,\"true\"))}function Ic(e,t){for(let r of t)e.hasField(r.name)||e.addSuggestion(new pe(r.name,r.typeNames.join(\" | \")))}function ys(e,t){if(t.kind===\"object\")for(let r of t.fields)e.hasField(r.name)||e.addSuggestion(new pe(r.name,r.typeNames.join(\" | \")))}function Rr(e){let t=[...e],r=t.pop();if(!r)throw new Error(\"unexpected empty path\");return[t,r]}function Ut({green:e,enabled:t}){return\"Available options are \"+(t?`listed in ${e(\"green\")}`:\"marked with ?\")+\".\"}function kr(e,t){if(t.length===1)return t[0];let r=[...t],n=r.pop();return`${r.join(\", \")} ${e} ${n}`}var Nc=3;function Dc(e,t){let r=1/0,n;for(let i of t){let o=(0,ds.default)(e,i);o>Nc||o<r&&(r=o,n=i)}return n}function Or({args:e,errors:t,errorFormat:r,callsite:n,originalMethod:i,clientVersion:o}){let s=hr(e);for(let h of t)Ar(h,s);let a=r===\"pretty\"?uo:dr,l=s.renderAllMessages(a),u=new ot(0,{colors:a}).write(s).toString(),g=mt({message:l,callsite:n,originalMethod:i,showColors:r===\"pretty\",callArguments:u});throw new Y(g,{clientVersion:o})}var Bc={findUnique:\"findUnique\",findUniqueOrThrow:\"findUniqueOrThrow\",findFirst:\"findFirst\",findFirstOrThrow:\"findFirstOrThrow\",findMany:\"findMany\",count:\"aggregate\",create:\"createOne\",createMany:\"createMany\",createManyAndReturn:\"createManyAndReturn\",update:\"updateOne\",updateMany:\"updateMany\",upsert:\"upsertOne\",delete:\"deleteOne\",deleteMany:\"deleteMany\",executeRaw:\"executeRaw\",queryRaw:\"queryRaw\",aggregate:\"aggregate\",groupBy:\"groupBy\",runCommandRaw:\"runCommandRaw\",findRaw:\"findRaw\",aggregateRaw:\"aggregateRaw\"};function ws({modelName:e,action:t,args:r,runtimeDataModel:n,extensions:i,callsite:o,clientMethod:s,errorFormat:a,clientVersion:l,previewFeatures:u}){let g=new Mn({runtimeDataModel:n,modelName:e,action:t,rootArgs:r,callsite:o,extensions:i,selectionPath:[],argumentPath:[],originalMethod:s,errorFormat:a,clientVersion:l,previewFeatures:u});return{modelName:e,action:Bc[t],query:_n(r,g)}}function _n({select:e,include:t,...r}={},n){let i;return n.isPreviewFeatureOn(\"omitApi\")&&(i=r.omit,delete r.omit),{arguments:Es(r,n),selection:$c(e,t,i,n)}}function $c(e,t,r,n){return e?(t?n.throwValidationError({kind:\"MutuallyExclusiveFields\",firstField:\"include\",secondField:\"select\",selectionPath:n.getSelectionPath()}):r&&n.isPreviewFeatureOn(\"omitApi\")&&n.throwValidationError({kind:\"MutuallyExclusiveFields\",firstField:\"omit\",secondField:\"select\",selectionPath:n.getSelectionPath()}),Vc(e,n)):jc(n,t,r)}function jc(e,t,r){let n={};return e.model&&!e.isRawAction()&&(n.$composites=!0,n.$scalars=!0),t&&Uc(n,t,e),r&&e.isPreviewFeatureOn(\"omitApi\")&&qc(n,r,e),n}function Uc(e,t,r){for(let[n,i]of Object.entries(t)){let o=r.findField(n);o&&o?.kind!==\"object\"&&r.throwValidationError({kind:\"IncludeOnScalar\",selectionPath:r.getSelectionPath().concat(n),outputType:r.getOutputTypeDescription()}),i===!0?e[n]=!0:typeof i==\"object\"&&(e[n]=_n(i,r.nestSelection(n)))}}function qc(e,t,r){let n=r.getComputedFields(),i=Wo(t,n);for(let[o,s]of Object.entries(i)){let a=r.findField(o);n?.[o]&&!a||(e[o]=!s)}}function Vc(e,t){let r={},n=t.getComputedFields(),i=Jo(e,n);for(let[o,s]of Object.entries(i)){let a=t.findField(o);n?.[o]&&!a||(s===!0?r[o]=!0:typeof s==\"object\"&&(r[o]=_n(s,t.nestSelection(o))))}return r}function bs(e,t){if(e===null)return null;if(typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\")return e;if(typeof e==\"bigint\")return{$type:\"BigInt\",value:String(e)};if(st(e)){if(nr(e))return{$type:\"DateTime\",value:e.toISOString()};t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:t.getSelectionPath(),argumentPath:t.getArgumentPath(),argument:{name:t.getArgumentName(),typeNames:[\"Date\"]},underlyingError:\"Provided Date object is invalid\"})}if(ct(e))return{$type:\"FieldRef\",value:{_ref:e.name,_container:e.modelName}};if(Array.isArray(e))return Qc(e,t);if(ArrayBuffer.isView(e))return{$type:\"Bytes\",value:w.Buffer.from(e).toString(\"base64\")};if(Jc(e))return e.values;if(ut(e))return{$type:\"Decimal\",value:e.toFixed()};if(e instanceof Fe){if(e!==Xt.instances[e._getName()])throw new Error(\"Invalid ObjectEnumValue\");return{$type:\"Enum\",value:e._getName()}}if(Wc(e))return e.toJSON();if(typeof e==\"object\")return Es(e,t);t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:t.getSelectionPath(),argumentPath:t.getArgumentPath(),argument:{name:t.getArgumentName(),typeNames:[]},underlyingError:`We could not serialize ${Object.prototype.toString.call(e)} value. Serialize the object to JSON or implement a \".toJSON()\" method on it`})}function Es(e,t){if(e.$type)return{$type:\"Raw\",value:e};let r={};for(let n in e){let i=e[n];i!==void 0&&(r[n]=bs(i,t.nestArgument(n)))}return r}function Qc(e,t){let r=[];for(let n=0;n<e.length;n++){let i=t.nestArgument(String(n)),o=e[n];o===void 0&&t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:i.getSelectionPath(),argumentPath:i.getArgumentPath(),argument:{name:`${t.getArgumentName()}[${n}]`,typeNames:[]},underlyingError:\"Can not use `undefined` value within array. Use `null` or filter out `undefined` values\"}),r.push(bs(o,i))}return r}function Jc(e){return typeof e==\"object\"&&e!==null&&e.__prismaRawParameters__===!0}function Wc(e){return typeof e==\"object\"&&e!==null&&typeof e.toJSON==\"function\"}var Mn=class e{constructor(t){this.params=t;this.params.modelName&&(this.model=this.params.runtimeDataModel.models[this.params.modelName])}throwValidationError(t){Or({errors:[t],originalMethod:this.params.originalMethod,args:this.params.rootArgs??{},callsite:this.params.callsite,errorFormat:this.params.errorFormat,clientVersion:this.params.clientVersion})}getSelectionPath(){return this.params.selectionPath}getArgumentPath(){return this.params.argumentPath}getArgumentName(){return this.params.argumentPath[this.params.argumentPath.length-1]}getOutputTypeDescription(){if(!(!this.params.modelName||!this.model))return{name:this.params.modelName,fields:this.model.fields.map(t=>({name:t.name,typeName:\"boolean\",isRelation:t.kind===\"object\"}))}}isRawAction(){return[\"executeRaw\",\"queryRaw\",\"runCommandRaw\",\"findRaw\",\"aggregateRaw\"].includes(this.params.action)}isPreviewFeatureOn(t){return this.params.previewFeatures.includes(t)}getComputedFields(){if(this.params.modelName)return this.params.extensions.getAllComputedFields(this.params.modelName)}findField(t){return this.model?.fields.find(r=>r.name===t)}nestSelection(t){let r=this.findField(t),n=r?.kind===\"object\"?r.type:void 0;return new e({...this.params,modelName:n,selectionPath:this.params.selectionPath.concat(t)})}nestArgument(t){return new e({...this.params,argumentPath:this.params.argumentPath.concat(t)})}};m();c();p();f();d();var xs=e=>({command:e});m();c();p();f();d();m();c();p();f();d();var vs=e=>e.strings.reduce((t,r,n)=>`${t}@P${n}${r}`);m();c();p();f();d();function qt(e){try{return Ps(e,\"fast\")}catch{return Ps(e,\"slow\")}}function Ps(e,t){return JSON.stringify(e.map(r=>Gc(r,t)))}function Gc(e,t){return typeof e==\"bigint\"?{prisma__type:\"bigint\",prisma__value:e.toString()}:st(e)?{prisma__type:\"date\",prisma__value:e.toJSON()}:ve.isDecimal(e)?{prisma__type:\"decimal\",prisma__value:e.toJSON()}:w.Buffer.isBuffer(e)?{prisma__type:\"bytes\",prisma__value:e.toString(\"base64\")}:Hc(e)||ArrayBuffer.isView(e)?{prisma__type:\"bytes\",prisma__value:w.Buffer.from(e).toString(\"base64\")}:typeof e==\"object\"&&t===\"slow\"?Cs(e):e}function Hc(e){return e instanceof ArrayBuffer||e instanceof SharedArrayBuffer?!0:typeof e==\"object\"&&e!==null?e[Symbol.toStringTag]===\"ArrayBuffer\"||e[Symbol.toStringTag]===\"SharedArrayBuffer\":!1}function Cs(e){if(typeof e!=\"object\"||e===null)return e;if(typeof e.toJSON==\"function\")return e.toJSON();if(Array.isArray(e))return e.map(Ts);let t={};for(let r of Object.keys(e))t[r]=Ts(e[r]);return t}function Ts(e){return typeof e==\"bigint\"?e.toString():Cs(e)}var Kc=/^(\\s*alter\\s)/i,As=le(\"prisma:client\");function Ln(e,t,r,n){if(!(e!==\"postgresql\"&&e!==\"cockroachdb\")&&r.length>0&&Kc.exec(t))throw new Error(`Running ALTER using ${n} is not supported\nUsing the example below you can still execute your query with Prisma, but please note that it is vulnerable to SQL injection attacks and requires you to take care of input sanitization.\n\nExample:\n  await prisma.$executeRawUnsafe(\\`ALTER USER prisma WITH PASSWORD '\\${password}'\\`)\n\nMore Information: https://pris.ly/d/execute-raw\n`)}var In=({clientMethod:e,activeProvider:t})=>r=>{let n=\"\",i;if(Array.isArray(r)){let[o,...s]=r;n=o,i={values:qt(s||[]),__prismaRawParameters__:!0}}else switch(t){case\"sqlite\":case\"mysql\":{n=r.sql,i={values:qt(r.values),__prismaRawParameters__:!0};break}case\"cockroachdb\":case\"postgresql\":case\"postgres\":{n=r.text,i={values:qt(r.values),__prismaRawParameters__:!0};break}case\"sqlserver\":{n=vs(r),i={values:qt(r.values),__prismaRawParameters__:!0};break}default:throw new Error(`The ${t} provider does not support ${e}`)}return i?.values?As(`prisma.${e}(${n}, ${i.values})`):As(`prisma.${e}(${n})`),{query:n,parameters:i}},Ss={requestArgsToMiddlewareArgs(e){return[e.strings,...e.values]},middlewareArgsToRequestArgs(e){let[t,...r]=e;return new se(t,r)}},Rs={requestArgsToMiddlewareArgs(e){return[e]},middlewareArgsToRequestArgs(e){return e[0]}};m();c();p();f();d();function Nn(e){return function(r){let n,i=(o=e)=>{try{return o===void 0||o?.kind===\"itx\"?n??=ks(r(o)):ks(r(o))}catch(s){return Promise.reject(s)}};return{then(o,s){return i().then(o,s)},catch(o){return i().catch(o)},finally(o){return i().finally(o)},requestTransaction(o){let s=i(o);return s.requestTransaction?s.requestTransaction(o):s},[Symbol.toStringTag]:\"PrismaPromise\"}}}function ks(e){return typeof e.then==\"function\"?e:Promise.resolve(e)}m();c();p();f();d();var Os={isEnabled(){return!1},getTraceParent(){return\"00-10-10-00\"},async createEngineSpan(){},getActiveContext(){},runInChildSpan(e,t){return t()}},Dn=class{isEnabled(){return this.getGlobalTracingHelper().isEnabled()}getTraceParent(t){return this.getGlobalTracingHelper().getTraceParent(t)}createEngineSpan(t){return this.getGlobalTracingHelper().createEngineSpan(t)}getActiveContext(){return this.getGlobalTracingHelper().getActiveContext()}runInChildSpan(t,r){return this.getGlobalTracingHelper().runInChildSpan(t,r)}getGlobalTracingHelper(){return globalThis.PRISMA_INSTRUMENTATION?.helper??Os}};function Fs(e){return e.includes(\"tracing\")?new Dn:Os}m();c();p();f();d();function Ms(e,t=()=>{}){let r,n=new Promise(i=>r=i);return{then(i){return--e===0&&r(t()),i?.(n)}}}m();c();p();f();d();var zc=[\"$connect\",\"$disconnect\",\"$on\",\"$transaction\",\"$use\",\"$extends\"],_s=zc;m();c();p();f();d();function Ls(e){return typeof e==\"string\"?e:e.reduce((t,r)=>{let n=typeof r==\"string\"?r:r.level;return n===\"query\"?t:t&&(r===\"info\"||t===\"info\")?\"info\":n},void 0)}m();c();p();f();d();var Fr=class{constructor(){this._middlewares=[]}use(t){this._middlewares.push(t)}get(t){return this._middlewares[t]}has(t){return!!this._middlewares[t]}length(){return this._middlewares.length}};m();c();p();f();d();var Ns=fe(nn());m();c();p();f();d();function Mr(e){return typeof e.batchRequestIdx==\"number\"}m();c();p();f();d();function _r(e){return e===null?e:Array.isArray(e)?e.map(_r):typeof e==\"object\"?Yc(e)?Zc(e):rt(e,_r):e}function Yc(e){return e!==null&&typeof e==\"object\"&&typeof e.$type==\"string\"}function Zc({$type:e,value:t}){switch(e){case\"BigInt\":return BigInt(t);case\"Bytes\":return w.Buffer.from(t,\"base64\");case\"DateTime\":return new Date(t);case\"Decimal\":return new ve(t);case\"Json\":return JSON.parse(t);default:We(t,\"Unknown tagged value\")}}m();c();p();f();d();function Is(e){if(e.action!==\"findUnique\"&&e.action!==\"findUniqueOrThrow\")return;let t=[];return e.modelName&&t.push(e.modelName),e.query.arguments&&t.push(Bn(e.query.arguments)),t.push(Bn(e.query.selection)),t.join(\"\")}function Bn(e){return`(${Object.keys(e).sort().map(r=>{let n=e[r];return typeof n==\"object\"&&n!==null?`(${r} ${Bn(n)})`:r}).join(\" \")})`}m();c();p();f();d();var Xc={aggregate:!1,aggregateRaw:!1,createMany:!0,createManyAndReturn:!0,createOne:!0,deleteMany:!0,deleteOne:!0,executeRaw:!0,findFirst:!1,findFirstOrThrow:!1,findMany:!1,findRaw:!1,findUnique:!1,findUniqueOrThrow:!1,groupBy:!1,queryRaw:!1,runCommandRaw:!0,updateMany:!0,updateOne:!0,upsertOne:!0};function $n(e){return Xc[e]}m();c();p();f();d();var Lr=class{constructor(t){this.options=t;this.tickActive=!1;this.batches={}}request(t){let r=this.options.batchBy(t);return r?(this.batches[r]||(this.batches[r]=[],this.tickActive||(this.tickActive=!0,y.nextTick(()=>{this.dispatchBatches(),this.tickActive=!1}))),new Promise((n,i)=>{this.batches[r].push({request:t,resolve:n,reject:i})})):this.options.singleLoader(t)}dispatchBatches(){for(let t in this.batches){let r=this.batches[t];delete this.batches[t],r.length===1?this.options.singleLoader(r[0].request).then(n=>{n instanceof Error?r[0].reject(n):r[0].resolve(n)}).catch(n=>{r[0].reject(n)}):(r.sort((n,i)=>this.options.batchOrder(n.request,i.request)),this.options.batchLoader(r.map(n=>n.request)).then(n=>{if(n instanceof Error)for(let i=0;i<r.length;i++)r[i].reject(n);else for(let i=0;i<r.length;i++){let o=n[i];o instanceof Error?r[i].reject(o):r[i].resolve(o)}}).catch(n=>{for(let i=0;i<r.length;i++)r[i].reject(n)}))}}get[Symbol.toStringTag](){return\"DataLoader\"}};var ep=le(\"prisma:client:request_handler\"),Ir=class{constructor(t,r){this.logEmitter=r,this.client=t,this.dataloader=new Lr({batchLoader:jo(async({requests:n,customDataProxyFetch:i})=>{let{transaction:o,otelParentCtx:s}=n[0],a=n.map(h=>h.protocolQuery),l=this.client._tracingHelper.getTraceParent(s),u=n.some(h=>$n(h.protocolQuery.action));return(await this.client._engine.requestBatch(a,{traceparent:l,transaction:tp(o),containsWrite:u,customDataProxyFetch:i})).map((h,v)=>{if(h instanceof Error)return h;try{return this.mapQueryEngineResult(n[v],h)}catch(R){return R}})}),singleLoader:async n=>{let i=n.transaction?.kind===\"itx\"?Ds(n.transaction):void 0,o=await this.client._engine.request(n.protocolQuery,{traceparent:this.client._tracingHelper.getTraceParent(),interactiveTransaction:i,isWrite:$n(n.protocolQuery.action),customDataProxyFetch:n.customDataProxyFetch});return this.mapQueryEngineResult(n,o)},batchBy:n=>n.transaction?.id?`transaction-${n.transaction.id}`:Is(n.protocolQuery),batchOrder(n,i){return n.transaction?.kind===\"batch\"&&i.transaction?.kind===\"batch\"?n.transaction.index-i.transaction.index:0}})}async request(t){try{return await this.dataloader.request(t)}catch(r){let{clientMethod:n,callsite:i,transaction:o,args:s,modelName:a}=t;this.handleAndLogRequestError({error:r,clientMethod:n,callsite:i,transaction:o,args:s,modelName:a})}}mapQueryEngineResult({dataPath:t,unpacker:r},n){let i=n?.data,o=n?.elapsed,s=this.unpack(i,t,r);return y.env.PRISMA_CLIENT_GET_TIME?{data:s,elapsed:o}:s}handleAndLogRequestError(t){try{this.handleRequestError(t)}catch(r){throw this.logEmitter&&this.logEmitter.emit(\"error\",{message:r.message,target:t.clientMethod,timestamp:new Date}),r}}handleRequestError({error:t,clientMethod:r,callsite:n,transaction:i,args:o,modelName:s}){if(ep(t),rp(t,i)||t instanceof Oe)throw t;if(t instanceof G&&np(t)){let l=Bs(t.meta);Or({args:o,errors:[l],callsite:n,errorFormat:this.client._errorFormat,originalMethod:r,clientVersion:this.client._clientVersion})}let a=t.message;if(n&&(a=mt({callsite:n,originalMethod:r,isPanic:t.isPanic,showColors:this.client._errorFormat===\"pretty\",message:a})),a=this.sanitizeMessage(a),t.code){let l=s?{modelName:s,...t.meta}:t.meta;throw new G(a,{code:t.code,clientVersion:this.client._clientVersion,meta:l,batchRequestIdx:t.batchRequestIdx})}else{if(t.isPanic)throw new ue(a,this.client._clientVersion);if(t instanceof H)throw new H(a,{clientVersion:this.client._clientVersion,batchRequestIdx:t.batchRequestIdx});if(t instanceof V)throw new V(a,this.client._clientVersion);if(t instanceof ue)throw new ue(a,this.client._clientVersion)}throw t.clientVersion=this.client._clientVersion,t}sanitizeMessage(t){return this.client._errorFormat&&this.client._errorFormat!==\"pretty\"?(0,Ns.default)(t):t}unpack(t,r,n){if(!t||(t.data&&(t=t.data),!t))return t;let i=Object.values(t)[0],o=r.filter(a=>a!==\"select\"&&a!==\"include\"),s=_r(Tn(i,o));return n?n(s):s}get[Symbol.toStringTag](){return\"RequestHandler\"}};function tp(e){if(e){if(e.kind===\"batch\")return{kind:\"batch\",options:{isolationLevel:e.isolationLevel}};if(e.kind===\"itx\")return{kind:\"itx\",options:Ds(e)};We(e,\"Unknown transaction kind\")}}function Ds(e){return{id:e.id,payload:e.payload}}function rp(e,t){return Mr(e)&&t?.kind===\"batch\"&&e.batchRequestIdx!==t.index}function np(e){return e.code===\"P2009\"||e.code===\"P2012\"}function Bs(e){if(e.kind===\"Union\")return{kind:\"Union\",errors:e.errors.map(Bs)};if(Array.isArray(e.selectionPath)){let[,...t]=e.selectionPath;return{...e,selectionPath:t}}return e}m();c();p();f();d();var $s=\"5.15.0\";var js=$s;m();c();p();f();d();function Us(e){return e.map(t=>{let r={};for(let n of Object.keys(t))r[n]=qs(t[n]);return r})}function qs({prisma__type:e,prisma__value:t}){switch(e){case\"bigint\":return BigInt(t);case\"bytes\":return w.Buffer.from(t,\"base64\");case\"decimal\":return new ve(t);case\"datetime\":case\"date\":return new Date(t);case\"time\":return new Date(`1970-01-01T${t}Z`);case\"array\":return t.map(qs);default:return t}}m();c();p();f();d();var Ws=fe(Fn());m();c();p();f();d();var q=class extends Error{constructor(t){super(t+`\nRead more at https://pris.ly/d/client-constructor`),this.name=\"PrismaClientConstructorValidationError\"}get[Symbol.toStringTag](){return\"PrismaClientConstructorValidationError\"}};re(q,\"PrismaClientConstructorValidationError\");var Vs=[\"datasources\",\"datasourceUrl\",\"errorFormat\",\"adapter\",\"log\",\"transactionOptions\",\"__internal\"],Qs=[\"pretty\",\"colorless\",\"minimal\"],Js=[\"info\",\"query\",\"warn\",\"error\"],op={datasources:(e,{datasourceNames:t})=>{if(e){if(typeof e!=\"object\"||Array.isArray(e))throw new q(`Invalid value ${JSON.stringify(e)} for \"datasources\" provided to PrismaClient constructor`);for(let[r,n]of Object.entries(e)){if(!t.includes(r)){let i=gt(r,t)||` Available datasources: ${t.join(\", \")}`;throw new q(`Unknown datasource ${r} provided to PrismaClient constructor.${i}`)}if(typeof n!=\"object\"||Array.isArray(n))throw new q(`Invalid value ${JSON.stringify(e)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`);if(n&&typeof n==\"object\")for(let[i,o]of Object.entries(n)){if(i!==\"url\")throw new q(`Invalid value ${JSON.stringify(e)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`);if(typeof o!=\"string\")throw new q(`Invalid value ${JSON.stringify(o)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`)}}}},adapter:(e,t)=>{if(e===null)return;if(e===void 0)throw new q('\"adapter\" property must not be undefined, use null to conditionally disable driver adapters.');if(!Cr(t).includes(\"driverAdapters\"))throw new q('\"adapter\" property can only be provided to PrismaClient constructor when \"driverAdapters\" preview feature is enabled.');if(Tt()===\"binary\")throw new q('Cannot use a driver adapter with the \"binary\" Query Engine. Please use the \"library\" Query Engine.')},datasourceUrl:e=>{if(typeof e<\"u\"&&typeof e!=\"string\")throw new q(`Invalid value ${JSON.stringify(e)} for \"datasourceUrl\" provided to PrismaClient constructor.\nExpected string or undefined.`)},errorFormat:e=>{if(e){if(typeof e!=\"string\")throw new q(`Invalid value ${JSON.stringify(e)} for \"errorFormat\" provided to PrismaClient constructor.`);if(!Qs.includes(e)){let t=gt(e,Qs);throw new q(`Invalid errorFormat ${e} provided to PrismaClient constructor.${t}`)}}},log:e=>{if(!e)return;if(!Array.isArray(e))throw new q(`Invalid value ${JSON.stringify(e)} for \"log\" provided to PrismaClient constructor.`);function t(r){if(typeof r==\"string\"&&!Js.includes(r)){let n=gt(r,Js);throw new q(`Invalid log level \"${r}\" provided to PrismaClient constructor.${n}`)}}for(let r of e){t(r);let n={level:t,emit:i=>{let o=[\"stdout\",\"event\"];if(!o.includes(i)){let s=gt(i,o);throw new q(`Invalid value ${JSON.stringify(i)} for \"emit\" in logLevel provided to PrismaClient constructor.${s}`)}}};if(r&&typeof r==\"object\")for(let[i,o]of Object.entries(r))if(n[i])n[i](o);else throw new q(`Invalid property ${i} for \"log\" provided to PrismaClient constructor`)}},transactionOptions:e=>{if(!e)return;let t=e.maxWait;if(t!=null&&t<=0)throw new q(`Invalid value ${t} for maxWait in \"transactionOptions\" provided to PrismaClient constructor. maxWait needs to be greater than 0`);let r=e.timeout;if(r!=null&&r<=0)throw new q(`Invalid value ${r} for timeout in \"transactionOptions\" provided to PrismaClient constructor. timeout needs to be greater than 0`)},__internal:e=>{if(!e)return;let t=[\"debug\",\"engine\",\"configOverride\"];if(typeof e!=\"object\")throw new q(`Invalid value ${JSON.stringify(e)} for \"__internal\" to PrismaClient constructor`);for(let[r]of Object.entries(e))if(!t.includes(r)){let n=gt(r,t);throw new q(`Invalid property ${JSON.stringify(r)} for \"__internal\" provided to PrismaClient constructor.${n}`)}}};function Gs(e,t){for(let[r,n]of Object.entries(e)){if(!Vs.includes(r)){let i=gt(r,Vs);throw new q(`Unknown property ${r} provided to PrismaClient constructor.${i}`)}op[r](n,t)}if(e.datasourceUrl&&e.datasources)throw new q('Can not use \"datasourceUrl\" and \"datasources\" options at the same time. Pick one of them')}function gt(e,t){if(t.length===0||typeof e!=\"string\")return\"\";let r=sp(e,t);return r?` Did you mean \"${r}\"?`:\"\"}function sp(e,t){if(t.length===0)return null;let r=t.map(i=>({value:i,distance:(0,Ws.default)(e,i)}));r.sort((i,o)=>i.distance<o.distance?-1:1);let n=r[0];return n.distance<3?n.value:null}m();c();p();f();d();function Hs(e){return e.length===0?Promise.resolve([]):new Promise((t,r)=>{let n=new Array(e.length),i=null,o=!1,s=0,a=()=>{o||(s++,s===e.length&&(o=!0,i?r(i):t(n)))},l=u=>{o||(o=!0,r(u))};for(let u=0;u<e.length;u++)e[u].then(g=>{n[u]=g,a()},g=>{if(!Mr(g)){l(g);return}g.batchRequestIdx===u?l(g):(i||(i=g),a())})})}var Ue=le(\"prisma:client\");typeof globalThis==\"object\"&&(globalThis.NODE_CLIENT=!0);var ap={requestArgsToMiddlewareArgs:e=>e,middlewareArgsToRequestArgs:e=>e},lp=Symbol.for(\"prisma.client.transaction.id\"),up={id:0,nextId(){return++this.id}};function Ys(e){class t{constructor(n){this._originalClient=this;this._middlewares=new Fr;this._createPrismaPromise=Nn();this.$extends=Mo;e=n?.__internal?.configOverride?.(e)??e,Ko(e),n&&Gs(n,e);let i=n?.adapter?fn(n.adapter):void 0,o=new Kt().on(\"error\",()=>{});this._extensions=Pr.empty(),this._previewFeatures=Cr(e),this._clientVersion=e.clientVersion??js,this._activeProvider=e.activeProvider,this._tracingHelper=Fs(this._previewFeatures);let s={rootEnvPath:e.relativeEnvPaths.rootEnvPath&&we.resolve(e.dirname,e.relativeEnvPaths.rootEnvPath),schemaEnvPath:e.relativeEnvPaths.schemaEnvPath&&we.resolve(e.dirname,e.relativeEnvPaths.schemaEnvPath)},a=e.injectableEdgeEnv?.();try{let l=n??{},u=l.__internal??{},g=u.debug===!0;g&&le.enable(\"prisma:client\");let h=we.resolve(e.dirname,e.relativePath);Gt.existsSync(h)||(h=e.dirname),Ue(\"dirname\",e.dirname),Ue(\"relativePath\",e.relativePath),Ue(\"cwd\",h);let v=u.engine||{};if(l.errorFormat?this._errorFormat=l.errorFormat:y.env.NODE_ENV===\"production\"?this._errorFormat=\"minimal\":y.env.NO_COLOR?this._errorFormat=\"colorless\":this._errorFormat=\"colorless\",this._runtimeDataModel=e.runtimeDataModel,this._engineConfig={cwd:h,dirname:e.dirname,enableDebugLogs:g,allowTriggerPanic:v.allowTriggerPanic,datamodelPath:we.join(e.dirname,e.filename??\"schema.prisma\"),prismaPath:v.binaryPath??void 0,engineEndpoint:v.endpoint,generator:e.generator,showColors:this._errorFormat===\"pretty\",logLevel:l.log&&Ls(l.log),logQueries:l.log&&!!(typeof l.log==\"string\"?l.log===\"query\":l.log.find(R=>typeof R==\"string\"?R===\"query\":R.level===\"query\")),env:a?.parsed??{},flags:[],engineWasm:e.engineWasm,clientVersion:e.clientVersion,engineVersion:e.engineVersion,previewFeatures:this._previewFeatures,activeProvider:e.activeProvider,inlineSchema:e.inlineSchema,overrideDatasources:zo(l,e.datasourceNames),inlineDatasources:e.inlineDatasources,inlineSchemaHash:e.inlineSchemaHash,tracingHelper:this._tracingHelper,transactionOptions:{maxWait:l.transactionOptions?.maxWait??2e3,timeout:l.transactionOptions?.timeout??5e3,isolationLevel:l.transactionOptions?.isolationLevel},logEmitter:o,isBundled:e.isBundled,adapter:i},this._accelerateEngineConfig={...this._engineConfig,accelerateUtils:{resolveDatasourceUrl:Tr,getBatchRequestPayload:rr,prismaGraphQLToJSError:yr,PrismaClientUnknownRequestError:H,PrismaClientInitializationError:V,PrismaClientKnownRequestError:G,debug:le(\"prisma:client:accelerateEngine\"),engineVersion:zs.version,clientVersion:e.clientVersion}},Ue(\"clientVersion\",e.clientVersion),this._engine=as(e,this._engineConfig),this._requestHandler=new Ir(this,o),l.log)for(let R of l.log){let C=typeof R==\"string\"?R:R.emit===\"stdout\"?R.level:null;C&&this.$on(C,A=>{At.log(`${At.tags[C]??\"\"}`,A.message||A.query)})}this._metrics=new nt(this._engine)}catch(l){throw l.clientVersion=this._clientVersion,l}return this._appliedParent=Bt(this)}get[Symbol.toStringTag](){return\"PrismaClient\"}$use(n){this._middlewares.use(n)}$on(n,i){n===\"beforeExit\"?this._engine.onBeforeExit(i):n&&this._engineConfig.logEmitter.on(n,i)}$connect(){try{return this._engine.start()}catch(n){throw n.clientVersion=this._clientVersion,n}}async $disconnect(){try{await this._engine.stop()}catch(n){throw n.clientVersion=this._clientVersion,n}finally{Pi()}}$executeRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:\"executeRaw\",args:o,transaction:n,clientMethod:i,argsMapper:In({clientMethod:i,activeProvider:a}),callsite:je(this._errorFormat),dataPath:[],middlewareArgsMapper:s})}$executeRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0){let[s,a]=Ks(n,i);return Ln(this._activeProvider,s.text,s.values,Array.isArray(n)?\"prisma.$executeRaw`<SQL>`\":\"prisma.$executeRaw(sql`<SQL>`)\"),this.$executeRawInternal(o,\"$executeRaw\",s,a)}throw new Y(\"`$executeRaw` is a tag function, please use it like the following:\\n```\\nconst result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`\\n```\\n\\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#executeraw\\n\",{clientVersion:this._clientVersion})})}$executeRawUnsafe(n,...i){return this._createPrismaPromise(o=>(Ln(this._activeProvider,n,i,\"prisma.$executeRawUnsafe(<SQL>, [...values])\"),this.$executeRawInternal(o,\"$executeRawUnsafe\",[n,...i])))}$runCommandRaw(n){if(e.activeProvider!==\"mongodb\")throw new Y(`The ${e.activeProvider} provider does not support $runCommandRaw. Use the mongodb provider.`,{clientVersion:this._clientVersion});return this._createPrismaPromise(i=>this._request({args:n,clientMethod:\"$runCommandRaw\",dataPath:[],action:\"runCommandRaw\",argsMapper:xs,callsite:je(this._errorFormat),transaction:i}))}async $queryRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:\"queryRaw\",args:o,transaction:n,clientMethod:i,argsMapper:In({clientMethod:i,activeProvider:a}),callsite:je(this._errorFormat),dataPath:[],middlewareArgsMapper:s}).then(Us)}$queryRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0)return this.$queryRawInternal(o,\"$queryRaw\",...Ks(n,i));throw new Y(\"`$queryRaw` is a tag function, please use it like the following:\\n```\\nconst result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`\\n```\\n\\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#queryraw\\n\",{clientVersion:this._clientVersion})})}$queryRawUnsafe(n,...i){return this._createPrismaPromise(o=>this.$queryRawInternal(o,\"$queryRawUnsafe\",[n,...i]))}_transactionWithArray({promises:n,options:i}){let o=up.nextId(),s=Ms(n.length),a=n.map((l,u)=>{if(l?.[Symbol.toStringTag]!==\"PrismaPromise\")throw new Error(\"All elements of the array need to be Prisma Client promises. Hint: Please make sure you are not awaiting the Prisma client calls you intended to pass in the $transaction function.\");let g=i?.isolationLevel??this._engineConfig.transactionOptions.isolationLevel,h={kind:\"batch\",id:o,index:u,isolationLevel:g,lock:s};return l.requestTransaction?.(h)??l});return Hs(a)}async _transactionWithCallback({callback:n,options:i}){let o={traceparent:this._tracingHelper.getTraceParent()},s={maxWait:i?.maxWait??this._engineConfig.transactionOptions.maxWait,timeout:i?.timeout??this._engineConfig.transactionOptions.timeout,isolationLevel:i?.isolationLevel??this._engineConfig.transactionOptions.isolationLevel},a=await this._engine.transaction(\"start\",o,s),l;try{let u={kind:\"itx\",...a};l=await n(this._createItxClient(u)),await this._engine.transaction(\"commit\",o,a)}catch(u){throw await this._engine.transaction(\"rollback\",o,a).catch(()=>{}),u}return l}_createItxClient(n){return Bt(Ee(Fo(this),[ne(\"_appliedParent\",()=>this._appliedParent._createItxClient(n)),ne(\"_createPrismaPromise\",()=>Nn(n)),ne(lp,()=>n.id),it(_s)]))}$transaction(n,i){let o;typeof n==\"function\"?this._engineConfig.adapter?.adapterName===\"@prisma/adapter-d1\"?o=()=>{throw new Error(\"Cloudflare D1 does not support interactive transactions. We recommend you to refactor your queries with that limitation in mind, and use batch transactions with `prisma.$transactions([])` where applicable.\")}:o=()=>this._transactionWithCallback({callback:n,options:i}):o=()=>this._transactionWithArray({promises:n,options:i});let s={name:\"transaction\",attributes:{method:\"$transaction\"}};return this._tracingHelper.runInChildSpan(s,o)}_request(n){n.otelParentCtx=this._tracingHelper.getActiveContext();let i=n.middlewareArgsMapper??ap,o={args:i.requestArgsToMiddlewareArgs(n.args),dataPath:n.dataPath,runInTransaction:!!n.transaction,action:n.action,model:n.model},s={middleware:{name:\"middleware\",middleware:!0,attributes:{method:\"$use\"},active:!1},operation:{name:\"operation\",attributes:{method:o.action,model:o.model,name:o.model?`${o.model}.${o.action}`:o.action}}},a=-1,l=async u=>{let g=this._middlewares.get(++a);if(g)return this._tracingHelper.runInChildSpan(s.middleware,F=>g(u,L=>(F?.end(),l(L))));let{runInTransaction:h,args:v,...R}=u,C={...n,...R};v&&(C.args=i.middlewareArgsToRequestArgs(v)),n.transaction!==void 0&&h===!1&&delete C.transaction;let A=await $o(this,C);return C.model?Io({result:A,modelName:C.model,args:C.args,extensions:this._extensions,runtimeDataModel:this._runtimeDataModel}):A};return this._tracingHelper.runInChildSpan(s.operation,()=>l(o))}async _executeRequest({args:n,clientMethod:i,dataPath:o,callsite:s,action:a,model:l,argsMapper:u,transaction:g,unpacker:h,otelParentCtx:v,customDataProxyFetch:R}){try{n=u?u(n):n;let C={name:\"serialize\"},A=this._tracingHelper.runInChildSpan(C,()=>ws({modelName:l,runtimeDataModel:this._runtimeDataModel,action:a,args:n,clientMethod:i,callsite:s,extensions:this._extensions,errorFormat:this._errorFormat,clientVersion:this._clientVersion,previewFeatures:this._previewFeatures}));return le.enabled(\"prisma:client\")&&(Ue(\"Prisma Client call:\"),Ue(`prisma.${i}(${mo(n)})`),Ue(\"Generated request:\"),Ue(JSON.stringify(A,null,2)+`\n`)),g?.kind===\"batch\"&&await g.lock,this._requestHandler.request({protocolQuery:A,modelName:l,action:a,clientMethod:i,dataPath:o,callsite:s,args:n,extensions:this._extensions,transaction:g,unpacker:h,otelParentCtx:v,otelChildCtx:this._tracingHelper.getActiveContext(),customDataProxyFetch:R})}catch(C){throw C.clientVersion=this._clientVersion,C}}get $metrics(){if(!this._hasPreviewFlag(\"metrics\"))throw new Y(\"`metrics` preview feature must be enabled in order to access metrics API\",{clientVersion:this._clientVersion});return this._metrics}_hasPreviewFlag(n){return!!this._engineConfig.previewFeatures?.includes(n)}$applyPendingMigrations(){return this._engine.applyPendingMigrations()}}return t}function Ks(e,t){return cp(e)?[new se(e,t),Ss]:[e,Rs]}function cp(e){return Array.isArray(e)&&Array.isArray(e.raw)}m();c();p();f();d();var pp=new Set([\"toJSON\",\"$$typeof\",\"asymmetricMatch\",Symbol.iterator,Symbol.toStringTag,Symbol.isConcatSpreadable,Symbol.toPrimitive]);function Zs(e){return new Proxy(e,{get(t,r){if(r in t)return t[r];if(!pp.has(r))throw new TypeError(`Invalid enum value: ${String(r)}`)}})}m();c();p();f();d();0&&(module.exports={Debug,Decimal,Extensions,MetricsClient,NotFoundError,PrismaClientInitializationError,PrismaClientKnownRequestError,PrismaClientRustPanicError,PrismaClientUnknownRequestError,PrismaClientValidationError,Public,Sql,defineDmmfProperty,empty,getPrismaClient,getRuntime,join,makeStrictEnum,objectEnumValues,raw,sqltag,warnEnvConflicts,warnOnce});\n//# sourceMappingURL=react-native.js.map\n"
  },
  {
    "path": "server/src/common/prisma-client/runtime/wasm.js",
    "content": "\"use strict\";var ko=Object.create;var Et=Object.defineProperty;var Lo=Object.getOwnPropertyDescriptor;var Mo=Object.getOwnPropertyNames;var Io=Object.getPrototypeOf,_o=Object.prototype.hasOwnProperty;var oe=(e,t)=>()=>(e&&(t=e(e=0)),t);var Te=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var r in t)Et(e,r,{get:t[r],enumerable:!0})},Kr=(e,t,r,n)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of Mo(t))!_o.call(e,i)&&i!==r&&Et(e,i,{get:()=>t[i],enumerable:!(n=Lo(t,i))||n.enumerable});return e};var _e=(e,t,r)=>(r=e!=null?ko(Io(e)):{},Kr(t||!e||!e.__esModule?Et(r,\"default\",{value:e,enumerable:!0}):r,e)),ar=e=>Kr(Et({},\"__esModule\",{value:!0}),e);function lr(e,t){if(t=t.toLowerCase(),t===\"utf8\"||t===\"utf-8\")return new h(Uo.encode(e));if(t===\"base64\"||t===\"base64url\")return e=e.replace(/-/g,\"+\").replace(/_/g,\"/\"),e=e.replace(/[^A-Za-z0-9+/]/g,\"\"),new h([...atob(e)].map(r=>r.charCodeAt(0)));if(t===\"binary\"||t===\"ascii\"||t===\"latin1\"||t===\"latin-1\")return new h([...e].map(r=>r.charCodeAt(0)));if(t===\"ucs2\"||t===\"ucs-2\"||t===\"utf16le\"||t===\"utf-16le\"){let r=new h(e.length*2),n=new DataView(r.buffer);for(let i=0;i<e.length;i++)n.setUint16(i*2,e.charCodeAt(i),!0);return r}if(t===\"hex\"){let r=new h(e.length/2);for(let n=0,i=0;i<e.length;i+=2,n++)r[n]=parseInt(e.slice(i,i+2),16);return r}zr(`encoding \"${t}\"`)}function Do(e){let r=Object.getOwnPropertyNames(DataView.prototype).filter(a=>a.startsWith(\"get\")||a.startsWith(\"set\")),n=r.map(a=>a.replace(\"get\",\"read\").replace(\"set\",\"write\")),i=(a,f)=>function(v=0){return $(v,\"offset\"),Y(v,\"offset\"),q(v,\"offset\",this.length-1),new DataView(this.buffer)[r[a]](v,f)},o=(a,f)=>function(v,C=0){let T=r[a].match(/set(\\w+\\d+)/)[1].toLowerCase(),O=No[T];return $(C,\"offset\"),Y(C,\"offset\"),q(C,\"offset\",this.length-1),Fo(v,\"value\",O[0],O[1]),new DataView(this.buffer)[r[a]](C,v,f),C+parseInt(r[a].match(/\\d+/)[0])/8},s=a=>{a.forEach(f=>{f.includes(\"Uint\")&&(e[f.replace(\"Uint\",\"UInt\")]=e[f]),f.includes(\"Float64\")&&(e[f.replace(\"Float64\",\"Double\")]=e[f]),f.includes(\"Float32\")&&(e[f.replace(\"Float32\",\"Float\")]=e[f])})};n.forEach((a,f)=>{a.startsWith(\"read\")&&(e[a]=i(f,!1),e[a+\"LE\"]=i(f,!0),e[a+\"BE\"]=i(f,!1)),a.startsWith(\"write\")&&(e[a]=o(f,!1),e[a+\"LE\"]=o(f,!0),e[a+\"BE\"]=o(f,!1)),s([a,a+\"LE\",a+\"BE\"])})}function zr(e){throw new Error(`Buffer polyfill does not implement \"${e}\"`)}function xt(e,t){if(!(e instanceof Uint8Array))throw new TypeError(`The \"${t}\" argument must be an instance of Buffer or Uint8Array`)}function q(e,t,r=Vo+1){if(e<0||e>r){let n=new RangeError(`The value of \"${t}\" is out of range. It must be >= 0 && <= ${r}. Received ${e}`);throw n.code=\"ERR_OUT_OF_RANGE\",n}}function $(e,t){if(typeof e!=\"number\"){let r=new TypeError(`The \"${t}\" argument must be of type number. Received type ${typeof e}.`);throw r.code=\"ERR_INVALID_ARG_TYPE\",r}}function Y(e,t){if(!Number.isInteger(e)||Number.isNaN(e)){let r=new RangeError(`The value of \"${t}\" is out of range. It must be an integer. Received ${e}`);throw r.code=\"ERR_OUT_OF_RANGE\",r}}function Fo(e,t,r,n){if(e<r||e>n){let i=new RangeError(`The value of \"${t}\" is out of range. It must be >= ${r} and <= ${n}. Received ${e}`);throw i.code=\"ERR_OUT_OF_RANGE\",i}}function Hr(e,t){if(typeof e!=\"string\"){let r=new TypeError(`The \"${t}\" argument must be of type string. Received type ${typeof e}`);throw r.code=\"ERR_INVALID_ARG_TYPE\",r}}function qo(e,t=\"utf8\"){return h.from(e,t)}var h,No,Uo,Bo,$o,Vo,y,ur,u=oe(()=>{\"use strict\";h=class e extends Uint8Array{constructor(){super(...arguments);this._isBuffer=!0}get offset(){return this.byteOffset}static alloc(r,n=0,i=\"utf8\"){return Hr(i,\"encoding\"),e.allocUnsafe(r).fill(n,i)}static allocUnsafe(r){return e.from(r)}static allocUnsafeSlow(r){return e.from(r)}static isBuffer(r){return r&&!!r._isBuffer}static byteLength(r,n=\"utf8\"){if(typeof r==\"string\")return lr(r,n).byteLength;if(r&&r.byteLength)return r.byteLength;let i=new TypeError('The \"string\" argument must be of type string or an instance of Buffer or ArrayBuffer.');throw i.code=\"ERR_INVALID_ARG_TYPE\",i}static isEncoding(r){return $o.includes(r)}static compare(r,n){xt(r,\"buff1\"),xt(n,\"buff2\");for(let i=0;i<r.length;i++){if(r[i]<n[i])return-1;if(r[i]>n[i])return 1}return r.length===n.length?0:r.length>n.length?1:-1}static from(r,n=\"utf8\"){if(r&&typeof r==\"object\"&&r.type===\"Buffer\")return new e(r.data);if(typeof r==\"number\")return new e(new Uint8Array(r));if(typeof r==\"string\")return lr(r,n);if(ArrayBuffer.isView(r)){let{byteOffset:i,byteLength:o,buffer:s}=r;return\"map\"in r&&typeof r.map==\"function\"?new e(r.map(a=>a%256),i,o):new e(s,i,o)}if(r&&typeof r==\"object\"&&(\"length\"in r||\"byteLength\"in r||\"buffer\"in r))return new e(r);throw new TypeError(\"First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.\")}static concat(r,n){if(r.length===0)return e.alloc(0);let i=[].concat(...r.map(s=>[...s])),o=e.alloc(n!==void 0?n:i.length);return o.set(n!==void 0?i.slice(0,n):i),o}slice(r=0,n=this.length){return this.subarray(r,n)}subarray(r=0,n=this.length){return Object.setPrototypeOf(super.subarray(r,n),e.prototype)}reverse(){return super.reverse(),this}readIntBE(r,n){$(r,\"offset\"),Y(r,\"offset\"),q(r,\"offset\",this.length-1),$(n,\"byteLength\"),Y(n,\"byteLength\");let i=new DataView(this.buffer,r,n),o=0;for(let s=0;s<n;s++)o=o*256+i.getUint8(s);return i.getUint8(0)&128&&(o-=Math.pow(256,n)),o}readIntLE(r,n){$(r,\"offset\"),Y(r,\"offset\"),q(r,\"offset\",this.length-1),$(n,\"byteLength\"),Y(n,\"byteLength\");let i=new DataView(this.buffer,r,n),o=0;for(let s=0;s<n;s++)o+=i.getUint8(s)*Math.pow(256,s);return i.getUint8(n-1)&128&&(o-=Math.pow(256,n)),o}readUIntBE(r,n){$(r,\"offset\"),Y(r,\"offset\"),q(r,\"offset\",this.length-1),$(n,\"byteLength\"),Y(n,\"byteLength\");let i=new DataView(this.buffer,r,n),o=0;for(let s=0;s<n;s++)o=o*256+i.getUint8(s);return o}readUintBE(r,n){return this.readUIntBE(r,n)}readUIntLE(r,n){$(r,\"offset\"),Y(r,\"offset\"),q(r,\"offset\",this.length-1),$(n,\"byteLength\"),Y(n,\"byteLength\");let i=new DataView(this.buffer,r,n),o=0;for(let s=0;s<n;s++)o+=i.getUint8(s)*Math.pow(256,s);return o}readUintLE(r,n){return this.readUIntLE(r,n)}writeIntBE(r,n,i){return r=r<0?r+Math.pow(256,i):r,this.writeUIntBE(r,n,i)}writeIntLE(r,n,i){return r=r<0?r+Math.pow(256,i):r,this.writeUIntLE(r,n,i)}writeUIntBE(r,n,i){$(n,\"offset\"),Y(n,\"offset\"),q(n,\"offset\",this.length-1),$(i,\"byteLength\"),Y(i,\"byteLength\");let o=new DataView(this.buffer,n,i);for(let s=i-1;s>=0;s--)o.setUint8(s,r&255),r=r/256;return n+i}writeUintBE(r,n,i){return this.writeUIntBE(r,n,i)}writeUIntLE(r,n,i){$(n,\"offset\"),Y(n,\"offset\"),q(n,\"offset\",this.length-1),$(i,\"byteLength\"),Y(i,\"byteLength\");let o=new DataView(this.buffer,n,i);for(let s=0;s<i;s++)o.setUint8(s,r&255),r=r/256;return n+i}writeUintLE(r,n,i){return this.writeUIntLE(r,n,i)}toJSON(){return{type:\"Buffer\",data:Array.from(this)}}swap16(){let r=new DataView(this.buffer,this.byteOffset,this.byteLength);for(let n=0;n<this.length;n+=2)r.setUint16(n,r.getUint16(n,!0),!1);return this}swap32(){let r=new DataView(this.buffer,this.byteOffset,this.byteLength);for(let n=0;n<this.length;n+=4)r.setUint32(n,r.getUint32(n,!0),!1);return this}swap64(){let r=new DataView(this.buffer,this.byteOffset,this.byteLength);for(let n=0;n<this.length;n+=8)r.setBigUint64(n,r.getBigUint64(n,!0),!1);return this}compare(r,n=0,i=r.length,o=0,s=this.length){return xt(r,\"target\"),$(n,\"targetStart\"),$(i,\"targetEnd\"),$(o,\"sourceStart\"),$(s,\"sourceEnd\"),q(n,\"targetStart\"),q(i,\"targetEnd\",r.length),q(o,\"sourceStart\"),q(s,\"sourceEnd\",this.length),e.compare(this.slice(o,s),r.slice(n,i))}equals(r){return xt(r,\"otherBuffer\"),this.length===r.length&&this.every((n,i)=>n===r[i])}copy(r,n=0,i=0,o=this.length){q(n,\"targetStart\"),q(i,\"sourceStart\",this.length),q(o,\"sourceEnd\"),n>>>=0,i>>>=0,o>>>=0;let s=0;for(;i<o&&!(this[i]===void 0||r[n]===void 0);)r[n]=this[i],s++,i++,n++;return s}write(r,n,i,o=\"utf8\"){let s=typeof n==\"string\"?0:n??0,a=typeof i==\"string\"?this.length-s:i??this.length-s;return o=typeof n==\"string\"?n:typeof i==\"string\"?i:o,$(s,\"offset\"),$(a,\"length\"),q(s,\"offset\",this.length),q(a,\"length\",this.length),(o===\"ucs2\"||o===\"ucs-2\"||o===\"utf16le\"||o===\"utf-16le\")&&(a=a-a%2),lr(r,o).copy(this,s,0,a)}fill(r=0,n=0,i=this.length,o=\"utf-8\"){let s=typeof n==\"string\"?0:n,a=typeof i==\"string\"?this.length:i;if(o=typeof n==\"string\"?n:typeof i==\"string\"?i:o,r=e.from(typeof r==\"number\"?[r]:r??[],o),Hr(o,\"encoding\"),q(s,\"offset\",this.length),q(a,\"end\",this.length),r.length!==0)for(let f=s;f<a;f+=r.length)super.set(r.slice(0,r.length+f>=this.length?this.length-f:r.length),f);return this}includes(r,n=null,i=\"utf-8\"){return this.indexOf(r,n,i)!==-1}lastIndexOf(r,n=null,i=\"utf-8\"){return this.indexOf(r,n,i,!0)}indexOf(r,n=null,i=\"utf-8\",o=!1){let s=o?this.findLastIndex.bind(this):this.findIndex.bind(this);i=typeof n==\"string\"?n:i;let a=e.from(typeof r==\"number\"?[r]:r,i),f=typeof n==\"string\"?0:n;return f=typeof n==\"number\"?f:null,f=Number.isNaN(f)?null:f,f??=o?this.length:0,f=f<0?this.length+f:f,a.length===0&&o===!1?f>=this.length?this.length:f:a.length===0&&o===!0?(f>=this.length?this.length:f)||this.length:s((v,C)=>(o?C<=f:C>=f)&&this[C]===a[0]&&a.every((O,R)=>this[C+R]===O))}toString(r=\"utf8\",n=0,i=this.length){if(n=n<0?0:n,r=r.toString().toLowerCase(),i<=0)return\"\";if(r===\"utf8\"||r===\"utf-8\")return Bo.decode(this.slice(n,i));if(r===\"base64\"||r===\"base64url\"){let o=btoa(this.reduce((s,a)=>s+ur(a),\"\"));return r===\"base64url\"?o.replace(/\\+/g,\"-\").replace(/\\//g,\"_\").replace(/=+$/,\"\"):o}if(r===\"binary\"||r===\"ascii\"||r===\"latin1\"||r===\"latin-1\")return this.slice(n,i).reduce((o,s)=>o+ur(s&(r===\"ascii\"?127:255)),\"\");if(r===\"ucs2\"||r===\"ucs-2\"||r===\"utf16le\"||r===\"utf-16le\"){let o=new DataView(this.buffer.slice(n,i));return Array.from({length:o.byteLength/2},(s,a)=>a*2+1<o.byteLength?ur(o.getUint16(a*2,!0)):\"\").join(\"\")}if(r===\"hex\")return this.slice(n,i).reduce((o,s)=>o+s.toString(16).padStart(2,\"0\"),\"\");zr(`encoding \"${r}\"`)}toLocaleString(){return this.toString()}inspect(){return`<Buffer ${this.toString(\"hex\").match(/.{1,2}/g).join(\" \")}>`}};No={int8:[-128,127],int16:[-32768,32767],int32:[-2147483648,2147483647],uint8:[0,255],uint16:[0,65535],uint32:[0,4294967295],float32:[-1/0,1/0],float64:[-1/0,1/0],bigint64:[-0x8000000000000000n,0x7fffffffffffffffn],biguint64:[0n,0xffffffffffffffffn]},Uo=new TextEncoder,Bo=new TextDecoder,$o=[\"utf8\",\"utf-8\",\"hex\",\"base64\",\"ascii\",\"binary\",\"base64url\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"latin1\",\"latin-1\"],Vo=4294967295;Do(h.prototype);y=new Proxy(qo,{construct(e,[t,r]){return h.from(t,r)},get(e,t){return h[t]}}),ur=String.fromCodePoint});var g,c=oe(()=>{\"use strict\";g={nextTick:(e,...t)=>{setTimeout(()=>{e(...t)},0)},env:{},version:\"\",cwd:()=>\"/\",stderr:{},argv:[\"/bin/node\"]}});var E,m=oe(()=>{\"use strict\";E=globalThis.performance??(()=>{let e=Date.now();return{now:()=>Date.now()-e}})()});var w,p=oe(()=>{\"use strict\";w=()=>{};w.prototype=w});var b,d=oe(()=>{\"use strict\";b=class{constructor(t){this.value=t}deref(){return this.value}}});function en(e,t){var r,n,i,o,s,a,f,v,C=e.constructor,T=C.precision;if(!e.s||!t.s)return t.s||(t=new C(e)),U?_(t,T):t;if(f=e.d,v=t.d,s=e.e,i=t.e,f=f.slice(),o=s-i,o){for(o<0?(n=f,o=-o,a=v.length):(n=v,i=s,a=f.length),s=Math.ceil(T/F),a=s>a?s+1:a+1,o>a&&(o=a,n.length=1),n.reverse();o--;)n.push(0);n.reverse()}for(a=f.length,o=v.length,a-o<0&&(o=a,n=v,v=f,f=n),r=0;o;)r=(f[--o]=f[o]+v[o]+r)/j|0,f[o]%=j;for(r&&(f.unshift(r),++i),a=f.length;f[--a]==0;)f.pop();return t.d=f,t.e=i,U?_(t,T):t}function le(e,t,r){if(e!==~~e||e<t||e>r)throw Error(Re+e)}function ae(e){var t,r,n,i=e.length-1,o=\"\",s=e[0];if(i>0){for(o+=s,t=1;t<i;t++)n=e[t]+\"\",r=F-n.length,r&&(o+=we(r)),o+=n;s=e[t],n=s+\"\",r=F-n.length,r&&(o+=we(r))}else if(s===0)return\"0\";for(;s%10===0;)s/=10;return o+s}function tn(e,t){var r,n,i,o,s,a,f=0,v=0,C=e.constructor,T=C.precision;if(V(e)>16)throw Error(mr+V(e));if(!e.s)return new C(Z);for(t==null?(U=!1,a=T):a=t,s=new C(.03125);e.abs().gte(.1);)e=e.times(s),v+=5;for(n=Math.log(Ae(2,v))/Math.LN10*2+5|0,a+=n,r=i=o=new C(Z),C.precision=a;;){if(i=_(i.times(e),a),r=r.times(++f),s=o.plus(ge(i,r,a)),ae(s.d).slice(0,a)===ae(o.d).slice(0,a)){for(;v--;)o=_(o.times(o),a);return C.precision=T,t==null?(U=!0,_(o,T)):o}o=s}}function V(e){for(var t=e.e*F,r=e.d[0];r>=10;r/=10)t++;return t}function cr(e,t,r){if(t>e.LN10.sd())throw U=!0,r&&(e.precision=r),Error(te+\"LN10 precision limit exceeded\");return _(new e(e.LN10),t)}function we(e){for(var t=\"\";e--;)t+=\"0\";return t}function Ye(e,t){var r,n,i,o,s,a,f,v,C,T=1,O=10,R=e,L=R.d,S=R.constructor,M=S.precision;if(R.s<1)throw Error(te+(R.s?\"NaN\":\"-Infinity\"));if(R.eq(Z))return new S(0);if(t==null?(U=!1,v=M):v=t,R.eq(10))return t==null&&(U=!0),cr(S,v);if(v+=O,S.precision=v,r=ae(L),n=r.charAt(0),o=V(R),Math.abs(o)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)R=R.times(e),r=ae(R.d),n=r.charAt(0),T++;o=V(R),n>1?(R=new S(\"0.\"+r),o++):R=new S(n+\".\"+r.slice(1))}else return f=cr(S,v+2,M).times(o+\"\"),R=Ye(new S(n+\".\"+r.slice(1)),v-O).plus(f),S.precision=M,t==null?(U=!0,_(R,M)):R;for(a=s=R=ge(R.minus(Z),R.plus(Z),v),C=_(R.times(R),v),i=3;;){if(s=_(s.times(C),v),f=a.plus(ge(s,new S(i),v)),ae(f.d).slice(0,v)===ae(a.d).slice(0,v))return a=a.times(2),o!==0&&(a=a.plus(cr(S,v+2,M).times(o+\"\"))),a=ge(a,new S(T),v),S.precision=M,t==null?(U=!0,_(a,M)):a;a=f,i+=2}}function Yr(e,t){var r,n,i;for((r=t.indexOf(\".\"))>-1&&(t=t.replace(\".\",\"\")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Fe(r/F),e.d=[],n=(r+1)%F,r<0&&(n+=F),n<i){for(n&&e.d.push(+t.slice(0,n)),i-=F;n<i;)e.d.push(+t.slice(n,n+=F));t=t.slice(n),n=F-t.length}else n-=i;for(;n--;)t+=\"0\";if(e.d.push(+t),U&&(e.e>Pt||e.e<-Pt))throw Error(mr+r)}else e.s=0,e.e=0,e.d=[0];return e}function _(e,t,r){var n,i,o,s,a,f,v,C,T=e.d;for(s=1,o=T[0];o>=10;o/=10)s++;if(n=t-s,n<0)n+=F,i=t,v=T[C=0];else{if(C=Math.ceil((n+1)/F),o=T.length,C>=o)return e;for(v=o=T[C],s=1;o>=10;o/=10)s++;n%=F,i=n-F+s}if(r!==void 0&&(o=Ae(10,s-i-1),a=v/o%10|0,f=t<0||T[C+1]!==void 0||v%o,f=r<4?(a||f)&&(r==0||r==(e.s<0?3:2)):a>5||a==5&&(r==4||f||r==6&&(n>0?i>0?v/Ae(10,s-i):0:T[C-1])%10&1||r==(e.s<0?8:7))),t<1||!T[0])return f?(o=V(e),T.length=1,t=t-o-1,T[0]=Ae(10,(F-t%F)%F),e.e=Fe(-t/F)||0):(T.length=1,T[0]=e.e=e.s=0),e;if(n==0?(T.length=C,o=1,C--):(T.length=C+1,o=Ae(10,F-n),T[C]=i>0?(v/Ae(10,s-i)%Ae(10,i)|0)*o:0),f)for(;;)if(C==0){(T[0]+=o)==j&&(T[0]=1,++e.e);break}else{if(T[C]+=o,T[C]!=j)break;T[C--]=0,o=1}for(n=T.length;T[--n]===0;)T.pop();if(U&&(e.e>Pt||e.e<-Pt))throw Error(mr+V(e));return e}function rn(e,t){var r,n,i,o,s,a,f,v,C,T,O=e.constructor,R=O.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new O(e),U?_(t,R):t;if(f=e.d,T=t.d,n=t.e,v=e.e,f=f.slice(),s=v-n,s){for(C=s<0,C?(r=f,s=-s,a=T.length):(r=T,n=v,a=f.length),i=Math.max(Math.ceil(R/F),a)+2,s>i&&(s=i,r.length=1),r.reverse(),i=s;i--;)r.push(0);r.reverse()}else{for(i=f.length,a=T.length,C=i<a,C&&(a=i),i=0;i<a;i++)if(f[i]!=T[i]){C=f[i]<T[i];break}s=0}for(C&&(r=f,f=T,T=r,t.s=-t.s),a=f.length,i=T.length-a;i>0;--i)f[a++]=0;for(i=T.length;i>s;){if(f[--i]<T[i]){for(o=i;o&&f[--o]===0;)f[o]=j-1;--f[o],f[i]+=j}f[i]-=T[i]}for(;f[--a]===0;)f.pop();for(;f[0]===0;f.shift())--n;return f[0]?(t.d=f,t.e=n,U?_(t,R):t):new O(0)}function Se(e,t,r){var n,i=V(e),o=ae(e.d),s=o.length;return t?(r&&(n=r-s)>0?o=o.charAt(0)+\".\"+o.slice(1)+we(n):s>1&&(o=o.charAt(0)+\".\"+o.slice(1)),o=o+(i<0?\"e\":\"e+\")+i):i<0?(o=\"0.\"+we(-i-1)+o,r&&(n=r-s)>0&&(o+=we(n))):i>=s?(o+=we(i+1-s),r&&(n=r-i-1)>0&&(o=o+\".\"+we(n))):((n=i+1)<s&&(o=o.slice(0,n)+\".\"+o.slice(n)),r&&(n=r-s)>0&&(i+1===s&&(o+=\".\"),o+=we(n))),e.s<0?\"-\"+o:o}function Xr(e,t){if(e.length>t)return e.length=t,!0}function nn(e){var t,r,n;function i(o){var s=this;if(!(s instanceof i))return new i(o);if(s.constructor=i,o instanceof i){s.s=o.s,s.e=o.e,s.d=(o=o.d)?o.slice():o;return}if(typeof o==\"number\"){if(o*0!==0)throw Error(Re+o);if(o>0)s.s=1;else if(o<0)o=-o,s.s=-1;else{s.s=0,s.e=0,s.d=[0];return}if(o===~~o&&o<1e7){s.e=0,s.d=[o];return}return Yr(s,o.toString())}else if(typeof o!=\"string\")throw Error(Re+o);if(o.charCodeAt(0)===45?(o=o.slice(1),s.s=-1):s.s=1,Qo.test(o))Yr(s,o);else throw Error(Re+o)}if(i.prototype=A,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=nn,i.config=i.set=Jo,e===void 0&&(e={}),e)for(n=[\"precision\",\"rounding\",\"toExpNeg\",\"toExpPos\",\"LN10\"],t=0;t<n.length;)e.hasOwnProperty(r=n[t++])||(e[r]=this[r]);return i.config(e),i}function Jo(e){if(!e||typeof e!=\"object\")throw Error(te+\"Object expected\");var t,r,n,i=[\"precision\",1,De,\"rounding\",0,8,\"toExpNeg\",-1/0,0,\"toExpPos\",0,1/0];for(t=0;t<i.length;t+=3)if((n=e[r=i[t]])!==void 0)if(Fe(n)===n&&n>=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(Re+r+\": \"+n);if((n=e[r=\"LN10\"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(Re+r+\": \"+n);return this}var De,jo,pr,U,te,Re,mr,Fe,Ae,Qo,Z,j,F,Zr,Pt,A,ge,pr,vt,on=oe(()=>{\"use strict\";u();c();m();p();d();l();De=1e9,jo={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:\"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286\"},U=!0,te=\"[DecimalError] \",Re=te+\"Invalid argument: \",mr=te+\"Exponent out of range: \",Fe=Math.floor,Ae=Math.pow,Qo=/^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,j=1e7,F=7,Zr=9007199254740991,Pt=Fe(Zr/F),A={};A.absoluteValue=A.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};A.comparedTo=A.cmp=function(e){var t,r,n,i,o=this;if(e=new o.constructor(e),o.s!==e.s)return o.s||-e.s;if(o.e!==e.e)return o.e>e.e^o.s<0?1:-1;for(n=o.d.length,i=e.d.length,t=0,r=n<i?n:i;t<r;++t)if(o.d[t]!==e.d[t])return o.d[t]>e.d[t]^o.s<0?1:-1;return n===i?0:n>i^o.s<0?1:-1};A.decimalPlaces=A.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*F;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};A.dividedBy=A.div=function(e){return ge(this,new this.constructor(e))};A.dividedToIntegerBy=A.idiv=function(e){var t=this,r=t.constructor;return _(ge(t,new r(e),0,1),r.precision)};A.equals=A.eq=function(e){return!this.cmp(e)};A.exponent=function(){return V(this)};A.greaterThan=A.gt=function(e){return this.cmp(e)>0};A.greaterThanOrEqualTo=A.gte=function(e){return this.cmp(e)>=0};A.isInteger=A.isint=function(){return this.e>this.d.length-2};A.isNegative=A.isneg=function(){return this.s<0};A.isPositive=A.ispos=function(){return this.s>0};A.isZero=function(){return this.s===0};A.lessThan=A.lt=function(e){return this.cmp(e)<0};A.lessThanOrEqualTo=A.lte=function(e){return this.cmp(e)<1};A.logarithm=A.log=function(e){var t,r=this,n=r.constructor,i=n.precision,o=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(Z))throw Error(te+\"NaN\");if(r.s<1)throw Error(te+(r.s?\"NaN\":\"-Infinity\"));return r.eq(Z)?new n(0):(U=!1,t=ge(Ye(r,o),Ye(e,o),o),U=!0,_(t,i))};A.minus=A.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?rn(t,e):en(t,(e.s=-e.s,e))};A.modulo=A.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(te+\"NaN\");return r.s?(U=!1,t=ge(r,e,0,1).times(e),U=!0,r.minus(t)):_(new n(r),i)};A.naturalExponential=A.exp=function(){return tn(this)};A.naturalLogarithm=A.ln=function(){return Ye(this)};A.negated=A.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};A.plus=A.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?en(t,e):rn(t,(e.s=-e.s,e))};A.precision=A.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Re+e);if(t=V(i)+1,n=i.d.length-1,r=n*F+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};A.squareRoot=A.sqrt=function(){var e,t,r,n,i,o,s,a=this,f=a.constructor;if(a.s<1){if(!a.s)return new f(0);throw Error(te+\"NaN\")}for(e=V(a),U=!1,i=Math.sqrt(+a),i==0||i==1/0?(t=ae(a.d),(t.length+e)%2==0&&(t+=\"0\"),i=Math.sqrt(t),e=Fe((e+1)/2)-(e<0||e%2),i==1/0?t=\"5e\"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf(\"e\")+1)+e),n=new f(t)):n=new f(i.toString()),r=f.precision,i=s=r+3;;)if(o=n,n=o.plus(ge(a,o,s+2)).times(.5),ae(o.d).slice(0,s)===(t=ae(n.d)).slice(0,s)){if(t=t.slice(s-3,s+1),i==s&&t==\"4999\"){if(_(o,r+1,0),o.times(o).eq(a)){n=o;break}}else if(t!=\"9999\")break;s+=4}return U=!0,_(n,r)};A.times=A.mul=function(e){var t,r,n,i,o,s,a,f,v,C=this,T=C.constructor,O=C.d,R=(e=new T(e)).d;if(!C.s||!e.s)return new T(0);for(e.s*=C.s,r=C.e+e.e,f=O.length,v=R.length,f<v&&(o=O,O=R,R=o,s=f,f=v,v=s),o=[],s=f+v,n=s;n--;)o.push(0);for(n=v;--n>=0;){for(t=0,i=f+n;i>n;)a=o[i]+R[n]*O[i-n-1]+t,o[i--]=a%j|0,t=a/j|0;o[i]=(o[i]+t)%j|0}for(;!o[--s];)o.pop();return t?++r:o.shift(),e.d=o,e.e=r,U?_(e,T.precision):e};A.toDecimalPlaces=A.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(le(e,0,De),t===void 0?t=n.rounding:le(t,0,8),_(r,e+V(r)+1,t))};A.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=Se(n,!0):(le(e,0,De),t===void 0?t=i.rounding:le(t,0,8),n=_(new i(n),e+1,t),r=Se(n,!0,e+1)),r};A.toFixed=function(e,t){var r,n,i=this,o=i.constructor;return e===void 0?Se(i):(le(e,0,De),t===void 0?t=o.rounding:le(t,0,8),n=_(new o(i),e+V(i)+1,t),r=Se(n.abs(),!1,e+V(n)+1),i.isneg()&&!i.isZero()?\"-\"+r:r)};A.toInteger=A.toint=function(){var e=this,t=e.constructor;return _(new t(e),V(e)+1,t.rounding)};A.toNumber=function(){return+this};A.toPower=A.pow=function(e){var t,r,n,i,o,s,a=this,f=a.constructor,v=12,C=+(e=new f(e));if(!e.s)return new f(Z);if(a=new f(a),!a.s){if(e.s<1)throw Error(te+\"Infinity\");return a}if(a.eq(Z))return a;if(n=f.precision,e.eq(Z))return _(a,n);if(t=e.e,r=e.d.length-1,s=t>=r,o=a.s,s){if((r=C<0?-C:C)<=Zr){for(i=new f(Z),t=Math.ceil(n/F+4),U=!1;r%2&&(i=i.times(a),Xr(i.d,t)),r=Fe(r/2),r!==0;)a=a.times(a),Xr(a.d,t);return U=!0,e.s<0?new f(Z).div(i):_(i,n)}}else if(o<0)throw Error(te+\"NaN\");return o=o<0&&e.d[Math.max(t,r)]&1?-1:1,a.s=1,U=!1,i=e.times(Ye(a,n+v)),U=!0,i=tn(i),i.s=o,i};A.toPrecision=function(e,t){var r,n,i=this,o=i.constructor;return e===void 0?(r=V(i),n=Se(i,r<=o.toExpNeg||r>=o.toExpPos)):(le(e,1,De),t===void 0?t=o.rounding:le(t,0,8),i=_(new o(i),e,t),r=V(i),n=Se(i,e<=r||r<=o.toExpNeg,e)),n};A.toSignificantDigits=A.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(le(e,1,De),t===void 0?t=n.rounding:le(t,0,8)),_(new n(r),e,t)};A.toString=A.valueOf=A.val=A.toJSON=A[Symbol.for(\"nodejs.util.inspect.custom\")]=function(){var e=this,t=V(e),r=e.constructor;return Se(e,t<=r.toExpNeg||t>=r.toExpPos)};ge=function(){function e(n,i){var o,s=0,a=n.length;for(n=n.slice();a--;)o=n[a]*i+s,n[a]=o%j|0,s=o/j|0;return s&&n.unshift(s),n}function t(n,i,o,s){var a,f;if(o!=s)f=o>s?1:-1;else for(a=f=0;a<o;a++)if(n[a]!=i[a]){f=n[a]>i[a]?1:-1;break}return f}function r(n,i,o){for(var s=0;o--;)n[o]-=s,s=n[o]<i[o]?1:0,n[o]=s*j+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s){var a,f,v,C,T,O,R,L,S,M,ne,z,Ie,k,Ce,sr,ie,bt,wt=n.constructor,Oo=n.s==i.s?1:-1,se=n.d,B=i.d;if(!n.s)return new wt(n);if(!i.s)throw Error(te+\"Division by zero\");for(f=n.e-i.e,ie=B.length,Ce=se.length,R=new wt(Oo),L=R.d=[],v=0;B[v]==(se[v]||0);)++v;if(B[v]>(se[v]||0)&&--f,o==null?z=o=wt.precision:s?z=o+(V(n)-V(i))+1:z=o,z<0)return new wt(0);if(z=z/F+2|0,v=0,ie==1)for(C=0,B=B[0],z++;(v<Ce||C)&&z--;v++)Ie=C*j+(se[v]||0),L[v]=Ie/B|0,C=Ie%B|0;else{for(C=j/(B[0]+1)|0,C>1&&(B=e(B,C),se=e(se,C),ie=B.length,Ce=se.length),k=ie,S=se.slice(0,ie),M=S.length;M<ie;)S[M++]=0;bt=B.slice(),bt.unshift(0),sr=B[0],B[1]>=j/2&&++sr;do C=0,a=t(B,S,ie,M),a<0?(ne=S[0],ie!=M&&(ne=ne*j+(S[1]||0)),C=ne/sr|0,C>1?(C>=j&&(C=j-1),T=e(B,C),O=T.length,M=S.length,a=t(T,S,O,M),a==1&&(C--,r(T,ie<O?bt:B,O))):(C==0&&(a=C=1),T=B.slice()),O=T.length,O<M&&T.unshift(0),r(S,T,M),a==-1&&(M=S.length,a=t(B,S,ie,M),a<1&&(C++,r(S,ie<M?bt:B,M))),M=S.length):a===0&&(C++,S=[0]),L[v++]=C,a&&S[0]?S[M++]=se[k]||0:(S=[se[k]],M=1);while((k++<Ce||S[0]!==void 0)&&z--)}return L[0]||L.shift(),R.e=f,_(R,s?o+V(R)+1:o)}}();pr=nn(jo);Z=new pr(1);vt=pr});var P,ue,l=oe(()=>{\"use strict\";on();P=class extends vt{static isDecimal(t){return t instanceof vt}static random(t=20){{let n=crypto.getRandomValues(new Uint8Array(t)).reduce((i,o)=>i+o,\"\");return new vt(`0.${n.slice(0,t)}`)}}},ue=P});function Wo(){return!1}var Go,Ko,un,cn=oe(()=>{\"use strict\";u();c();m();p();d();l();Go={},Ko={existsSync:Wo,promises:Go},un=Ko});var xn=Te((Au,En)=>{\"use strict\";u();c();m();p();d();l();En.exports=(yr(),ar(hr)).format});var hr={};ze(hr,{default:()=>Yo,deprecate:()=>vn,format:()=>Tn,inspect:()=>Cn,promisify:()=>Pn});function Pn(e){return(...t)=>new Promise((r,n)=>{e(...t,(i,o)=>{i?n(i):r(o)})})}function vn(e,t){return(...r)=>(console.warn(t),e(...r))}function Cn(e){return JSON.stringify(e,(t,r)=>typeof r==\"function\"?r.toString():typeof r==\"bigint\"?`${r}n`:r instanceof Error?{...r,message:r.message,stack:r.stack}:r)}var Tn,zo,Yo,yr=oe(()=>{\"use strict\";u();c();m();p();d();l();Tn=xn(),zo={promisify:Pn,deprecate:vn,inspect:Cn,format:Tn},Yo=zo});function rs(...e){return e.join(\"/\")}function ns(...e){return e.join(\"/\")}var On,is,os,Ze,kn=oe(()=>{\"use strict\";u();c();m();p();d();l();On=\"/\",is={sep:On},os={resolve:rs,posix:is,join:ns,sep:On},Ze=os});var St,Mn=oe(()=>{\"use strict\";u();c();m();p();d();l();St=class{constructor(){this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),this}emit(t,...r){return this.events[t]?(this.events[t].forEach(n=>{n(...r)}),!0):!1}}});var _n=Te((Kc,In)=>{\"use strict\";u();c();m();p();d();l();In.exports=(e,t=1,r)=>{if(r={indent:\" \",includeEmptyLines:!1,...r},typeof e!=\"string\")throw new TypeError(`Expected \\`input\\` to be a \\`string\\`, got \\`${typeof e}\\``);if(typeof t!=\"number\")throw new TypeError(`Expected \\`count\\` to be a \\`number\\`, got \\`${typeof t}\\``);if(typeof r.indent!=\"string\")throw new TypeError(`Expected \\`options.indent\\` to be a \\`string\\`, got \\`${typeof r.indent}\\``);if(t===0)return e;let n=r.includeEmptyLines?/^/gm:/^(?!\\s*$)/gm;return e.replace(n,r.indent.repeat(t))}});var Nn=Te((lm,Fn)=>{\"use strict\";u();c();m();p();d();l();Fn.exports=({onlyFirst:e=!1}={})=>{let t=[\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"].join(\"|\");return new RegExp(t,e?void 0:\"g\")}});var Bn=Te((gm,Un)=>{\"use strict\";u();c();m();p();d();l();var ms=Nn();Un.exports=e=>typeof e==\"string\"?e.replace(ms(),\"\"):e});var jn=Te((Jf,gs)=>{gs.exports={name:\"@prisma/engines-version\",version:\"5.15.0-29.12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\",main:\"index.js\",types:\"index.d.ts\",license:\"Apache-2.0\",author:\"Tim Suchanek <suchanek@prisma.io>\",prisma:{enginesVersion:\"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\"},repository:{type:\"git\",url:\"https://github.com/prisma/engines-wrapper.git\",directory:\"packages/engines-version\"},devDependencies:{\"@types/node\":\"18.19.33\",typescript:\"4.9.5\"},files:[\"index.js\",\"index.d.ts\"],scripts:{build:\"tsc -d\"}}});var Qn=Te(()=>{\"use strict\";u();c();m();p();d();l()});var Br=Te((ST,Fi)=>{\"use strict\";u();c();m();p();d();l();Fi.exports=function(){function e(t,r,n,i,o){return t<r||n<r?t>n?n+1:t+1:i===o?r:r+1}return function(t,r){if(t===r)return 0;if(t.length>r.length){var n=t;t=r,r=n}for(var i=t.length,o=r.length;i>0&&t.charCodeAt(i-1)===r.charCodeAt(o-1);)i--,o--;for(var s=0;s<i&&t.charCodeAt(s)===r.charCodeAt(s);)s++;if(i-=s,o-=s,i===0||o<3)return o;var a=0,f,v,C,T,O,R,L,S,M,ne,z,Ie,k=[];for(f=0;f<i;f++)k.push(f+1),k.push(t.charCodeAt(s+f));for(var Ce=k.length-1;a<o-3;)for(M=r.charCodeAt(s+(v=a)),ne=r.charCodeAt(s+(C=a+1)),z=r.charCodeAt(s+(T=a+2)),Ie=r.charCodeAt(s+(O=a+3)),R=a+=4,f=0;f<Ce;f+=2)L=k[f],S=k[f+1],v=e(L,v,C,M,S),C=e(v,C,T,ne,S),T=e(C,T,O,z,S),R=e(T,O,R,Ie,S),k[f]=R,O=T,T=C,C=v,v=L;for(;a<o;)for(M=r.charCodeAt(s+(v=a)),R=++a,f=0;f<Ce;f+=2)L=k[f],k[f]=R=e(L,v,R,M,k[f+1]),v=L;return R}}()});var Ya={};ze(Ya,{Debug:()=>wr,Decimal:()=>ue,Extensions:()=>dr,MetricsClient:()=>Be,NotFoundError:()=>he,PrismaClientInitializationError:()=>I,PrismaClientKnownRequestError:()=>Q,PrismaClientRustPanicError:()=>ye,PrismaClientUnknownRequestError:()=>J,PrismaClientValidationError:()=>W,Public:()=>fr,Sql:()=>X,defineDmmfProperty:()=>qn,empty:()=>Wn,getPrismaClient:()=>Ao,getRuntime:()=>Pe,join:()=>Jn,makeStrictEnum:()=>Ro,objectEnumValues:()=>Lt,raw:()=>kr,sqltag:()=>Lr,warnEnvConflicts:()=>void 0,warnOnce:()=>nt});module.exports=ar(Ya);u();c();m();p();d();l();var dr={};ze(dr,{defineExtension:()=>sn,getExtensionContext:()=>an});u();c();m();p();d();l();u();c();m();p();d();l();function sn(e){return typeof e==\"function\"?e:t=>t.$extends(e)}u();c();m();p();d();l();function an(e){return e}var fr={};ze(fr,{validator:()=>ln});u();c();m();p();d();l();u();c();m();p();d();l();function ln(...e){return t=>t}u();c();m();p();d();l();u();c();m();p();d();l();u();c();m();p();d();l();var gr,mn,pn,dn,fn=!0;typeof g<\"u\"&&({FORCE_COLOR:gr,NODE_DISABLE_COLORS:mn,NO_COLOR:pn,TERM:dn}=g.env||{},fn=g.stdout&&g.stdout.isTTY);var Ho={enabled:!mn&&pn==null&&dn!==\"dumb\"&&(gr!=null&&gr!==\"0\"||fn)};function D(e,t){let r=new RegExp(`\\\\x1b\\\\[${t}m`,\"g\"),n=`\\x1B[${e}m`,i=`\\x1B[${t}m`;return function(o){return!Ho.enabled||o==null?o:n+(~(\"\"+o).indexOf(i)?o.replace(r,i+n):o)+i}}var ru=D(0,0),Ct=D(1,22),Tt=D(2,22),nu=D(3,23),gn=D(4,24),iu=D(7,27),ou=D(8,28),su=D(9,29),au=D(30,39),Ne=D(31,39),hn=D(32,39),At=D(33,39),yn=D(34,39),lu=D(35,39),bn=D(36,39),uu=D(37,39),wn=D(90,39),cu=D(90,39),mu=D(40,49),pu=D(41,49),du=D(42,49),fu=D(43,49),gu=D(44,49),hu=D(45,49),yu=D(46,49),bu=D(47,49);u();c();m();p();d();l();var Xo=100,An=[\"green\",\"yellow\",\"blue\",\"magenta\",\"cyan\",\"red\"],Rt=[],Rn=Date.now(),Zo=0,br=typeof g<\"u\"?g.env:{};globalThis.DEBUG??=br.DEBUG??\"\";globalThis.DEBUG_COLORS??=br.DEBUG_COLORS?br.DEBUG_COLORS===\"true\":!0;var Xe={enable(e){typeof e==\"string\"&&(globalThis.DEBUG=e)},disable(){let e=globalThis.DEBUG;return globalThis.DEBUG=\"\",e},enabled(e){let t=globalThis.DEBUG.split(\",\").map(i=>i.replace(/[.+?^${}()|[\\]\\\\]/g,\"\\\\$&\")),r=t.some(i=>i===\"\"||i[0]===\"-\"?!1:e.match(RegExp(i.split(\"*\").join(\".*\")+\"$\"))),n=t.some(i=>i===\"\"||i[0]!==\"-\"?!1:e.match(RegExp(i.slice(1).split(\"*\").join(\".*\")+\"$\")));return r&&!n},log:(...e)=>{let[t,r,...n]=e,i;typeof require==\"function\"&&typeof g<\"u\"&&typeof g.stderr<\"u\"&&typeof g.stderr.write==\"function\"?i=(...o)=>{try{let s=(yr(),ar(hr));g.stderr.write(s.format(...o)+`\n`)}catch{i=console.warn??console.log}}:i=console.warn??console.log,i(`${t} ${r}`,...n)},formatters:{}};function es(e){let t={color:An[Zo++%An.length],enabled:Xe.enabled(e),namespace:e,log:Xe.log,extend:()=>{}},r=(...n)=>{let{enabled:i,namespace:o,color:s,log:a}=t;if(n.length!==0&&Rt.push([o,...n]),Rt.length>Xo&&Rt.shift(),Xe.enabled(o)||i){let f=n.map(C=>typeof C==\"string\"?C:ts(C)),v=`+${Date.now()-Rn}ms`;Rn=Date.now(),a(o,...f,v)}};return new Proxy(r,{get:(n,i)=>t[i],set:(n,i,o)=>t[i]=o})}var wr=new Proxy(es,{get:(e,t)=>Xe[t],set:(e,t,r)=>Xe[t]=r});function ts(e,t=2){let r=new Set;return JSON.stringify(e,(n,i)=>{if(typeof i==\"object\"&&i!==null){if(r.has(i))return\"[Circular *]\";r.add(i)}else if(typeof i==\"bigint\")return i.toString();return i},t)}function Sn(){Rt.length=0}var ee=wr;u();c();m();p();d();l();u();c();m();p();d();l();var Er=[\"darwin\",\"darwin-arm64\",\"debian-openssl-1.0.x\",\"debian-openssl-1.1.x\",\"debian-openssl-3.0.x\",\"rhel-openssl-1.0.x\",\"rhel-openssl-1.1.x\",\"rhel-openssl-3.0.x\",\"linux-arm64-openssl-1.1.x\",\"linux-arm64-openssl-1.0.x\",\"linux-arm64-openssl-3.0.x\",\"linux-arm-openssl-1.1.x\",\"linux-arm-openssl-1.0.x\",\"linux-arm-openssl-3.0.x\",\"linux-musl\",\"linux-musl-openssl-3.0.x\",\"linux-musl-arm64-openssl-1.1.x\",\"linux-musl-arm64-openssl-3.0.x\",\"linux-nixos\",\"linux-static-x64\",\"linux-static-arm64\",\"windows\",\"freebsd11\",\"freebsd12\",\"freebsd13\",\"freebsd14\",\"freebsd15\",\"openbsd\",\"netbsd\",\"arm\"];u();c();m();p();d();l();var Ln=\"library\";function et(e){let t=ss();return t||(e?.config.engineType===\"library\"?\"library\":e?.config.engineType===\"binary\"?\"binary\":Ln)}function ss(){let e=g.env.PRISMA_CLIENT_ENGINE_TYPE;return e===\"library\"?\"library\":e===\"binary\"?\"binary\":void 0}u();c();m();p();d();l();u();c();m();p();d();l();var Oe;(t=>{let e;(k=>(k.findUnique=\"findUnique\",k.findUniqueOrThrow=\"findUniqueOrThrow\",k.findFirst=\"findFirst\",k.findFirstOrThrow=\"findFirstOrThrow\",k.findMany=\"findMany\",k.create=\"create\",k.createMany=\"createMany\",k.createManyAndReturn=\"createManyAndReturn\",k.update=\"update\",k.updateMany=\"updateMany\",k.upsert=\"upsert\",k.delete=\"delete\",k.deleteMany=\"deleteMany\",k.groupBy=\"groupBy\",k.count=\"count\",k.aggregate=\"aggregate\",k.findRaw=\"findRaw\",k.aggregateRaw=\"aggregateRaw\"))(e=t.ModelAction||={})})(Oe||={});var rt={};ze(rt,{error:()=>us,info:()=>ls,log:()=>as,query:()=>cs,should:()=>Dn,tags:()=>tt,warn:()=>xr});u();c();m();p();d();l();var tt={error:Ne(\"prisma:error\"),warn:At(\"prisma:warn\"),info:bn(\"prisma:info\"),query:yn(\"prisma:query\")},Dn={warn:()=>!g.env.PRISMA_DISABLE_WARNINGS};function as(...e){console.log(...e)}function xr(e,...t){Dn.warn()&&console.warn(`${tt.warn} ${e}`,...t)}function ls(e,...t){console.info(`${tt.info} ${e}`,...t)}function us(e,...t){console.error(`${tt.error} ${e}`,...t)}function cs(e,...t){console.log(`${tt.query} ${e}`,...t)}u();c();m();p();d();l();function Ot(e,t){if(!e)throw new Error(`${t}. This should never happen. If you see this error, please, open an issue at https://pris.ly/prisma-prisma-bug-report`)}u();c();m();p();d();l();function ke(e,t){throw new Error(t)}u();c();m();p();d();l();function Pr(e,t){return Object.prototype.hasOwnProperty.call(e,t)}u();c();m();p();d();l();var vr=(e,t)=>e.reduce((r,n)=>(r[t(n)]=n,r),{});u();c();m();p();d();l();function Ue(e,t){let r={};for(let n of Object.keys(e))r[n]=t(e[n],n);return r}u();c();m();p();d();l();function Cr(e,t){if(e.length===0)return;let r=e[0];for(let n=1;n<e.length;n++)t(r,e[n])<0&&(r=e[n]);return r}u();c();m();p();d();l();function K(e,t){Object.defineProperty(e,\"name\",{value:t,configurable:!0})}u();c();m();p();d();l();var $n=new Set,nt=(e,t,...r)=>{$n.has(e)||($n.add(e),xr(t,...r))};u();c();m();p();d();l();var Q=class extends Error{constructor(t,{code:r,clientVersion:n,meta:i,batchRequestIdx:o}){super(t),this.name=\"PrismaClientKnownRequestError\",this.code=r,this.clientVersion=n,this.meta=i,Object.defineProperty(this,\"batchRequestIdx\",{value:o,enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return\"PrismaClientKnownRequestError\"}};K(Q,\"PrismaClientKnownRequestError\");var he=class extends Q{constructor(t,r){super(t,{code:\"P2025\",clientVersion:r}),this.name=\"NotFoundError\"}};K(he,\"NotFoundError\");u();c();m();p();d();l();var I=class e extends Error{constructor(t,r,n){super(t),this.name=\"PrismaClientInitializationError\",this.clientVersion=r,this.errorCode=n,Error.captureStackTrace(e)}get[Symbol.toStringTag](){return\"PrismaClientInitializationError\"}};K(I,\"PrismaClientInitializationError\");u();c();m();p();d();l();var ye=class extends Error{constructor(t,r){super(t),this.name=\"PrismaClientRustPanicError\",this.clientVersion=r}get[Symbol.toStringTag](){return\"PrismaClientRustPanicError\"}};K(ye,\"PrismaClientRustPanicError\");u();c();m();p();d();l();var J=class extends Error{constructor(t,{clientVersion:r,batchRequestIdx:n}){super(t),this.name=\"PrismaClientUnknownRequestError\",this.clientVersion=r,Object.defineProperty(this,\"batchRequestIdx\",{value:n,writable:!0,enumerable:!1})}get[Symbol.toStringTag](){return\"PrismaClientUnknownRequestError\"}};K(J,\"PrismaClientUnknownRequestError\");u();c();m();p();d();l();var W=class extends Error{constructor(r,{clientVersion:n}){super(r);this.name=\"PrismaClientValidationError\";this.clientVersion=n}get[Symbol.toStringTag](){return\"PrismaClientValidationError\"}};K(W,\"PrismaClientValidationError\");u();c();m();p();d();l();var Be=class{constructor(t){this._engine=t}prometheus(t){return this._engine.metrics({format:\"prometheus\",...t})}json(t){return this._engine.metrics({format:\"json\",...t})}};u();c();m();p();d();l();u();c();m();p();d();l();function it(e){let t;return{get(){return t||(t={value:e()}),t.value}}}function qn(e,t){let r=it(()=>ps(t));Object.defineProperty(e,\"dmmf\",{get:()=>r.get()})}function ps(e){throw new Error(\"Prisma.dmmf is not available when running in edge runtimes.\")}function Tr(e){return Object.entries(e).map(([t,r])=>({name:t,...r}))}u();c();m();p();d();l();var kt=Symbol(),Ar=new WeakMap,be=class{constructor(t){t===kt?Ar.set(this,`Prisma.${this._getName()}`):Ar.set(this,`new Prisma.${this._getNamespace()}.${this._getName()}()`)}_getName(){return this.constructor.name}toString(){return Ar.get(this)}},ot=class extends be{_getNamespace(){return\"NullTypes\"}},st=class extends ot{};Rr(st,\"DbNull\");var at=class extends ot{};Rr(at,\"JsonNull\");var lt=class extends ot{};Rr(lt,\"AnyNull\");var Lt={classes:{DbNull:st,JsonNull:at,AnyNull:lt},instances:{DbNull:new st(kt),JsonNull:new at(kt),AnyNull:new lt(kt)}};function Rr(e,t){Object.defineProperty(e,\"name\",{value:t,configurable:!0})}u();c();m();p();d();l();u();c();m();p();d();l();u();c();m();p();d();l();u();c();m();p();d();l();function ut(e){return{ok:!1,error:e,map(){return ut(e)},flatMap(){return ut(e)}}}var Sr=class{constructor(){this.registeredErrors=[]}consumeError(t){return this.registeredErrors[t]}registerNewError(t){let r=0;for(;this.registeredErrors[r]!==void 0;)r++;return this.registeredErrors[r]={error:t},r}},Or=e=>{let t=new Sr,r=Le(t,e.startTransaction.bind(e)),n={adapterName:e.adapterName,errorRegistry:t,queryRaw:Le(t,e.queryRaw.bind(e)),executeRaw:Le(t,e.executeRaw.bind(e)),provider:e.provider,startTransaction:async(...i)=>(await r(...i)).map(s=>ds(t,s))};return e.getConnectionInfo&&(n.getConnectionInfo=fs(t,e.getConnectionInfo.bind(e))),n},ds=(e,t)=>({adapterName:t.adapterName,provider:t.provider,options:t.options,queryRaw:Le(e,t.queryRaw.bind(t)),executeRaw:Le(e,t.executeRaw.bind(t)),commit:Le(e,t.commit.bind(t)),rollback:Le(e,t.rollback.bind(t))});function Le(e,t){return async(...r)=>{try{return await t(...r)}catch(n){let i=e.registerNewError(n);return ut({kind:\"GenericJs\",id:i})}}}function fs(e,t){return(...r)=>{try{return t(...r)}catch(n){let i=e.registerNewError(n);return ut({kind:\"GenericJs\",id:i})}}}var To=_e(jn());var cO=_e(Qn());Mn();cn();kn();u();c();m();p();d();l();var X=class e{constructor(t,r){if(t.length-1!==r.length)throw t.length===0?new TypeError(\"Expected at least 1 string\"):new TypeError(`Expected ${t.length} strings to have ${t.length-1} values`);let n=r.reduce((s,a)=>s+(a instanceof e?a.values.length:1),0);this.values=new Array(n),this.strings=new Array(n+1),this.strings[0]=t[0];let i=0,o=0;for(;i<r.length;){let s=r[i++],a=t[i];if(s instanceof e){this.strings[o]+=s.strings[0];let f=0;for(;f<s.values.length;)this.values[o++]=s.values[f++],this.strings[o]=s.strings[f];this.strings[o]+=a}else this.values[o++]=s,this.strings[o]=a}}get sql(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`?${this.strings[r++]}`;return n}get statement(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`:${r}${this.strings[r++]}`;return n}get text(){let t=this.strings.length,r=1,n=this.strings[0];for(;r<t;)n+=`$${r}${this.strings[r++]}`;return n}inspect(){return{sql:this.sql,statement:this.statement,text:this.text,values:this.values}}};function Jn(e,t=\",\",r=\"\",n=\"\"){if(e.length===0)throw new TypeError(\"Expected `join([])` to be called with an array of multiple elements, but got an empty array\");return new X([r,...Array(e.length-1).fill(t),n],e)}function kr(e){return new X([e],[])}var Wn=kr(\"\");function Lr(e,...t){return new X(e,t)}u();c();m();p();d();l();u();c();m();p();d();l();function ct(e){return{getKeys(){return Object.keys(e)},getPropertyValue(t){return e[t]}}}u();c();m();p();d();l();function H(e,t){return{getKeys(){return[e]},getPropertyValue(){return t()}}}u();c();m();p();d();l();u();c();m();p();d();l();var ce=class{constructor(){this._map=new Map}get(t){return this._map.get(t)?.value}set(t,r){this._map.set(t,{value:r})}getOrCreate(t,r){let n=this._map.get(t);if(n)return n.value;let i=r();return this.set(t,i),i}};function Me(e){let t=new ce;return{getKeys(){return e.getKeys()},getPropertyValue(r){return t.getOrCreate(r,()=>e.getPropertyValue(r))},getPropertyDescriptor(r){return e.getPropertyDescriptor?.(r)}}}u();c();m();p();d();l();u();c();m();p();d();l();var Mt={enumerable:!0,configurable:!0,writable:!0};function It(e){let t=new Set(e);return{getOwnPropertyDescriptor:()=>Mt,has:(r,n)=>t.has(n),set:(r,n,i)=>t.add(n)&&Reflect.set(r,n,i),ownKeys:()=>[...t]}}var Gn=Symbol.for(\"nodejs.util.inspect.custom\");function me(e,t){let r=hs(t),n=new Set,i=new Proxy(e,{get(o,s){if(n.has(s))return o[s];let a=r.get(s);return a?a.getPropertyValue(s):o[s]},has(o,s){if(n.has(s))return!0;let a=r.get(s);return a?a.has?.(s)??!0:Reflect.has(o,s)},ownKeys(o){let s=Kn(Reflect.ownKeys(o),r),a=Kn(Array.from(r.keys()),r);return[...new Set([...s,...a,...n])]},set(o,s,a){return r.get(s)?.getPropertyDescriptor?.(s)?.writable===!1?!1:(n.add(s),Reflect.set(o,s,a))},getOwnPropertyDescriptor(o,s){let a=Reflect.getOwnPropertyDescriptor(o,s);if(a&&!a.configurable)return a;let f=r.get(s);return f?f.getPropertyDescriptor?{...Mt,...f?.getPropertyDescriptor(s)}:Mt:a},defineProperty(o,s,a){return n.add(s),Reflect.defineProperty(o,s,a)}});return i[Gn]=function(){let o={...this};return delete o[Gn],o},i}function hs(e){let t=new Map;for(let r of e){let n=r.getKeys();for(let i of n)t.set(i,r)}return t}function Kn(e,t){return e.filter(r=>t.get(r)?.has?.(r)??!0)}u();c();m();p();d();l();function $e(e){return{getKeys(){return e},has(){return!1},getPropertyValue(){}}}u();c();m();p();d();l();function _t(e,t){return{batch:e,transaction:t?.kind===\"batch\"?{isolationLevel:t.options.isolationLevel}:void 0}}u();c();m();p();d();l();u();c();m();p();d();l();var Ve=class{constructor(t=0,r){this.context=r;this.lines=[];this.currentLine=\"\";this.currentIndent=0;this.currentIndent=t}write(t){return typeof t==\"string\"?this.currentLine+=t:t.write(this),this}writeJoined(t,r){let n=r.length-1;for(let i=0;i<r.length;i++)this.write(r[i]),i!==n&&this.write(t);return this}writeLine(t){return this.write(t).newLine()}newLine(){this.lines.push(this.indentedCurrentLine()),this.currentLine=\"\",this.marginSymbol=void 0;let t=this.afterNextNewLineCallback;return this.afterNextNewLineCallback=void 0,t?.(),this}withIndent(t){return this.indent(),t(this),this.unindent(),this}afterNextNewline(t){return this.afterNextNewLineCallback=t,this}indent(){return this.currentIndent++,this}unindent(){return this.currentIndent>0&&this.currentIndent--,this}addMarginSymbol(t){return this.marginSymbol=t,this}toString(){return this.lines.concat(this.indentedCurrentLine()).join(`\n`)}getCurrentLineLength(){return this.currentLine.length}indentedCurrentLine(){let t=this.currentLine.padStart(this.currentLine.length+2*this.currentIndent);return this.marginSymbol?this.marginSymbol+t.slice(1):t}};u();c();m();p();d();l();u();c();m();p();d();l();function Hn(e){return e.substring(0,1).toLowerCase()+e.substring(1)}u();c();m();p();d();l();function qe(e){return e instanceof Date||Object.prototype.toString.call(e)===\"[object Date]\"}function Dt(e){return e.toString()!==\"Invalid Date\"}u();c();m();p();d();l();l();function je(e){return P.isDecimal(e)?!0:e!==null&&typeof e==\"object\"&&typeof e.s==\"number\"&&typeof e.e==\"number\"&&typeof e.toFixed==\"function\"&&Array.isArray(e.d)}u();c();m();p();d();l();var mt=class{constructor(t,r,n,i,o){this.modelName=t,this.name=r,this.typeName=n,this.isList=i,this.isEnum=o}_toGraphQLInputType(){let t=this.isList?\"List\":\"\",r=this.isEnum?\"Enum\":\"\";return`${t}${r}${this.typeName}FieldRefInput<${this.modelName}>`}};function Qe(e){return e instanceof mt}u();c();m();p();d();l();u();c();m();p();d();l();var Ft=class{constructor(t){this.value=t}write(t){t.write(this.value)}markAsError(){this.value.markAsError()}};u();c();m();p();d();l();var Nt=e=>e,Ut={bold:Nt,red:Nt,green:Nt,dim:Nt,enabled:!1},zn={bold:Ct,red:Ne,green:hn,dim:Tt,enabled:!0},Je={write(e){e.writeLine(\",\")}};u();c();m();p();d();l();var pe=class{constructor(t){this.contents=t;this.isUnderlined=!1;this.color=t=>t}underline(){return this.isUnderlined=!0,this}setColor(t){return this.color=t,this}write(t){let r=t.getCurrentLineLength();t.write(this.color(this.contents)),this.isUnderlined&&t.afterNextNewline(()=>{t.write(\" \".repeat(r)).writeLine(this.color(\"~\".repeat(this.contents.length)))})}};u();c();m();p();d();l();var Ee=class{constructor(){this.hasError=!1}markAsError(){return this.hasError=!0,this}};var We=class extends Ee{constructor(){super(...arguments);this.items=[]}addItem(r){return this.items.push(new Ft(r)),this}getField(r){return this.items[r]}getPrintWidth(){return this.items.length===0?2:Math.max(...this.items.map(n=>n.value.getPrintWidth()))+2}write(r){if(this.items.length===0){this.writeEmpty(r);return}this.writeWithItems(r)}writeEmpty(r){let n=new pe(\"[]\");this.hasError&&n.setColor(r.context.colors.red).underline(),r.write(n)}writeWithItems(r){let{colors:n}=r.context;r.writeLine(\"[\").withIndent(()=>r.writeJoined(Je,this.items).newLine()).write(\"]\"),this.hasError&&r.afterNextNewline(()=>{r.writeLine(n.red(\"~\".repeat(this.getPrintWidth())))})}asObject(){}};u();c();m();p();d();l();var Yn=\": \",Bt=class{constructor(t,r){this.name=t;this.value=r;this.hasError=!1}markAsError(){this.hasError=!0}getPrintWidth(){return this.name.length+this.value.getPrintWidth()+Yn.length}write(t){let r=new pe(this.name);this.hasError&&r.underline().setColor(t.context.colors.red),t.write(r).write(Yn).write(this.value)}};u();c();m();p();d();l();var $t=class e extends Ee{constructor(){super(...arguments);this.fields={};this.suggestions=[]}addField(r){this.fields[r.name]=r}addSuggestion(r){this.suggestions.push(r)}getField(r){return this.fields[r]}getDeepField(r){let[n,...i]=r,o=this.getField(n);if(!o)return;let s=o;for(let a of i){let f;if(s.value instanceof e?f=s.value.getField(a):s.value instanceof We&&(f=s.value.getField(Number(a))),!f)return;s=f}return s}getDeepFieldValue(r){return r.length===0?this:this.getDeepField(r)?.value}hasField(r){return!!this.getField(r)}removeAllFields(){this.fields={}}removeField(r){delete this.fields[r]}getFields(){return this.fields}isEmpty(){return Object.keys(this.fields).length===0}getFieldValue(r){return this.getField(r)?.value}getDeepSubSelectionValue(r){let n=this;for(let i of r){if(!(n instanceof e))return;let o=n.getSubSelectionValue(i);if(!o)return;n=o}return n}getDeepSelectionParent(r){let n=this.getSelectionParent();if(!n)return;let i=n;for(let o of r){let s=i.value.getFieldValue(o);if(!s||!(s instanceof e))return;let a=s.getSelectionParent();if(!a)return;i=a}return i}getSelectionParent(){let r=this.getField(\"select\")?.value.asObject();if(r)return{kind:\"select\",value:r};let n=this.getField(\"include\")?.value.asObject();if(n)return{kind:\"include\",value:n}}getSubSelectionValue(r){return this.getSelectionParent()?.value.fields[r].value}getPrintWidth(){let r=Object.values(this.fields);return r.length==0?2:Math.max(...r.map(i=>i.getPrintWidth()))+2}write(r){let n=Object.values(this.fields);if(n.length===0&&this.suggestions.length===0){this.writeEmpty(r);return}this.writeWithContents(r,n)}asObject(){return this}writeEmpty(r){let n=new pe(\"{}\");this.hasError&&n.setColor(r.context.colors.red).underline(),r.write(n)}writeWithContents(r,n){r.writeLine(\"{\").withIndent(()=>{r.writeJoined(Je,[...n,...this.suggestions]).newLine()}),r.write(\"}\"),this.hasError&&r.afterNextNewline(()=>{r.writeLine(r.context.colors.red(\"~\".repeat(this.getPrintWidth())))})}};u();c();m();p();d();l();var G=class extends Ee{constructor(r){super();this.text=r}getPrintWidth(){return this.text.length}write(r){let n=new pe(this.text);this.hasError&&n.underline().setColor(r.context.colors.red),r.write(n)}asObject(){}};var Mr=class{constructor(t){this.errorMessages=[];this.arguments=t}write(t){t.write(this.arguments)}addErrorMessage(t){this.errorMessages.push(t)}renderAllMessages(t){return this.errorMessages.map(r=>r(t)).join(`\n`)}};function Vt(e){return new Mr(Xn(e))}function Xn(e){let t=new $t;for(let[r,n]of Object.entries(e)){let i=new Bt(r,Zn(n));t.addField(i)}return t}function Zn(e){if(typeof e==\"string\")return new G(JSON.stringify(e));if(typeof e==\"number\"||typeof e==\"boolean\")return new G(String(e));if(typeof e==\"bigint\")return new G(`${e}n`);if(e===null)return new G(\"null\");if(e===void 0)return new G(\"undefined\");if(je(e))return new G(`new Prisma.Decimal(\"${e.toFixed()}\")`);if(e instanceof Uint8Array)return y.isBuffer(e)?new G(`Buffer.alloc(${e.byteLength})`):new G(`new Uint8Array(${e.byteLength})`);if(e instanceof Date){let t=Dt(e)?e.toISOString():\"Invalid Date\";return new G(`new Date(\"${t}\")`)}return e instanceof be?new G(`Prisma.${e._getName()}`):Qe(e)?new G(`prisma.${Hn(e.modelName)}.$fields.${e.name}`):Array.isArray(e)?bs(e):typeof e==\"object\"?Xn(e):new G(Object.prototype.toString.call(e))}function bs(e){let t=new We;for(let r of e)t.addItem(Zn(r));return t}function ei(e){if(e===void 0)return\"\";let t=Vt(e);return new Ve(0,{colors:Ut}).write(t).toString()}u();c();m();p();d();l();var ws=\"P2037\";function qt({error:e,user_facing_error:t},r,n){return t.error_code?new Q(Es(t,n),{code:t.error_code,clientVersion:r,meta:t.meta,batchRequestIdx:t.batch_request_idx}):new J(e,{clientVersion:r,batchRequestIdx:t.batch_request_idx})}function Es(e,t){let r=e.message;return(t===\"postgresql\"||t===\"postgres\"||t===\"mysql\")&&e.error_code===ws&&(r+=`\nPrisma Accelerate has built-in connection pooling to prevent such errors: https://pris.ly/client/error-accelerate`),r}u();c();m();p();d();l();u();c();m();p();d();l();u();c();m();p();d();l();u();c();m();p();d();l();u();c();m();p();d();l();var Ir=class{getLocation(){return null}};function xe(e){return typeof $EnabledCallSite==\"function\"&&e!==\"minimal\"?new $EnabledCallSite:new Ir}u();c();m();p();d();l();u();c();m();p();d();l();u();c();m();p();d();l();var ti={_avg:!0,_count:!0,_sum:!0,_min:!0,_max:!0};function Ge(e={}){let t=Ps(e);return Object.entries(t).reduce((n,[i,o])=>(ti[i]!==void 0?n.select[i]={select:o}:n[i]=o,n),{select:{}})}function Ps(e={}){return typeof e._count==\"boolean\"?{...e,_count:{_all:e._count}}:e}function jt(e={}){return t=>(typeof e._count==\"boolean\"&&(t._count=t._count._all),t)}function ri(e,t){let r=jt(e);return t({action:\"aggregate\",unpacker:r,argsMapper:Ge})(e)}u();c();m();p();d();l();function vs(e={}){let{select:t,...r}=e;return typeof t==\"object\"?Ge({...r,_count:t}):Ge({...r,_count:{_all:!0}})}function Cs(e={}){return typeof e.select==\"object\"?t=>jt(e)(t)._count:t=>jt(e)(t)._count._all}function ni(e,t){return t({action:\"count\",unpacker:Cs(e),argsMapper:vs})(e)}u();c();m();p();d();l();function Ts(e={}){let t=Ge(e);if(Array.isArray(t.by))for(let r of t.by)typeof r==\"string\"&&(t.select[r]=!0);else typeof t.by==\"string\"&&(t.select[t.by]=!0);return t}function As(e={}){return t=>(typeof e?._count==\"boolean\"&&t.forEach(r=>{r._count=r._count._all}),t)}function ii(e,t){return t({action:\"groupBy\",unpacker:As(e),argsMapper:Ts})(e)}function oi(e,t,r){if(t===\"aggregate\")return n=>ri(n,r);if(t===\"count\")return n=>ni(n,r);if(t===\"groupBy\")return n=>ii(n,r)}u();c();m();p();d();l();function si(e,t){let r=t.fields.filter(i=>!i.relationName),n=vr(r,i=>i.name);return new Proxy({},{get(i,o){if(o in i||typeof o==\"symbol\")return i[o];let s=n[o];if(s)return new mt(e,o,s.type,s.isList,s.kind===\"enum\")},...It(Object.keys(n))})}u();c();m();p();d();l();u();c();m();p();d();l();var ai=e=>Array.isArray(e)?e:e.split(\".\"),_r=(e,t)=>ai(t).reduce((r,n)=>r&&r[n],e),li=(e,t,r)=>ai(t).reduceRight((n,i,o,s)=>Object.assign({},_r(e,s.slice(0,o)),{[i]:n}),r);function Rs(e,t){return e===void 0||t===void 0?[]:[...t,\"select\",e]}function Ss(e,t,r){return t===void 0?e??{}:li(t,r,e||!0)}function Dr(e,t,r,n,i,o){let a=e._runtimeDataModel.models[t].fields.reduce((f,v)=>({...f,[v.name]:v}),{});return f=>{let v=xe(e._errorFormat),C=Rs(n,i),T=Ss(f,o,C),O=r({dataPath:C,callsite:v})(T),R=Os(e,t);return new Proxy(O,{get(L,S){if(!R.includes(S))return L[S];let ne=[a[S].type,r,S],z=[C,T];return Dr(e,...ne,...z)},...It([...R,...Object.getOwnPropertyNames(O)])})}}function Os(e,t){return e._runtimeDataModel.models[t].fields.filter(r=>r.kind===\"object\").map(r=>r.name)}u();c();m();p();d();l();u();c();m();p();d();l();var ks=_e(_n());var Ls={red:Ne,gray:wn,dim:Tt,bold:Ct,underline:gn,highlightSource:e=>e.highlight()},Ms={red:e=>e,gray:e=>e,dim:e=>e,bold:e=>e,underline:e=>e,highlightSource:e=>e};function Is({message:e,originalMethod:t,isPanic:r,callArguments:n}){return{functionName:`prisma.${t}()`,message:e,isPanic:r??!1,callArguments:n}}function _s({functionName:e,location:t,message:r,isPanic:n,contextLines:i,callArguments:o},s){let a=[\"\"],f=t?\" in\":\":\";if(n?(a.push(s.red(`Oops, an unknown error occurred! This is ${s.bold(\"on us\")}, you did nothing wrong.`)),a.push(s.red(`It occurred in the ${s.bold(`\\`${e}\\``)} invocation${f}`))):a.push(s.red(`Invalid ${s.bold(`\\`${e}\\``)} invocation${f}`)),t&&a.push(s.underline(Ds(t))),i){a.push(\"\");let v=[i.toString()];o&&(v.push(o),v.push(s.dim(\")\"))),a.push(v.join(\"\")),o&&a.push(\"\")}else a.push(\"\"),o&&a.push(o),a.push(\"\");return a.push(r),a.join(`\n`)}function Ds(e){let t=[e.fileName];return e.lineNumber&&t.push(String(e.lineNumber)),e.columnNumber&&t.push(String(e.columnNumber)),t.join(\":\")}function Ke(e){let t=e.showColors?Ls:Ms,r;return typeof $getTemplateParameters<\"u\"?r=$getTemplateParameters(e,t):r=Is(e),_s(r,t)}function ui(e,t,r,n){return e===Oe.ModelAction.findFirstOrThrow||e===Oe.ModelAction.findUniqueOrThrow?Fs(t,r,n):n}function Fs(e,t,r){return async n=>{if(\"rejectOnNotFound\"in n.args){let o=Ke({originalMethod:n.clientMethod,callsite:n.callsite,message:\"'rejectOnNotFound' option is not supported\"});throw new W(o,{clientVersion:t})}return await r(n).catch(o=>{throw o instanceof Q&&o.code===\"P2025\"?new he(`No ${e} found`,t):o})}}u();c();m();p();d();l();function de(e){return e.replace(/^./,t=>t.toLowerCase())}var Ns=[\"findUnique\",\"findUniqueOrThrow\",\"findFirst\",\"findFirstOrThrow\",\"create\",\"update\",\"upsert\",\"delete\"],Us=[\"aggregate\",\"count\",\"groupBy\"];function Fr(e,t){let r=e._extensions.getAllModelExtensions(t)??{},n=[Bs(e,t),Vs(e,t),ct(r),H(\"name\",()=>t),H(\"$name\",()=>t),H(\"$parent\",()=>e._appliedParent)];return me({},n)}function Bs(e,t){let r=de(t),n=Object.keys(Oe.ModelAction).concat(\"count\");return{getKeys(){return n},getPropertyValue(i){let o=i,s=f=>e._request(f);s=ui(o,t,e._clientVersion,s);let a=f=>v=>{let C=xe(e._errorFormat);return e._createPrismaPromise(T=>{let O={args:v,dataPath:[],action:o,model:t,clientMethod:`${r}.${i}`,jsModelName:r,transaction:T,callsite:C};return s({...O,...f})})};return Ns.includes(o)?Dr(e,t,a):$s(i)?oi(e,i,a):a({})}}}function $s(e){return Us.includes(e)}function Vs(e,t){return Me(H(\"fields\",()=>{let r=e._runtimeDataModel.models[t];return si(t,r)}))}u();c();m();p();d();l();function ci(e){return e.replace(/^./,t=>t.toUpperCase())}var Nr=Symbol();function pt(e){let t=[qs(e),H(Nr,()=>e),H(\"$parent\",()=>e._appliedParent)],r=e._extensions.getAllClientExtensions();return r&&t.push(ct(r)),me(e,t)}function qs(e){let t=Object.keys(e._runtimeDataModel.models),r=t.map(de),n=[...new Set(t.concat(r))];return Me({getKeys(){return n},getPropertyValue(i){let o=ci(i);if(e._runtimeDataModel.models[o]!==void 0)return Fr(e,o);if(e._runtimeDataModel.models[i]!==void 0)return Fr(e,i)},getPropertyDescriptor(i){if(!r.includes(i))return{enumerable:!1}}})}function mi(e){return e[Nr]?e[Nr]:e}function pi(e){if(typeof e==\"function\")return e(this);if(e.client?.__AccelerateEngine){let r=e.client.__AccelerateEngine;this._originalClient._engine=new r(this._originalClient._accelerateEngineConfig)}let t=Object.create(this._originalClient,{_extensions:{value:this._extensions.append(e)},_appliedParent:{value:this,configurable:!0},$use:{value:void 0},$on:{value:void 0}});return pt(t)}u();c();m();p();d();l();u();c();m();p();d();l();function di({result:e,modelName:t,select:r,omit:n,extensions:i}){let o=i.getAllComputedFields(t);if(!o)return e;let s=[],a=[];for(let f of Object.values(o)){if(n){if(n[f.name])continue;let v=f.needs.filter(C=>n[C]);v.length>0&&a.push($e(v))}else if(r){if(!r[f.name])continue;let v=f.needs.filter(C=>!r[C]);v.length>0&&a.push($e(v))}js(e,f.needs)&&s.push(Qs(f,me(e,s)))}return s.length>0||a.length>0?me(e,[...s,...a]):e}function js(e,t){return t.every(r=>Pr(e,r))}function Qs(e,t){return Me(H(e.name,()=>e.compute(t)))}u();c();m();p();d();l();function Qt({visitor:e,result:t,args:r,runtimeDataModel:n,modelName:i}){if(Array.isArray(t)){for(let s=0;s<t.length;s++)t[s]=Qt({result:t[s],args:r,modelName:i,runtimeDataModel:n,visitor:e});return t}let o=e(t,i,r)??t;return r.include&&fi({includeOrSelect:r.include,result:o,parentModelName:i,runtimeDataModel:n,visitor:e}),r.select&&fi({includeOrSelect:r.select,result:o,parentModelName:i,runtimeDataModel:n,visitor:e}),o}function fi({includeOrSelect:e,result:t,parentModelName:r,runtimeDataModel:n,visitor:i}){for(let[o,s]of Object.entries(e)){if(!s||t[o]==null)continue;let f=n.models[r].fields.find(C=>C.name===o);if(!f||f.kind!==\"object\"||!f.relationName)continue;let v=typeof s==\"object\"?s:{};t[o]=Qt({visitor:i,result:t[o],args:v,modelName:f.type,runtimeDataModel:n})}}function gi({result:e,modelName:t,args:r,extensions:n,runtimeDataModel:i}){return n.isEmpty()||e==null||typeof e!=\"object\"||!i.models[t]?e:Qt({result:e,args:r??{},modelName:t,runtimeDataModel:i,visitor:(s,a,f)=>di({result:s,modelName:de(a),select:f.select,omit:f.omit,extensions:n})})}u();c();m();p();d();l();u();c();m();p();d();l();l();function hi(e){if(e instanceof X)return Js(e);if(Array.isArray(e)){let r=[e[0]];for(let n=1;n<e.length;n++)r[n]=dt(e[n]);return r}let t={};for(let r in e)t[r]=dt(e[r]);return t}function Js(e){return new X(e.strings,e.values)}function dt(e){if(typeof e!=\"object\"||e==null||e instanceof be||Qe(e))return e;if(je(e))return new ue(e.toFixed());if(qe(e))return new Date(+e);if(ArrayBuffer.isView(e))return e.slice(0);if(Array.isArray(e)){let t=e.length,r;for(r=Array(t);t--;)r[t]=dt(e[t]);return r}if(typeof e==\"object\"){let t={};for(let r in e)r===\"__proto__\"?Object.defineProperty(t,r,{value:dt(e[r]),configurable:!0,enumerable:!0,writable:!0}):t[r]=dt(e[r]);return t}ke(e,\"Unknown value\")}function bi(e,t,r,n=0){return e._createPrismaPromise(i=>{let o=t.customDataProxyFetch;return\"transaction\"in t&&i!==void 0&&(t.transaction?.kind===\"batch\"&&t.transaction.lock.then(),t.transaction=i),n===r.length?e._executeRequest(t):r[n]({model:t.model,operation:t.model?t.action:t.clientMethod,args:hi(t.args??{}),__internalParams:t,query:(s,a=t)=>{let f=a.customDataProxyFetch;return a.customDataProxyFetch=Pi(o,f),a.args=s,bi(e,a,r,n+1)}})})}function wi(e,t){let{jsModelName:r,action:n,clientMethod:i}=t,o=r?n:i;if(e._extensions.isEmpty())return e._executeRequest(t);let s=e._extensions.getAllQueryCallbacks(r??\"$none\",o);return bi(e,t,s)}function Ei(e){return t=>{let r={requests:t},n=t[0].extensions.getAllBatchQueryCallbacks();return n.length?xi(r,n,0,e):e(r)}}function xi(e,t,r,n){if(r===t.length)return n(e);let i=e.customDataProxyFetch,o=e.requests[0].transaction;return t[r]({args:{queries:e.requests.map(s=>({model:s.modelName,operation:s.action,args:s.args})),transaction:o?{isolationLevel:o.kind===\"batch\"?o.isolationLevel:void 0}:void 0},__internalParams:e,query(s,a=e){let f=a.customDataProxyFetch;return a.customDataProxyFetch=Pi(i,f),xi(a,t,r+1,n)}})}var yi=e=>e;function Pi(e=yi,t=yi){return r=>e(t(r))}u();c();m();p();d();l();u();c();m();p();d();l();function Ci(e,t,r){let n=de(r);return!t.result||!(t.result.$allModels||t.result[n])?e:Ws({...e,...vi(t.name,e,t.result.$allModels),...vi(t.name,e,t.result[n])})}function Ws(e){let t=new ce,r=(n,i)=>t.getOrCreate(n,()=>i.has(n)?[n]:(i.add(n),e[n]?e[n].needs.flatMap(o=>r(o,i)):[n]));return Ue(e,n=>({...n,needs:r(n.name,new Set)}))}function vi(e,t,r){return r?Ue(r,({needs:n,compute:i},o)=>({name:o,needs:n?Object.keys(n).filter(s=>n[s]):[],compute:Gs(t,o,i)})):{}}function Gs(e,t,r){let n=e?.[t]?.compute;return n?i=>r({...i,[t]:n(i)}):r}function Ti(e,t){if(!t)return e;let r={...e};for(let n of Object.values(t))if(e[n.name])for(let i of n.needs)r[i]=!0;return r}function Ai(e,t){if(!t)return e;let r={...e};for(let n of Object.values(t))if(!e[n.name])for(let i of n.needs)delete r[i];return r}var Jt=class{constructor(t,r){this.extension=t;this.previous=r;this.computedFieldsCache=new ce;this.modelExtensionsCache=new ce;this.queryCallbacksCache=new ce;this.clientExtensions=it(()=>this.extension.client?{...this.previous?.getAllClientExtensions(),...this.extension.client}:this.previous?.getAllClientExtensions());this.batchCallbacks=it(()=>{let t=this.previous?.getAllBatchQueryCallbacks()??[],r=this.extension.query?.$__internalBatch;return r?t.concat(r):t})}getAllComputedFields(t){return this.computedFieldsCache.getOrCreate(t,()=>Ci(this.previous?.getAllComputedFields(t),this.extension,t))}getAllClientExtensions(){return this.clientExtensions.get()}getAllModelExtensions(t){return this.modelExtensionsCache.getOrCreate(t,()=>{let r=de(t);return!this.extension.model||!(this.extension.model[r]||this.extension.model.$allModels)?this.previous?.getAllModelExtensions(t):{...this.previous?.getAllModelExtensions(t),...this.extension.model.$allModels,...this.extension.model[r]}})}getAllQueryCallbacks(t,r){return this.queryCallbacksCache.getOrCreate(`${t}:${r}`,()=>{let n=this.previous?.getAllQueryCallbacks(t,r)??[],i=[],o=this.extension.query;return!o||!(o[t]||o.$allModels||o[r]||o.$allOperations)?n:(o[t]!==void 0&&(o[t][r]!==void 0&&i.push(o[t][r]),o[t].$allOperations!==void 0&&i.push(o[t].$allOperations)),t!==\"$none\"&&o.$allModels!==void 0&&(o.$allModels[r]!==void 0&&i.push(o.$allModels[r]),o.$allModels.$allOperations!==void 0&&i.push(o.$allModels.$allOperations)),o[r]!==void 0&&i.push(o[r]),o.$allOperations!==void 0&&i.push(o.$allOperations),n.concat(i))})}getAllBatchQueryCallbacks(){return this.batchCallbacks.get()}},Wt=class e{constructor(t){this.head=t}static empty(){return new e}static single(t){return new e(new Jt(t))}isEmpty(){return this.head===void 0}append(t){return new e(new Jt(t,this.head))}getAllComputedFields(t){return this.head?.getAllComputedFields(t)}getAllClientExtensions(){return this.head?.getAllClientExtensions()}getAllModelExtensions(t){return this.head?.getAllModelExtensions(t)}getAllQueryCallbacks(t,r){return this.head?.getAllQueryCallbacks(t,r)??[]}getAllBatchQueryCallbacks(){return this.head?.getAllBatchQueryCallbacks()??[]}};u();c();m();p();d();l();var Ri=ee(\"prisma:client\"),Si={Vercel:\"vercel\",\"Netlify CI\":\"netlify\"};function Oi({postinstall:e,ciName:t,clientVersion:r}){if(Ri(\"checkPlatformCaching:postinstall\",e),Ri(\"checkPlatformCaching:ciName\",t),e===!0&&t&&t in Si){let n=`Prisma has detected that this project was built on ${t}, which caches dependencies. This leads to an outdated Prisma Client because Prisma's auto-generation isn't triggered. To fix this, make sure to run the \\`prisma generate\\` command during the build process.\n\nLearn how: https://pris.ly/d/${Si[t]}-build`;throw console.error(n),new I(n,r)}}u();c();m();p();d();l();function ki(e,t){return e?e.datasources?e.datasources:e.datasourceUrl?{[t[0]]:{url:e.datasourceUrl}}:{}:{}}u();c();m();p();d();l();u();c();m();p();d();l();u();c();m();p();d();l();var Ks=\"Cloudflare-Workers\",Hs=\"node\";function Li(){return typeof Netlify==\"object\"?\"netlify\":typeof EdgeRuntime==\"string\"?\"edge-light\":globalThis.navigator?.userAgent===Ks?\"workerd\":globalThis.Deno?\"deno\":globalThis.__lagon__?\"lagon\":globalThis.process?.release?.name===Hs?\"node\":globalThis.Bun?\"bun\":globalThis.fastly?\"fastly\":\"unknown\"}var zs={node:\"Node.js\",workerd:\"Cloudflare Workers\",deno:\"Deno and Deno Deploy\",netlify:\"Netlify Edge Functions\",\"edge-light\":\"Vercel Edge Functions or Edge Middleware\"};function Pe(){let e=Li();return{id:e,prettyName:zs[e]||e,isEdge:[\"workerd\",\"deno\",\"netlify\",\"edge-light\"].includes(e)}}u();c();m();p();d();l();u();c();m();p();d();l();function Gt({inlineDatasources:e,overrideDatasources:t,env:r,clientVersion:n}){let i,o=Object.keys(e)[0],s=e[o]?.url,a=t[o]?.url;if(o===void 0?i=void 0:a?i=a:s?.value?i=s.value:s?.fromEnvVar&&(i=r[s.fromEnvVar]),s?.fromEnvVar!==void 0&&i===void 0)throw Pe().id===\"workerd\"?new I(`error: Environment variable not found: ${s.fromEnvVar}.\n\nIn Cloudflare module Workers, environment variables are available only in the Worker's \\`env\\` parameter of \\`fetch\\`.\nTo solve this, provide the connection string directly: https://pris.ly/d/cloudflare-datasource-url`,n):new I(`error: Environment variable not found: ${s.fromEnvVar}.`,n);if(i===void 0)throw new I(\"error: Missing URL environment variable, value, or override.\",n);return i}u();c();m();p();d();l();u();c();m();p();d();l();function Mi(e){if(e?.kind===\"itx\")return e.options.id}u();c();m();p();d();l();var Ur,Ii={async loadLibrary(e){let{clientVersion:t,adapter:r,engineWasm:n}=e;if(r===void 0)throw new I(`The \\`adapter\\` option for \\`PrismaClient\\` is required in this context (${Pe().prettyName})`,t);if(n===void 0)throw new I(\"WASM engine was unexpectedly `undefined`\",t);Ur===void 0&&(Ur=(async()=>{let o=n.getRuntime(),s=await n.getQueryEngineWasmModule();if(s==null)throw new I(\"The loaded wasm module was unexpectedly `undefined` or `null` once loaded\",t);let a={\"./query_engine_bg.js\":o},f=new WebAssembly.Instance(s,a);return o.__wbg_set_wasm(f.exports),o.QueryEngine})());let i=await Ur;return{debugPanic(){return Promise.reject(\"{}\")},dmmf(){return Promise.resolve(\"{}\")},version(){return{commit:\"unknown\",version:\"unknown\"}},QueryEngine:i}}};var Ys=\"P2036\",fe=ee(\"prisma:client:libraryEngine\");function Xs(e){return e.item_type===\"query\"&&\"query\"in e}function Zs(e){return\"level\"in e?e.level===\"error\"&&e.message===\"PANIC\":!1}var MC=[...Er,\"native\"],_i=0,ft=class{constructor(t,r){this.name=\"LibraryEngine\";this.libraryLoader=r??Ii,this.config=t,this.libraryStarted=!1,this.logQueries=t.logQueries??!1,this.logLevel=t.logLevel??\"error\",this.logEmitter=t.logEmitter,this.datamodel=t.inlineSchema,t.enableDebugLogs&&(this.logLevel=\"debug\");let n=Object.keys(t.overrideDatasources)[0],i=t.overrideDatasources[n]?.url;n!==void 0&&i!==void 0&&(this.datasourceOverrides={[n]:i}),this.libraryInstantiationPromise=this.instantiateLibrary(),this.checkForTooManyEngines()}checkForTooManyEngines(){this.config.adapter&&[\"wasm\"].includes(\"wasm\")||_i===10&&console.warn(`${At(\"warn(prisma-client)\")} This is the 10th instance of Prisma Client being started. Make sure this is intentional.`)}async applyPendingMigrations(){throw new Error(\"Cannot call this method from this type of engine instance\")}async transaction(t,r,n){await this.start();let i=JSON.stringify(r),o;if(t===\"start\"){let a=JSON.stringify({max_wait:n.maxWait,timeout:n.timeout,isolation_level:n.isolationLevel});o=await this.engine?.startTransaction(a,i)}else t===\"commit\"?o=await this.engine?.commitTransaction(n.id,i):t===\"rollback\"&&(o=await this.engine?.rollbackTransaction(n.id,i));let s=this.parseEngineResponse(o);if(ea(s)){let a=this.getExternalAdapterError(s);throw a?a.error:new Q(s.message,{code:s.error_code,clientVersion:this.config.clientVersion,meta:s.meta})}return s}async instantiateLibrary(){if(fe(\"internalSetup\"),this.libraryInstantiationPromise)return this.libraryInstantiationPromise;this.binaryTarget=await this.getCurrentBinaryTarget(),await this.loadEngine(),this.version()}async getCurrentBinaryTarget(){}parseEngineResponse(t){if(!t)throw new J(\"Response from the Engine was empty\",{clientVersion:this.config.clientVersion});try{return JSON.parse(t)}catch{throw new J(\"Unable to JSON.parse response from engine\",{clientVersion:this.config.clientVersion})}}async loadEngine(){if(!this.engine){this.QueryEngineConstructor||(this.library=await this.libraryLoader.loadLibrary(this.config),this.QueryEngineConstructor=this.library.QueryEngine);try{let t=new b(this),{adapter:r}=this.config;r&&fe(\"Using driver adapter: %O\",r),this.engine=new this.QueryEngineConstructor({datamodel:this.datamodel,env:g.env,logQueries:this.config.logQueries??!1,ignoreEnvVarErrors:!0,datasourceOverrides:this.datasourceOverrides??{},logLevel:this.logLevel,configDir:this.config.cwd,engineProtocol:\"json\"},n=>{t.deref()?.logger(n)},r),_i++}catch(t){let r=t,n=this.parseInitError(r.message);throw typeof n==\"string\"?r:new I(n.message,this.config.clientVersion,n.error_code)}}}logger(t){let r=this.parseEngineResponse(t);if(r){if(\"span\"in r){this.config.tracingHelper.createEngineSpan(r);return}r.level=r?.level.toLowerCase()??\"unknown\",Xs(r)?this.logEmitter.emit(\"query\",{timestamp:new Date,query:r.query,params:r.params,duration:Number(r.duration_ms),target:r.module_path}):(Zs(r),this.logEmitter.emit(r.level,{timestamp:new Date,message:r.message,target:r.module_path}))}}parseInitError(t){try{return JSON.parse(t)}catch{}return t}parseRequestError(t){try{return JSON.parse(t)}catch{}return t}onBeforeExit(){throw new Error('\"beforeExit\" hook is not applicable to the library engine since Prisma 5.0.0, it is only relevant and implemented for the binary engine. Please add your event listener to the `process` object directly instead.')}async start(){if(await this.libraryInstantiationPromise,await this.libraryStoppingPromise,this.libraryStartingPromise)return fe(`library already starting, this.libraryStarted: ${this.libraryStarted}`),this.libraryStartingPromise;if(this.libraryStarted)return;let t=async()=>{fe(\"library starting\");try{let r={traceparent:this.config.tracingHelper.getTraceParent()};await this.engine?.connect(JSON.stringify(r)),this.libraryStarted=!0,fe(\"library started\")}catch(r){let n=this.parseInitError(r.message);throw typeof n==\"string\"?r:new I(n.message,this.config.clientVersion,n.error_code)}finally{this.libraryStartingPromise=void 0}};return this.libraryStartingPromise=this.config.tracingHelper.runInChildSpan(\"connect\",t),this.libraryStartingPromise}async stop(){if(await this.libraryStartingPromise,await this.executingQueryPromise,this.libraryStoppingPromise)return fe(\"library is already stopping\"),this.libraryStoppingPromise;if(!this.libraryStarted)return;let t=async()=>{await new Promise(n=>setTimeout(n,5)),fe(\"library stopping\");let r={traceparent:this.config.tracingHelper.getTraceParent()};await this.engine?.disconnect(JSON.stringify(r)),this.libraryStarted=!1,this.libraryStoppingPromise=void 0,fe(\"library stopped\")};return this.libraryStoppingPromise=this.config.tracingHelper.runInChildSpan(\"disconnect\",t),this.libraryStoppingPromise}version(){return this.versionInfo=this.library?.version(),this.versionInfo?.version??\"unknown\"}debugPanic(t){return this.library?.debugPanic(t)}async request(t,{traceparent:r,interactiveTransaction:n}){fe(`sending request, this.libraryStarted: ${this.libraryStarted}`);let i=JSON.stringify({traceparent:r}),o=JSON.stringify(t);try{await this.start(),this.executingQueryPromise=this.engine?.query(o,i,n?.id),this.lastQuery=o;let s=this.parseEngineResponse(await this.executingQueryPromise);if(s.errors)throw s.errors.length===1?this.buildQueryError(s.errors[0]):new J(JSON.stringify(s.errors),{clientVersion:this.config.clientVersion});if(this.loggerRustPanic)throw this.loggerRustPanic;return{data:s,elapsed:0}}catch(s){if(s instanceof I)throw s;s.code===\"GenericFailure\"&&s.message?.startsWith(\"PANIC:\");let a=this.parseRequestError(s.message);throw typeof a==\"string\"?s:new J(`${a.message}\n${a.backtrace}`,{clientVersion:this.config.clientVersion})}}async requestBatch(t,{transaction:r,traceparent:n}){fe(\"requestBatch\");let i=_t(t,r);await this.start(),this.lastQuery=JSON.stringify(i),this.executingQueryPromise=this.engine.query(this.lastQuery,JSON.stringify({traceparent:n}),Mi(r));let o=await this.executingQueryPromise,s=this.parseEngineResponse(o);if(s.errors)throw s.errors.length===1?this.buildQueryError(s.errors[0]):new J(JSON.stringify(s.errors),{clientVersion:this.config.clientVersion});let{batchResult:a,errors:f}=s;if(Array.isArray(a))return a.map(v=>v.errors&&v.errors.length>0?this.loggerRustPanic??this.buildQueryError(v.errors[0]):{data:v,elapsed:0});throw f&&f.length===1?new Error(f[0].error):new Error(JSON.stringify(s))}buildQueryError(t){t.user_facing_error.is_panic;let r=this.getExternalAdapterError(t.user_facing_error);return r?r.error:qt(t,this.config.clientVersion,this.config.activeProvider)}getExternalAdapterError(t){if(t.error_code===Ys&&this.config.adapter){let r=t.meta?.id;Ot(typeof r==\"number\",\"Malformed external JS error received from the engine\");let n=this.config.adapter.errorRegistry.consumeError(r);return Ot(n,\"External error with reported id was not registered\"),n}}async metrics(t){await this.start();let r=await this.engine.metrics(JSON.stringify(t));return t.format===\"prometheus\"?r:this.parseEngineResponse(r)}};function ea(e){return typeof e==\"object\"&&e!==null&&e.error_code!==void 0}u();c();m();p();d();l();var gt=\"Accelerate has not been setup correctly. Make sure your client is using `.$extends(withAccelerate())`. See https://pris.ly/d/accelerate-getting-started\",Kt=class{constructor(t){this.config=t;this.name=\"AccelerateEngine\";this.resolveDatasourceUrl=this.config.accelerateUtils?.resolveDatasourceUrl;this.getBatchRequestPayload=this.config.accelerateUtils?.getBatchRequestPayload;this.prismaGraphQLToJSError=this.config.accelerateUtils?.prismaGraphQLToJSError;this.PrismaClientUnknownRequestError=this.config.accelerateUtils?.PrismaClientUnknownRequestError;this.PrismaClientInitializationError=this.config.accelerateUtils?.PrismaClientInitializationError;this.PrismaClientKnownRequestError=this.config.accelerateUtils?.PrismaClientKnownRequestError;this.debug=this.config.accelerateUtils?.debug;this.engineVersion=this.config.accelerateUtils?.engineVersion;this.clientVersion=this.config.accelerateUtils?.clientVersion}onBeforeExit(t){}async start(){}async stop(){}version(t){return\"unknown\"}transaction(t,r,n){throw new I(gt,this.config.clientVersion)}metrics(t){throw new I(gt,this.config.clientVersion)}request(t,r){throw new I(gt,this.config.clientVersion)}requestBatch(t,r){throw new I(gt,this.config.clientVersion)}applyPendingMigrations(){throw new I(gt,this.config.clientVersion)}};function Di({copyEngine:e=!0},t){let r;try{r=Gt({inlineDatasources:t.inlineDatasources,overrideDatasources:t.overrideDatasources,env:{...t.env,...g.env},clientVersion:t.clientVersion})}catch{}e&&r?.startsWith(\"prisma://\")&&nt(\"recommend--no-engine\",\"In production, we recommend using `prisma generate --no-engine` (See: `prisma generate --help`)\");let n=et(t.generator),i=!!(r?.startsWith(\"prisma://\")||!e),o=!!t.adapter,s=n===\"library\",a=n===\"binary\";if(i&&o||o&&!1){let f;throw e?r?.startsWith(\"prisma://\")?f=[\"Prisma Client was configured to use the `adapter` option but the URL was a `prisma://` URL.\",\"Please either use the `prisma://` URL or remove the `adapter` from the Prisma Client constructor.\"]:f=[\"Prisma Client was configured to use both the `adapter` and Accelerate, please chose one.\"]:f=[\"Prisma Client was configured to use the `adapter` option but `prisma generate` was run with `--no-engine`.\",\"Please run `prisma generate` without `--no-engine` to be able to use Prisma Client with the adapter.\"],new W(f.join(`\n`),{clientVersion:t.clientVersion})}if(o)return new ft(t);if(i)return new Kt(t);{let f=[`PrismaClient failed to initialize because it wasn't configured to run in this environment (${Pe().prettyName}).`,\"In order to run Prisma Client in an edge runtime, you will need to configure one of the following options:\",\"- Enable Driver Adapters: https://pris.ly/d/driver-adapters\",\"- Enable Accelerate: https://pris.ly/d/accelerate\"];throw new W(f.join(`\n`),{clientVersion:t.clientVersion})}throw new W(\"Invalid client engine type, please use `library` or `binary`\",{clientVersion:t.clientVersion})}u();c();m();p();d();l();function Ht({generator:e}){return e?.previewFeatures??[]}u();c();m();p();d();l();u();c();m();p();d();l();u();c();m();p();d();l();var Vi=_e(Br());u();c();m();p();d();l();function Bi(e,t){let r=$i(e),n=ta(r),i=na(n);i?zt(i,t):t.addErrorMessage(()=>\"Unknown error\")}function $i(e){return e.errors.flatMap(t=>t.kind===\"Union\"?$i(t):[t])}function ta(e){let t=new Map,r=[];for(let n of e){if(n.kind!==\"InvalidArgumentType\"){r.push(n);continue}let i=`${n.selectionPath.join(\".\")}:${n.argumentPath.join(\".\")}`,o=t.get(i);o?t.set(i,{...n,argument:{...n.argument,typeNames:ra(o.argument.typeNames,n.argument.typeNames)}}):t.set(i,n)}return r.push(...t.values()),r}function ra(e,t){return[...new Set(e.concat(t))]}function na(e){return Cr(e,(t,r)=>{let n=Ni(t),i=Ni(r);return n!==i?n-i:Ui(t)-Ui(r)})}function Ni(e){let t=0;return Array.isArray(e.selectionPath)&&(t+=e.selectionPath.length),Array.isArray(e.argumentPath)&&(t+=e.argumentPath.length),t}function Ui(e){switch(e.kind){case\"InvalidArgumentValue\":case\"ValueTooLarge\":return 20;case\"InvalidArgumentType\":return 10;case\"RequiredArgumentMissing\":return-10;default:return 0}}u();c();m();p();d();l();var re=class{constructor(t,r){this.name=t;this.value=r;this.isRequired=!1}makeRequired(){return this.isRequired=!0,this}write(t){let{colors:{green:r}}=t.context;t.addMarginSymbol(r(this.isRequired?\"+\":\"?\")),t.write(r(this.name)),this.isRequired||t.write(r(\"?\")),t.write(r(\": \")),typeof this.value==\"string\"?t.write(r(this.value)):t.write(this.value)}};u();c();m();p();d();l();var Yt=class{constructor(){this.fields=[]}addField(t,r){return this.fields.push({write(n){let{green:i,dim:o}=n.context.colors;n.write(i(o(`${t}: ${r}`))).addMarginSymbol(i(o(\"+\")))}}),this}write(t){let{colors:{green:r}}=t.context;t.writeLine(r(\"{\")).withIndent(()=>{t.writeJoined(Je,this.fields).newLine()}).write(r(\"}\")).addMarginSymbol(r(\"+\"))}};function zt(e,t){switch(e.kind){case\"MutuallyExclusiveFields\":ia(e,t);break;case\"IncludeOnScalar\":oa(e,t);break;case\"EmptySelection\":sa(e,t);break;case\"UnknownSelectionField\":ua(e,t);break;case\"UnknownArgument\":ca(e,t);break;case\"UnknownInputField\":ma(e,t);break;case\"RequiredArgumentMissing\":pa(e,t);break;case\"InvalidArgumentType\":da(e,t);break;case\"InvalidArgumentValue\":fa(e,t);break;case\"ValueTooLarge\":ga(e,t);break;case\"SomeFieldsMissing\":ha(e,t);break;case\"TooManyFieldsGiven\":ya(e,t);break;case\"Union\":Bi(e,t);break;default:throw new Error(\"not implemented: \"+e.kind)}}function ia(e,t){let r=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();r&&(r.getField(e.firstField)?.markAsError(),r.getField(e.secondField)?.markAsError()),t.addErrorMessage(n=>`Please ${n.bold(\"either\")} use ${n.green(`\\`${e.firstField}\\``)} or ${n.green(`\\`${e.secondField}\\``)}, but ${n.red(\"not both\")} at the same time.`)}function oa(e,t){let[r,n]=Xt(e.selectionPath),i=e.outputType,o=t.arguments.getDeepSelectionParent(r)?.value;if(o&&(o.getField(n)?.markAsError(),i))for(let s of i.fields)s.isRelation&&o.addSuggestion(new re(s.name,\"true\"));t.addErrorMessage(s=>{let a=`Invalid scalar field ${s.red(`\\`${n}\\``)} for ${s.bold(\"include\")} statement`;return i?a+=` on model ${s.bold(i.name)}. ${ht(s)}`:a+=\".\",a+=`\nNote that ${s.bold(\"include\")} statements only accept relation fields.`,a})}function sa(e,t){let r=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(r){let n=r.getField(\"omit\")?.value.asObject();if(n){aa(e,t,n);return}}la(e,t)}function aa(e,t,r){r.removeAllFields();for(let n of e.outputType.fields)r.addSuggestion(new re(n.name,\"false\"));t.addErrorMessage(n=>`The ${n.red(\"omit\")} statement includes every field of the model ${n.bold(e.outputType.name)}. At least one field must be included in the result`)}function la(e,t){let r=e.outputType,n=t.arguments.getDeepSelectionParent(e.selectionPath)?.value,i=n?.isEmpty()??!1;n&&(n.removeAllFields(),Qi(n,r)),t.addErrorMessage(o=>i?`The ${o.red(\"`select`\")} statement for type ${o.bold(r.name)} must not be empty. ${ht(o)}`:`The ${o.red(\"`select`\")} statement for type ${o.bold(r.name)} needs ${o.bold(\"at least one truthy value\")}.`)}function ua(e,t){let[r,n]=Xt(e.selectionPath),i=t.arguments.getDeepSubSelectionValue(r)?.asObject(),o;if(i){let s=i.getFieldValue(\"select\")?.asObject(),a=i.getFieldValue(\"include\")?.asObject(),f=i.getFieldValue(\"omit\")?.asObject();s?.hasField(n)?(o=\"select\",s.getField(n)?.markAsError(),Qi(s,e.outputType)):a?.hasField(n)?(o=\"include\",a.getField(n)?.markAsError(),ba(a,e.outputType)):f?.hasField(n)&&(o=\"omit\",f.getField(n)?.markAsError(),wa(f,e.outputType))}t.addErrorMessage(s=>{let a=[`Unknown field ${s.red(`\\`${n}\\``)}`];return o&&a.push(`for ${s.bold(o)} statement`),a.push(`on model ${s.bold(`\\`${e.outputType.name}\\``)}.`),a.push(ht(s)),a.join(\" \")})}function ca(e,t){let r=e.argumentPath[0],n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&(n.getField(r)?.markAsError(),Ea(n,e.arguments)),t.addErrorMessage(i=>qi(i,r,e.arguments.map(o=>o.name)))}function ma(e,t){let[r,n]=Xt(e.argumentPath),i=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(i){i.getDeepField(e.argumentPath)?.markAsError();let o=i.getDeepFieldValue(r)?.asObject();o&&Ji(o,e.inputType)}t.addErrorMessage(o=>qi(o,n,e.inputType.fields.map(s=>s.name)))}function qi(e,t,r){let n=[`Unknown argument \\`${e.red(t)}\\`.`],i=Pa(t,r);return i&&n.push(`Did you mean \\`${e.green(i)}\\`?`),r.length>0&&n.push(ht(e)),n.join(\" \")}function pa(e,t){let r;t.addErrorMessage(f=>r?.value instanceof G&&r.value.text===\"null\"?`Argument \\`${f.green(o)}\\` must not be ${f.red(\"null\")}.`:`Argument \\`${f.green(o)}\\` is missing.`);let n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(!n)return;let[i,o]=Xt(e.argumentPath),s=new Yt,a=n.getDeepFieldValue(i)?.asObject();if(a)if(r=a.getField(o),r&&a.removeField(o),e.inputTypes.length===1&&e.inputTypes[0].kind===\"object\"){for(let f of e.inputTypes[0].fields)s.addField(f.name,f.typeNames.join(\" | \"));a.addSuggestion(new re(o,s).makeRequired())}else{let f=e.inputTypes.map(ji).join(\" | \");a.addSuggestion(new re(o,f).makeRequired())}}function ji(e){return e.kind===\"list\"?`${ji(e.elementType)}[]`:e.name}function da(e,t){let r=e.argument.name,n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&n.getDeepFieldValue(e.argumentPath)?.markAsError(),t.addErrorMessage(i=>{let o=Zt(\"or\",e.argument.typeNames.map(s=>i.green(s)));return`Argument \\`${i.bold(r)}\\`: Invalid value provided. Expected ${o}, provided ${i.red(e.inferredType)}.`})}function fa(e,t){let r=e.argument.name,n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();n&&n.getDeepFieldValue(e.argumentPath)?.markAsError(),t.addErrorMessage(i=>{let o=[`Invalid value for argument \\`${i.bold(r)}\\``];if(e.underlyingError&&o.push(`: ${e.underlyingError}`),o.push(\".\"),e.argument.typeNames.length>0){let s=Zt(\"or\",e.argument.typeNames.map(a=>i.green(a)));o.push(` Expected ${s}.`)}return o.join(\"\")})}function ga(e,t){let r=e.argument.name,n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject(),i;if(n){let s=n.getDeepField(e.argumentPath)?.value;s?.markAsError(),s instanceof G&&(i=s.text)}t.addErrorMessage(o=>{let s=[\"Unable to fit value\"];return i&&s.push(o.red(i)),s.push(`into a 64-bit signed integer for field \\`${o.bold(r)}\\``),s.join(\" \")})}function ha(e,t){let r=e.argumentPath[e.argumentPath.length-1],n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject();if(n){let i=n.getDeepFieldValue(e.argumentPath)?.asObject();i&&Ji(i,e.inputType)}t.addErrorMessage(i=>{let o=[`Argument \\`${i.bold(r)}\\` of type ${i.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1?e.constraints.requiredFields?o.push(`${i.green(\"at least one of\")} ${Zt(\"or\",e.constraints.requiredFields.map(s=>`\\`${i.bold(s)}\\``))} arguments.`):o.push(`${i.green(\"at least one\")} argument.`):o.push(`${i.green(`at least ${e.constraints.minFieldCount}`)} arguments.`),o.push(ht(i)),o.join(\" \")})}function ya(e,t){let r=e.argumentPath[e.argumentPath.length-1],n=t.arguments.getDeepSubSelectionValue(e.selectionPath)?.asObject(),i=[];if(n){let o=n.getDeepFieldValue(e.argumentPath)?.asObject();o&&(o.markAsError(),i=Object.keys(o.getFields()))}t.addErrorMessage(o=>{let s=[`Argument \\`${o.bold(r)}\\` of type ${o.bold(e.inputType.name)} needs`];return e.constraints.minFieldCount===1&&e.constraints.maxFieldCount==1?s.push(`${o.green(\"exactly one\")} argument,`):e.constraints.maxFieldCount==1?s.push(`${o.green(\"at most one\")} argument,`):s.push(`${o.green(`at most ${e.constraints.maxFieldCount}`)} arguments,`),s.push(`but you provided ${Zt(\"and\",i.map(a=>o.red(a)))}. Please choose`),e.constraints.maxFieldCount===1?s.push(\"one.\"):s.push(`${e.constraints.maxFieldCount}.`),s.join(\" \")})}function Qi(e,t){for(let r of t.fields)e.hasField(r.name)||e.addSuggestion(new re(r.name,\"true\"))}function ba(e,t){for(let r of t.fields)r.isRelation&&!e.hasField(r.name)&&e.addSuggestion(new re(r.name,\"true\"))}function wa(e,t){for(let r of t.fields)!e.hasField(r.name)&&!r.isRelation&&e.addSuggestion(new re(r.name,\"true\"))}function Ea(e,t){for(let r of t)e.hasField(r.name)||e.addSuggestion(new re(r.name,r.typeNames.join(\" | \")))}function Ji(e,t){if(t.kind===\"object\")for(let r of t.fields)e.hasField(r.name)||e.addSuggestion(new re(r.name,r.typeNames.join(\" | \")))}function Xt(e){let t=[...e],r=t.pop();if(!r)throw new Error(\"unexpected empty path\");return[t,r]}function ht({green:e,enabled:t}){return\"Available options are \"+(t?`listed in ${e(\"green\")}`:\"marked with ?\")+\".\"}function Zt(e,t){if(t.length===1)return t[0];let r=[...t],n=r.pop();return`${r.join(\", \")} ${e} ${n}`}var xa=3;function Pa(e,t){let r=1/0,n;for(let i of t){let o=(0,Vi.default)(e,i);o>xa||o<r&&(r=o,n=i)}return n}function er({args:e,errors:t,errorFormat:r,callsite:n,originalMethod:i,clientVersion:o}){let s=Vt(e);for(let T of t)zt(T,s);let a=r===\"pretty\"?zn:Ut,f=s.renderAllMessages(a),v=new Ve(0,{colors:a}).write(s).toString(),C=Ke({message:f,callsite:n,originalMethod:i,showColors:r===\"pretty\",callArguments:v});throw new W(C,{clientVersion:o})}var va={findUnique:\"findUnique\",findUniqueOrThrow:\"findUniqueOrThrow\",findFirst:\"findFirst\",findFirstOrThrow:\"findFirstOrThrow\",findMany:\"findMany\",count:\"aggregate\",create:\"createOne\",createMany:\"createMany\",createManyAndReturn:\"createManyAndReturn\",update:\"updateOne\",updateMany:\"updateMany\",upsert:\"upsertOne\",delete:\"deleteOne\",deleteMany:\"deleteMany\",executeRaw:\"executeRaw\",queryRaw:\"queryRaw\",aggregate:\"aggregate\",groupBy:\"groupBy\",runCommandRaw:\"runCommandRaw\",findRaw:\"findRaw\",aggregateRaw:\"aggregateRaw\"};function Wi({modelName:e,action:t,args:r,runtimeDataModel:n,extensions:i,callsite:o,clientMethod:s,errorFormat:a,clientVersion:f,previewFeatures:v}){let C=new $r({runtimeDataModel:n,modelName:e,action:t,rootArgs:r,callsite:o,extensions:i,selectionPath:[],argumentPath:[],originalMethod:s,errorFormat:a,clientVersion:f,previewFeatures:v});return{modelName:e,action:va[t],query:Vr(r,C)}}function Vr({select:e,include:t,...r}={},n){let i;return n.isPreviewFeatureOn(\"omitApi\")&&(i=r.omit,delete r.omit),{arguments:Ki(r,n),selection:Ca(e,t,i,n)}}function Ca(e,t,r,n){return e?(t?n.throwValidationError({kind:\"MutuallyExclusiveFields\",firstField:\"include\",secondField:\"select\",selectionPath:n.getSelectionPath()}):r&&n.isPreviewFeatureOn(\"omitApi\")&&n.throwValidationError({kind:\"MutuallyExclusiveFields\",firstField:\"omit\",secondField:\"select\",selectionPath:n.getSelectionPath()}),Sa(e,n)):Ta(n,t,r)}function Ta(e,t,r){let n={};return e.model&&!e.isRawAction()&&(n.$composites=!0,n.$scalars=!0),t&&Aa(n,t,e),r&&e.isPreviewFeatureOn(\"omitApi\")&&Ra(n,r,e),n}function Aa(e,t,r){for(let[n,i]of Object.entries(t)){let o=r.findField(n);o&&o?.kind!==\"object\"&&r.throwValidationError({kind:\"IncludeOnScalar\",selectionPath:r.getSelectionPath().concat(n),outputType:r.getOutputTypeDescription()}),i===!0?e[n]=!0:typeof i==\"object\"&&(e[n]=Vr(i,r.nestSelection(n)))}}function Ra(e,t,r){let n=r.getComputedFields(),i=Ai(t,n);for(let[o,s]of Object.entries(i)){let a=r.findField(o);n?.[o]&&!a||(e[o]=!s)}}function Sa(e,t){let r={},n=t.getComputedFields(),i=Ti(e,n);for(let[o,s]of Object.entries(i)){let a=t.findField(o);n?.[o]&&!a||(s===!0?r[o]=!0:typeof s==\"object\"&&(r[o]=Vr(s,t.nestSelection(o))))}return r}function Gi(e,t){if(e===null)return null;if(typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\")return e;if(typeof e==\"bigint\")return{$type:\"BigInt\",value:String(e)};if(qe(e)){if(Dt(e))return{$type:\"DateTime\",value:e.toISOString()};t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:t.getSelectionPath(),argumentPath:t.getArgumentPath(),argument:{name:t.getArgumentName(),typeNames:[\"Date\"]},underlyingError:\"Provided Date object is invalid\"})}if(Qe(e))return{$type:\"FieldRef\",value:{_ref:e.name,_container:e.modelName}};if(Array.isArray(e))return Oa(e,t);if(ArrayBuffer.isView(e))return{$type:\"Bytes\",value:y.from(e).toString(\"base64\")};if(ka(e))return e.values;if(je(e))return{$type:\"Decimal\",value:e.toFixed()};if(e instanceof be){if(e!==Lt.instances[e._getName()])throw new Error(\"Invalid ObjectEnumValue\");return{$type:\"Enum\",value:e._getName()}}if(La(e))return e.toJSON();if(typeof e==\"object\")return Ki(e,t);t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:t.getSelectionPath(),argumentPath:t.getArgumentPath(),argument:{name:t.getArgumentName(),typeNames:[]},underlyingError:`We could not serialize ${Object.prototype.toString.call(e)} value. Serialize the object to JSON or implement a \".toJSON()\" method on it`})}function Ki(e,t){if(e.$type)return{$type:\"Raw\",value:e};let r={};for(let n in e){let i=e[n];i!==void 0&&(r[n]=Gi(i,t.nestArgument(n)))}return r}function Oa(e,t){let r=[];for(let n=0;n<e.length;n++){let i=t.nestArgument(String(n)),o=e[n];o===void 0&&t.throwValidationError({kind:\"InvalidArgumentValue\",selectionPath:i.getSelectionPath(),argumentPath:i.getArgumentPath(),argument:{name:`${t.getArgumentName()}[${n}]`,typeNames:[]},underlyingError:\"Can not use `undefined` value within array. Use `null` or filter out `undefined` values\"}),r.push(Gi(o,i))}return r}function ka(e){return typeof e==\"object\"&&e!==null&&e.__prismaRawParameters__===!0}function La(e){return typeof e==\"object\"&&e!==null&&typeof e.toJSON==\"function\"}var $r=class e{constructor(t){this.params=t;this.params.modelName&&(this.model=this.params.runtimeDataModel.models[this.params.modelName])}throwValidationError(t){er({errors:[t],originalMethod:this.params.originalMethod,args:this.params.rootArgs??{},callsite:this.params.callsite,errorFormat:this.params.errorFormat,clientVersion:this.params.clientVersion})}getSelectionPath(){return this.params.selectionPath}getArgumentPath(){return this.params.argumentPath}getArgumentName(){return this.params.argumentPath[this.params.argumentPath.length-1]}getOutputTypeDescription(){if(!(!this.params.modelName||!this.model))return{name:this.params.modelName,fields:this.model.fields.map(t=>({name:t.name,typeName:\"boolean\",isRelation:t.kind===\"object\"}))}}isRawAction(){return[\"executeRaw\",\"queryRaw\",\"runCommandRaw\",\"findRaw\",\"aggregateRaw\"].includes(this.params.action)}isPreviewFeatureOn(t){return this.params.previewFeatures.includes(t)}getComputedFields(){if(this.params.modelName)return this.params.extensions.getAllComputedFields(this.params.modelName)}findField(t){return this.model?.fields.find(r=>r.name===t)}nestSelection(t){let r=this.findField(t),n=r?.kind===\"object\"?r.type:void 0;return new e({...this.params,modelName:n,selectionPath:this.params.selectionPath.concat(t)})}nestArgument(t){return new e({...this.params,argumentPath:this.params.argumentPath.concat(t)})}};u();c();m();p();d();l();var Hi=e=>({command:e});u();c();m();p();d();l();u();c();m();p();d();l();var zi=e=>e.strings.reduce((t,r,n)=>`${t}@P${n}${r}`);u();c();m();p();d();l();l();function yt(e){try{return Yi(e,\"fast\")}catch{return Yi(e,\"slow\")}}function Yi(e,t){return JSON.stringify(e.map(r=>Ma(r,t)))}function Ma(e,t){return typeof e==\"bigint\"?{prisma__type:\"bigint\",prisma__value:e.toString()}:qe(e)?{prisma__type:\"date\",prisma__value:e.toJSON()}:ue.isDecimal(e)?{prisma__type:\"decimal\",prisma__value:e.toJSON()}:y.isBuffer(e)?{prisma__type:\"bytes\",prisma__value:e.toString(\"base64\")}:Ia(e)||ArrayBuffer.isView(e)?{prisma__type:\"bytes\",prisma__value:y.from(e).toString(\"base64\")}:typeof e==\"object\"&&t===\"slow\"?Zi(e):e}function Ia(e){return e instanceof ArrayBuffer||e instanceof SharedArrayBuffer?!0:typeof e==\"object\"&&e!==null?e[Symbol.toStringTag]===\"ArrayBuffer\"||e[Symbol.toStringTag]===\"SharedArrayBuffer\":!1}function Zi(e){if(typeof e!=\"object\"||e===null)return e;if(typeof e.toJSON==\"function\")return e.toJSON();if(Array.isArray(e))return e.map(Xi);let t={};for(let r of Object.keys(e))t[r]=Xi(e[r]);return t}function Xi(e){return typeof e==\"bigint\"?e.toString():Zi(e)}var _a=/^(\\s*alter\\s)/i,eo=ee(\"prisma:client\");function qr(e,t,r,n){if(!(e!==\"postgresql\"&&e!==\"cockroachdb\")&&r.length>0&&_a.exec(t))throw new Error(`Running ALTER using ${n} is not supported\nUsing the example below you can still execute your query with Prisma, but please note that it is vulnerable to SQL injection attacks and requires you to take care of input sanitization.\n\nExample:\n  await prisma.$executeRawUnsafe(\\`ALTER USER prisma WITH PASSWORD '\\${password}'\\`)\n\nMore Information: https://pris.ly/d/execute-raw\n`)}var jr=({clientMethod:e,activeProvider:t})=>r=>{let n=\"\",i;if(Array.isArray(r)){let[o,...s]=r;n=o,i={values:yt(s||[]),__prismaRawParameters__:!0}}else switch(t){case\"sqlite\":case\"mysql\":{n=r.sql,i={values:yt(r.values),__prismaRawParameters__:!0};break}case\"cockroachdb\":case\"postgresql\":case\"postgres\":{n=r.text,i={values:yt(r.values),__prismaRawParameters__:!0};break}case\"sqlserver\":{n=zi(r),i={values:yt(r.values),__prismaRawParameters__:!0};break}default:throw new Error(`The ${t} provider does not support ${e}`)}return i?.values?eo(`prisma.${e}(${n}, ${i.values})`):eo(`prisma.${e}(${n})`),{query:n,parameters:i}},to={requestArgsToMiddlewareArgs(e){return[e.strings,...e.values]},middlewareArgsToRequestArgs(e){let[t,...r]=e;return new X(t,r)}},ro={requestArgsToMiddlewareArgs(e){return[e]},middlewareArgsToRequestArgs(e){return e[0]}};u();c();m();p();d();l();function Qr(e){return function(r){let n,i=(o=e)=>{try{return o===void 0||o?.kind===\"itx\"?n??=no(r(o)):no(r(o))}catch(s){return Promise.reject(s)}};return{then(o,s){return i().then(o,s)},catch(o){return i().catch(o)},finally(o){return i().finally(o)},requestTransaction(o){let s=i(o);return s.requestTransaction?s.requestTransaction(o):s},[Symbol.toStringTag]:\"PrismaPromise\"}}}function no(e){return typeof e.then==\"function\"?e:Promise.resolve(e)}u();c();m();p();d();l();var io={isEnabled(){return!1},getTraceParent(){return\"00-10-10-00\"},async createEngineSpan(){},getActiveContext(){},runInChildSpan(e,t){return t()}},Jr=class{isEnabled(){return this.getGlobalTracingHelper().isEnabled()}getTraceParent(t){return this.getGlobalTracingHelper().getTraceParent(t)}createEngineSpan(t){return this.getGlobalTracingHelper().createEngineSpan(t)}getActiveContext(){return this.getGlobalTracingHelper().getActiveContext()}runInChildSpan(t,r){return this.getGlobalTracingHelper().runInChildSpan(t,r)}getGlobalTracingHelper(){return globalThis.PRISMA_INSTRUMENTATION?.helper??io}};function oo(e){return e.includes(\"tracing\")?new Jr:io}u();c();m();p();d();l();function so(e,t=()=>{}){let r,n=new Promise(i=>r=i);return{then(i){return--e===0&&r(t()),i?.(n)}}}u();c();m();p();d();l();var Da=[\"$connect\",\"$disconnect\",\"$on\",\"$transaction\",\"$use\",\"$extends\"],ao=Da;u();c();m();p();d();l();function lo(e){return typeof e==\"string\"?e:e.reduce((t,r)=>{let n=typeof r==\"string\"?r:r.level;return n===\"query\"?t:t&&(r===\"info\"||t===\"info\")?\"info\":n},void 0)}u();c();m();p();d();l();var tr=class{constructor(){this._middlewares=[]}use(t){this._middlewares.push(t)}get(t){return this._middlewares[t]}has(t){return!!this._middlewares[t]}length(){return this._middlewares.length}};u();c();m();p();d();l();var co=_e(Bn());u();c();m();p();d();l();function rr(e){return typeof e.batchRequestIdx==\"number\"}u();c();m();p();d();l();l();function nr(e){return e===null?e:Array.isArray(e)?e.map(nr):typeof e==\"object\"?Fa(e)?Na(e):Ue(e,nr):e}function Fa(e){return e!==null&&typeof e==\"object\"&&typeof e.$type==\"string\"}function Na({$type:e,value:t}){switch(e){case\"BigInt\":return BigInt(t);case\"Bytes\":return y.from(t,\"base64\");case\"DateTime\":return new Date(t);case\"Decimal\":return new ue(t);case\"Json\":return JSON.parse(t);default:ke(t,\"Unknown tagged value\")}}u();c();m();p();d();l();function uo(e){if(e.action!==\"findUnique\"&&e.action!==\"findUniqueOrThrow\")return;let t=[];return e.modelName&&t.push(e.modelName),e.query.arguments&&t.push(Wr(e.query.arguments)),t.push(Wr(e.query.selection)),t.join(\"\")}function Wr(e){return`(${Object.keys(e).sort().map(r=>{let n=e[r];return typeof n==\"object\"&&n!==null?`(${r} ${Wr(n)})`:r}).join(\" \")})`}u();c();m();p();d();l();var Ua={aggregate:!1,aggregateRaw:!1,createMany:!0,createManyAndReturn:!0,createOne:!0,deleteMany:!0,deleteOne:!0,executeRaw:!0,findFirst:!1,findFirstOrThrow:!1,findMany:!1,findRaw:!1,findUnique:!1,findUniqueOrThrow:!1,groupBy:!1,queryRaw:!1,runCommandRaw:!0,updateMany:!0,updateOne:!0,upsertOne:!0};function Gr(e){return Ua[e]}u();c();m();p();d();l();var ir=class{constructor(t){this.options=t;this.tickActive=!1;this.batches={}}request(t){let r=this.options.batchBy(t);return r?(this.batches[r]||(this.batches[r]=[],this.tickActive||(this.tickActive=!0,g.nextTick(()=>{this.dispatchBatches(),this.tickActive=!1}))),new Promise((n,i)=>{this.batches[r].push({request:t,resolve:n,reject:i})})):this.options.singleLoader(t)}dispatchBatches(){for(let t in this.batches){let r=this.batches[t];delete this.batches[t],r.length===1?this.options.singleLoader(r[0].request).then(n=>{n instanceof Error?r[0].reject(n):r[0].resolve(n)}).catch(n=>{r[0].reject(n)}):(r.sort((n,i)=>this.options.batchOrder(n.request,i.request)),this.options.batchLoader(r.map(n=>n.request)).then(n=>{if(n instanceof Error)for(let i=0;i<r.length;i++)r[i].reject(n);else for(let i=0;i<r.length;i++){let o=n[i];o instanceof Error?r[i].reject(o):r[i].resolve(o)}}).catch(n=>{for(let i=0;i<r.length;i++)r[i].reject(n)}))}}get[Symbol.toStringTag](){return\"DataLoader\"}};var Ba=ee(\"prisma:client:request_handler\"),or=class{constructor(t,r){this.logEmitter=r,this.client=t,this.dataloader=new ir({batchLoader:Ei(async({requests:n,customDataProxyFetch:i})=>{let{transaction:o,otelParentCtx:s}=n[0],a=n.map(T=>T.protocolQuery),f=this.client._tracingHelper.getTraceParent(s),v=n.some(T=>Gr(T.protocolQuery.action));return(await this.client._engine.requestBatch(a,{traceparent:f,transaction:$a(o),containsWrite:v,customDataProxyFetch:i})).map((T,O)=>{if(T instanceof Error)return T;try{return this.mapQueryEngineResult(n[O],T)}catch(R){return R}})}),singleLoader:async n=>{let i=n.transaction?.kind===\"itx\"?mo(n.transaction):void 0,o=await this.client._engine.request(n.protocolQuery,{traceparent:this.client._tracingHelper.getTraceParent(),interactiveTransaction:i,isWrite:Gr(n.protocolQuery.action),customDataProxyFetch:n.customDataProxyFetch});return this.mapQueryEngineResult(n,o)},batchBy:n=>n.transaction?.id?`transaction-${n.transaction.id}`:uo(n.protocolQuery),batchOrder(n,i){return n.transaction?.kind===\"batch\"&&i.transaction?.kind===\"batch\"?n.transaction.index-i.transaction.index:0}})}async request(t){try{return await this.dataloader.request(t)}catch(r){let{clientMethod:n,callsite:i,transaction:o,args:s,modelName:a}=t;this.handleAndLogRequestError({error:r,clientMethod:n,callsite:i,transaction:o,args:s,modelName:a})}}mapQueryEngineResult({dataPath:t,unpacker:r},n){let i=n?.data,o=n?.elapsed,s=this.unpack(i,t,r);return g.env.PRISMA_CLIENT_GET_TIME?{data:s,elapsed:o}:s}handleAndLogRequestError(t){try{this.handleRequestError(t)}catch(r){throw this.logEmitter&&this.logEmitter.emit(\"error\",{message:r.message,target:t.clientMethod,timestamp:new Date}),r}}handleRequestError({error:t,clientMethod:r,callsite:n,transaction:i,args:o,modelName:s}){if(Ba(t),Va(t,i)||t instanceof he)throw t;if(t instanceof Q&&qa(t)){let f=po(t.meta);er({args:o,errors:[f],callsite:n,errorFormat:this.client._errorFormat,originalMethod:r,clientVersion:this.client._clientVersion})}let a=t.message;if(n&&(a=Ke({callsite:n,originalMethod:r,isPanic:t.isPanic,showColors:this.client._errorFormat===\"pretty\",message:a})),a=this.sanitizeMessage(a),t.code){let f=s?{modelName:s,...t.meta}:t.meta;throw new Q(a,{code:t.code,clientVersion:this.client._clientVersion,meta:f,batchRequestIdx:t.batchRequestIdx})}else{if(t.isPanic)throw new ye(a,this.client._clientVersion);if(t instanceof J)throw new J(a,{clientVersion:this.client._clientVersion,batchRequestIdx:t.batchRequestIdx});if(t instanceof I)throw new I(a,this.client._clientVersion);if(t instanceof ye)throw new ye(a,this.client._clientVersion)}throw t.clientVersion=this.client._clientVersion,t}sanitizeMessage(t){return this.client._errorFormat&&this.client._errorFormat!==\"pretty\"?(0,co.default)(t):t}unpack(t,r,n){if(!t||(t.data&&(t=t.data),!t))return t;let i=Object.values(t)[0],o=r.filter(a=>a!==\"select\"&&a!==\"include\"),s=nr(_r(i,o));return n?n(s):s}get[Symbol.toStringTag](){return\"RequestHandler\"}};function $a(e){if(e){if(e.kind===\"batch\")return{kind:\"batch\",options:{isolationLevel:e.isolationLevel}};if(e.kind===\"itx\")return{kind:\"itx\",options:mo(e)};ke(e,\"Unknown transaction kind\")}}function mo(e){return{id:e.id,payload:e.payload}}function Va(e,t){return rr(e)&&t?.kind===\"batch\"&&e.batchRequestIdx!==t.index}function qa(e){return e.code===\"P2009\"||e.code===\"P2012\"}function po(e){if(e.kind===\"Union\")return{kind:\"Union\",errors:e.errors.map(po)};if(Array.isArray(e.selectionPath)){let[,...t]=e.selectionPath;return{...e,selectionPath:t}}return e}u();c();m();p();d();l();var fo=\"5.15.0\";var go=fo;u();c();m();p();d();l();l();function ho(e){return e.map(t=>{let r={};for(let n of Object.keys(t))r[n]=yo(t[n]);return r})}function yo({prisma__type:e,prisma__value:t}){switch(e){case\"bigint\":return BigInt(t);case\"bytes\":return y.from(t,\"base64\");case\"decimal\":return new ue(t);case\"datetime\":case\"date\":return new Date(t);case\"time\":return new Date(`1970-01-01T${t}Z`);case\"array\":return t.map(yo);default:return t}}u();c();m();p();d();l();var xo=_e(Br());u();c();m();p();d();l();var N=class extends Error{constructor(t){super(t+`\nRead more at https://pris.ly/d/client-constructor`),this.name=\"PrismaClientConstructorValidationError\"}get[Symbol.toStringTag](){return\"PrismaClientConstructorValidationError\"}};K(N,\"PrismaClientConstructorValidationError\");var bo=[\"datasources\",\"datasourceUrl\",\"errorFormat\",\"adapter\",\"log\",\"transactionOptions\",\"__internal\"],wo=[\"pretty\",\"colorless\",\"minimal\"],Eo=[\"info\",\"query\",\"warn\",\"error\"],Qa={datasources:(e,{datasourceNames:t})=>{if(e){if(typeof e!=\"object\"||Array.isArray(e))throw new N(`Invalid value ${JSON.stringify(e)} for \"datasources\" provided to PrismaClient constructor`);for(let[r,n]of Object.entries(e)){if(!t.includes(r)){let i=He(r,t)||` Available datasources: ${t.join(\", \")}`;throw new N(`Unknown datasource ${r} provided to PrismaClient constructor.${i}`)}if(typeof n!=\"object\"||Array.isArray(n))throw new N(`Invalid value ${JSON.stringify(e)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`);if(n&&typeof n==\"object\")for(let[i,o]of Object.entries(n)){if(i!==\"url\")throw new N(`Invalid value ${JSON.stringify(e)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`);if(typeof o!=\"string\")throw new N(`Invalid value ${JSON.stringify(o)} for datasource \"${r}\" provided to PrismaClient constructor.\nIt should have this form: { url: \"CONNECTION_STRING\" }`)}}}},adapter:(e,t)=>{if(e===null)return;if(e===void 0)throw new N('\"adapter\" property must not be undefined, use null to conditionally disable driver adapters.');if(!Ht(t).includes(\"driverAdapters\"))throw new N('\"adapter\" property can only be provided to PrismaClient constructor when \"driverAdapters\" preview feature is enabled.');if(et()===\"binary\")throw new N('Cannot use a driver adapter with the \"binary\" Query Engine. Please use the \"library\" Query Engine.')},datasourceUrl:e=>{if(typeof e<\"u\"&&typeof e!=\"string\")throw new N(`Invalid value ${JSON.stringify(e)} for \"datasourceUrl\" provided to PrismaClient constructor.\nExpected string or undefined.`)},errorFormat:e=>{if(e){if(typeof e!=\"string\")throw new N(`Invalid value ${JSON.stringify(e)} for \"errorFormat\" provided to PrismaClient constructor.`);if(!wo.includes(e)){let t=He(e,wo);throw new N(`Invalid errorFormat ${e} provided to PrismaClient constructor.${t}`)}}},log:e=>{if(!e)return;if(!Array.isArray(e))throw new N(`Invalid value ${JSON.stringify(e)} for \"log\" provided to PrismaClient constructor.`);function t(r){if(typeof r==\"string\"&&!Eo.includes(r)){let n=He(r,Eo);throw new N(`Invalid log level \"${r}\" provided to PrismaClient constructor.${n}`)}}for(let r of e){t(r);let n={level:t,emit:i=>{let o=[\"stdout\",\"event\"];if(!o.includes(i)){let s=He(i,o);throw new N(`Invalid value ${JSON.stringify(i)} for \"emit\" in logLevel provided to PrismaClient constructor.${s}`)}}};if(r&&typeof r==\"object\")for(let[i,o]of Object.entries(r))if(n[i])n[i](o);else throw new N(`Invalid property ${i} for \"log\" provided to PrismaClient constructor`)}},transactionOptions:e=>{if(!e)return;let t=e.maxWait;if(t!=null&&t<=0)throw new N(`Invalid value ${t} for maxWait in \"transactionOptions\" provided to PrismaClient constructor. maxWait needs to be greater than 0`);let r=e.timeout;if(r!=null&&r<=0)throw new N(`Invalid value ${r} for timeout in \"transactionOptions\" provided to PrismaClient constructor. timeout needs to be greater than 0`)},__internal:e=>{if(!e)return;let t=[\"debug\",\"engine\",\"configOverride\"];if(typeof e!=\"object\")throw new N(`Invalid value ${JSON.stringify(e)} for \"__internal\" to PrismaClient constructor`);for(let[r]of Object.entries(e))if(!t.includes(r)){let n=He(r,t);throw new N(`Invalid property ${JSON.stringify(r)} for \"__internal\" provided to PrismaClient constructor.${n}`)}}};function Po(e,t){for(let[r,n]of Object.entries(e)){if(!bo.includes(r)){let i=He(r,bo);throw new N(`Unknown property ${r} provided to PrismaClient constructor.${i}`)}Qa[r](n,t)}if(e.datasourceUrl&&e.datasources)throw new N('Can not use \"datasourceUrl\" and \"datasources\" options at the same time. Pick one of them')}function He(e,t){if(t.length===0||typeof e!=\"string\")return\"\";let r=Ja(e,t);return r?` Did you mean \"${r}\"?`:\"\"}function Ja(e,t){if(t.length===0)return null;let r=t.map(i=>({value:i,distance:(0,xo.default)(e,i)}));r.sort((i,o)=>i.distance<o.distance?-1:1);let n=r[0];return n.distance<3?n.value:null}u();c();m();p();d();l();function vo(e){return e.length===0?Promise.resolve([]):new Promise((t,r)=>{let n=new Array(e.length),i=null,o=!1,s=0,a=()=>{o||(s++,s===e.length&&(o=!0,i?r(i):t(n)))},f=v=>{o||(o=!0,r(v))};for(let v=0;v<e.length;v++)e[v].then(C=>{n[v]=C,a()},C=>{if(!rr(C)){f(C);return}C.batchRequestIdx===v?f(C):(i||(i=C),a())})})}var ve=ee(\"prisma:client\");typeof globalThis==\"object\"&&(globalThis.NODE_CLIENT=!0);var Wa={requestArgsToMiddlewareArgs:e=>e,middlewareArgsToRequestArgs:e=>e},Ga=Symbol.for(\"prisma.client.transaction.id\"),Ka={id:0,nextId(){return++this.id}};function Ao(e){class t{constructor(n){this._originalClient=this;this._middlewares=new tr;this._createPrismaPromise=Qr();this.$extends=pi;e=n?.__internal?.configOverride?.(e)??e,Oi(e),n&&Po(n,e);let i=n?.adapter?Or(n.adapter):void 0,o=new St().on(\"error\",()=>{});this._extensions=Wt.empty(),this._previewFeatures=Ht(e),this._clientVersion=e.clientVersion??go,this._activeProvider=e.activeProvider,this._tracingHelper=oo(this._previewFeatures);let s={rootEnvPath:e.relativeEnvPaths.rootEnvPath&&Ze.resolve(e.dirname,e.relativeEnvPaths.rootEnvPath),schemaEnvPath:e.relativeEnvPaths.schemaEnvPath&&Ze.resolve(e.dirname,e.relativeEnvPaths.schemaEnvPath)},a=e.injectableEdgeEnv?.();try{let f=n??{},v=f.__internal??{},C=v.debug===!0;C&&ee.enable(\"prisma:client\");let T=Ze.resolve(e.dirname,e.relativePath);un.existsSync(T)||(T=e.dirname),ve(\"dirname\",e.dirname),ve(\"relativePath\",e.relativePath),ve(\"cwd\",T);let O=v.engine||{};if(f.errorFormat?this._errorFormat=f.errorFormat:g.env.NODE_ENV===\"production\"?this._errorFormat=\"minimal\":g.env.NO_COLOR?this._errorFormat=\"colorless\":this._errorFormat=\"colorless\",this._runtimeDataModel=e.runtimeDataModel,this._engineConfig={cwd:T,dirname:e.dirname,enableDebugLogs:C,allowTriggerPanic:O.allowTriggerPanic,datamodelPath:Ze.join(e.dirname,e.filename??\"schema.prisma\"),prismaPath:O.binaryPath??void 0,engineEndpoint:O.endpoint,generator:e.generator,showColors:this._errorFormat===\"pretty\",logLevel:f.log&&lo(f.log),logQueries:f.log&&!!(typeof f.log==\"string\"?f.log===\"query\":f.log.find(R=>typeof R==\"string\"?R===\"query\":R.level===\"query\")),env:a?.parsed??{},flags:[],engineWasm:e.engineWasm,clientVersion:e.clientVersion,engineVersion:e.engineVersion,previewFeatures:this._previewFeatures,activeProvider:e.activeProvider,inlineSchema:e.inlineSchema,overrideDatasources:ki(f,e.datasourceNames),inlineDatasources:e.inlineDatasources,inlineSchemaHash:e.inlineSchemaHash,tracingHelper:this._tracingHelper,transactionOptions:{maxWait:f.transactionOptions?.maxWait??2e3,timeout:f.transactionOptions?.timeout??5e3,isolationLevel:f.transactionOptions?.isolationLevel},logEmitter:o,isBundled:e.isBundled,adapter:i},this._accelerateEngineConfig={...this._engineConfig,accelerateUtils:{resolveDatasourceUrl:Gt,getBatchRequestPayload:_t,prismaGraphQLToJSError:qt,PrismaClientUnknownRequestError:J,PrismaClientInitializationError:I,PrismaClientKnownRequestError:Q,debug:ee(\"prisma:client:accelerateEngine\"),engineVersion:To.version,clientVersion:e.clientVersion}},ve(\"clientVersion\",e.clientVersion),this._engine=Di(e,this._engineConfig),this._requestHandler=new or(this,o),f.log)for(let R of f.log){let L=typeof R==\"string\"?R:R.emit===\"stdout\"?R.level:null;L&&this.$on(L,S=>{rt.log(`${rt.tags[L]??\"\"}`,S.message||S.query)})}this._metrics=new Be(this._engine)}catch(f){throw f.clientVersion=this._clientVersion,f}return this._appliedParent=pt(this)}get[Symbol.toStringTag](){return\"PrismaClient\"}$use(n){this._middlewares.use(n)}$on(n,i){n===\"beforeExit\"?this._engine.onBeforeExit(i):n&&this._engineConfig.logEmitter.on(n,i)}$connect(){try{return this._engine.start()}catch(n){throw n.clientVersion=this._clientVersion,n}}async $disconnect(){try{await this._engine.stop()}catch(n){throw n.clientVersion=this._clientVersion,n}finally{Sn()}}$executeRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:\"executeRaw\",args:o,transaction:n,clientMethod:i,argsMapper:jr({clientMethod:i,activeProvider:a}),callsite:xe(this._errorFormat),dataPath:[],middlewareArgsMapper:s})}$executeRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0){let[s,a]=Co(n,i);return qr(this._activeProvider,s.text,s.values,Array.isArray(n)?\"prisma.$executeRaw`<SQL>`\":\"prisma.$executeRaw(sql`<SQL>`)\"),this.$executeRawInternal(o,\"$executeRaw\",s,a)}throw new W(\"`$executeRaw` is a tag function, please use it like the following:\\n```\\nconst result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`\\n```\\n\\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#executeraw\\n\",{clientVersion:this._clientVersion})})}$executeRawUnsafe(n,...i){return this._createPrismaPromise(o=>(qr(this._activeProvider,n,i,\"prisma.$executeRawUnsafe(<SQL>, [...values])\"),this.$executeRawInternal(o,\"$executeRawUnsafe\",[n,...i])))}$runCommandRaw(n){if(e.activeProvider!==\"mongodb\")throw new W(`The ${e.activeProvider} provider does not support $runCommandRaw. Use the mongodb provider.`,{clientVersion:this._clientVersion});return this._createPrismaPromise(i=>this._request({args:n,clientMethod:\"$runCommandRaw\",dataPath:[],action:\"runCommandRaw\",argsMapper:Hi,callsite:xe(this._errorFormat),transaction:i}))}async $queryRawInternal(n,i,o,s){let a=this._activeProvider;return this._request({action:\"queryRaw\",args:o,transaction:n,clientMethod:i,argsMapper:jr({clientMethod:i,activeProvider:a}),callsite:xe(this._errorFormat),dataPath:[],middlewareArgsMapper:s}).then(ho)}$queryRaw(n,...i){return this._createPrismaPromise(o=>{if(n.raw!==void 0||n.sql!==void 0)return this.$queryRawInternal(o,\"$queryRaw\",...Co(n,i));throw new W(\"`$queryRaw` is a tag function, please use it like the following:\\n```\\nconst result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`\\n```\\n\\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#queryraw\\n\",{clientVersion:this._clientVersion})})}$queryRawUnsafe(n,...i){return this._createPrismaPromise(o=>this.$queryRawInternal(o,\"$queryRawUnsafe\",[n,...i]))}_transactionWithArray({promises:n,options:i}){let o=Ka.nextId(),s=so(n.length),a=n.map((f,v)=>{if(f?.[Symbol.toStringTag]!==\"PrismaPromise\")throw new Error(\"All elements of the array need to be Prisma Client promises. Hint: Please make sure you are not awaiting the Prisma client calls you intended to pass in the $transaction function.\");let C=i?.isolationLevel??this._engineConfig.transactionOptions.isolationLevel,T={kind:\"batch\",id:o,index:v,isolationLevel:C,lock:s};return f.requestTransaction?.(T)??f});return vo(a)}async _transactionWithCallback({callback:n,options:i}){let o={traceparent:this._tracingHelper.getTraceParent()},s={maxWait:i?.maxWait??this._engineConfig.transactionOptions.maxWait,timeout:i?.timeout??this._engineConfig.transactionOptions.timeout,isolationLevel:i?.isolationLevel??this._engineConfig.transactionOptions.isolationLevel},a=await this._engine.transaction(\"start\",o,s),f;try{let v={kind:\"itx\",...a};f=await n(this._createItxClient(v)),await this._engine.transaction(\"commit\",o,a)}catch(v){throw await this._engine.transaction(\"rollback\",o,a).catch(()=>{}),v}return f}_createItxClient(n){return pt(me(mi(this),[H(\"_appliedParent\",()=>this._appliedParent._createItxClient(n)),H(\"_createPrismaPromise\",()=>Qr(n)),H(Ga,()=>n.id),$e(ao)]))}$transaction(n,i){let o;typeof n==\"function\"?this._engineConfig.adapter?.adapterName===\"@prisma/adapter-d1\"?o=()=>{throw new Error(\"Cloudflare D1 does not support interactive transactions. We recommend you to refactor your queries with that limitation in mind, and use batch transactions with `prisma.$transactions([])` where applicable.\")}:o=()=>this._transactionWithCallback({callback:n,options:i}):o=()=>this._transactionWithArray({promises:n,options:i});let s={name:\"transaction\",attributes:{method:\"$transaction\"}};return this._tracingHelper.runInChildSpan(s,o)}_request(n){n.otelParentCtx=this._tracingHelper.getActiveContext();let i=n.middlewareArgsMapper??Wa,o={args:i.requestArgsToMiddlewareArgs(n.args),dataPath:n.dataPath,runInTransaction:!!n.transaction,action:n.action,model:n.model},s={middleware:{name:\"middleware\",middleware:!0,attributes:{method:\"$use\"},active:!1},operation:{name:\"operation\",attributes:{method:o.action,model:o.model,name:o.model?`${o.model}.${o.action}`:o.action}}},a=-1,f=async v=>{let C=this._middlewares.get(++a);if(C)return this._tracingHelper.runInChildSpan(s.middleware,M=>C(v,ne=>(M?.end(),f(ne))));let{runInTransaction:T,args:O,...R}=v,L={...n,...R};O&&(L.args=i.middlewareArgsToRequestArgs(O)),n.transaction!==void 0&&T===!1&&delete L.transaction;let S=await wi(this,L);return L.model?gi({result:S,modelName:L.model,args:L.args,extensions:this._extensions,runtimeDataModel:this._runtimeDataModel}):S};return this._tracingHelper.runInChildSpan(s.operation,()=>f(o))}async _executeRequest({args:n,clientMethod:i,dataPath:o,callsite:s,action:a,model:f,argsMapper:v,transaction:C,unpacker:T,otelParentCtx:O,customDataProxyFetch:R}){try{n=v?v(n):n;let L={name:\"serialize\"},S=this._tracingHelper.runInChildSpan(L,()=>Wi({modelName:f,runtimeDataModel:this._runtimeDataModel,action:a,args:n,clientMethod:i,callsite:s,extensions:this._extensions,errorFormat:this._errorFormat,clientVersion:this._clientVersion,previewFeatures:this._previewFeatures}));return ee.enabled(\"prisma:client\")&&(ve(\"Prisma Client call:\"),ve(`prisma.${i}(${ei(n)})`),ve(\"Generated request:\"),ve(JSON.stringify(S,null,2)+`\n`)),C?.kind===\"batch\"&&await C.lock,this._requestHandler.request({protocolQuery:S,modelName:f,action:a,clientMethod:i,dataPath:o,callsite:s,args:n,extensions:this._extensions,transaction:C,unpacker:T,otelParentCtx:O,otelChildCtx:this._tracingHelper.getActiveContext(),customDataProxyFetch:R})}catch(L){throw L.clientVersion=this._clientVersion,L}}get $metrics(){if(!this._hasPreviewFlag(\"metrics\"))throw new W(\"`metrics` preview feature must be enabled in order to access metrics API\",{clientVersion:this._clientVersion});return this._metrics}_hasPreviewFlag(n){return!!this._engineConfig.previewFeatures?.includes(n)}$applyPendingMigrations(){return this._engine.applyPendingMigrations()}}return t}function Co(e,t){return Ha(e)?[new X(e,t),to]:[e,ro]}function Ha(e){return Array.isArray(e)&&Array.isArray(e.raw)}u();c();m();p();d();l();var za=new Set([\"toJSON\",\"$$typeof\",\"asymmetricMatch\",Symbol.iterator,Symbol.toStringTag,Symbol.isConcatSpreadable,Symbol.toPrimitive]);function Ro(e){return new Proxy(e,{get(t,r){if(r in t)return t[r];if(!za.has(r))throw new TypeError(`Invalid enum value: ${String(r)}`)}})}u();c();m();p();d();l();l();0&&(module.exports={Debug,Decimal,Extensions,MetricsClient,NotFoundError,PrismaClientInitializationError,PrismaClientKnownRequestError,PrismaClientRustPanicError,PrismaClientUnknownRequestError,PrismaClientValidationError,Public,Sql,defineDmmfProperty,empty,getPrismaClient,getRuntime,join,makeStrictEnum,objectEnumValues,raw,sqltag,warnEnvConflicts,warnOnce});\n//# sourceMappingURL=wasm.js.map\n"
  },
  {
    "path": "server/src/common/prisma-client/schema.prisma",
    "content": "model GenTable {\n  tableId        Int              @id @default(autoincrement()) @map(\"table_id\") @db.UnsignedInt\n  tableName      String?          @default(\"\") @map(\"table_name\") @db.VarChar(200)\n  tableComment   String?          @default(\"\") @map(\"table_comment\") @db.VarChar(500)\n  subTableName   String?          @map(\"sub_table_name\") @db.VarChar(64)\n  subTableFkName String?          @map(\"sub_table_fk_name\") @db.VarChar(64)\n  className      String?          @default(\"\") @map(\"class_name\") @db.VarChar(100)\n  tplCategory    String?          @default(\"crud\") @map(\"tpl_category\") @db.VarChar(200)\n  tplWebType     String?          @default(\"\") @map(\"tpl_web_type\") @db.VarChar(30)\n  packageName    String?          @map(\"package_name\") @db.VarChar(100)\n  moduleName     String?          @map(\"module_name\") @db.VarChar(30)\n  businessName   String?          @map(\"business_name\") @db.VarChar(30)\n  functionName   String?          @map(\"function_name\") @db.VarChar(50)\n  functionAuthor String?          @map(\"function_author\") @db.VarChar(50)\n  genType        String?          @default(\"0\") @map(\"gen_type\") @db.Char(1)\n  genPath        String?          @default(\"/\") @map(\"gen_path\") @db.VarChar(200)\n  options        String?          @map(\"options\") @db.VarChar(1000)\n  createBy       String?          @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime     String?          @map(\"create_time\") @db.VarChar(25)\n  updateBy       String?          @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime     String?          @map(\"update_time\") @db.VarChar(25)\n  remark         String?          @db.VarChar(500)\n  tableColumns   GenTableColumn[]\n\n  @@map(\"gen_table\")\n}\n\nmodel GenTableColumn {\n  columnId      Int       @id @default(autoincrement()) @map(\"column_id\") @db.UnsignedInt\n  tableId       Int?      @map(\"table_id\") @db.UnsignedInt\n  columnName    String?   @map(\"column_name\") @db.VarChar(200)\n  columnComment String?   @map(\"column_comment\") @db.VarChar(500)\n  columnType    String?   @map(\"column_type\") @db.VarChar(100)\n  javaType      String?   @map(\"java_type\") @db.VarChar(500)\n  javaField     String?   @map(\"java_field\") @db.VarChar(200)\n  isPk          String?   @map(\"is_pk\") @db.Char(1)\n  isIncrement   String?   @map(\"is_increment\") @db.Char(1)\n  isRequired    String?   @map(\"is_required\") @db.Char(1)\n  isInsert      String?   @map(\"is_insert\") @db.Char(1)\n  isEdit        String?   @map(\"is_edit\") @db.Char(1)\n  isList        String?   @map(\"is_list\") @db.Char(1)\n  isQuery       String?   @map(\"is_query\") @db.Char(1)\n  queryType     String?   @default(\"EQ\") @map(\"query_type\") @db.VarChar(200)\n  htmlType      String?   @map(\"html_type\") @db.VarChar(200)\n  dictType      String?   @default(\"\") @map(\"dict_type\") @db.VarChar(200)\n  sort          Int?      @map(\"sort\")\n  createBy      String?   @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime    String?   @map(\"create_time\") @db.VarChar(25)\n  updateBy      String?   @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime    String?   @map(\"update_time\") @db.VarChar(25)\n  table         GenTable? @relation(fields: [tableId], references: [tableId])\n\n  @@index([tableId])\n  @@map(\"gen_table_column\")\n}\n\nmodel SysConfig {\n  configId    Int     @id @default(autoincrement()) @map(\"config_id\")\n  configName  String? @default(\"\") @map(\"config_name\") @db.VarChar(100)\n  configKey   String? @default(\"\") @map(\"config_key\") @db.VarChar(100)\n  configValue String? @default(\"\") @map(\"config_value\") @db.VarChar(500)\n  configType  String? @default(\"N\") @map(\"config_type\") @db.Char(1)\n  createBy    String? @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime  String? @map(\"create_time\") @db.VarChar(25)\n  updateBy    String? @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime  String? @map(\"update_time\") @db.VarChar(25)\n  remark      String? @map(\"remark\") @db.VarChar(500)\n\n  @@map(\"sys_config\")\n}\n\nmodel SysDept {\n  deptId     Int           @id @default(autoincrement()) @map(\"dept_id\") @db.UnsignedInt\n  parentId   Int?          @default(0) @map(\"parent_id\") @db.UnsignedInt\n  ancestors  String?       @default(\"\") @map(\"ancestors\") @db.VarChar(50)\n  deptName   String?       @default(\"\") @map(\"dept_name\") @db.VarChar(30)\n  orderNum   Int?          @default(0) @map(\"order_num\")\n  leader     String?       @map(\"leader\") @db.VarChar(20)\n  phone      String?       @map(\"phone\") @db.VarChar(11)\n  email      String?       @map(\"email\") @db.VarChar(50)\n  status     String?       @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy   String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy   String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime String?       @map(\"update_time\") @db.VarChar(25)\n  users      SysUser[]\n  roles      SysRoleDept[]\n\n  @@map(\"sys_dept\")\n}\n\nmodel SysDictData {\n  dictCode    Int          @id @default(autoincrement()) @map(\"dict_code\") @db.UnsignedInt\n  dictSort    Int?         @default(0) @map(\"dict_sort\")\n  dictLabel   String?      @default(\"\") @map(\"dict_label\") @db.VarChar(100)\n  dictValue   String?      @default(\"\") @map(\"dict_value\") @db.VarChar(100)\n  dictType    String?      @default(\"\") @map(\"dict_type\") @db.VarChar(100)\n  cssClass    String?      @map(\"css_class\") @db.VarChar(100)\n  listClass   String?      @map(\"list_class\") @db.VarChar(100)\n  isDefault   String?      @default(\"N\") @map(\"is_default\") @db.Char(1)\n  status      String?      @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy    String?      @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime  String?      @map(\"create_time\") @db.VarChar(25)\n  updateBy    String?      @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime  String?      @map(\"update_time\") @db.VarChar(25)\n  remark      String?      @map(\"remark\") @db.VarChar(500)\n  sysDictType SysDictType? @relation(fields: [dictType], references: [dictType])\n\n  @@index([dictType])\n  @@map(\"sys_dict_data\")\n}\n\nmodel SysDictType {\n  dictId     Int           @id @default(autoincrement()) @map(\"dict_id\") @db.UnsignedInt\n  dictName   String?       @default(\"\") @map(\"dict_name\") @db.VarChar(100)\n  dictType   String?       @unique(map: \"dict_type\") @default(\"\") @map(\"dict_type\") @db.VarChar(100)\n  status     String?       @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy   String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy   String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime String?       @map(\"update_time\") @db.VarChar(25)\n  remark     String?       @map(\"remark\") @db.VarChar(500)\n  dictDatas  SysDictData[]\n\n  @@map(\"sys_dict_type\")\n}\n\nmodel SysLogininfor {\n  infoId        Int     @id @default(autoincrement()) @map(\"info_id\") @db.UnsignedInt\n  userName      String? @default(\"\") @map(\"user_name\") @db.VarChar(50)\n  ipaddr        String? @default(\"\") @map(\"ipaddr\") @db.VarChar(128)\n  loginLocation String? @default(\"\") @map(\"login_location\") @db.VarChar(255)\n  browser       String? @default(\"\") @map(\"browser\") @db.VarChar(50)\n  os            String? @default(\"\") @map(\"os\") @db.VarChar(50)\n  status        String? @default(\"1\") @map(\"status\") @db.Char(1)\n  msg           String? @default(\"\") @map(\"msg\") @db.VarChar(255)\n  loginTime     String? @map(\"login_time\") @db.VarChar(25)\n\n  @@index([loginTime], map: \"idx_sys_logininfor_lt\")\n  @@index([status], map: \"idx_sys_logininfor_s\")\n  @@map(\"sys_logininfor\")\n}\n\nmodel SysMenu {\n  menuId     Int           @id @default(autoincrement()) @map(\"menu_id\") @db.UnsignedInt\n  menuName   String        @map(\"menu_name\") @db.VarChar(50)\n  parentId   Int?          @default(0) @map(\"parent_id\") @db.UnsignedInt\n  orderNum   Int?          @default(0) @map(\"order_num\")\n  path       String?       @default(\"\") @map(\"path\") @db.VarChar(200)\n  component  String?       @map(\"component\") @db.VarChar(255)\n  query      String?       @map(\"query\") @db.VarChar(255)\n  isFrame    Int?          @default(0) @map(\"is_frame\")\n  isCache    Int?          @default(1) @map(\"is_cache\")\n  menuType   String?       @default(\"\") @map(\"menu_type\") @db.Char(1)\n  visible    String?       @default(\"1\") @map(\"visible\") @db.Char(1)\n  status     String?       @default(\"1\") @map(\"status\") @db.Char(1)\n  perms      String?       @map(\"perms\") @db.VarChar(100)\n  icon       String?       @default(\"#\") @map(\"icon\") @db.VarChar(100)\n  createBy   String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy   String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime String?       @map(\"update_time\") @db.VarChar(25)\n  remark     String?       @default(\"\") @map(\"remark\") @db.VarChar(500)\n  roles      SysRoleMenu[]\n\n  @@map(\"sys_menu\")\n}\n\nmodel SysNotice {\n  noticeId      Int     @id @default(autoincrement()) @map(\"notice_id\")\n  noticeTitle   String  @map(\"notice_title\") @db.VarChar(50)\n  noticeType    String  @map(\"notice_type\") @db.Char(1)\n  noticeContent String? @map(\"notice_content\") @db.MediumText\n  status        String? @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy      String? @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime    String? @map(\"create_time\") @db.VarChar(25)\n  updateBy      String? @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime    String? @map(\"update_time\") @db.VarChar(25)\n  remark        String? @map(\"remark\") @db.VarChar(255)\n\n  @@map(\"sys_notice\")\n}\n\nmodel SysPost {\n  postId     Int           @id @default(autoincrement()) @map(\"post_id\") @db.UnsignedInt\n  postCode   String        @map(\"post_code\") @db.VarChar(64)\n  postName   String        @map(\"post_name\") @db.VarChar(50)\n  postSort   Int           @map(\"post_sort\")\n  status     String        @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy   String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy   String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime String?       @map(\"update_time\") @db.VarChar(25)\n  remark     String?       @map(\"remark\") @db.VarChar(500)\n  users      SysUserPost[]\n\n  @@map(\"sys_post\")\n}\n\nmodel SysUserPost {\n  userId Int     @map(\"user_id\") @db.UnsignedInt\n  postId Int     @map(\"post_id\") @db.UnsignedInt\n  user   SysUser @relation(fields: [userId], references: [userId])\n  post   SysPost @relation(fields: [postId], references: [postId])\n\n  @@id([userId, postId])\n  @@index([postId])\n  @@map(\"sys_user_post\")\n}\n\nmodel SysRoleDept {\n  roleId Int     @map(\"role_id\") @db.UnsignedInt\n  deptId Int     @map(\"dept_id\") @db.UnsignedInt\n  role   SysRole @relation(fields: [roleId], references: [roleId])\n  dept   SysDept @relation(fields: [deptId], references: [deptId])\n\n  @@id([roleId, deptId])\n  @@index([deptId])\n  @@map(\"sys_role_dept\")\n}\n\nmodel SysRoleMenu {\n  roleId Int     @map(\"role_id\") @db.UnsignedInt\n  menuId Int     @map(\"menu_id\") @db.UnsignedInt\n  menu   SysMenu @relation(fields: [menuId], references: [menuId])\n  role   SysRole @relation(fields: [roleId], references: [roleId])\n\n  @@id([roleId, menuId])\n  @@index([menuId])\n  @@map(\"sys_role_menu\")\n}\n\nmodel SysUser {\n  userId      Int           @id @default(autoincrement()) @map(\"user_id\") @db.UnsignedInt\n  deptId      Int?          @map(\"dept_id\") @db.UnsignedInt\n  userName    String        @map(\"user_name\") @db.VarChar(30)\n  nickName    String        @map(\"nick_name\") @db.VarChar(30)\n  userType    String?       @default(\"00\") @map(\"user_type\") @db.VarChar(2)\n  email       String?       @default(\"\") @map(\"email\") @db.VarChar(50)\n  phonenumber String?       @default(\"\") @map(\"phonenumber\") @db.VarChar(11)\n  sex         String?       @default(\"0\") @map(\"sex\") @db.Char(1)\n  avatar      String?       @default(\"\") @map(\"avatar\") @db.VarChar(100)\n  password    String?       @default(\"\") @map(\"password\") @db.VarChar(100)\n  status      String?       @default(\"1\") @map(\"status\") @db.Char(1)\n  loginIp     String?       @default(\"\") @map(\"login_ip\") @db.VarChar(128)\n  loginDate   String?       @map(\"login_date\") @db.VarChar(25)\n  createBy    String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime  String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy    String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime  String?       @map(\"update_time\") @db.VarChar(25)\n  remark      String?       @map(\"remark\") @db.VarChar(500)\n  dept        SysDept?      @relation(fields: [deptId], references: [deptId])\n  roles       SysUserRole[]\n  posts       SysUserPost[]\n\n  @@index([deptId])\n  @@map(\"sys_user\")\n}\n\nmodel SysRole {\n  roleId            Int           @id @default(autoincrement()) @map(\"role_id\") @db.UnsignedInt\n  roleName          String        @map(\"role_name\") @db.VarChar(30)\n  roleKey           String        @map(\"role_key\") @db.VarChar(100)\n  roleSort          Int           @map(\"role_sort\")\n  dataScope         String?       @default(\"5\") @map(\"data_scope\") @db.Char(1)\n  menuCheckStrictly Int?          @default(1) @map(\"menu_check_strictly\") @db.TinyInt\n  deptCheckStrictly Int?          @default(1) @map(\"dept_check_strictly\") @db.TinyInt\n  status            String        @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy          String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime        String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy          String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime        String?       @map(\"update_time\") @db.VarChar(25)\n  remark            String?       @map(\"remark\") @db.VarChar(500)\n  users             SysUserRole[]\n  menus             SysRoleMenu[]\n  depts             SysRoleDept[]\n\n  @@map(\"sys_role\")\n}\n\nmodel SysUserRole {\n  userId Int     @map(\"user_id\") @db.UnsignedInt\n  roleId Int     @map(\"role_id\") @db.UnsignedInt\n  user   SysUser @relation(fields: [userId], references: [userId])\n  role   SysRole @relation(fields: [roleId], references: [roleId])\n\n  @@id([userId, roleId])\n  @@index([roleId])\n  @@map(\"sys_user_role\")\n}\n\ngenerator client {\n  provider        = \"prisma-client-js\"\n  output          = \"./common/prisma-client\"\n  previewFeatures = [\"views\", \"relationJoins\", \"prismaSchemaFolder\", \"omitApi\"]\n  //这里可以指定平台引擎，native就是当前系统， 如果需要其他系统的自行添加，或者到目标系统执行npx prisma generate\n  binaryTargets   = [\"native\"]\n  // binaryTargets   = [\"native\", \"windows\", \"linux-musl\",\"debian-openssl-3.0.x\",\"darwin\",\"darwin-arm64\"]\n}\n\ndatasource db {\n  provider     = \"mysql\"\n  url          = env(\"DATABASE_URL\")\n  relationMode = \"prisma\"\n}\n"
  },
  {
    "path": "server/src/common/prisma-client/wasm.d.ts",
    "content": "export * from './index'"
  },
  {
    "path": "server/src/common/prisma-client/wasm.js",
    "content": "\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nconst {\n  Decimal,\n  objectEnumValues,\n  makeStrictEnum,\n  Public,\n  getRuntime,\n} = require('./runtime/index-browser.js')\n\n\nconst Prisma = {}\n\nexports.Prisma = Prisma\nexports.$Enums = {}\n\n/**\n * Prisma Client JS version: 5.15.0\n * Query Engine version: 12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\n */\nPrisma.prismaVersion = {\n  client: \"5.15.0\",\n  engine: \"12e25d8d06f6ea5a0252864dd9a03b1bb51f3022\"\n}\n\nPrisma.PrismaClientKnownRequestError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`PrismaClientKnownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)};\nPrisma.PrismaClientUnknownRequestError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`PrismaClientUnknownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.PrismaClientRustPanicError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`PrismaClientRustPanicError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.PrismaClientInitializationError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`PrismaClientInitializationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.PrismaClientValidationError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`PrismaClientValidationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.NotFoundError = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`NotFoundError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.Decimal = Decimal\n\n/**\n * Re-export of sql-template-tag\n */\nPrisma.sql = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`sqltag is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.empty = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`empty is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.join = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`join is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.raw = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`raw is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.validator = Public.validator\n\n/**\n* Extensions\n*/\nPrisma.getExtensionContext = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`Extensions.getExtensionContext is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\nPrisma.defineExtension = () => {\n  const runtimeName = getRuntime().prettyName;\n  throw new Error(`Extensions.defineExtension is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).\nIn case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,\n)}\n\n/**\n * Shorthand utilities for JSON filtering\n */\nPrisma.DbNull = objectEnumValues.instances.DbNull\nPrisma.JsonNull = objectEnumValues.instances.JsonNull\nPrisma.AnyNull = objectEnumValues.instances.AnyNull\n\nPrisma.NullTypes = {\n  DbNull: objectEnumValues.classes.DbNull,\n  JsonNull: objectEnumValues.classes.JsonNull,\n  AnyNull: objectEnumValues.classes.AnyNull\n}\n\n/**\n * Enums\n */\n\nexports.Prisma.TransactionIsolationLevel = makeStrictEnum({\n  ReadUncommitted: 'ReadUncommitted',\n  ReadCommitted: 'ReadCommitted',\n  RepeatableRead: 'RepeatableRead',\n  Serializable: 'Serializable'\n});\n\nexports.Prisma.GenTableScalarFieldEnum = {\n  tableId: 'tableId',\n  tableName: 'tableName',\n  tableComment: 'tableComment',\n  subTableName: 'subTableName',\n  subTableFkName: 'subTableFkName',\n  className: 'className',\n  tplCategory: 'tplCategory',\n  tplWebType: 'tplWebType',\n  packageName: 'packageName',\n  moduleName: 'moduleName',\n  businessName: 'businessName',\n  functionName: 'functionName',\n  functionAuthor: 'functionAuthor',\n  genType: 'genType',\n  genPath: 'genPath',\n  options: 'options',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.RelationLoadStrategy = {\n  query: 'query',\n  join: 'join'\n};\n\nexports.Prisma.GenTableColumnScalarFieldEnum = {\n  columnId: 'columnId',\n  tableId: 'tableId',\n  columnName: 'columnName',\n  columnComment: 'columnComment',\n  columnType: 'columnType',\n  javaType: 'javaType',\n  javaField: 'javaField',\n  isPk: 'isPk',\n  isIncrement: 'isIncrement',\n  isRequired: 'isRequired',\n  isInsert: 'isInsert',\n  isEdit: 'isEdit',\n  isList: 'isList',\n  isQuery: 'isQuery',\n  queryType: 'queryType',\n  htmlType: 'htmlType',\n  dictType: 'dictType',\n  sort: 'sort',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime'\n};\n\nexports.Prisma.SysConfigScalarFieldEnum = {\n  configId: 'configId',\n  configName: 'configName',\n  configKey: 'configKey',\n  configValue: 'configValue',\n  configType: 'configType',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysDeptScalarFieldEnum = {\n  deptId: 'deptId',\n  parentId: 'parentId',\n  ancestors: 'ancestors',\n  deptName: 'deptName',\n  orderNum: 'orderNum',\n  leader: 'leader',\n  phone: 'phone',\n  email: 'email',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime'\n};\n\nexports.Prisma.SysDictDataScalarFieldEnum = {\n  dictCode: 'dictCode',\n  dictSort: 'dictSort',\n  dictLabel: 'dictLabel',\n  dictValue: 'dictValue',\n  dictType: 'dictType',\n  cssClass: 'cssClass',\n  listClass: 'listClass',\n  isDefault: 'isDefault',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysDictTypeScalarFieldEnum = {\n  dictId: 'dictId',\n  dictName: 'dictName',\n  dictType: 'dictType',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysLogininforScalarFieldEnum = {\n  infoId: 'infoId',\n  userName: 'userName',\n  ipaddr: 'ipaddr',\n  loginLocation: 'loginLocation',\n  browser: 'browser',\n  os: 'os',\n  status: 'status',\n  msg: 'msg',\n  loginTime: 'loginTime'\n};\n\nexports.Prisma.SysMenuScalarFieldEnum = {\n  menuId: 'menuId',\n  menuName: 'menuName',\n  parentId: 'parentId',\n  orderNum: 'orderNum',\n  path: 'path',\n  component: 'component',\n  query: 'query',\n  isFrame: 'isFrame',\n  isCache: 'isCache',\n  menuType: 'menuType',\n  visible: 'visible',\n  status: 'status',\n  perms: 'perms',\n  icon: 'icon',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysNoticeScalarFieldEnum = {\n  noticeId: 'noticeId',\n  noticeTitle: 'noticeTitle',\n  noticeType: 'noticeType',\n  noticeContent: 'noticeContent',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysPostScalarFieldEnum = {\n  postId: 'postId',\n  postCode: 'postCode',\n  postName: 'postName',\n  postSort: 'postSort',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysUserPostScalarFieldEnum = {\n  userId: 'userId',\n  postId: 'postId'\n};\n\nexports.Prisma.SysRoleDeptScalarFieldEnum = {\n  roleId: 'roleId',\n  deptId: 'deptId'\n};\n\nexports.Prisma.SysRoleMenuScalarFieldEnum = {\n  roleId: 'roleId',\n  menuId: 'menuId'\n};\n\nexports.Prisma.SysUserScalarFieldEnum = {\n  userId: 'userId',\n  deptId: 'deptId',\n  userName: 'userName',\n  nickName: 'nickName',\n  userType: 'userType',\n  email: 'email',\n  phonenumber: 'phonenumber',\n  sex: 'sex',\n  avatar: 'avatar',\n  password: 'password',\n  status: 'status',\n  loginIp: 'loginIp',\n  loginDate: 'loginDate',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysRoleScalarFieldEnum = {\n  roleId: 'roleId',\n  roleName: 'roleName',\n  roleKey: 'roleKey',\n  roleSort: 'roleSort',\n  dataScope: 'dataScope',\n  menuCheckStrictly: 'menuCheckStrictly',\n  deptCheckStrictly: 'deptCheckStrictly',\n  status: 'status',\n  createBy: 'createBy',\n  createTime: 'createTime',\n  updateBy: 'updateBy',\n  updateTime: 'updateTime',\n  remark: 'remark'\n};\n\nexports.Prisma.SysUserRoleScalarFieldEnum = {\n  userId: 'userId',\n  roleId: 'roleId'\n};\n\nexports.Prisma.SortOrder = {\n  asc: 'asc',\n  desc: 'desc'\n};\n\nexports.Prisma.NullsOrder = {\n  first: 'first',\n  last: 'last'\n};\n\n\nexports.Prisma.ModelName = {\n  GenTable: 'GenTable',\n  GenTableColumn: 'GenTableColumn',\n  SysConfig: 'SysConfig',\n  SysDept: 'SysDept',\n  SysDictData: 'SysDictData',\n  SysDictType: 'SysDictType',\n  SysLogininfor: 'SysLogininfor',\n  SysMenu: 'SysMenu',\n  SysNotice: 'SysNotice',\n  SysPost: 'SysPost',\n  SysUserPost: 'SysUserPost',\n  SysRoleDept: 'SysRoleDept',\n  SysRoleMenu: 'SysRoleMenu',\n  SysUser: 'SysUser',\n  SysRole: 'SysRole',\n  SysUserRole: 'SysUserRole'\n};\n\n/**\n * This is a stub Prisma Client that will error at runtime if called.\n */\nclass PrismaClient {\n  constructor() {\n    return new Proxy(this, {\n      get(target, prop) {\n        let message\n        const runtime = getRuntime()\n        if (runtime.isEdge) {\n          message = `PrismaClient is not configured to run in ${runtime.prettyName}. In order to run Prisma Client on edge runtime, either:\n- Use Prisma Accelerate: https://pris.ly/d/accelerate\n- Use Driver Adapters: https://pris.ly/d/driver-adapters\n`;\n        } else {\n          message = 'PrismaClient is unable to run in this browser environment, or has been bundled for the browser (running in `' + runtime.prettyName + '`).'\n        }\n        \n        message += `\nIf this is unexpected, please open an issue: https://pris.ly/prisma-prisma-bug-report`\n\n        throw new Error(message)\n      }\n    })\n  }\n}\n\nexports.PrismaClient = PrismaClient\n\nObject.assign(exports, Prisma)\n"
  },
  {
    "path": "server/src/common/result/Result.ts",
    "content": "import { HttpStatus } from '@/common/constant/HttpStatus';\r\nimport { TableDataInfo } from '../domain/TableDataInfo';\r\nimport { nowDateTime } from '@/common/utils';\r\nimport { ApiProperty } from '@nestjs/swagger';\r\n\r\nexport default class Result<T> {\r\n  @ApiProperty({\r\n    example: 200,\r\n    description: '响应code',\r\n  })\r\n  code: number = HttpStatus.SUCCESS;\r\n  @ApiProperty({\r\n    example: true,\r\n    description: '请求是否成功处理',\r\n  })\r\n  success: boolean = true;\r\n  @ApiProperty({\r\n    example: '成功',\r\n    description: '接口备注信息',\r\n  })\r\n  msg: string = '成功';\r\n  @ApiProperty({\r\n    default: null,\r\n    description: '返回数据',\r\n  })\r\n  data: T = null;\r\n  @ApiProperty({\r\n    example: '2024-04-28 22:32:35',\r\n    description: '处理时间',\r\n  })\r\n  time: string | null = null;\r\n\r\n  constructor(\r\n    code: number = HttpStatus.SUCCESS,\r\n    success: boolean = true,\r\n    msg: string = '成功',\r\n    data: T = null,\r\n  ) {\r\n    this.code = code;\r\n    this.success = success;\r\n    this.msg = msg;\r\n    this.data = data;\r\n    this.time = nowDateTime();\r\n  }\r\n  static Ok<K = null>(data: K = null, msg: string = '成功') {\r\n    return new Result<K>(HttpStatus.SUCCESS, true, msg, data);\r\n  }\r\n  static ok<K = null>(data: K = null, msg: string = '成功') {\r\n    return new Result<K>(HttpStatus.SUCCESS, true, msg, data);\r\n  }\r\n  static Error(msg: string = 'error', code: number = HttpStatus.ERROR) {\r\n    return new Result(code, false, msg, null);\r\n  }\r\n\r\n  static BadRequest(msg: string = 'bad request') {\r\n    return new Result(HttpStatus.BAD_REQUEST, false, msg, null);\r\n  }\r\n\r\n  static NotFound(msg: string = 'notFound') {\r\n    return Result.Error(msg, HttpStatus.NOT_FOUND);\r\n  }\r\n\r\n  static Unauthorized(msg: string = '身份校验不通过！') {\r\n    return Result.Error(msg, HttpStatus.UNAUTHORIZED);\r\n  }\r\n\r\n  static Forbidden(msg: string = '您没有权限！') {\r\n    return Result.Error(msg, HttpStatus.FORBIDDEN);\r\n  }\r\n\r\n  static Validation(msg: string = '参数不正确!') {\r\n    return Result.Error(msg, HttpStatus.Validation);\r\n  }\r\n\r\n  static Frequent(msg: string = '您的ip请求过于频繁!') {\r\n    return Result.Error(msg, HttpStatus.FREQUENT_REQUESTS);\r\n  }\r\n\r\n  static toAjax(affectRows: number) {\r\n    return affectRows > 0\r\n      ? Result.ok(null, '操作成功！')\r\n      : Result.Error('操作失败！');\r\n  }\r\n\r\n  static TableData<L = any>(data: { rows: L[]; total: number }) {\r\n    return new TableDataInfo<L>(\r\n      data.rows,\r\n      data.total,\r\n      HttpStatus.SUCCESS,\r\n      '查询成功',\r\n    );\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/service/auth/auth.service.ts",
    "content": "import { LoginBody } from '@/admin/system/auth/dto/LoginBody';\r\nimport { redisUtils } from '@/common/utils/redisUtils';\r\nimport { Config } from '@/config';\r\nimport { BadRequestException, Injectable } from '@nestjs/common';\r\nimport * as bowser from 'bowser';\r\nimport { HmacSHA256 } from 'crypto-js';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport * as libqqwry from 'lib-qqwry';\r\nimport { SysLogininfor, SysRole, SysUser } from '@prismaClient';\r\nimport * as jwt from 'jsonwebtoken';\r\nimport { Constants } from '@/common/constant/Constants';\r\nimport { Request } from 'express';\r\nimport { nowDateTime } from '@/common/utils';\r\nimport { ValidationException } from '@/common/exception/ValidationException';\r\nimport { capitalize } from 'lodash';\r\nimport * as assert from 'assert';\r\nimport { randomUUID } from 'crypto';\r\nconst qqwry = libqqwry(); //ip解析\r\nqqwry.speed(); //启用内存急速模式;\r\n@Injectable()\r\nexport class AuthService {\r\n  constructor(private prisma: PrismaService) {}\r\n\r\n  /**@desc 登录 */\r\n  async login(loginBody: LoginBody, req: Request) {\r\n    const { username, password, uuid } = loginBody;\r\n\r\n    let loginInfo: SysLogininfor;\r\n    //用户登录日志\r\n    {\r\n      loginInfo = {\r\n        infoId: undefined,\r\n        userName: username,\r\n        ipaddr: req.ip,\r\n        loginLocation: '未知',\r\n        browser: '未知',\r\n        os: '未知',\r\n        status: '0',\r\n        msg: '',\r\n        loginTime: nowDateTime(),\r\n      };\r\n      try {\r\n        if (req.ip?.includes('127.0.0.1') || req.ip == '::1') {\r\n          loginInfo.ipaddr = '127.0.0.1';\r\n          loginInfo.loginLocation = '内网IP';\r\n        } else {\r\n          const d = qqwry.searchIP(req.ip);\r\n          loginInfo.loginLocation = d.Country;\r\n        }\r\n      } catch (e) {}\r\n      const agent = req.headers['user-agent'];\r\n      try {\r\n        const d = bowser.parse(agent);\r\n        loginInfo.os = d.os.name + ' ' + d.os.versionName;\r\n        loginInfo.browser =\r\n          d.browser.name + ' ' + d.browser?.version?.split('.')?.[0] || '';\r\n      } catch (e) {}\r\n    }\r\n    //登录验证码是否开启\r\n    {\r\n      //是否开启验证码\r\n      const enable = await redisUtils.get(\r\n        Constants.SYS_CONFIG_KEY + 'sys.account.captchaEnabled',\r\n      );\r\n      const captchaEnabled: boolean = enable == '' ? true : enable === 'true';\r\n      if (captchaEnabled) {\r\n        let code = loginBody.code;\r\n        if (!uuid || !code) {\r\n          throw new ValidationException('参数不正确！');\r\n        }\r\n        code = code.toLowerCase();\r\n        const isPass = await this.validaCaptcha(uuid, code);\r\n        if (!isPass) {\r\n          loginInfo.msg = '验证码错误！';\r\n          await this.prisma.sysLogininfor.create({\r\n            data: loginInfo,\r\n          });\r\n          throw new BadRequestException('验证码错误！');\r\n        }\r\n      }\r\n    }\r\n    //ip是否被封禁\r\n    {\r\n      const ips = (\r\n        await redisUtils.get(Constants.SYS_CONFIG_KEY + 'sys.login.blackIPList')\r\n      ).split(',');\r\n      if (ips.length) {\r\n        const isBlack = ips.some((v) => v === req.ip);\r\n        if (isBlack) {\r\n          loginInfo.msg = 'ip:' + loginInfo.ipaddr + '被封禁';\r\n          await this.prisma.sysLogininfor.create({\r\n            data: loginInfo,\r\n          });\r\n        }\r\n        assert(!isBlack, '你的ip已经被封禁！');\r\n      }\r\n    }\r\n    //验证用户密码是否正确\r\n    {\r\n      const user = await this.prisma.sysUser.findFirst({\r\n        where: {\r\n          userName: username,\r\n        },\r\n        select: {\r\n          userId: true,\r\n          password: true,\r\n          status: true,\r\n          dept: {\r\n            select: {\r\n              deptName: true,\r\n            },\r\n          },\r\n        },\r\n      });\r\n      if (!user) {\r\n        loginInfo.msg = '用户不存在';\r\n        await this.prisma.sysLogininfor.create({\r\n          data: loginInfo,\r\n        });\r\n        throw new BadRequestException('用户不存在');\r\n      }\r\n      if (user.password !== this.encrypt(password)) {\r\n        loginInfo.msg = '密码不正确';\r\n        await this.prisma.sysLogininfor.create({\r\n          data: loginInfo,\r\n        });\r\n        throw new BadRequestException('密码不正确');\r\n      }\r\n      if (user.status !== '1') {\r\n        loginInfo.msg = '账号被封禁';\r\n        await this.prisma.sysLogininfor.create({\r\n          data: loginInfo,\r\n        });\r\n        throw new BadRequestException('账号被封禁');\r\n      }\r\n      loginInfo.status = '1';\r\n      loginInfo.msg = '登录成功';\r\n      await this.prisma.sysLogininfor.create({\r\n        data: loginInfo,\r\n      });\r\n      const cacheInfo = {\r\n        tokenId: randomUUID(),\r\n        userId: user.userId,\r\n        deptName: user.dept?.deptName,\r\n        userName: loginInfo.userName,\r\n        ipaddr: loginInfo.ipaddr,\r\n        loginLocation: loginInfo.loginLocation,\r\n        browser: loginInfo.browser,\r\n        os: loginInfo.os,\r\n        loginTime: loginInfo.loginTime,\r\n      };\r\n      const token = this.createToken(cacheInfo);\r\n      //存储token\r\n      await redisUtils.set(\r\n        Constants.LOGIN_TOKEN_KEY + cacheInfo.tokenId,\r\n        JSON.stringify(cacheInfo),\r\n        Config.token.expiresIn,\r\n      );\r\n      //初始化用户信息存到reids缓存包括权限。。\r\n      await this.refreshUserInfo(user.userId);\r\n      return token;\r\n    }\r\n  }\r\n\r\n  //获取用户信息，包括权限和角色\r\n  async getUserInfo(userId: number) {\r\n    //如果redis有用户信息直接返回\r\n    const userinfo: SysUser & { roles: string[]; permissions: string[] } =\r\n      JSON.parse(\r\n        (await redisUtils.get(Constants.LOGIN_CACHE_TOKEN_KEY + userId)) ||\r\n          null,\r\n      );\r\n    if (userinfo !== null) return userinfo;\r\n    const user = await this.prisma.sysUser.findFirst({\r\n      where: {\r\n        userId: userId,\r\n        status: '1', //正常状态\r\n      },\r\n      include: {\r\n        dept: true,\r\n        roles: {\r\n          include: {\r\n            role: true,\r\n          },\r\n        },\r\n      },\r\n    });\r\n    if (!user) return null;\r\n    const ro = user.roles.map((v) => v.role).filter((v) => v.status === '1');\r\n    const permissions = await this.getRolePermission(ro);\r\n    const result = {\r\n      ...user,\r\n      roles: ro.map((v) => v.roleKey),\r\n      permissions,\r\n    };\r\n    //存储到redis缓存，下次直接拿\r\n    await redisUtils.set(\r\n      Constants.LOGIN_CACHE_TOKEN_KEY + userId,\r\n      JSON.stringify(result),\r\n      Config.token.expiresIn,\r\n    );\r\n    return result;\r\n  }\r\n  //强制刷新redis缓存的用户信息\r\n  async refreshUserInfo(userId: number) {\r\n    const user = await this.prisma.sysUser.findFirst({\r\n      where: {\r\n        userId: userId,\r\n        status: '1', //正常状态\r\n      },\r\n      include: {\r\n        dept: true,\r\n        roles: {\r\n          include: {\r\n            role: true,\r\n          },\r\n        },\r\n      },\r\n    });\r\n    if (!user) return null;\r\n    const ro = user.roles.map((v) => v.role).filter((v) => v.status === '1');\r\n    const permissions = await this.getRolePermission(ro);\r\n    const result = {\r\n      ...user,\r\n      roles: ro.map((v) => v.roleKey),\r\n      permissions,\r\n    };\r\n    //存储到redis缓存，下次直接拿\r\n    await redisUtils.set(\r\n      Constants.LOGIN_CACHE_TOKEN_KEY + userId,\r\n      JSON.stringify(result),\r\n      Config.token.expiresIn,\r\n    );\r\n    return true;\r\n  }\r\n\r\n  //获取用户能访问的路由\r\n  async getRouters(userId: number) {\r\n    //超级管理员，返回全部信息\r\n    if (await this.isAdmin(userId)) {\r\n      const r = await this.prisma.sysMenu.findMany({\r\n        where: {\r\n          menuType: {\r\n            in: ['M', 'C'],\r\n          },\r\n          status: '1',\r\n        },\r\n        orderBy: [\r\n          {\r\n            parentId: 'asc',\r\n          },\r\n          {\r\n            orderNum: 'asc',\r\n          },\r\n        ],\r\n      });\r\n      return this.MenuTree(r, 'menuId', 'parentId', 0);\r\n    } else {\r\n      const r: any = await this.prisma\r\n        .$queryRaw`select distinct m.menu_id as menuId, m.parent_id as parentId, m.menu_name as menuName, m.path, m.component, m.query, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame as isFrame, m.is_cache as isCache, m.menu_type as menuType, m.icon, m.order_num as orderNum, m.create_time as createTime\r\n      from sys_menu m\r\n       left join sys_role_menu rm on m.menu_id = rm.menu_id\r\n       left join sys_user_role ur on rm.role_id = ur.role_id\r\n       left join sys_role ro on ur.role_id = ro.role_id\r\n       left join sys_user u on ur.user_id = u.user_id\r\n      where u.user_id = ${userId} and m.menu_type in ('M', 'C') and m.status = 1  and ro.status = 1\r\n      order by m.parent_id, m.order_num`;\r\n      return this.MenuTree(r, 'menuId', 'parentId', 0);\r\n    }\r\n  }\r\n\r\n  //获取角色组所有权限\r\n  async getRolePermission(roles: SysRole[]) {\r\n    //如果角色具有所有权限\r\n    if (roles.some((v) => v.dataScope === '1')) return ['*:*:*'];\r\n    const perms: string[] = [];\r\n    for (let i = 0; i < roles.length; i++) {\r\n      const r: { perms: string }[] = await this.prisma\r\n        .$queryRaw`select distinct a.perms from sys_menu a \r\n      left join sys_role_menu b on a.menu_id = b.menu_id\r\n      where a.status = '1' and b.role_id = ${roles[i].roleId}`;\r\n      for (const item of r) {\r\n        if (item && item.perms?.includes(':') && !perms.includes(item.perms)) {\r\n          perms.push(item.perms);\r\n        }\r\n      }\r\n    }\r\n    return perms;\r\n  }\r\n\r\n  //获取用户角色\r\n  async getUserRoles(userId: number) {\r\n    return (await this.getUserInfo(userId)).roles;\r\n  }\r\n  //获取用户权限\r\n  async getUserPermissions(userId: number) {\r\n    return (await this.getUserInfo(userId)).permissions;\r\n  }\r\n\r\n  //检查用户是否含有权限\r\n  async hasPermission(permission: string, userId: number) {\r\n    const AllPermission = '*:*:*';\r\n    const permissions = await this.getUserPermissions(userId);\r\n    return (\r\n      permissions.includes(AllPermission) ||\r\n      permissions.some((v) => v === permission)\r\n    );\r\n  }\r\n\r\n  //检测用户是否属于某个角色\r\n  async hasRole(role: string, userId: number) {\r\n    const roles = await this.getUserRoles(userId);\r\n    return roles.some((v) => v === role);\r\n  }\r\n\r\n  //检测用户是否管理员\r\n  async isAdmin(userId: number) {\r\n    return (\r\n      userId === 1 || (await this.getUserPermissions(userId)).includes('*:*:*')\r\n    );\r\n  }\r\n\r\n  /**@desc 菜单树形化 */\r\n\r\n  MenuTree(arr = [], id = 'id', pid = 'pid', rootValue = 0) {\r\n    const result = [];\r\n    const map = {};\r\n    for (const item of arr) {\r\n      map[item[id]] = {\r\n        component: item.component,\r\n        hidden: item.visible == 0,\r\n        name: capitalize(item.path?.replaceAll('/', '')),\r\n        path: item.path,\r\n        meta: {\r\n          icon: item.icon,\r\n          link: null,\r\n          noCache: item.isCache == 0,\r\n          title: item.menuName,\r\n        },\r\n        children: map[item[id]]?.children || [],\r\n      };\r\n      if (item[pid] == rootValue && item.menuType === 'M') {\r\n        map[item[id]].alwaysShow = true;\r\n        map[item[id]].component = map[item[id]].component || 'Layout';\r\n        map[item[id]].redirect = 'noRedirect';\r\n        map[item[id]].path = '/' + (map[item[id]].path || map[item[id]].path);\r\n        result.push(map[item[id]]);\r\n      } else if (item[pid] == rootValue && item.menuType === 'C') {\r\n        //是外链\r\n        if (item.isFrame == '1') {\r\n          result.unshift({\r\n            component: 'Layout',\r\n            hidden: item.visible == 0,\r\n            name: item.path,\r\n            path: item.path,\r\n            meta: {\r\n              icon: item.icon,\r\n              link: true,\r\n              noCache: item.isCache == 0,\r\n              title: item.menuName,\r\n            },\r\n          });\r\n        } else {\r\n          //顶级菜单\r\n          result.unshift({\r\n            path: '/',\r\n            component: 'Layout',\r\n            hidden: item.visible == 0,\r\n            meta: {\r\n              icon: item.icon,\r\n              link: null,\r\n              noCache: item.isCache == 0,\r\n              title: item.menuName,\r\n            },\r\n            children: [\r\n              {\r\n                component: item.component,\r\n                hidden: item.visible == 0,\r\n                name: capitalize(item.path?.replaceAll('/', '')),\r\n                path: item.path,\r\n                meta: {\r\n                  icon: item.icon,\r\n                  link: null,\r\n                  noCache: item.isCache == 0,\r\n                  title: item.menuName,\r\n                },\r\n              },\r\n            ],\r\n          });\r\n        }\r\n      } else {\r\n        if (!map[item[pid]]) {\r\n          map[item[pid]] = {\r\n            children: [],\r\n          };\r\n        }\r\n        map[item[pid]].children.push(map[item[id]]);\r\n      }\r\n    }\r\n\r\n    for (const k in map) {\r\n      if (!map[k].children.length) {\r\n        delete map[k].children;\r\n      } else {\r\n        map[k]['alwaysShow'] = true;\r\n        map[k]['redirect'] = 'noRedirect';\r\n        if (!map[k]['component']) {\r\n          map[k]['component'] = 'ParentView';\r\n        }\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * @desc 检查验证码是否正确\r\n   */\r\n\r\n  async validaCaptcha(uuid: string, code: string) {\r\n    const r = await redisUtils.get(Constants.CAPTCHA_CODE_KEY + uuid);\r\n    if (r != code) {\r\n      redisUtils.del(Constants.CAPTCHA_CODE_KEY + uuid);\r\n      return false;\r\n    } else {\r\n      return true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @desc 密码加密\r\n   */\r\n  encrypt(str: string): string {\r\n    return HmacSHA256(str, Config.crypto.psdSecret).toString();\r\n  }\r\n\r\n  /**@desc 创建token */\r\n  createToken(payload) {\r\n    return jwt.sign(payload, Config.token.secret, {\r\n      expiresIn: Config.token.expiresIn,\r\n    });\r\n  }\r\n  /**@desc 解析token */\r\n\r\n  verifyToken(token: string) {\r\n    return new Promise((resolve, reject) => {\r\n      jwt.verify(token, Config.token.secret, (err, data) => {\r\n        if (err) {\r\n          reject(err);\r\n        } else {\r\n          resolve(data);\r\n        }\r\n      });\r\n    });\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/service/gen/gen-template/js/api.js.vm",
    "content": "import request from '@/utils/request'\r\n\r\n/**@description 查询${functionName}列表 */\r\nexport function list${BusinessName}(query) {\r\n  return request({\r\n    url: '/${moduleName}/${businessName}/list',\r\n    method: 'get',\r\n    params: query\r\n  })\r\n}\r\n\r\n/**@description 查询${functionName}详细 */\r\nexport function get${BusinessName}(${pkColumn.javaField}) {\r\n  return request({\r\n    url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField},\r\n    method: 'get'\r\n  })\r\n}\r\n\r\n/**@description 新增${functionName} */\r\nexport function add${BusinessName}(data) {\r\n  return request({\r\n    url: '/${moduleName}/${businessName}',\r\n    method: 'post',\r\n    data: data\r\n  })\r\n}\r\n\r\n/**@description 修改${functionName} */\r\nexport function update${BusinessName}(data) {\r\n  return request({\r\n    url: '/${moduleName}/${businessName}',\r\n    method: 'put',\r\n    data: data\r\n  })\r\n}\r\n\r\n/**@description 删除${functionName} */\r\nexport function del${BusinessName}(${pkColumn.javaField}) {\r\n  return request({\r\n    url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField},\r\n    method: 'delete'\r\n  })\r\n}\r\n"
  },
  {
    "path": "server/src/common/service/gen/gen-template/node/controller.ts.vm",
    "content": "import { Body, Controller, Delete, Get, Param, ParseArrayPipe, ParseIntPipe, Post, Put, Query, Req, Res } from '@nestjs/common';\nimport { ParseIntArrayPipe } from '@/common/pipe/parse-int-array.pipe';\nimport Result from '@/common/result/Result';\nimport { ApiBody, ApiOperation, ApiQuery, ApiResponse, ApiTags, ApiBearerAuth } from '@nestjs/swagger';\nimport { RequirePermission } from '@/common/decorator/require-premission.decorator';\nimport { nowDateTime } from '@/common/utils';\nimport { ${className}Service } from './service/${filename}.service';\nimport { Query${className}Dto, Create${className}Dto, Update${className}Dto } from './dto/index';\nimport { Response } from 'express';\nimport { $modelName1 } from '@prismaClient';\nimport { TableDataInfo } from '@/common/domain/TableDataInfo';\n@ApiTags(\"${functionName}\")\n@ApiBearerAuth()\n@Controller('${moduleName}/${businessName}')\nexport class ${className}Controller {\n    constructor(private ${businessName}Service: ${className}Service) { } \n\n    @ApiOperation({ summary: \"查询${functionName}列表\" })\n    @ApiResponse({ type: TableDataInfo<${modelName1}> })\n    @RequirePermission(\"${moduleName}:${businessName}:list\")\n    @Get(\"/list\")\n    async list${BusinessName}(@Query() q: Query${className}Dto): Promise<TableDataInfo<${modelName1}>> {\n       return Result.TableData(await this.${businessName}Service.select${BusinessName}List(q))\n    }\n\n    @ApiOperation({ summary: \"查询${functionName}所有\" })\n    @ApiResponse({ type: Result<${modelName1}[]> })\n    @RequirePermission(\"${moduleName}:${businessName}:list\")\n    @Get(\"/data\")\n    async list${BusinessName}Data(): Promise<Result<${modelName1}[]>> {\n       return Result.ok(await this.${businessName}Service.select${BusinessName}All())\n    }\n\n    \n    @ApiOperation({ summary: \"导出${functionName}xlsx文件\" })\n    @RequirePermission(\"${moduleName}:${businessName}:export\")\n    @Get(\"/export\")\n    async export(@Res() res: Response): Promise<void> {\n       return this.${businessName}Service.export${BusinessName}(res)\n    }\n\n\n    @ApiOperation({ summary: \"查询${functionName}详细\" })\n    @ApiResponse({ type: Result<${modelName1}> })\n    @RequirePermission(\"${moduleName}:${businessName}:list\")\n    @Get(\"/:${pkName}\")\n    async get${BusinessName}(@Param(\"${pkName}\"#if(${pkColumn.javaType.toLowerCase()}==\"number\"), ParseIntPipe#end) ${pkName}: ${pkColumn.javaType.toLowerCase()}): Promise<Result<${modelName1}>> {\n        return Result.ok(await this.${businessName}Service.select${BusinessName}By${UpperPkName}(${pkName}))\n        \n    }\n\n    @ApiOperation({ summary: \"新增${functionName}\" })\n    @ApiResponse({ type: Result<${modelName1}> })\n    @ApiBody({ type: Create${className}Dto })\n    @RequirePermission(\"${moduleName}:${businessName}:add\")\n    @Post(\"/\")\n    async add${BusinessName}(@Body() ${entityName}: Create${className}Dto, @Req() req): Promise<Result<${modelName1}>> {\n        #if(${hasBaseDomain})\n${entityName} = {\n            ...${entityName},\n            createTime: nowDateTime(),\n            updateTime: nowDateTime(),\n            createBy: req.user?.userName,\n            updateBy: req.user?.userName\n        }\n        #else\n        #if(${hasCreateTime})\n${entityName}[\"createTime\"] = nowDateTime()\n        #end\n        #if(${hasUpdateTime})\n${entityName}[\"updateTime\"] = nowDateTime()\n        #end\n        #end\nreturn Result.ok(await this.${businessName}Service.add${BusinessName}(${entityName}))\n    }\n   \n   @ApiOperation({ summary: \"修改${functionName}\" })\n   @ApiResponse({ type: Result<any> })\n   @ApiBody({ type: Update${className}Dto })\n   @RequirePermission(\"${moduleName}:${businessName}:edit\")\n   @Put(\"/\")\n    async update${BusinessName}(@Body() ${entityName}: Update${className}Dto, @Req() req): Promise<Result<any>> {\n        #if($hasBaseDomain)\n${entityName} = {\n            ...${entityName},\n            updateTime: nowDateTime(),\n            updateBy: req.user?.userName\n        }\n        #elseif(${hasUpdateTime})\n${entityName}[\"updateTime\"] = nowDateTime()\n        #end\nawait this.${businessName}Service. update${BusinessName}(${entityName})\n        return Result.ok(\"修改成功！\")\n    }\n\n\n   \n    @ApiOperation({ summary: \"删除${functionName}\" })\n    @ApiResponse({ type: Result<any> })\n    @RequirePermission(\"${moduleName}:${businessName}:remove\")\n    @Delete(\"/:ids\")\n    async del${BusinessName}(@Param(\"ids\", #if(${pkColumn.javaType.toLowerCase()}==\"number\")ParseIntArrayPipe#else ParseArrayPipe#end) ${pkName}s: ${pkColumn.javaType.toLowerCase()}[]): Promise<Result<any>> {\n        let { count } = await this.${businessName}Service.delete${BusinessName}By${UpperPkName}s(${pkName}s)\n        return Result.toAjax(count)\n    }\n}\n"
  },
  {
    "path": "server/src/common/service/gen/gen-template/node/dto.ts.vm",
    "content": "import { BaseDomain } from \"@/common/domain/BaseDomain\"\r\nimport { ApiProperty } from \"@nestjs/swagger\"\r\nimport { Transform } from \"class-transformer\"\r\nimport { IsNotEmpty, IsNumber, IsString, IsOptional } from \"class-validator\"\r\nimport { queryDomain } from \"@/common/domain/queryDomain\";\r\n\r\n/**@description 查询${functionName}Dto */\r\nexport class Query${className}Dto extends queryDomain {\r\n  #foreach($column in $columns)\r\n    #set($type=$column.javaType.toLowerCase())\r\n    #if($column.query && $column.queryType != \"BETWEEN\")\r\n      @ApiProperty({description:\"$column.columnComment\", required:false})\r\n      @IsOptional()\r\n      #if($column.javaType==\"Number\")\r\n      @Transform((v) => +v.value)\r\n      @IsNumber()#end\r\n      ${column.javaField}: ${type} | null\r\n    #end\r\n  #end\r\n\r\n  @ApiProperty({description:\"排序列\", required:false})\r\n  @IsOptional()\r\n  @IsString()\r\n  orderByColumn?: string\r\n\r\n  @ApiProperty({description:\"排序方向(desc/asc)\", required:false})\r\n  @IsOptional()\r\n  @IsString()\r\n  isAsc?: string\r\n}\r\n\r\n/**@description 创建${functionName}Dto */\r\nexport class Create${className}Dto #if(${hasBaseDomain}) extends BaseDomain #end{\r\n  #foreach($column in $columns)\r\n    #set($type=$column.javaType.toLowerCase())\r\n    #if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)\r\n      #if($column.required)\r\n      @ApiProperty({description:\"$column.columnComment\", required:true})\r\n      @IsNotEmpty({ message: \"$column.columnComment不能为空\" })\r\n      #else\r\n      @ApiProperty({description:\"$column.columnComment\", required:false})\r\n      @IsOptional()\r\n      #end\r\n      #if($column.javaType==\"Number\")\r\n      @Transform((v) => +v.value)\r\n      @IsNumber()\r\n      #else\r\n      @IsString()    \r\n      #end\r\n      ${column.javaField}#if(!$column.required)?#end: ${type}\r\n    #end\r\n  #end\r\n}\r\n\r\n/**@description 更新${functionName}Dto */\r\nexport class Update${className}Dto #if(${hasBaseDomain}) extends BaseDomain #end{\r\n  #foreach($column in $columns)\r\n    #set($type=$column.javaType.toLowerCase())\r\n    #if($column.columnName == $pkColumn.columnName)\r\n      @ApiProperty({description:\"$column.columnComment\"})\r\n      @IsNotEmpty({ message: \"$column.columnComment不能为空\" })\r\n    #if($column.javaType==\"Number\")\r\n      @Transform((v) => +v.value)\r\n      @IsNumber()\r\n    #else\r\n      @IsString()\r\n    #end\r\n      ${column.javaField}#if(!$column.required && $column.columnName != $pkColumn.columnName)?#end: ${type}\r\n    #end\r\n    #if($column.columnName != $pkColumn.columnName && $column.edit)\r\n      #if($column.required)\r\n      @ApiProperty({description:\"$column.columnComment\", required:true})\r\n      @IsNotEmpty({ message: \"$column.columnComment不能为空\" })\r\n      #else\r\n      @ApiProperty({description:\"$column.columnComment\", required:false})\r\n      @IsOptional()\r\n      #end\r\n      #if($column.javaType==\"Number\")\r\n      @Transform((v) => +v.value)\r\n      @IsNumber()\r\n      #else\r\n      @IsString()    \r\n      #end\r\n      ${column.javaField}#if(!$column.required)?#end: ${type}\r\n    #end\r\n  #end\r\n}"
  },
  {
    "path": "server/src/common/service/gen/gen-template/node/service.ts.vm",
    "content": "import { Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { Response } from 'express';\r\nimport { exportTable } from '@/common/utils';\r\nimport { Query${className}Dto, Create${className}Dto, Update${className}Dto } from '../dto/index';\r\nimport { Prisma } from '@prismaClient';\r\nimport { isNotEmpty,isEmpty } from 'class-validator';\r\n@Injectable()\r\nexport class ${className}Service {\r\n  constructor(private prisma: PrismaService) { }\r\n  #set($service=\"this.prisma.\"+$modelName)\r\n\r\n  /**@description 查询${functionName}所有 */\r\n  async select${BusinessName}All () {\r\n    return ${service}.findMany()\r\n  }\r\n\r\n  /**@description 分页查询${functionName}列表 */\r\n  async select${BusinessName}List (q: Query${className}Dto) {\r\n    let queryCondition: Prisma.${modelName1}WhereInput = {}\r\n    #foreach($column in $columns)\r\n    #set($queryType=$column.queryType)\r\n    #set($javaField=$column.javaField)\r\n    #set($javaType=$column.javaType)\r\n    #set($columnName=$column.columnName)\r\n    #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})\r\n    #if($column.query)\r\n      #if($column.queryType == \"EQ\")\r\n        if (isNotEmpty(q[\"$javaField\"])) {\r\n            queryCondition.$javaField = {\r\n              equals: q.$javaField\r\n            }\r\n        }\r\n      #elseif($queryType == \"NE\")\r\n        if (isNotEmpty(q[\"$javaField\"])) {\r\n            queryCondition.$javaField = {\r\n              not: q.$javaField\r\n            }\r\n        }\r\n      #elseif($queryType == \"GT\")\r\n        if (isNotEmpty(q[\"$javaField\"])) {\r\n            queryCondition.$javaField = {\r\n              gt: q.$javaField\r\n            }\r\n        }\r\n      #elseif($queryType == \"GTE\")\r\n        if (isNotEmpty(q[\"$javaField\"])) {\r\n            queryCondition.$javaField = {\r\n              gte: q.$javaField\r\n            }\r\n        }\r\n      #elseif($queryType == \"LT\")\r\n        if (isNotEmpty(q[\"$javaField\"])) {\r\n            queryCondition.$javaField = {\r\n              lt: q.$javaField\r\n            }\r\n        }\r\n      #elseif($queryType == \"LTE\")\r\n        if (isNotEmpty(q[\"$javaField\"])) {\r\n            queryCondition.$javaField = {\r\n              lte: q.$javaField\r\n            }\r\n        }\r\n      #elseif($queryType == \"LIKE\")\r\n        if (isNotEmpty(q[\"$javaField\"])) {\r\n            queryCondition.$javaField = {\r\n              contains: q.$javaField\r\n            }\r\n        }\r\n      #elseif($queryType == \"BETWEEN\")\r\n        if (isNotEmpty(q.params.begin$AttrName) && isNotEmpty(q.params.end$AttrName)) {\r\n            queryCondition.$javaField = {\r\n              lte: q.params.end$AttrName,\r\n              gte: q.params.begin$AttrName\r\n            }\r\n        }\r\n      #end\r\n    #end\r\n    #end\r\n\r\n    // 构建排序条件\r\n    let orderBy = {};\r\n    if (isNotEmpty(q.orderByColumn)) {\r\n      orderBy[q.orderByColumn] = q.isAsc?.toLowerCase() === 'ascending' ? 'asc' : 'desc';\r\n    } else {\r\n      // 默认排序，通常按创建时间或ID降序\r\n      orderBy = { ${pkName}: 'desc' };\r\n    }\r\n\r\n    return {\r\n      rows: await ${service}.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n        orderBy: orderBy,\r\n      }),\r\n      total: await ${service}.count({\r\n        where: queryCondition\r\n      })\r\n    }\r\n  }\r\n\r\n  /**@description 查询${functionName}详情 */\r\n  async select${BusinessName}By${UpperPkName} (${pkName}: ${pkColumn.javaType.toLowerCase()}) {\r\n    return ${service}.findUnique({\r\n      where: {\r\n        ${pkName}\r\n      }\r\n    })\r\n  }\r\n\r\n  \r\n  /**@description 新增${functionName} */\r\n  async add${BusinessName} (${entityName}: Create${className}Dto) {\r\n    #foreach($column in $columns)\r\n    #if(($column.columnName != $pkColumn.columnName  || !$pkColumn.increment) && $column.columnName!=\"uuid\")\r\n    if(isEmpty(${entityName}[\"$column.javaField\"])) {\r\n      delete ${entityName}[\"$column.javaField\"]\r\n    } \r\n    #end\r\n    #end\r\n    return await ${service}.create({\r\n      data: ${entityName}\r\n    })\r\n  }\r\n\r\n  /**@description 修改${functionName} */\r\n  async update${BusinessName} (${entityName}: Update${className}Dto) {\r\n    #foreach($column in $columns)\r\n    #if($column.columnName != $pkColumn.columnName  && $column.columnName !=\"uuid\")\r\n    if(isEmpty(${entityName}[\"$column.javaField\"])) {\r\n      delete ${entityName}[\"$column.javaField\"]\r\n    } \r\n    #end\r\n    #end\r\n    return await ${service}.update({\r\n        where: {\r\n          ${pkName}: ${entityName}.${pkName}\r\n        },\r\n        data: ${entityName}\r\n      })\r\n  }\r\n\r\n  /**@description 批量删除${functionName} */\r\n  async delete${BusinessName}By${UpperPkName}s (${pkName}s: ${pkColumn.javaType.toLowerCase()}[]) {\r\n    return ${service}.deleteMany({\r\n      where: {\r\n        ${pkName}: {\r\n          in: ${pkName}s\r\n        }\r\n      }\r\n    })\r\n  }\r\n\r\n  /**@description 单个删除${functionName} */\r\n  async delete${BusinessName}By${UpperPkName} (${pkName}: ${pkColumn.javaType.toLowerCase()}) {\r\n    return ${service}.delete({\r\n      where: {\r\n        ${pkName}\r\n      }\r\n    })\r\n  }\r\n\r\n  /**@description 导出${functionName}所有数据为xlsx */\r\n  async export${BusinessName} (res: Response) {\r\n    let title = ${columnNames}\r\n    let data = (await ${service}.findMany()).map(v => Object.values(v))\r\n    data.unshift(title)\r\n    exportTable(data, res)\r\n  }\r\n}"
  },
  {
    "path": "server/src/common/service/gen/gen-template/sql/sql.vm",
    "content": "-- 菜单 SQL\r\ninsert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)\r\nvalues('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 0, 1, 'C', '1', '1', '${moduleName}:${businessName}:list', '#', 'admin', sysdate(), '', null, '${functionName}菜单');\r\n\r\n-- 按钮父菜单ID\r\nSELECT @parentId := LAST_INSERT_ID();\r\n\r\n-- 按钮 SQL\r\ninsert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)\r\nvalues('${functionName}查询', @parentId, '1',  '#', '', 0, 1, 'F', '1', '1', '${moduleName}:${businessName}:query','#', 'admin', sysdate(), '', null, '');\r\n\r\ninsert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)\r\nvalues('${functionName}新增', @parentId, '2',  '#', '', 0, 1, 'F', '1', '1', '${moduleName}:${businessName}:add',  '#', 'admin', sysdate(), '', null, '');\r\n\r\ninsert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)\r\nvalues('${functionName}修改', @parentId, '3',  '#', '', 0, 1, 'F', '1', '1', '${moduleName}:${businessName}:edit', '#', 'admin', sysdate(), '', null, '');\r\n\r\ninsert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)\r\nvalues('${functionName}删除', @parentId, '4',  '#', '', 0, 1, 'F', '1', '1', '${moduleName}:${businessName}:remove', '#', 'admin', sysdate(), '', null, '');\r\n\r\ninsert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)\r\nvalues('${functionName}导出', @parentId, '5',  '#', '', 0, 1, 'F', '1', '1', '${moduleName}:${businessName}:export', '#', 'admin', sysdate(), '', null, '');\r\n"
  },
  {
    "path": "server/src/common/service/gen/gen-template/vue/index.vue.vm",
    "content": "<template>\n  <div class=\"app-container\">\n    <el-form :model=\"queryParams\" ref=\"queryRef\" :inline=\"true\" v-show=\"showSearch\" label-width=\"80px\">\n#foreach($column in $columns)\n#if($column.query)\n#set($dictType=$column.dictType)\n#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})\n#set($parentheseIndex=$column.columnComment.indexOf(\"（\"))\n#if($parentheseIndex != -1)\n#set($comment=$column.columnComment.substring(0, $parentheseIndex))\n#else\n#set($comment=$column.columnComment)\n#end\n#if($column.htmlType == \"input\")\n      <el-form-item label=\"${comment}\" prop=\"${column.javaField}\">\n        <el-input\n          v-model=\"queryParams.${column.javaField}\"\n          placeholder=\"请输入${comment}\"\n          clearable\n          @keyup.enter=\"handleQuery\"\n        />\n      </el-form-item>\n#elseif(($column.htmlType == \"select\" || $column.htmlType == \"radio\") && \"\" != $dictType)\n      <el-form-item label=\"${comment}\" prop=\"${column.javaField}\">\n        <el-select v-model=\"queryParams.${column.javaField}\" placeholder=\"请选择${comment}\" clearable style=\"width:150px\">\n          <el-option\n            v-for=\"dict in ${dictType}\"\n            :key=\"dict.value\"\n            :label=\"dict.label\"\n            :value=\"dict.value\"\n          />\n        </el-select>\n      </el-form-item>\n#elseif(($column.htmlType == \"select\" || $column.htmlType == \"radio\") && $dictType)\n      <el-form-item label=\"${comment}\" prop=\"${column.javaField}\">\n        <el-select v-model=\"queryParams.${column.javaField}\" placeholder=\"请选择${comment}\" clearable style=\"width:150px\">\n          <el-option label=\"请选择字典生成\" value=\"\" />\n        </el-select>\n      </el-form-item>\n#elseif($column.htmlType == \"datetime\" && $column.queryType != \"BETWEEN\")\n      <el-form-item label=\"${comment}\" prop=\"${column.javaField}\">\n        <el-date-picker clearable\n          v-model=\"queryParams.${column.javaField}\"\n          type=\"date\"\n          value-format=\"YYYY-MM-DD HH:mm:ss\"\n          placeholder=\"请选择${comment}\">\n        </el-date-picker>\n      </el-form-item>\n#elseif($column.htmlType == \"datetime\" && $column.queryType == \"BETWEEN\")\n      <el-form-item label=\"${comment}\" style=\"width: 308px\">\n        <el-date-picker\n          v-model=\"daterange${AttrName}\"\n          value-format=\"YYYY-MM-DD HH:mm:ss\"\n          type=\"daterange\"\n          range-separator=\"-\"\n          start-placeholder=\"开始日期\"\n          end-placeholder=\"结束日期\"\n        ></el-date-picker>\n      </el-form-item>\n#end\n#end\n#end\n      <el-form-item>\n        <el-button type=\"primary\" icon=\"Search\" @click=\"handleQuery\">搜索</el-button>\n        <el-button icon=\"Refresh\" @click=\"resetQuery\">重置</el-button>\n      </el-form-item>\n    </el-form>\n\n    <el-row :gutter=\"10\" class=\"mb8\">\n      <el-col :span=\"1.5\">\n        <el-button\n          type=\"primary\"\n          plain\n          icon=\"Plus\"\n          @click=\"handleAdd\"\n          v-hasPermi=\"['${moduleName}:${businessName}:add']\"\n        >新增</el-button>\n      </el-col>\n      <el-col :span=\"1.5\">\n        <el-button\n          type=\"success\"\n          plain\n          icon=\"Edit\"\n          :disabled=\"single\"\n          @click=\"handleUpdate\"\n          v-hasPermi=\"['${moduleName}:${businessName}:edit']\"\n        >修改</el-button>\n      </el-col>\n      <el-col :span=\"1.5\">\n        <el-button\n          type=\"danger\"\n          plain\n          icon=\"Delete\"\n          :disabled=\"multiple\"\n          @click=\"handleDelete\"\n          v-hasPermi=\"['${moduleName}:${businessName}:remove']\"\n        >删除</el-button>\n      </el-col>\n      <el-col :span=\"1.5\">\n        <el-button\n          type=\"warning\"\n          plain\n          icon=\"Download\"\n          @click=\"handleExport\"\n          v-hasPermi=\"['${moduleName}:${businessName}:export']\"\n        >导出</el-button>\n      </el-col>\n      <right-toolbar v-model:showSearch=\"showSearch\" @queryTable=\"getList\"></right-toolbar>\n    </el-row>\n\n    <el-table \n      v-loading=\"loading\" \n      :data=\"${businessName}List\" \n      @selection-change=\"handleSelectionChange\"\n      ref=\"tableRef\" \n      :default-sort=\"defaultSort\"\n      @sort-change=\"handleSortChange\">\n      <el-table-column type=\"selection\" width=\"55\" align=\"center\" />\n#foreach($column in $columns)\n#set($javaField=$column.javaField)\n#set($parentheseIndex=$column.columnComment.indexOf(\"（\"))\n#if($parentheseIndex != -1)\n#set($comment=$column.columnComment.substring(0, $parentheseIndex))\n#else\n#set($comment=$column.columnComment)\n#end\n#if($column.pk)\n      <el-table-column label=\"${comment}\" align=\"center\" prop=\"${javaField}\" sortable=\"custom\" />\n#elseif($column.list && $column.htmlType == \"datetime\")\n      <el-table-column label=\"${comment}\" align=\"center\" prop=\"${javaField}\" width=\"180\" sortable=\"custom\">\n        <template #default=\"scope\">\n          <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>\n        </template>\n      </el-table-column>\n#elseif($column.list && $column.htmlType == \"imageUpload\")\n      <el-table-column label=\"${comment}\" align=\"center\" prop=\"${javaField}\" width=\"100\">\n        <template #default=\"scope\">\n          <image-preview :src=\"scope.row.${javaField}\" :width=\"90\" :height=\"90\"/>\n        </template>\n      </el-table-column>\n#elseif($column.list && $column.htmlType == \"fileUpload\")\n  <el-table-column label=\"${comment}\" align=\"center\" prop=\"${javaField}\" width=\"240\" >\n    <template #default=\"scope\">\n      <FileList :fileList=\"scope.row.${javaField}\" />\n    </template>\n  </el-table-column>\n#elseif($column.list && \"\" != $column.dictType && null != $column.dictType)\n      <el-table-column label=\"${comment}\" align=\"center\" prop=\"${javaField}\" sortable=\"custom\">\n        <template #default=\"scope\">\n#if($column.htmlType == \"checkbox\")\n          <dict-tag :options=\"${column.dictType}\" :value=\"scope.row.${javaField} ? scope.row.${javaField}.split(',') : []\"/>\n#else\n          <dict-tag :options=\"${column.dictType}\" :value=\"scope.row.${javaField}\"/>\n#end\n        </template>\n      </el-table-column>\n#elseif($column.list && \"\" != $javaField)\n      <el-table-column label=\"${comment}\" align=\"center\" prop=\"${javaField}\" sortable=\"custom\" />\n#end\n#end\n      <el-table-column label=\"操作\" align=\"center\" class-name=\"small-padding fixed-width\">\n        <template #default=\"scope\">\n          <el-button link type=\"primary\" icon=\"Edit\" @click=\"handleUpdate(scope.row)\" v-hasPermi=\"['${moduleName}:${businessName}:edit']\">修改</el-button>\n          <el-button link type=\"primary\" icon=\"Delete\" @click=\"handleDelete(scope.row)\" v-hasPermi=\"['${moduleName}:${businessName}:remove']\">删除</el-button>\n        </template>\n      </el-table-column>\n    </el-table>\n    \n    <pagination\n      v-show=\"total>0\"\n      :total=\"total\"\n      v-model:page=\"queryParams.pageNum\"\n      v-model:limit=\"queryParams.pageSize\"\n      @pagination=\"getList\"\n    />\n\n    <!-- 添加或修改${functionName}对话框 -->\n    <el-dialog :title=\"title\" v-model=\"open\" width=\"clamp(350px,90%,600px)\" append-to-body>\n      <el-form ref=\"${businessName}Ref\" :model=\"form\" :rules=\"rules\" label-width=\"100px\">\n#foreach($column in $columns)\n#set($field=$column.javaField)\n#if($column.insert && !$column.pk)\n#if(($column.usableColumn) || (!$column.superColumn))\n#set($parentheseIndex=$column.columnComment.indexOf(\"（\"))\n#if($parentheseIndex != -1)\n#set($comment=$column.columnComment.substring(0, $parentheseIndex))\n#else\n#set($comment=$column.columnComment)\n#end\n#set($dictType=$column.dictType)\n#if($column.htmlType == \"input\")\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <el-input v-model=\"form.${field}\" placeholder=\"请输入${comment}\" />\n        </el-form-item>\n#elseif($column.htmlType == \"imageUpload\")\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <image-upload v-model=\"form.${field}\"/>\n        </el-form-item>\n#elseif($column.htmlType == \"fileUpload\")\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <file-upload v-model=\"form.${field}\"/>\n        </el-form-item>\n#elseif($column.htmlType == \"editor\")\n        <el-form-item label=\"${comment}\">\n          <editor v-model=\"form.${field}\" :min-height=\"192\"/>\n        </el-form-item>\n#elseif($column.htmlType == \"select\" && \"\" != $dictType)\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <el-select v-model=\"form.${field}\" placeholder=\"请选择${comment}\" style=\"width:150px\">\n            <el-option\n              v-for=\"dict in ${dictType}\"\n              :key=\"dict.value\"\n              :label=\"dict.label\"\n#if($column.javaType == \"Integer\" || $column.javaType == \"Number\" || $column.javaType == \"Long\")\n              :value=\"parseInt(dict.value)\"\n#else\n              :value=\"dict.value\"\n#end\n            ></el-option>\n          </el-select>\n        </el-form-item>\n#elseif($column.htmlType == \"select\" && $dictType)\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <el-select v-model=\"form.${field}\" placeholder=\"请选择${comment}\" style=\"width:150px\">\n            <el-option label=\"请选择字典生成\" value=\"\" />\n          </el-select>\n        </el-form-item>\n#elseif($column.htmlType == \"checkbox\" && \"\" != $dictType)\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <el-checkbox-group v-model=\"form.${field}\">\n            <el-checkbox\n              v-for=\"dict in ${dictType}\"\n              :key=\"dict.value\"\n#if($column.javaType == \"Integer\" || $column.javaType == \"Number\" || $column.javaType == \"Long\")\n              :label=\"parseInt(dict.value)\"\n#else\n              :label=\"dict.value\"\n#end\n              >\n              {{dict.label}}\n            </el-checkbox>\n          </el-checkbox-group>\n        </el-form-item>\n#elseif($column.htmlType == \"checkbox\" && $dictType)\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <el-checkbox-group v-model=\"form.${field}\">\n            <el-checkbox>请选择字典生成</el-checkbox>\n          </el-checkbox-group>\n        </el-form-item>\n#elseif($column.htmlType == \"radio\" && \"\" != $dictType)\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <el-radio-group v-model=\"form.${field}\">\n            <el-radio\n              v-for=\"dict in ${dictType}\"\n              :key=\"dict.value\"\n#if($column.javaType == \"Integer\" || $column.javaType == \"Number\" || $column.javaType == \"Long\")\n              :label=\"parseInt(dict.value)\"\n#else\n              :label=\"dict.value\"\n#end\n            >{{dict.label}}</el-radio>\n          </el-radio-group>\n        </el-form-item>\n#elseif($column.htmlType == \"radio\" && $dictType)\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <el-radio-group v-model=\"form.${field}\">\n            <el-radio label=\"1\">请选择字典生成</el-radio>\n          </el-radio-group>\n        </el-form-item>\n#elseif($column.htmlType == \"datetime\")\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <el-date-picker clearable\n            v-model=\"form.${field}\"\n            type=\"datetime\"\n            value-format=\"YYYY-MM-DD HH:mm:ss\"\n            placeholder=\"请选择${comment}\">\n          </el-date-picker>\n        </el-form-item>\n#elseif($column.htmlType == \"textarea\")\n        <el-form-item label=\"${comment}\" prop=\"${field}\">\n          <el-input v-model=\"form.${field}\" type=\"textarea\" placeholder=\"请输入内容\" />\n        </el-form-item>\n#end\n#end\n#end\n#end\n      </el-form>\n      <template #footer>\n        <div class=\"dialog-footer\">\n          <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\n          <el-button @click=\"cancel\">取 消</el-button>\n        </div>\n      </template>\n    </el-dialog>\n  </div>\n</template>\n\n<script setup name=\"${BusinessName}\">\nimport { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from \"@/api/${moduleName}/${businessName}\";\n\nconst { proxy } = getCurrentInstance();\n#if(${dicts} != '')\nconst { ${dictsNoSymbol} } = proxy.useDict(${dicts});\n#end\n\nconst ${businessName}List = ref([]);\n#if($table.sub)\nconst ${subclassName}List = ref([]);\n#end\nconst open = ref(false);\nconst loading = ref(true);\nconst showSearch = ref(true);\nconst ids = ref([]);\n#if($table.sub)\nconst checked${subClassName} = ref([]);\n#end\nconst single = ref(true);\nconst multiple = ref(true);\nconst total = ref(0);\nconst title = ref(\"\");\n#foreach ($column in $columns)\n#if($column.htmlType == \"datetime\" && $column.queryType == \"BETWEEN\")\n#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})\nconst daterange${AttrName} = ref([]);\n#end\n#end\nconst defaultSort = ref({ prop: \"${pkName}\", order: \"descending\" });\nconst data = reactive({\n  form: {},\n  queryParams: {\n    orderByColumn: defaultSort.value.prop,\n    isAsc: defaultSort.value.order,\n    pageNum: 1,\n    pageSize: 10,\n    #foreach ($column in $columns)\n#if($column.query)\n    $column.javaField: null#if($foreach.count != $columns.size()),#end\n#end\n#end\n  },\n  rules: {\n    #foreach ($column in $columns)\n#if($column.required)\n#set($parentheseIndex=$column.columnComment.indexOf(\"（\"))\n#if($parentheseIndex != -1)\n#set($comment=$column.columnComment.substring(0, $parentheseIndex))\n#else\n#set($comment=$column.columnComment)\n#end\n    $column.javaField: [\n      { required: true, message: \"$comment不能为空\", trigger: #if($column.htmlType == \"select\" || $column.htmlType == \"radio\")\"change\"#else\"blur\"#end }\n    ]#if($foreach.count != $columns.size()),#end\n#end\n#end\n  }\n});\n\nconst { queryParams, form, rules } = toRefs(data);\n\n/** 查询${functionName}列表 */\nfunction getList() {\n  loading.value = true;\n#foreach ($column in $columns)\n#if($column.htmlType == \"datetime\" && $column.queryType == \"BETWEEN\")\n  queryParams.value.params = {};\n#break\n#end\n#end\n#foreach ($column in $columns)\n#if($column.htmlType == \"datetime\" && $column.queryType == \"BETWEEN\")\n#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})\n  if (null != daterange${AttrName} && '' != daterange${AttrName}) {\n    queryParams.value.params[\"begin${AttrName}\"] = daterange${AttrName}.value[0];\n    queryParams.value.params[\"end${AttrName}\"] = daterange${AttrName}.value[1];\n  }\n#end\n#end\n  list${BusinessName}(queryParams.value).then(response => {\n    ${businessName}List.value = response.rows;\n    total.value = response.total;\n    loading.value = false;\n  });\n}\n\n// 取消按钮\nfunction cancel() {\n  open.value = false;\n  reset();\n}\n\n// 表单重置\nfunction reset() {\n  form.value = {\n#foreach ($column in $columns)\n#if($column.htmlType == \"checkbox\")\n    $column.javaField: []#if($foreach.count != $columns.size()),#end\n#else\n    $column.javaField: null#if($foreach.count != $columns.size()),#end\n#end\n#end\n  };\n#if($table.sub)\n  ${subclassName}List.value = [];\n#end\n  proxy.resetForm(\"${businessName}Ref\");\n}\n\n/** 搜索按钮操作 */\nfunction handleQuery() {\n  queryParams.value.pageNum = 1;\n  getList();\n}\n\n/** 重置按钮操作 */\nfunction resetQuery() {\n  // 清除排序\n  queryParams.value.orderByColumn = undefined;\n  queryParams.value.isAsc = undefined;\n  proxy.\\$refs[\"tableRef\"].sort(defaultSort.value.prop, defaultSort.value.order);\n#foreach ($column in $columns)\n#if($column.htmlType == \"datetime\" && $column.queryType == \"BETWEEN\")\n#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})\n  daterange${AttrName}.value = [];\n#end\n#end\n  proxy.resetForm(\"queryRef\");\n  handleQuery();\n}\n\n/** 排序触发事件 */\nfunction handleSortChange(column) {\n  if (column.prop && column.order) {\n    queryParams.value.orderByColumn = column.prop;\n    queryParams.value.isAsc = column.order;\n  } else {\n    // 清除排序\n    queryParams.value.orderByColumn = undefined;\n    queryParams.value.isAsc = undefined;\n  }\n  getList();\n}\n\n// 多选框选中数据\nfunction handleSelectionChange(selection) {\n  ids.value = selection.map(item => item.${pkColumn.javaField});\n  single.value = selection.length != 1;\n  multiple.value = !selection.length;\n}\n\n/** 新增按钮操作 */\nfunction handleAdd() {\n  reset();\n  open.value = true;\n  title.value = \"添加${functionName}\";\n}\n\n/** 修改按钮操作 */\nfunction handleUpdate(row) {\n  reset();\n  const _${pkColumn.javaField} = row.${pkColumn.javaField} || ids.value\n  get${BusinessName}(_${pkColumn.javaField}).then(response => {\n    form.value = response.data;\n#foreach ($column in $columns)\n#if($column.htmlType == \"checkbox\")\n    form.value.$column.javaField = form.value.${column.javaField}.split(\",\");\n#end\n#end\n#if($table.sub)\n    ${subclassName}List.value = response.data.${subclassName}List;\n#end\n    open.value = true;\n    title.value = \"修改${functionName}\";\n  });\n}\n\n/** 提交按钮 */\nfunction submitForm() {\n  proxy.#[[$]]#refs[\"${businessName}Ref\"].validate(valid => {\n    if (valid) {\n#foreach ($column in $columns)\n#if($column.htmlType == \"checkbox\")\n      form.value.$column.javaField = form.value.${column.javaField}.join(\",\");\n#end\n#end\n#if($table.sub)\n      form.value.${subclassName}List = ${subclassName}List.value;\n#end\n      if (form.value.${pkColumn.javaField} != null) {\n        update${BusinessName}(form.value).then(response => {\n          proxy.#[[$modal]]#.msgSuccess(\"修改成功\");\n          open.value = false;\n          getList();\n        });\n      } else {\n        add${BusinessName}(form.value).then(response => {\n          proxy.#[[$modal]]#.msgSuccess(\"新增成功\");\n          open.value = false;\n          getList();\n        });\n      }\n    }\n  });\n}\n\n/** 删除按钮操作 */\nfunction handleDelete(row) {\n  const _${pkColumn.javaField}s = row.${pkColumn.javaField} || ids.value;\n  proxy.#[[$modal]]#.confirm('是否确认删除${functionName}编号为\"' + _${pkColumn.javaField}s + '\"的数据项？').then(function() {\n    return del${BusinessName}(_${pkColumn.javaField}s);\n  }).then(() => {\n    getList();\n    proxy.#[[$modal]]#.msgSuccess(\"删除成功\");\n  }).catch(() => {});\n}\n\n#if($table.sub)\n/** ${subTable.functionName}序号 */\nfunction row${subClassName}Index({ row, rowIndex }) {\n  row.index = rowIndex + 1;\n}\n\n/** ${subTable.functionName}添加按钮操作 */\nfunction handleAdd${subClassName}() {\n  let obj = {};\n#foreach($column in $subTable.columns)\n#if($column.pk || $column.javaField == ${subTableFkclassName})\n#elseif($column.list && \"\" != $javaField)\n  obj.$column.javaField = \"\";\n#end\n#end\n  ${subclassName}List.value.push(obj);\n}\n\n/** ${subTable.functionName}删除按钮操作 */\nfunction handleDelete${subClassName}() {\n  if (checked${subClassName}.value.length == 0) {\n    proxy.#[[$modal]]#.msgError(\"请先选择要删除的${subTable.functionName}数据\");\n  } else {\n    const ${subclassName}s = ${subclassName}List.value;\n    const checked${subClassName}s = checked${subClassName}.value;\n    ${subclassName}List.value = ${subclassName}s.filter(function(item) {\n      return checked${subClassName}s.indexOf(item.index) == -1\n    });\n  }\n}\n\n/** 复选框选中数据 */\nfunction handle${subClassName}SelectionChange(selection) {\n  checked${subClassName}.value = selection.map(item => item.index)\n}\n\n#end\n/** 导出按钮操作 */\nfunction handleExport() {\n  proxy.download('${moduleName}/${businessName}/export', {\n    ...queryParams.value\n  }, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)\n}\n\n// 在组件挂载时获取列表数据\nonMounted(() => {\n  getList();\n});\n</script>"
  },
  {
    "path": "server/src/common/service/gen/gen.service.ts",
    "content": "import { BadRequestException, Injectable } from '@nestjs/common';\r\nimport { PrismaService } from '@/common/service/prisma/prisma.service';\r\nimport { Prisma } from '@prismaClient';\r\nimport { queryGenTableDto } from '@/admin/gen/dto/queryGenTableDto';\r\nimport { isNotEmpty } from 'class-validator';\r\nimport { queryDataBaseDto } from '@/admin/gen/dto/queryDatabaseDto';\r\nimport { formatDate, nowDate, nowDateTime, toPascalCase } from '@/common/utils';\r\nimport { camelCase, kebabCase, toLower, upperFirst } from 'lodash';\r\nimport { GenConstants } from '@/common/constant/GenConstants';\r\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs';\r\nimport { dirname, join } from 'path';\r\nimport { Config } from '@/config';\r\nimport * as Velocity from 'velocityjs';\r\nimport * as archiver from 'archiver';\r\nimport { Response } from 'express';\r\n@Injectable()\r\nexport class GenService {\r\n  constructor(private prisma: PrismaService) {}\r\n\r\n  //查询生成表数据\r\n  async listTable(q: queryGenTableDto) {\r\n    const queryCondition: Prisma.GenTableWhereInput = {};\r\n    if (isNotEmpty(q.tableName)) {\r\n      queryCondition.tableName = {\r\n        contains: q.tableName,\r\n      };\r\n    }\r\n    if (isNotEmpty(q.tableComment)) {\r\n      queryCondition.tableComment = {\r\n        contains: q.tableComment,\r\n      };\r\n    }\r\n    if (isNotEmpty(q.params.beginTime) && isNotEmpty(q.params.endTime)) {\r\n      queryCondition.createTime = {\r\n        gte: q.params.beginTime,\r\n        lte: q.params.endTime,\r\n      };\r\n    }\r\n    return {\r\n      rows: await this.prisma.genTable.findMany({\r\n        skip: (q.pageNum - 1) * q.pageSize,\r\n        take: q.pageSize,\r\n        where: queryCondition,\r\n        orderBy: {\r\n          updateTime: 'desc',\r\n        },\r\n      }),\r\n      total: await this.prisma.genTable.count({\r\n        where: queryCondition,\r\n      }),\r\n    };\r\n  }\r\n  //查询db数据库列表\r\n  async listDbTable(q: queryDataBaseDto) {\r\n    const params = [];\r\n    let sql = `\r\n    select table_name as tableName, table_comment as tableComment, create_time as createTime, update_time as updateTime from information_schema.tables\r\n    where table_schema = (select database())\r\n    and table_name NOT LIKE 'qrtz_%' and table_name NOT LIKE 'gen_%'\r\n    and table_name NOT IN (select table_name from gen_table)`;\r\n    let sqlCount = `\r\n    select count(*) as total from information_schema.tables\r\n    where table_schema = (select database())\r\n    and table_name NOT LIKE 'qrtz_%' and table_name NOT LIKE 'gen_%'\r\n    and table_name NOT IN (select table_name from gen_table)\r\n    `;\r\n    if (isNotEmpty(q.tableName)) {\r\n      sql += ` and table_name like concat(\"%\", ?,\"%\") `;\r\n      sqlCount += ` and table_name like concat(\"%\", ?,\"%\") `;\r\n      params.push(q.tableName);\r\n    }\r\n    if (isNotEmpty(q.tableComment)) {\r\n      sql += ` and table_comment like concat(\"%\", ?,\"%\") `;\r\n      sqlCount += ` and table_comment like concat(\"%\", ?,\"%\") `;\r\n      params.push(q.tableComment);\r\n    }\r\n    sql += `\r\n      ORDER BY create_time desc, update_time desc\r\n      limit ${(q.pageNum - 1) * q.pageSize},${q.pageSize}\r\n      \t`;\r\n    return {\r\n      rows: await this.prisma\r\n        .$queryRawUnsafe<Table[]>(sql, ...params)\r\n        .then((res) =>\r\n          res.map((v) => ({\r\n            ...v,\r\n            createTime: formatDate(v.createTime),\r\n            updateTime: formatDate(v.updateTime),\r\n          })),\r\n        ),\r\n      total: Number(\r\n        (await this.prisma.$queryRawUnsafe(sqlCount, ...params))[0]?.total,\r\n      ),\r\n    };\r\n  }\r\n\r\n  //修改代码生成信息\r\n  updateGenTable(info: any) {\r\n    if (!info) throw new BadRequestException('请传入数据！');\r\n    if (info?.params?.parentMenuId) {\r\n      info.options = JSON.stringify({\r\n        parentMenuId: info?.params?.parentMenuId,\r\n      });\r\n    }\r\n    const columns = info.columns?.map((v) => {\r\n      delete v.pk;\r\n      delete v.increment;\r\n      delete v.required;\r\n      delete v.insert;\r\n      delete v.edit;\r\n      delete v.list;\r\n      delete v.query;\r\n      v.updateTime = nowDateTime();\r\n      v.updateBy = 'admin';\r\n      return v;\r\n    });\r\n    delete info.dicts;\r\n    delete info.columns;\r\n    delete info.tableColumns;\r\n    delete info.columnsKey;\r\n    delete info.parentMenuId;\r\n    delete info.BusinessName;\r\n    delete info.pkName;\r\n    delete info.UpperPkName;\r\n    delete info.pkColumn;\r\n    delete info.UpperPkName;\r\n    delete info.params;\r\n\r\n    const id = info.tableId;\r\n    delete info.tableId;\r\n    delete info.dictsNoSymbol;\r\n    return this.prisma.$transaction(async (prisma) => {\r\n      await prisma.genTable.update({\r\n        where: {\r\n          tableId: id,\r\n        },\r\n        data: info,\r\n      });\r\n      for (const column of columns) {\r\n        await prisma.genTableColumn.update({\r\n          where: {\r\n            columnId: column.columnId,\r\n          },\r\n          data: column,\r\n        });\r\n      }\r\n    });\r\n  }\r\n  //导入表\r\n  async importTable(tableNames: string[]) {\r\n    if (!tableNames?.length) return null;\r\n    return this.prisma.$transaction(async (prisma) => {\r\n      //获取需要插入的表基本信息\r\n      const tableList: Table[] =\r\n        await this.selectDbTableListByNames(tableNames);\r\n      for (const table of tableList) {\r\n        const tableName = table.tableName;\r\n        //初始化table表信息，并插入数据库\r\n        let tableInfo = {\r\n          ...table,\r\n          className: Config.gen.autoRemovePre\r\n            ? toPascalCase(\r\n                tableName.replace(\r\n                  new RegExp(Config.gen.tablePrefix.join('|')),\r\n                  '',\r\n                ),\r\n              )\r\n            : toPascalCase(tableName), //实体类名称\r\n          packageName: Config.gen.packageName, //生成模块路径\r\n          moduleName: Config.gen.moduleName, //子系统名，模块下的目录\r\n          businessName: tableName.slice(tableName.lastIndexOf('_') + 1), //生成业务名\r\n          tableComment: table.tableComment?.trim() || table.tableName,\r\n          functionName: table.tableComment?.trim() || table.tableName, //生成功能名\r\n          functionAuthor: Config.gen.author, //作者\r\n          tplWebType: 'element-plus',\r\n          tplCategory: 'crud',\r\n          genType: '0',\r\n          genPath: '/',\r\n          createBy: 'admin',\r\n          updateBy: 'admin',\r\n          createTime: nowDateTime(),\r\n          updateTime: nowDateTime(),\r\n        };\r\n\r\n        tableInfo = await prisma.genTable.create({\r\n          data: tableInfo,\r\n        });\r\n        //获取表的列信息，初始化并插入数据库\r\n        const tableColumn: any = await this.getTableColumnInfo(tableName);\r\n        for (const column of tableColumn) {\r\n          this.initTableColumn(column, tableInfo);\r\n          column.sort = Number(column.sort);\r\n          await prisma.genTableColumn.create({ data: column });\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  //删除表数据\r\n  async delTable(ids: number[]) {\r\n    return this.prisma.$transaction(async (prisma) => {\r\n      //删除tableColumn表信息\r\n      await prisma.genTableColumn.deleteMany({\r\n        where: {\r\n          tableId: {\r\n            in: ids,\r\n          },\r\n        },\r\n      });\r\n      //删除table表信息\r\n      await prisma.genTable.deleteMany({\r\n        where: {\r\n          tableId: {\r\n            in: ids,\r\n          },\r\n        },\r\n      });\r\n\r\n      return true;\r\n    });\r\n  }\r\n\r\n  //生成代码压缩包\r\n  async genCode(tableNames: string[], res: Response) {\r\n    try {\r\n      console.log('代码生成中...', tableNames.join(','));\r\n      if (existsSync(join(__dirname, 'temp'))) {\r\n        try {\r\n          rmSync(join(__dirname, 'temp'), { recursive: true });\r\n        } catch (e) {}\r\n      }\r\n      for (const tableName of tableNames) {\r\n        const info = await this.getTableInfoByTableName(tableName);\r\n        info.columns.forEach((v) => {\r\n          v.columnComment = v.columnComment || v.columnName;\r\n        });\r\n        const data = {\r\n          ...info,\r\n          modelName: camelCase(info.tableName),\r\n          modelName1: toPascalCase(info.tableName),\r\n          filename: kebabCase(info.tableName),\r\n          entityName: camelCase(info.className),\r\n          columnNames: JSON.stringify(\r\n            info.columns?.map((v) => v.columnComment || v.columnName) || [],\r\n          ),\r\n          hasCreateTime: info.columnsKey.includes('create_time'),\r\n          hasUpdateTime: info.columnsKey.includes('update_time'),\r\n          hasBaseDomain:\r\n            info.columnsKey.includes('create_time') &&\r\n            info.columnsKey.includes('update_time') &&\r\n            info.columnsKey.includes('create_by') &&\r\n            info.columnsKey.includes('update_by'),\r\n        };\r\n        const servicePath = join(\r\n          __dirname,\r\n          `temp/node/${data.packageName}/${data.moduleName}/${data.businessName}/service/${data.filename}.service.ts`,\r\n        );\r\n        const controllerPath = join(\r\n          __dirname,\r\n          `temp/node/${data.packageName}/${data.moduleName}/${data.businessName}/${data.filename}.controller.ts`,\r\n        );\r\n        const dtoPath = join(\r\n          __dirname,\r\n          `temp/node/${data.packageName}/${data.moduleName}/${data.businessName}/dto/index.ts`,\r\n        );\r\n        const vuePath = join(\r\n          __dirname,\r\n          `temp/vue/views/${data.moduleName}/${data.businessName}/index.vue`,\r\n        );\r\n        const apiPath = join(\r\n          __dirname,\r\n          `temp/vue/api/${data.moduleName}/${data.businessName}.js`,\r\n        );\r\n        const sqlPath = join(__dirname, `temp/${data.businessName}.sql`);\r\n        const vueTemplateStr = readFileSync(\r\n          join(__dirname, './gen-template/vue/index.vue.vm'),\r\n        ).toString();\r\n        const jsTemplateStr = readFileSync(\r\n          join(__dirname, './gen-template/js/api.js.vm'),\r\n        ).toString();\r\n        const sqlTemplateStr = readFileSync(\r\n          join(__dirname, './gen-template/sql/sql.vm'),\r\n        ).toString();\r\n        const serviceTemplateStr = readFileSync(\r\n          join(__dirname, './gen-template/node/service.ts.vm'),\r\n        ).toString();\r\n        const dtoTemplateStr = readFileSync(\r\n          join(__dirname, './gen-template/node/dto.ts.vm'),\r\n        ).toString();\r\n        const controllerTemplateStr = readFileSync(\r\n          join(__dirname, './gen-template/node/controller.ts.vm'),\r\n        ).toString();\r\n        const vueData = Velocity.render(vueTemplateStr, data).replace(\r\n          /(\\n\\s*\\n)+/g,\r\n          '\\n',\r\n        );\r\n        const apiData = Velocity.render(jsTemplateStr, data).replace(\r\n          /(\\n\\s*\\n)+/g,\r\n          '\\n',\r\n        );\r\n        const sqlData = Velocity.render(sqlTemplateStr, data).replace(\r\n          /(\\n\\s*\\n)+/g,\r\n          '\\n',\r\n        );\r\n        const serviceData = Velocity.render(serviceTemplateStr, data).replace(\r\n          /(\\n\\s*\\n)+/g,\r\n          '\\n',\r\n        );\r\n        const dtoData = Velocity.render(dtoTemplateStr, data).replace(\r\n          /(\\n\\s*\\n)+/g,\r\n          '\\n',\r\n        );\r\n        const controllerData = Velocity.render(\r\n          controllerTemplateStr,\r\n          data,\r\n        ).replace(/(\\n\\s*\\n)+/g, '\\n');\r\n        writeFile(servicePath, serviceData);\r\n        writeFile(controllerPath, controllerData);\r\n        writeFile(dtoPath, dtoData);\r\n        writeFile(vuePath, vueData);\r\n        writeFile(apiPath, apiData);\r\n        writeFile(sqlPath, sqlData);\r\n      }\r\n      console.log('代码生成完毕！');\r\n      res.setHeader('content-type', 'application/octet-stream;charset=UTF-8');\r\n      res.setHeader('content-disposition', 'attachment;filename=\"carole.zip\"');\r\n      res.setHeader('Access-Control-Expose-Headers', 'Content-Disposition');\r\n      res.setHeader('X-Content-Type-Options', 'nosniff');\r\n      res.setHeader('Transfer-Encoding', 'chunked');\r\n      // 创建一个archiver实例，指定压缩包类型为zip\r\n      const archive = archiver('zip', {\r\n        zlib: { level: 9 }, // 设置压缩级别，最高级别为9\r\n      });\r\n      const output = res;\r\n      // 将输出流与archiver实例进行关联\r\n      archive.pipe(output);\r\n      // 添加要压缩的文件或文件夹\r\n      archive.directory(join(__dirname, 'temp'), false);\r\n      // 压缩过程中出错时触发的回调函数\r\n      archive.on('error', function (err) {\r\n        console.log(err);\r\n        res.end();\r\n      });\r\n      output.on('close', function () {\r\n        res.end();\r\n      });\r\n      // 完成压缩\r\n      archive.finalize();\r\n    } catch (error) {\r\n      console.log(error);\r\n      res.end();\r\n    }\r\n  }\r\n\r\n  //预览生成代码\r\n  async previewTable(tableId: number) {\r\n    const info = await this.getTableInfoById(tableId);\r\n    info.columns.forEach((v) => {\r\n      v.columnComment = v.columnComment || v.columnName;\r\n    });\r\n    const data = {\r\n      ...info,\r\n      modelName: camelCase(info.tableName),\r\n      modelName1: toPascalCase(info.tableName),\r\n      filename: kebabCase(info.tableName),\r\n      entityName: camelCase(info.className),\r\n      columnNames: JSON.stringify(\r\n        info.columns?.map((v) => v.columnComment || v.columnName) || [],\r\n      ),\r\n      hasCreateTime: info.columnsKey.includes('create_time'),\r\n      hasUpdateTime: info.columnsKey.includes('update_time'),\r\n      hasBaseDomain:\r\n        info.columnsKey.includes('create_time') &&\r\n        info.columnsKey.includes('update_time') &&\r\n        info.columnsKey.includes('create_by') &&\r\n        info.columnsKey.includes('update_by'),\r\n    };\r\n    const vueTemplateStr = readFileSync(\r\n      join(__dirname, './gen-template/vue/index.vue.vm'),\r\n    ).toString();\r\n    const jsTemplateStr = readFileSync(\r\n      join(__dirname, './gen-template/js/api.js.vm'),\r\n    ).toString();\r\n    const sqlTemplateStr = readFileSync(\r\n      join(__dirname, './gen-template/sql/sql.vm'),\r\n    ).toString();\r\n    const serviceTemplateStr = readFileSync(\r\n      join(__dirname, './gen-template/node/service.ts.vm'),\r\n    ).toString();\r\n    const dtoTemplateStr = readFileSync(\r\n      join(__dirname, './gen-template/node/dto.ts.vm'),\r\n    ).toString();\r\n    const controllerTemplateStr = readFileSync(\r\n      join(__dirname, './gen-template/node/controller.ts.vm'),\r\n    ).toString();\r\n    const vueData = Velocity.render(vueTemplateStr, data).replace(\r\n      /(\\n\\s*\\n)+/g,\r\n      '\\n',\r\n    );\r\n    const apiData = Velocity.render(jsTemplateStr, data).replace(\r\n      /(\\n\\s*\\n)+/g,\r\n      '\\n',\r\n    );\r\n    const sqlData = Velocity.render(sqlTemplateStr, data).replace(\r\n      /(\\n\\s*\\n)+/g,\r\n      '\\n',\r\n    );\r\n    const serviceData = Velocity.render(serviceTemplateStr, data).replace(\r\n      /(\\n\\s*\\n)+/g,\r\n      '\\n',\r\n    );\r\n    const dtoData = Velocity.render(dtoTemplateStr, data).replace(\r\n      /(\\n\\s*\\n)+/g,\r\n      '\\n',\r\n    );\r\n    const controllerData = Velocity.render(controllerTemplateStr, data).replace(\r\n      /(\\n\\s*\\n)+/g,\r\n      '\\n',\r\n    );\r\n    return {\r\n      'gen-template/node/service.ts.vm': serviceData,\r\n      'gen-template/node/controller.ts.vm': controllerData,\r\n      'gen-template/node/dto.ts.vm': dtoData,\r\n      'gen-template/vue/index.vue.vm': vueData,\r\n      'gen-template/js/api.js.vm': apiData,\r\n      'gen-template/sql/sql.vm': sqlData,\r\n    };\r\n  }\r\n  //同步数据库,  我们导入了需要生成代码的数据表，但是我们更改了数据库的结构（比如删除了一些字段，和添加了一些字段），同步更新表数据\r\n  async synchDb(tableName: string) {\r\n    return this.prisma.$transaction(async (prisma) => {\r\n      const table = await this.getTableInfoByTableName(tableName);\r\n      if (!table)\r\n        throw new BadRequestException('同步数据失败，原表结构不存在！');\r\n      //已在数据库中的表列信息\r\n      const tableColumns = table.tableColumns;\r\n      //更改后的数据库表的列信息\r\n      const columns: any = await this.getTableColumnInfo(tableName);\r\n      if (!columns || !columns?.length)\r\n        throw new BadRequestException('同步数据失败，原表结构不存在！');\r\n      //存储之前就存在已生成的列信息\r\n      const tableColumnMap = {};\r\n      for (const v of tableColumns) {\r\n        tableColumnMap[v.columnName] = v;\r\n      }\r\n      //更新或插入列\r\n      for (const column of columns) {\r\n        //初始化column的值\r\n        this.initTableColumn(column, table);\r\n        //如果之前存储过，更新\r\n        if (tableColumnMap[column.columnName]) {\r\n          //之前存储的列\r\n          const prevColumn = tableColumnMap[column.columnName];\r\n          column.columnId = prevColumn.columnId;\r\n          column.sort = Number(column);\r\n          if (column.isList === '1') {\r\n            // 如果是列表，继续保留查询方式/字典类型选项\r\n            column.dictType = prevColumn.dictType;\r\n            column.queryType = prevColumn.queryType;\r\n          }\r\n          await prisma.genTableColumn.update({\r\n            where: {\r\n              columnId: column.columnId,\r\n            },\r\n            data: column,\r\n          });\r\n        }\r\n        //插入\r\n        else {\r\n          column.sort = Number(column);\r\n          await prisma.genTableColumn.create({\r\n            data: column,\r\n          });\r\n        }\r\n      }\r\n      //删除已经不存在表中数据\r\n      if (tableColumns.length > 0) {\r\n        const delColumns = tableColumns\r\n          .filter((v) => !columns.some((z) => z.columnName === v.columnName))\r\n          .map((v) => v.columnId);\r\n        if (delColumns.length > 0) {\r\n          await prisma.genTableColumn.deleteMany({\r\n            where: {\r\n              columnId: {\r\n                in: delColumns,\r\n              },\r\n            },\r\n          });\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  //批量获取表的基本信息（包含注释）\r\n  selectDbTableListByNames(names: string[]) {\r\n    if (!names.length) return null;\r\n    return this.prisma.$queryRawUnsafe<Table[]>(\r\n      `select table_name as tableName, table_comment as tableComment, create_time as createTime, update_time as updateTime from information_schema.tables\r\n      where table_schema = (select database())\r\n      and table_name NOT LIKE 'qrtz_%' and table_name NOT LIKE 'gen_%'\r\n      and table_name NOT IN (select table_name from gen_table)\r\n      and table_name IN (${'?,'.repeat(names.length).slice(0, -1)})`,\r\n      ...names,\r\n    );\r\n  }\r\n  //根据表名获取表的字段信息以及注释\r\n  async getTableColumnInfo(tableName: string) {\r\n    if (!tableName) return null;\r\n    return this.prisma.$queryRaw<\r\n      ColumnInfo[]\r\n    >`select column_name as columnName, (case when (is_nullable = 'no' && column_key != 'PRI')  \r\n    then '1' else '0' end) as isRequired, (case when column_key = 'PRI' then '1' else '0' end) as isPk,\r\n     ordinal_position as sort, column_comment as columnComment, (case when extra = 'auto_increment' then '1' else '0' end) \r\n    as isIncrement, column_type as columnType from information_schema.columns  \r\n    where table_schema = (select database()) and table_name = ${tableName} order by ordinal_position`;\r\n  }\r\n  //根据id查询表详细信息\r\n  getTableInfoById(id: number) {\r\n    return this.prisma.genTable\r\n      .findFirst({\r\n        where: {\r\n          tableId: id,\r\n        },\r\n        include: {\r\n          tableColumns: true,\r\n        },\r\n      })\r\n      .then((tableInfo) => {\r\n        if (!tableInfo) return null;\r\n        const dicts: string[] = [];\r\n        const tableColumns = tableInfo?.tableColumns?.map((v) => {\r\n          if (v.dictType) {\r\n            dicts.push(`'${v.dictType}'`);\r\n          }\r\n          return {\r\n            ...v,\r\n            pk: Boolean(+v.isPk),\r\n            increment: Boolean(+v.isIncrement),\r\n            required: Boolean(+v.isRequired),\r\n            insert: Boolean(+v.isInsert),\r\n            edit: Boolean(+v.isEdit),\r\n            list: Boolean(+v.isList),\r\n            query: Boolean(+v.isQuery),\r\n          };\r\n        });\r\n        const pkColumn =\r\n          tableColumns?.find(\r\n            (v: any) => Boolean(+v.isPk) && Boolean(+v.isIncrement),\r\n          ) || tableColumns[0];\r\n        const data = {\r\n          ...tableInfo,\r\n          dicts: dicts.join(','),\r\n          dictsNoSymbol: dicts.join(',').replace(/\"|'/g, ''),\r\n          columns: tableColumns,\r\n          tableColumns,\r\n          columnsKey: JSON.stringify(\r\n            tableInfo?.tableColumns?.map((v) => v.columnName),\r\n          ),\r\n          parentMenuId:\r\n            +JSON.parse(tableInfo.options || null)?.parentMenuId || 0,\r\n          BusinessName: upperFirst(tableInfo.businessName),\r\n          pkColumn,\r\n          pkName: pkColumn.javaField,\r\n          UpperPkName: upperFirst(pkColumn.javaField),\r\n        };\r\n        return data;\r\n      });\r\n  }\r\n  //根据表名查询表详细信息\r\n  getTableInfoByTableName(tableName: string) {\r\n    return this.prisma.genTable\r\n      .findFirst({\r\n        where: {\r\n          tableName,\r\n        },\r\n        include: {\r\n          tableColumns: true,\r\n        },\r\n      })\r\n      .then((tableInfo) => {\r\n        if (!tableInfo) return null;\r\n        const dicts: string[] = [];\r\n        const tableColumns = tableInfo?.tableColumns?.map((v) => {\r\n          if (v.dictType) {\r\n            dicts.push(`\"${v.dictType}\"`);\r\n          }\r\n          return {\r\n            ...v,\r\n            pk: Boolean(+v.isPk),\r\n            increment: Boolean(+v.isIncrement),\r\n            required: Boolean(+v.isRequired),\r\n            insert: Boolean(+v.isInsert),\r\n            edit: Boolean(+v.isEdit),\r\n            list: Boolean(+v.isList),\r\n            query: Boolean(+v.isQuery),\r\n          };\r\n        });\r\n        const pkColumn =\r\n          tableColumns?.find(\r\n            (v: any) => Boolean(+v.isPk) && Boolean(+v.isIncrement),\r\n          ) || tableColumns[0];\r\n        const data = {\r\n          ...tableInfo,\r\n          dicts: dicts.join(','),\r\n          dictsNoSymbol: dicts.join(',').replace(/\"|'/g, ''),\r\n          columns: tableColumns,\r\n          tableColumns,\r\n          columnsKey: JSON.stringify(\r\n            tableInfo?.tableColumns?.map((v) => v.columnName),\r\n          ),\r\n          parentMenuId:\r\n            +JSON.parse(tableInfo.options || null)?.parentMenuId || 0,\r\n          BusinessName: upperFirst(tableInfo.businessName),\r\n          pkColumn,\r\n          pkName: pkColumn.javaField,\r\n          UpperPkName: upperFirst(pkColumn.javaField),\r\n        };\r\n        return data;\r\n      });\r\n  }\r\n\r\n  //初始化表列的字段信息\r\n  initTableColumn(column: any, table: any) {\r\n    const columnName = column.columnName;\r\n    const dataType = column.columnType;\r\n    column.tableId = table.tableId;\r\n    column.javaField = camelCase(columnName);\r\n    column.javaType = GenConstants.TYPE_STRING;\r\n    column.queryType = GenConstants.QUERY_EQ;\r\n    column.createBy = column.createBy || 'admin';\r\n    column.columnComment = column.columnComment || column.columnName;\r\n    column.createTime = column.createTime || nowDateTime();\r\n    column.updateBy = 'admin';\r\n    column.updateTime = nowDateTime();\r\n    if (arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType)) {\r\n      column.htmlType = GenConstants.HTML_TEXTAREA;\r\n    } else if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType)) {\r\n      const len = getColumnLength(dataType);\r\n      column.htmlType =\r\n        len >= 500 ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT;\r\n    } else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) {\r\n      column.javaType = GenConstants.TYPE_DATE;\r\n      column.htmlType = GenConstants.HTML_DATETIME;\r\n    } else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) {\r\n      column.htmlType = GenConstants.HTML_INPUT;\r\n      column.javaType = GenConstants.TYPE_NUMBER;\r\n    }\r\n\r\n    // 插入字段（默认所有字段都需要插入）\r\n    column.isInsert = GenConstants.REQUIRE;\r\n\r\n    // 编辑字段\r\n    if (\r\n      !arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) &&\r\n      column.isPk != 1\r\n    ) {\r\n      column.isEdit = GenConstants.REQUIRE;\r\n    }\r\n    // 列表字段\r\n    if (\r\n      !arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) &&\r\n      column.isPk != 1\r\n    ) {\r\n      column.isList = GenConstants.REQUIRE;\r\n    }\r\n    // 查询字段\r\n    if (\r\n      !arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) &&\r\n      column.isPk != 1 &&\r\n      column.htmlType != GenConstants.HTML_TEXTAREA\r\n    ) {\r\n      column.isQuery = GenConstants.REQUIRE;\r\n    }\r\n    const lowerColumnName = toLower(columnName);\r\n    // 查询字段类型\r\n    if (lowerColumnName.includes('name')) {\r\n      column.queryType = GenConstants.QUERY_LIKE;\r\n    }\r\n    // 状态字段设置单选框\r\n    if (lowerColumnName.includes('status')) {\r\n      column.htmlType = GenConstants.HTML_RADIO;\r\n    }\r\n    // 类型&性别字段设置下拉框\r\n    else if (\r\n      lowerColumnName.includes('type') ||\r\n      lowerColumnName.includes('sex')\r\n    ) {\r\n      column.htmlType = GenConstants.HTML_SELECT;\r\n    }\r\n    //日期字段设置日期控件\r\n    else if (\r\n      lowerColumnName.includes('time') ||\r\n      lowerColumnName.includes('_date') ||\r\n      lowerColumnName.includes('Date')\r\n    ) {\r\n      column.htmlType = GenConstants.HTML_DATETIME;\r\n      column.queryType = GenConstants.QUERY_BETWEEN;\r\n    }\r\n    // 图片字段设置图片上传控件\r\n    else if (lowerColumnName.includes('image')) {\r\n      column.htmlType = GenConstants.HTML_IMAGE_UPLOAD;\r\n    }\r\n    // 文件字段设置文件上传控件\r\n    else if (lowerColumnName.includes('file')) {\r\n      column.htmlType = GenConstants.HTML_FILE_UPLOAD;\r\n    }\r\n    // 内容字段设置富文本控件\r\n    else if (lowerColumnName.includes('content')) {\r\n      column.htmlType = GenConstants.HTML_EDITOR;\r\n    }\r\n  }\r\n\r\n  /**@desc 运行任意sql */\r\n  excute(sql: string) {\r\n    const sqls = sql.split(';').filter((v) => !!v.trim());\r\n    return this.prisma.$transaction(async (db) => {\r\n      const res = [];\r\n      for (const sql of sqls) {\r\n        res.push(\r\n          sql.includes('select')\r\n            ? await db.$queryRawUnsafe(sql)\r\n            : await db.$executeRawUnsafe(sql),\r\n        );\r\n      }\r\n      return res;\r\n    });\r\n  }\r\n}\r\n\r\n/** 检查数据中是有某个值在str中包含 */\r\nfunction arraysContains(arr = [], str = '') {\r\n  return arr.some((v) => v.includes(str) || str.includes(v));\r\n}\r\n\r\n/** 获取数据库varchar（）括号的长度 */\r\nfunction getColumnLength(str = '') {\r\n  if (str.includes('(')) {\r\n    return +str.slice(str.indexOf('(') + 1, str.indexOf(')'));\r\n  } else {\r\n    return 0;\r\n  }\r\n}\r\n/** 递归创建目录 */\r\n\r\nfunction mkdir(dir) {\r\n  try {\r\n    if (!existsSync(dir)) {\r\n      mkdirSync(dir, { recursive: true });\r\n    }\r\n  } catch (e) {}\r\n}\r\n/** 写入文件数据，并且同时创建目录 */\r\nfunction writeFile(p, data) {\r\n  mkdir(dirname(p));\r\n  writeFileSync(p, data);\r\n}\r\n"
  },
  {
    "path": "server/src/common/service/prisma/prisma.service.ts",
    "content": "import { Config } from '@/config';\r\nimport { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';\r\nimport { PrismaClient } from '../../prisma-client';\r\n@Injectable()\r\nexport class PrismaService\r\n  extends PrismaClient\r\n  implements OnModuleInit, OnModuleDestroy\r\n{\r\n  constructor() {\r\n    super({\r\n      log: Config.prisma.logEnable ? Config.prisma.log : [],\r\n      datasourceUrl: process.env.DATABASE_URL,\r\n    });\r\n  }\r\n  async onModuleInit() {\r\n    this.$connect();\r\n  }\r\n\r\n  async onModuleDestroy() {\r\n    await this.$disconnect();\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/src/common/swagger/vo/index.ts",
    "content": "import { ApiProperty } from '@nestjs/swagger';\r\n\r\nexport class ResponseVo<T = null> {\r\n  @ApiProperty({\r\n    example: 200,\r\n    description: '响应code',\r\n  })\r\n  code: number;\r\n  @ApiProperty({\r\n    example: true,\r\n    description: '请求是否成功处理',\r\n  })\r\n  'success': boolean;\r\n  @ApiProperty({\r\n    example: 'successful',\r\n    description: '接口备注信息',\r\n  })\r\n  'msg': string;\r\n  @ApiProperty({\r\n    default: null,\r\n    description: '返回数据',\r\n  })\r\n  'data': T;\r\n  @ApiProperty({\r\n    example: '2024-04-28 22:32:35',\r\n    description: '处理时间',\r\n  })\r\n  'time': string;\r\n}\r\n\r\nexport class ResponseTableVo<T = any> {\r\n  @ApiProperty({\r\n    example: 0,\r\n    description: '总记录数',\r\n  })\r\n  total: number;\r\n\r\n  @ApiProperty({\r\n    default: null,\r\n    description: '列表数据',\r\n  })\r\n  rows: T[];\r\n\r\n  @ApiProperty({\r\n    example: 200,\r\n    description: '消息状态码',\r\n  })\r\n  code: number;\r\n\r\n  @ApiProperty({\r\n    example: '查询成功',\r\n    description: '消息内容',\r\n  })\r\n  msg: string;\r\n}\r\n"
  },
  {
    "path": "server/src/common/types/gen.d.ts",
    "content": "interface Table {\r\n  tableName: string | null | undefined;\r\n  tableComment: string | null | undefined;\r\n  createTime: Date | null | undefined;\r\n  updateTime: Date | null | undefined;\r\n}\r\n\r\ninterface ColumnInfo {\r\n  columnName: string | null | undefined;\r\n  isRequired: string | null | undefined;\r\n  isPk: string | null | undefined;\r\n  isIncrement: string | null | undefined;\r\n  sort: int | null | undefined;\r\n  columnComment: string | null | undefined;\r\n  columnType: string | null | undefined;\r\n}\r\n"
  },
  {
    "path": "server/src/common/utils/Valids.ts",
    "content": "//邮箱\r\nexport function isEmail(value: string) {\r\n  return /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/.test(\r\n    value,\r\n  );\r\n}\r\n//手机号\r\nexport function isPhone(value: string) {\r\n  return /^(?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[01256789]))\\d{8}$/.test(\r\n    value,\r\n  );\r\n}\r\n//是否中文汉字\r\nexport function isChinese(value: string) {\r\n  return /^(?:[\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uFA0E\\uFA0F\\uFA11\\uFA13\\uFA14\\uFA1F\\uFA21\\uFA23\\uFA24\\uFA27-\\uFA29]|[\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0])+$/.test(\r\n    value,\r\n  );\r\n}\r\n//base64\r\nexport function isBase64(value: string) {\r\n  return /^\\s*data:(?:[a-z]+\\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\\-._~:@/?%\\s]*?)\\s*$/i.test(\r\n    value,\r\n  );\r\n}\r\n//图片url\r\nexport function isImgUrl(value: string) {\r\n  return /^https?:\\/\\/(.+\\/)+.+(\\.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif))$/i.test(\r\n    value,\r\n  );\r\n}\r\n//版本号\r\nexport function isVersion(value: string) {\r\n  return /^\\d+(?:\\.\\d+){2}$/.test(value);\r\n}\r\n//UUID\r\nexport function isUUID(value: string) {\r\n  return /^[a-f\\d]{4}(?:[a-f\\d]{4}-){4}[a-f\\d]{12}$/i.test(value);\r\n}\r\n//必须带端口号的网址(或ip)\r\nexport function isUrlAndPort(value: string) {\r\n  return /^((ht|f)tps?:\\/\\/)?[\\w-]+(\\.[\\w-]+)+:\\d{1,5}\\/?$/.test(value);\r\n}\r\n//迅雷网址\r\nexport function isThunderx(value: string) {\r\n  return /^thunderx?:\\/\\/[a-zA-Z\\d]+=$/.test(value);\r\n}\r\n//子网掩码\r\nexport function isSubnet(value: string) {\r\n  return /^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(255|254|252|248|240|224|192|128|0)$/.test(\r\n    value,\r\n  );\r\n}\r\n//window文件路径\r\nexport function isFilePath(value: string) {\r\n  return /^[a-zA-Z]:\\\\(?:\\w+\\\\)*\\w+\\.\\w+$/.test(value);\r\n}\r\n//window文件夹路径\r\nexport function isDirPath(value: string) {\r\n  return /^[a-zA-Z]:\\\\(?:\\w+\\\\?)*$/.test(value);\r\n}\r\n//html注释\r\nexport function isHtmlAnnotation(value: string) {\r\n  return /<!--[\\s\\S]*?-->/g.test(value);\r\n}\r\n//md5 32位\r\nexport function isMd5(value: string) {\r\n  return /^[a-fA-F0-9]{32}$/.test(value);\r\n}\r\n//视频url\r\nexport function isVideoUrl(value: string) {\r\n  return /^https?:\\/\\/(.+\\/)+.+(\\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4|m3u8))$/i.test(\r\n    value,\r\n  );\r\n}\r\n//24小时制时间（HH:mm:ss）\r\nexport function isTime24(value: string) {\r\n  return /^(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$/.test(value);\r\n}\r\n//12小时制时间（HH:mm:ss）\r\nexport function isTime12(value: string) {\r\n  return /^(?:1[0-2]|0?[1-9]):[0-5]\\d:[0-5]\\d$/.test(value);\r\n}\r\n//数字/货币金额（支持负数、千分位分隔符）\r\nexport function isMoney(value: string) {\r\n  return /^-?\\d{1,3}(,\\d{3})*(\\.\\d{1,2})?$/.test(value);\r\n}\r\n//银行卡号（10到30位, 覆盖对公/私账户, 参考[微信支付]\r\nexport function isBankNumber(value: string) {\r\n  return /^[1-9]\\d{9,29}$/.test(value);\r\n}\r\n//日期(严谨, 支持闰年判断)\r\nexport function isDate(value: string) {\r\n  return /^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$/.test(\r\n    value,\r\n  );\r\n}\r\n//中国省\r\nexport function isProvince(value: string) {\r\n  return /^浙江|上海|北京|天津|重庆|黑龙江|吉林|辽宁|内蒙古|河北|新疆|甘肃|青海|陕西|宁夏|河南|山东|山西|安徽|湖北|湖南|江苏|四川|贵州|云南|广西|西藏|江西|广东|福建|台湾|海南|香港|澳门$/.test(\r\n    value,\r\n  );\r\n}\r\n//身份证号, 支持1/2代(15位/18位数字\r\nexport function isIdentify(value: string) {\r\n  return /^\\d{6}((((((19|20)\\d{2})(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|(((19|20)\\d{2})(0[13578]|1[02])31)|((19|20)\\d{2})02(0[1-9]|1\\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\\d{3})|((((\\d{2})(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|((\\d{2})(0[13578]|1[02])31)|((\\d{2})02(0[1-9]|1\\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\\d{2}))(\\d|X|x)$/.test(\r\n    value,\r\n  );\r\n}\r\n//帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线组合\r\nexport function isAccount(value: string) {\r\n  return /^\\w{5,15}$/.test(value);\r\n}\r\n//纯数字\r\nexport function isNumber(value: string) {\r\n  return /^\\d+$/.test(value);\r\n}\r\n//html标签(宽松匹配)\r\nexport function isHtmlTag(value: string) {\r\n  return /<(\\w+)[^>]*>(.*?<\\/\\1>)?/.test(value);\r\n}\r\n//qq号格式正确\r\nexport function isQQNumber(value: string) {\r\n  return /^[1-9][0-9]{4,10}$/.test(value);\r\n}\r\n//密码强度校验，最少6位，包括至少1个大写字母，1个小写字母，1个数字，1个特殊字符 !@#$%^&*?\r\nexport function isPasswordHighs(value: string) {\r\n  return /^\\S*(?=\\S{6,})(?=\\S*\\d)(?=\\S*[A-Z])(?=\\S*[a-z])(?=\\S*[!@#$%^&*?])\\S*$/.test(\r\n    value,\r\n  );\r\n}\r\n//大写字母，小写字母，数字，特殊符号 `@#$%^&*`~()-+=` 中任意3项密码\r\nexport function isPassword(value: string) {\r\n  return /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\\W_!@#$%^&*`~()-+=]+$)(?![0-9\\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\\W_!@#$%^&*`~()-+=]/.test(\r\n    value,\r\n  );\r\n}\r\n//ipV4[:端口]\r\nexport function isIpv4(value: string) {\r\n  return /^((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/.test(\r\n    value,\r\n  );\r\n}\r\n//ip-v6[:端口]\r\nexport function isIpv6(value: string) {\r\n  return /(^(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$)|(^\\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))\\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$)/i.test(\r\n    value,\r\n  );\r\n}\r\n//16进制颜色\r\nexport function isHexColor(value: string) {\r\n  return /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}|[a-fA-F0-9]{8}|[a-fA-F0-9]{4})$/.test(\r\n    value,\r\n  );\r\n}\r\n//微信号(wx)，6至20位，以字母开头，字母，数字，减号，下划线\r\nexport function isWxAccount(value: string) {\r\n  return /^[a-zA-Z][-_a-zA-Z0-9]{5,19}$/.test(value);\r\n}\r\n//邮政编码(中国)\r\nexport function isPostalCode(value: string) {\r\n  return /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\\d{4}$/.test(\r\n    value,\r\n  );\r\n}\r\n//mac地址\r\nexport function isMacAddr(value: string) {\r\n  return /^(([a-f0-9][0,2,4,6,8,a,c,e]:([a-f0-9]{2}:){4})|([a-f0-9][0,2,4,6,8,a,c,e]-([a-f0-9]{2}-){4}))[a-f0-9]{2}$/i.test(\r\n    value,\r\n  );\r\n}\r\n//域名(非网址, 不包含协议)\r\nexport function isDomain(value: string) {\r\n  return /^([0-9a-zA-Z-]{1,}\\.)+([a-zA-Z]{2,})$/.test(value);\r\n}\r\n//Null或者empty\r\nexport function isNullOrEmpty(value: string) {\r\n  return value === null || value === undefined || value === '';\r\n}\r\n"
  },
  {
    "path": "server/src/common/utils/cache.ts",
    "content": "import { Logger } from \"@nestjs/common\";\n\n//缓存数据到内存中，过时自动刷新 \nclass CacheTool {\n  cache: Map<string, {\n    expirationTime: number,\n    value: any,\n    expiration: number,\n    initFunction?: Function,\n    isRefresh: boolean\n  }>\n  constructor() {\n    this.cache = new Map()\n  }\n\n  /**\n  * \n  * @param key 缓存的键\n  * @param value 缓存的value\n  * @param initFunction 初始值和刷新值的函数\n  * @param expirationTime 过期时间，毫秒\n  * @param isRefresh  过期是否自动刷新\n  */\n  set(key: string, value: any, initFunction?: Function, expirationTime: number = Infinity, isRefresh: boolean = true) {\n    return this.init(key, value, initFunction, expirationTime, isRefresh)\n  }\n\n async get(key: string) {\n    const item = this.cache.get(key);\n    if (!item) return null;\n    // 检查是否过期\n    if (!this.isExpire(key)) {\n      return item.value;\n    }\n    // 处理过期数据\n    if (item.initFunction) {\n      if (item.isRefresh) {\n        return this.refresh(key);\n      }\n    }\n    // 删除过期数据\n    this.cache.delete(key);\n    return null;\n  }\n  /**\n   * \n   * @param key 缓存的键\n   * @param value 缓存的value\n   * @param initFunction 初始值和刷新值的函数\n   * @param expirationTime 过期时间，毫秒\n   * @param isRefresh  过期是否自动刷新\n   */\n  async init(key: string, value: any, initFunction?: Function, expirationTime: number = Infinity, isRefresh: boolean = true) {\n    const expiration = Date.now() + expirationTime;\n    if (value) {\n      return this.cache.set(key, {\n        expirationTime,\n        value,\n        expiration,\n        initFunction,\n        isRefresh\n      });\n    } else {\n      return this.cache.set(key, {\n        expirationTime,\n        value: (await Promise.resolve(initFunction())),\n        expiration,\n        initFunction,\n        isRefresh\n      });\n    }\n\n  }\n  async refresh(key: string, value?: any) {\n    const item = this.cache.get(key);\n    try {\n      if (!item || !item.isRefresh) return null\n      if (value) {\n        this.init(key, value, item.initFunction, item.expirationTime);\n        return value;\n      } else if (item.initFunction) {\n        const refreshedValue = await Promise.resolve(item.initFunction());\n        if (refreshedValue !== undefined) {\n          this.init(key, refreshedValue, item.initFunction, item.expirationTime);\n          return refreshedValue;\n        }\n      }\n    } catch (error) {\n      Logger.error(error);\n      return;\n    }\n  }\n  delete(key: string) {\n    return this.cache.delete(key)\n  }\n  keys() {\n    return this.cache.keys()\n  }\n  values() {\n    return this.cache.values()\n  }\n  size() {\n    return this.cache.size\n  }\n  isExpire(key: string) {\n    let item = this.cache.get(key)\n    return !item || Date.now() > item.expiration\n  }\n}\n\nexport const cacheService = new CacheTool()"
  },
  {
    "path": "server/src/common/utils/captcha.ts",
    "content": "import * as svgCaptcha from 'svg-captcha';\r\n\r\nconst options = {\r\n  // 验证码字符集，可以是字母、数字或者组合\r\n  charPreset: '0123456789QWERTYUIOPSDFGHJKLAZXCVBNMzxcvbnmasdfghjklqwertyuiop',\r\n  // 验证码长度\r\n  size: 4,\r\n  // 验证码字体大小\r\n  fontSize: 60,\r\n  // 验证码图像宽度\r\n  width: 150,\r\n  // 验证码图像高度\r\n  height: 50,\r\n  // 干扰线的数量\r\n  noise: 2,\r\n  // 验证码背景颜色\r\n  background: '#ffffff',\r\n  // 验证码文字颜色\r\n  // color: \"#33ccff\",\r\n  // 验证码文字倾斜度\r\n  rotate: 15,\r\n  // 验证码字符间距\r\n  letterSpacing: 0,\r\n  // 验证码噪点的颜色\r\n  noiseColor: '#000000',\r\n  // 验证码噪点的透明度\r\n  opacity: 0.1,\r\n  // 验证码噪点的密度\r\n  pointSize: 1,\r\n  // 验证码噪点的样式，可以是 'circle' 或 'line'\r\n  pointStyle: 'circle',\r\n  // 验证码噪点的半径\r\n  pointRadius: 2,\r\n  // 验证码噪点的位置，可以是 'random' 或 'top' 或 'left' 或 'right' 或 'bottom'\r\n  pointPosition: 'random',\r\n};\r\n\r\nexport function createMath() {\r\n  return svgCaptcha.createMathExpr({\r\n    ...options,\r\n    mathMin: 1,\r\n    mathMax: 50,\r\n    mathOperator: '+-',\r\n  });\r\n}\r\n\r\nexport function createText() {\r\n  return svgCaptcha.create(options);\r\n}\r\n"
  },
  {
    "path": "server/src/common/utils/email.ts",
    "content": "import { Config } from '@/config';\r\nimport { createTransport, Transporter } from 'nodemailer';\r\nimport * as assert from 'assert';\r\nimport Mail from 'nodemailer/lib/mailer';\r\nimport { isEmail } from 'class-validator';\r\nlet transporter: Transporter;\r\n//邮件并发数量\r\nconst maxConcurrentTasks = 10;\r\nlet runningTasks: Promise<any>[] = [];\r\nconst emailQueue: (() => Promise<any>)[] = [];\r\n// 添加邮件任务到队列\r\nfunction addEmailTaskToQueue(task: () => Promise<any>) {\r\n  emailQueue.push(task);\r\n  processQueue(); // 尝试处理队列\r\n}\r\n// 处理邮件任务队列\r\nfunction processQueue() {\r\n  if (runningTasks.length >= maxConcurrentTasks || emailQueue.length === 0) {\r\n    return; // 并发数已达上限，或无任务\r\n  }\r\n  // 从队列取一个任务\r\n  const nextTask = emailQueue.shift();\r\n  if (nextTask) {\r\n    const taskPromise = nextTask()\r\n      .catch(error => console.error(error))\r\n      .finally(() => {\r\n        // 移除已完成的任务\r\n        runningTasks = runningTasks.filter(task => task !== taskPromise);\r\n        processQueue(); // 继续处理下一个任务\r\n      });\r\n\r\n    runningTasks.push(taskPromise);\r\n  }\r\n}\r\n\r\nif (Config.mail.enable) {\r\n  transporter = createTransport(Config.mail.config);\r\n  checkConnect();\r\n}\r\n// 测试发件\r\n/* async function test() {\r\n  await sendCode(\"bobbi6837@gmail.com\", \"12323\")\r\n  console.log(\"发送成功\")\r\n}\r\ntest()\r\n*/\r\n\r\n/**\r\n * @desc 检查邮箱服务器是否能正常连接！\r\n */\r\nfunction checkConnect() {\r\n  return transporter\r\n    .verify()\r\n    .then(() => console.log('邮箱服务器连接成功！'))\r\n    .catch((error) => console.log('邮箱服务器连接失败！', error));\r\n}\r\n\r\n/**\r\n * @description 发送邮件\r\n */\r\nexport async function sendMail(options: Mail.Options & { to: string }) {\r\n  return new Promise(async (resolve, reject) => {\r\n    addEmailTaskToQueue(async () => { \r\n      const t = setTimeout(() => {\r\n        reject('邮件发送失败:超时！');\r\n      }, Config.mail.timeout);\r\n      assert(\r\n        options.to.split(',').every((v) => isEmail(v)),\r\n        '邮箱格式不正确！',\r\n      );\r\n      options = {\r\n        subject: '我是一封神奇的邮箱！',\r\n        from: Config.mail.config.auth.user,\r\n        text: '测试！！！',\r\n        // to: '',//发送到多个用户中间用,连接\r\n        // text: 'test',//发送文本\r\n        // html: '<h1>Hello,world!</h1>', //可以发送html\r\n        ...options,\r\n      };\r\n      try {\r\n        const res = await transporter.sendMail(options);\r\n        return resolve('邮件发送成功~ ：' + res.accepted.toString());\r\n      } catch (err) {\r\n        console.log('邮件发送失败！', err);\r\n        return reject('邮件发送失败！');\r\n      } finally {\r\n        clearTimeout(t);\r\n      }\r\n    })\r\n  });\r\n}\r\n\r\n/**\r\n * @desc 发送验证码模版\r\n */\r\nexport async function sendCode(email: string, code: string | number) {\r\n  const mail = {\r\n    subject: '验证码',\r\n    to: email,\r\n    html: `\r\n    <div style=\"\r\n    width: 550px;\r\n    height: auto;\r\n    border-radius: 5px;\r\n    margin: 0 auto;\r\n    border: 1px solid #ffb0b0;\r\n    box-shadow: 0px 0px 20px #888888;\r\n    position: relative;\r\n    padding-bottom: 5px;\r\n  \">\r\n    <div style=\"\r\n      background-image: url(https://article.biliimg.com/bfs/article/961a15c49336a73cac0c0cb77a1dbb348b13dc99.jpg);\r\n      width: 550px;\r\n      height: 300px;\r\n      background-size: cover;\r\n      background-repeat: no-repeat;\r\n      border-radius: 5px 5px 0px 0px;\r\n    \"></div>\r\n    <div style=\"\r\n      width: 255px;\r\n      height: 40px;\r\n      background-color: rgb(255, 114, 114);\r\n      margin-top: -20px;\r\n      margin-left: 20px;\r\n      box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.3);\r\n      color: rgb(255, 255, 255);\r\n      text-align: center;\r\n      line-height: 40px;\r\n      border-radius: 8px;\r\n      border-top-left-radius: 0;\r\n    \">\r\n      Dear: ${email}\r\n    </div>\r\n    <div style=\"\r\n      background-color: white;\r\n      line-height: 180%;\r\n      padding: 0 15px 12px;\r\n      width: 520px;\r\n      margin: 30px auto;\r\n      color: #555555;\r\n      font-family: 'Century Gothic', 'Trebuchet MS', 'Hiragino Sans GB',\r\n        微软雅黑, 'Microsoft Yahei', Tahoma, Helvetica, Arial, 'SimSun',\r\n        sans-serif;\r\n      font-size: 12px;\r\n      margin-bottom: 0px;\r\n    \">\r\n      <h2 style=\"\r\n        border-bottom: 1px solid #ddd;\r\n        font-size: 14px;\r\n        font-weight: normal;\r\n        padding: 13px 0 10px 8px;\r\n      \">\r\n        <span style=\"color: #12addb; font-weight: bold;\">&gt; </span>欧尼酱，您在本站的验证码已送达哦~请勿泄露\r\n      </h2>\r\n      <div style=\"padding: 0 12px 0 12px; margin-top: 18px;\">\r\n        <p><strong>您收到的验证码为：</strong></p>\r\n        <p style=\"\r\n          background-color: #f5f5f5;\r\n          border: 0px solid #ddd;\r\n          padding: 10px 15px;\r\n          margin: 18px 0;\r\n          color: rgb(255, 114, 114);\r\n          font-size: 20px;\r\n          font-weight: 700;\r\n        \">\r\n          ${code}\r\n        </p>\r\n      </div>\r\n    </div>\r\n    <div style=\"\r\n      color: #8c8c8c;\r\n      font-family: 'Century Gothic', 'Trebuchet MS', 'Hiragino Sans GB',\r\n        微软雅黑, 'Microsoft Yahei', Tahoma, Helvetica, Arial, 'SimSun',\r\n        sans-serif;\r\n      font-size: 10px;\r\n      width: 100%;\r\n      text-align: center;\r\n      word-wrap: break-word;\r\n      margin-top: -30px;\r\n    \">\r\n      <p style=\"padding: 20px;\">虽然行为本身毫无意义，但是需要曾尽力了这个事实呀，我是这么想的。</p>\r\n    </div>\r\n    <div style=\"text-decoration: none;\r\n    color: #fff;\r\n    width: 55%;\r\n    text-align: center;\r\n    background-color: #ff7272;\r\n    height: 40px;\r\n    line-height: 35px;\r\n    box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.3);\r\n    margin: -10px auto;\r\n    display: block;\r\n    border-radius: 4px;\r\n      border-bottom-right-radius: 0;\">验证码3分钟以内有效，请尽快使用</div>\r\n    <div style=\"\r\n      color: #8c8c8c;\r\n      font-family: 'Century Gothic', 'Trebuchet MS', 'Hiragino Sans GB',\r\n        微软雅黑, 'Microsoft Yahei', Tahoma, Helvetica, Arial, 'SimSun',\r\n        sans-serif;\r\n      font-size: 10px;\r\n      width: 100%;\r\n      text-align: center;\r\n      margin-top: 30px;\r\n    \">\r\n      <p>本邮件为系统自动发送，请勿直接回复~</p>\r\n    </div>\r\n    <div style=\"\r\n      color: #8c8c8c;\r\n      font-family: 'Century Gothic', 'Trebuchet MS', 'Hiragino Sans GB',\r\n        微软雅黑, 'Microsoft Yahei', Tahoma, Helvetica, Arial, 'SimSun',\r\n        sans-serif;\r\n      font-size: 10px;\r\n      width: 100%;\r\n      text-align: center;\r\n    \">\r\n      <p>© 2020-${new Date().getFullYear()} carole.top\r\n      </p>\r\n    </div>\r\n  </div>\r\n    `,\r\n  };\r\n  return sendMail(mail);\r\n}\r\n"
  },
  {
    "path": "server/src/common/utils/index.ts",
    "content": "import * as fs from 'fs';\r\nimport * as dayjs1 from 'dayjs';\r\nimport * as utc from 'dayjs/plugin/utc';\r\nimport * as timezone from 'dayjs/plugin/timezone';\r\nimport 'dayjs/locale/zh-cn';\r\nimport { Response } from 'express';\r\nimport { build } from 'node-xlsx';\r\nimport { camelCase } from 'lodash';\r\ndayjs1.extend(utc);\r\ndayjs1.extend(timezone);\r\ndayjs1.locale('zh-cn');\r\n// 设置时区为上海\r\ndayjs1.tz.setDefault('Asia/Shanghai');\r\nexport const dayjs = dayjs1.tz;\r\nexport const nowDate = () => dayjs().format('YYYY-MM-DD');\r\nexport const nowDateTime = () => dayjs().format('YYYY-MM-DD HH:mm:ss');\r\nexport const formatDate = (date: Date, format = 'YYYY-MM-DD HH:mm:ss') =>\r\n  date && dayjs(date).format(format);\r\nexport const localDate = () => new Date(new Date().toLocaleString());\r\n// 创建文件夹\r\nexport const createFolder = function (folder) {\r\n  try {\r\n    fs.accessSync(folder);\r\n  } catch (e) {\r\n    fs.mkdirSync(folder, { recursive: true });\r\n  }\r\n};\r\n\r\n/**\r\n * @desc 执行具有并发限制的异步任务池。\r\n * @param  poolLimit - 并发限制，指定同时执行的最大异步任务数量。\r\n * @param  iterable - 包含异步任务的可迭代对象。\r\n * @param iteratorFn - 异步任务的迭代函数，接受一个参数并返回一个Promise。\r\n * @returns - 返回一个Promise，当所有异步任务完成时解析为一个包含所有结果的数组。\r\n */\r\nexport function asyncPool(\r\n  poolLimit: number,\r\n  iterable: any[],\r\n  iteratorFn: Function,\r\n): Promise<any[]> {\r\n  let i = 0;\r\n  const ret = [];\r\n  const executing = new Set();\r\n  const enqueue = function () {\r\n    if (i === iterable.length) {\r\n      return Promise.resolve();\r\n    }\r\n    const item = iterable[i++];\r\n    const p = Promise.resolve().then(() => iteratorFn(item, iterable));\r\n    ret.push(p);\r\n    executing.add(p);\r\n    const clean = () => executing.delete(p);\r\n    p.then(clean).catch(clean);\r\n    let r: any = Promise.resolve();\r\n    if (executing.size >= poolLimit) {\r\n      r = Promise.race(executing);\r\n    }\r\n    return r.then(() => enqueue());\r\n  };\r\n  return enqueue().then(() => Promise.all(ret));\r\n}\r\n/**@desc 数组树形化 */\r\n\r\nexport function tree(arr = [], id = 'id', pid = 'pid', rootValue = 0) {\r\n  const result = []; // 存放结果集\r\n  const map = {};\r\n  for (const item of arr) {\r\n    map[item[id]] = {\r\n      ...item,\r\n      children: map[item[id]]?.children || [],\r\n    };\r\n    if (item[pid] == rootValue) {\r\n      result.push(map[item[id]]);\r\n    } else {\r\n      if (!map[item[pid]]) {\r\n        map[item[pid]] = {\r\n          children: [],\r\n        };\r\n      }\r\n      map[item[pid]].children.push(map[item[id]]);\r\n    }\r\n  }\r\n  return result;\r\n}\r\n\r\n/**@desc 转换为camelCase并且首字母大写 */\r\nexport function toPascalCase(str) {\r\n  return str[0].toUpperCase() + camelCase(str).slice(1);\r\n}\r\n/** @description 导出表为xlsx文件返回 */\r\nexport async function exportTable(data: any[][], res: Response) {\r\n  const buffer = build([\r\n    {\r\n      name: 'sheet',\r\n      data,\r\n      options: {},\r\n    },\r\n  ]);\r\n  res.setHeader(\r\n    'Content-Type',\r\n    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n  );\r\n  res.setHeader('Content-Disposition', 'attachment;filename=sheet.xlsx');\r\n  res.setHeader('Access-Control-Expose-Headers', 'Content-Disposition');\r\n  res.setHeader('X-Content-Type-Options', 'nosniff');\r\n  // 将 Excel 文件的二进制流数据返回给客户端\r\n  res.end(buffer, 'binary');\r\n}\r\n//读取json文件，自动解析为js对象\r\nexport function readJsonFile(path: string) {\r\n  return JSON.parse(fs.readFileSync(path).toString() || null)\r\n}\r\n"
  },
  {
    "path": "server/src/common/utils/prismaUtil.js",
    "content": "const { execSync } = require(\"child_process\");\r\nconst { readFileSync, writeFileSync, copyFileSync, existsSync, rmSync } = require(\"fs\");\r\nconst { join } = require(\"path\");\r\nconst _ = require(\"lodash\")\r\nfunction toPascalCase(str = \"\") {\r\n  return str[0].toUpperCase() + _.camelCase(str).slice(1)\r\n}\r\nconst prismaPath = join(__dirname, \"../../prisma/introspected.prisma\")\r\n/** 生成prisma的model */\r\nfunction generatePrismaModel(isChangeOriginFile = true) {\r\n\r\n  try {\r\n    //执行从数据库生成model\r\n    if (existsSync(prismaPath)) {\r\n      throw new Error(prismaPath + \"文件已存在！\")\r\n    }\r\n    execSync(\"npx prisma db pull\")\r\n    if (!existsSync(prismaPath)) {\r\n      execSync(\"npx prisma generate\")\r\n      return null\r\n    }\r\n    //生成的文件内容\r\n    let content = readFileSync(prismaPath).toString()\r\n    if (!content) return null\r\n    //去掉注释\r\n    content = content.replaceAll(/\\/\\/\\/.*?\\n/g, \"\")\r\n\r\n    //转换为驼峰并加上字段和表名map映射关系\r\n    content = content.replace(/model\\s([a-zA-Z-_]+)\\s\\{([^}]+)\\}/g, (m, p1, p2) => {\r\n      let r = `model ${toPascalCase(p1)}  {`\r\n      r += p2.replace(/^\\s*?([a-zA-Z-_]+)[^\\n]+/gm, (m1, z1) => {\r\n        return m1.replace(z1, _.camelCase(z1)) + `  @map(\"${z1}\")`\r\n      }).replace(/\\[([^\\]]+)\\]/g, (m, p1, p2) => {\r\n        return \"[\" + p1.split(\",\").map(v => _.camelCase(v.trim())).join(\",\") + \"]\"\r\n      })\r\n      r += `\\n  @@map(\"${p1}\")\\n}`\r\n      return r\r\n    })\r\n    writeFileSync(prismaPath, content)\r\n    execSync(\"npx prisma generate\")\r\n  } catch (error) {\r\n    console.log(\"prisma代码生成失败：\", error)\r\n    return null\r\n  }\r\n}\r\n\r\nfunction updatePrismaModel() {\r\n  execSync(\"npx prisma db pull\")\r\n  execSync(\"npx prisma generate\")\r\n}\r\n\r\n\r\nfunction main() {\r\n  let mode = process.argv.slice(2)[0] || \"-generate\"\r\n  if (mode === \"-update\") {\r\n    console.log(\"更新中...\")\r\n    updatePrismaModel()\r\n    console.log(\"更新完毕！\")\r\n  } else if (mode === \"-generate\") {\r\n    console.log(\"生成中...\")\r\n    generatePrismaModel()\r\n    console.log(\"生成完毕！\")\r\n  }\r\n  setTimeout(() => {\r\n    process.exit(0)\r\n  }, 500)\r\n}\r\n\r\nmain()"
  },
  {
    "path": "server/src/common/utils/redisUtils.ts",
    "content": "import Redis, { RedisOptions } from 'ioredis';\r\nimport { createPool, Pool } from 'generic-pool';\r\nimport { Config } from '@/config';\r\nconst redisConfig: RedisOptions = {\r\n  ...Config.redis,\r\n  host: Config.redis.host || 'localhost',\r\n  port: Config.redis.port || 6379,\r\n  db: Config.redis.db || 0,\r\n  disconnectTimeout: 60 * 5 * 1000,\r\n};\r\nclass RedisUtils {\r\n  private pool: Pool<Redis>;\r\n  constructor(config: RedisOptions) {\r\n    this.pool = createPool(\r\n      {\r\n        create: async () => {\r\n          return new Redis(config);\r\n        },\r\n        destroy: async (client) => {\r\n          await client.quit();\r\n        },\r\n      },\r\n      {\r\n        max: 10,\r\n        min: 2,\r\n        idleTimeoutMillis: 60 * 5 * 1000,\r\n        acquireTimeoutMillis: 8 * 1000,\r\n      },\r\n    );\r\n  }\r\n\r\n  private async useClient<T>(\r\n    callback: (client: Redis) => Promise<T>,\r\n  ): Promise<T> {\r\n    const client = await this.pool.acquire();\r\n    try {\r\n      return await callback(client);\r\n    } finally {\r\n      this.pool.release(client);\r\n    }\r\n  }\r\n\r\n  async set(\r\n    key: string,\r\n    value: string,\r\n    expire?: number,\r\n    mode?: 'NX' | 'XX'\r\n  ): Promise<string | null> {\r\n    return this.useClient(async (client) => {\r\n      if (expire && mode) {\r\n        return (client as any).set(key, value, 'EX', expire, mode);\r\n      } else if (expire) {\r\n        return await client.set(key, value, 'EX', expire);\r\n      } else {\r\n        return await client.set(key, value);\r\n      }\r\n    });\r\n  }\r\n\r\n  async get(key: string): Promise<string | null> {\r\n    return this.useClient((client) => client.get(key));\r\n  }\r\n\r\n  async del(key: string): Promise<number> {\r\n    return this.useClient((client) => client.del(key));\r\n  }\r\n\r\n  async hset(key: string, field: string, value: string): Promise<number> {\r\n    return this.useClient((client) => client.hset(key, field, value));\r\n  }\r\n\r\n  async hget(key: string, field: string): Promise<string | null> {\r\n    return this.useClient((client) => client.hget(key, field));\r\n  }\r\n\r\n  async hdel(key: string, field: string): Promise<number> {\r\n    return this.useClient((client) => client.hdel(key, field));\r\n  }\r\n\r\n  async incr(key: string): Promise<number> {\r\n    return this.useClient((client) => client.incr(key));\r\n  }\r\n\r\n  async decr(key: string): Promise<number> {\r\n    return this.useClient((client) => client.decr(key));\r\n  }\r\n\r\n  async lpush(key: string, value: string): Promise<number> {\r\n    return this.useClient((client) => client.lpush(key, value));\r\n  }\r\n\r\n  async rpush(key: string, value: string): Promise<number> {\r\n    return this.useClient((client) => client.rpush(key, value));\r\n  }\r\n\r\n  async lpop(key: string): Promise<string | null> {\r\n    return this.useClient((client) => client.lpop(key));\r\n  }\r\n\r\n  async rpop(key: string): Promise<string | null> {\r\n    return this.useClient((client) => client.rpop(key));\r\n  }\r\n\r\n  async scanStream(match: string): Promise<string[]> {\r\n    return this.useClient(async (client) => {\r\n      const stream = client.scanStream({ match, count: 200 });\r\n      const keys: string[] = [];\r\n\r\n      return new Promise<string[]>((resolve, reject) => {\r\n        stream.on('data', (resultKeys: string[]) => {\r\n          keys.push(...resultKeys);\r\n        });\r\n\r\n        stream.on('end', () => resolve(keys));\r\n        stream.on('error', (err: Error) => reject(err));\r\n      });\r\n    });\r\n  }\r\n\r\n  async mget(keys: string[]): Promise<(string | null)[]> {\r\n    return this.useClient((client) => client.mget(keys));\r\n  }\r\n\r\n  async testConnection() {\r\n    try {\r\n      const client = await this.pool.acquire();\r\n      await client.ping();\r\n      this.pool.release(client);\r\n      console.log('Redis连接成功！');\r\n    } catch (error) {\r\n      console.error('Redis连接失败: ', error);\r\n    }\r\n  }\r\n\r\n  async getRedisInfo() {\r\n    return this.useClient(async (client) => {\r\n      try {\r\n        // 获取 Redis INFO\r\n        const info = await client.info();\r\n        // 获取 Redis DBSIZE\r\n        const dbSize = await client.dbsize();\r\n        // 获取 Redis COMMANDSTATS\r\n        const commandStats = await client.call('info', 'commandstats');\r\n\r\n        // 解析 INFO\r\n        const parsedInfo = parseRedisInfo(info);\r\n        // 解析 COMMANDSTATS\r\n        const parsedCommandStats = parseCommandStats(commandStats);\r\n        return {\r\n          commandStats: parsedCommandStats,\r\n          info: parsedInfo,\r\n          dbSize: dbSize,\r\n        };\r\n      } catch (err) {\r\n        console.error('Error fetching Redis info:', err);\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nconst redisUtils = new RedisUtils(redisConfig);\r\nredisUtils.testConnection();\r\n\r\nexport { redisUtils };\r\n\r\nfunction parseRedisInfo(info) {\r\n  const lines = info.split('\\r\\n');\r\n  const result = {};\r\n  lines.forEach((line) => {\r\n    if (line && line[0] !== '#') {\r\n      const parts = line.split(':');\r\n      if (parts.length === 2) {\r\n        result[parts[0]] = parts[1];\r\n      }\r\n    }\r\n  });\r\n  return result;\r\n}\r\n\r\nfunction parseCommandStats(commandStats) {\r\n  const lines = commandStats.split('\\r\\n');\r\n  const result = [];\r\n  lines.forEach((line) => {\r\n    if (line && line.startsWith('cmdstat_')) {\r\n      const parts = line.split(':');\r\n      if (parts.length === 2) {\r\n        const name = parts[0].substring(8);\r\n        const values = parts[1].split(',');\r\n        const valueObj: any = {};\r\n        values.forEach((value) => {\r\n          const [key, val] = value.split('=');\r\n          valueObj[key] = val;\r\n        });\r\n        result.push({ name: name, value: valueObj?.calls || '0' });\r\n      }\r\n    }\r\n  });\r\n  return result;\r\n}\r\n\r\n/**\r\n * 分布式锁执行器\r\n * @param key 锁的唯一标识\r\n * @param action 要执行的业务函数（异步）\r\n * @param expire 锁的自动释放时间（秒），防止业务崩溃导致死锁，默认 30 秒\r\n */\r\nexport async function runWithLock<T>(key: string, action: () => Promise<T>, expire = 30): Promise<T> {\r\n  const lockKey = `lock:${key}`;\r\n\r\n  // 1. 尝试加锁 (SET NX EX)\r\n  const lock = await redisUtils.set(lockKey, \"1\", expire, 'NX');\r\n\r\n  if (!lock) {\r\n    // 抢锁失败，说明相同业务正在处理中\r\n    throw new Error('请求处理中，请稍后再试');\r\n  }\r\n\r\n  try {\r\n    // 2. 抢锁成功，执行传入的业务函数\r\n    return await action();\r\n  } finally {\r\n    // 3. 无论成功还是失败，执行完一定要释放锁\r\n    await redisUtils.del(lockKey);\r\n  }\r\n}"
  },
  {
    "path": "server/src/common/utils/systemInfo.ts",
    "content": "import * as si from 'systeminformation';\r\nimport * as os from 'os';\r\nimport * as dayjs from 'dayjs';\r\n//获取cpu\r\nasync function getCpu(): Promise<void | {\r\n  cpuNum: number;\r\n  sys: string;\r\n  used: string;\r\n  free: string;\r\n}> {\r\n  return si\r\n    .currentLoad()\r\n    .then((data) => {\r\n      return {\r\n        cpuNum: data.cpus.length,\r\n        sys: data.currentLoadSystem.toFixed(2),\r\n        used: data.currentLoadUser.toFixed(2),\r\n        free: data.currentLoadIdle.toFixed(2),\r\n      };\r\n    })\r\n    .catch((error) => {\r\n      console.error('获取CPU使用率时出错:', error);\r\n      return undefined;\r\n    });\r\n}\r\n\r\n//获取系统内存\r\nasync function getSysMemory() {\r\n  const totalMemory = os.totalmem();\r\n  const freeMemory = os.freemem();\r\n  const usedMemory = totalMemory - freeMemory;\r\n  return {\r\n    total: formatMemory(totalMemory),\r\n    used: formatMemory(usedMemory),\r\n    free: formatMemory(freeMemory),\r\n    usage: ((usedMemory / totalMemory) * 100).toFixed(2),\r\n  };\r\n}\r\n\r\n//获取系统信息\r\nasync function getSystemInfo() {\r\n  const info = await si.osInfo();\r\n  const ip = await si.networkGatewayDefault();\r\n  return {\r\n    computerName: info.hostname,\r\n    computerIp: ip,\r\n    userDir: process.mainModule.path,\r\n    osName: info.distro || info.platform,\r\n    platform: info.platform,\r\n    release: info.release,\r\n    serial: info.serial,\r\n    osArch: info.arch,\r\n    nodeVersion: process.version,\r\n    serverDate: new Date().toLocaleString(),\r\n  };\r\n}\r\n\r\nasync function getDickInfo() {\r\n  return (await si.fsSize()).map((v) => ({\r\n    dirName: v.fs,\r\n    sysTypeName: v.type,\r\n    typeName: v.mount,\r\n    total: formatMemory(v.size) + ' GB',\r\n    used: formatMemory(v.used) + ' GB',\r\n    free: formatMemory(v.available) + ' GB',\r\n    usage: v.use,\r\n  }));\r\n}\r\n\r\n//获取当前项目的信息\r\nasync function getProject() {\r\n  const mem = process.memoryUsage();\r\n  for (const k in mem) {\r\n    mem[k] = formatMemory(mem[k], 'MB');\r\n  }\r\n  const memTotal = mem.heapTotal;\r\n  // let memTotal = mem.rss + mem.heapTotal+mem.arrayBuffers\r\n  return {\r\n    total: +memTotal.toFixed(2),\r\n    used: +mem.heapUsed.toFixed(2), //使用百分比\r\n    free: +(memTotal - mem.heapUsed).toFixed(2), //剩余\r\n    usage: ((mem.heapUsed / memTotal) * 100).toFixed(2), //剩余百分比\r\n    home: process.execPath,\r\n    version: process.version,\r\n    startTime: dayjs(Date.now() - process.uptime() * 1000).format(\r\n      'YYYY-MM-DD HH:mm:ss',\r\n    ),\r\n    runTime: formatTime(process.uptime()),\r\n    runPath: process.mainModule.path,\r\n    runFile: process.mainModule.filename,\r\n    inputArgs: JSON.stringify(process.argv.slice(2)),\r\n    name: process.release.name,\r\n    pid: process.pid,\r\n    ppid: process.ppid,\r\n  };\r\n}\r\n\r\n//秒转换为 `天 小时 分钟`\r\nfunction formatTime(seconds) {\r\n  const days = Math.floor(seconds / (24 * 60 * 60));\r\n  const hours = Math.floor((seconds % (24 * 60 * 60)) / (60 * 60));\r\n  const minutes = Math.floor((seconds % (60 * 60)) / 60);\r\n  return `${days}天${hours}小时${minutes}分钟`;\r\n}\r\n\r\n//格式化内存单位GB\r\nfunction formatMemory(memory, unit = 'GB') {\r\n  const type = {\r\n    GB: 1024 * 1024 * 1024,\r\n    MB: 1024 * 1024,\r\n  };\r\n  return +(memory / type[unit]).toFixed(2);\r\n}\r\n\r\n//获取以上全部信息\r\nasync function getServerInfo() {\r\n  const data = await Promise.all([\r\n    getProject(),\r\n    getSystemInfo(),\r\n    getSysMemory(),\r\n    getCpu(),\r\n    getDickInfo(),\r\n  ]);\r\n  return {\r\n    cpu: data[3],\r\n    mem: data[2],\r\n    project: data[0],\r\n    sys: data[1],\r\n    sysFiles: data[4],\r\n  };\r\n}\r\n\r\nexport {\r\n  getProject,\r\n  getSystemInfo,\r\n  getSysMemory,\r\n  getCpu,\r\n  getDickInfo,\r\n  getServerInfo,\r\n};\r\n"
  },
  {
    "path": "server/src/config-development.json",
    "content": "{\n  \"port\": 3000,\n  \"contextPath\": \"/v1\",\n  \"swagger\": { \"enable\": true, \"prefix\": \"/api\" },\n  \"captcha\": { \"mode\": \"math\", \"expiresIn\": 120 },\n  \"rateLimit\": { \"storage\": \"redis\", \"ttl\": 120000, \"limit\": 60 },\n  \"crypto\": { \"psdSecret\": \"carole123456\" },\n  \"token\": { \"secret\": \"carole123456\", \"expiresIn\": 86400 },\n  \"prisma\": { \"logEnable\": false, \"log\": [\"query\", \"info\", \"warn\", \"error\"] },\n  \"redis\": { \"host\": \"127.0.0.1\", \"port\": 6379, \"db\": 5, \"password\": \"\" },\n  \"upload\": {\n    \"path\": \"/Users/carole/carole-admin/upload\",\n    \"config\": {\n      \"img\": {\n        \"fileSize\": 2097152,\n        \"files\": 1,\n        \"fieldSize\": 524288,\n        \"fields\": 100,\n        \"fieldNameSize\": 100,\n        \"parts\": 100,\n        \"headerPairs\": 100\n      },\n      \"file\": {\n        \"fileSize\": 104857600,\n        \"files\": 10,\n        \"fieldSize\": 524288,\n        \"fields\": 100,\n        \"fieldNameSize\": 100,\n        \"parts\": 100,\n        \"headerPairs\": 100\n      }\n    }\n  },\n  \"gen\": {\n    \"author\": \"carole\",\n    \"packageName\": \"admin\",\n    \"moduleName\": \"system\",\n    \"autoRemovePre\": false,\n    \"tablePrefix\": [\"sys_\"]\n  },\n  \"mail\": {\n    \"enable\": false,\n    \"timeout\": 30000,\n    \"config\": {\n      \"host\": null,\n      \"port\": 465,\n      \"auth\": { \"user\": null, \"pass\": null },\n      \"secure\": true,\n      \"tls\": { \"rejectUnauthorized\": false }\n    }\n  }\n}\n"
  },
  {
    "path": "server/src/config-production.json",
    "content": "{\n  \"port\": 3000,\n  \"contextPath\": \"/v1\",\n  \"swagger\": { \"enable\": true, \"prefix\": \"/api\" },\n  \"captcha\": { \"mode\": \"math\", \"expiresIn\": 120 },\n  \"rateLimit\": { \"storage\": \"redis\", \"ttl\": 120000, \"limit\": 60 },\n  \"crypto\": { \"psdSecret\": \"carole123456\" },\n  \"token\": { \"secret\": \"carole123456\", \"expiresIn\": 86400 },\n  \"prisma\": { \"logEnable\": false, \"log\": [\"query\", \"info\", \"warn\", \"error\"] },\n  \"redis\": { \"host\": \"127.0.0.1\", \"port\": 6379, \"db\": 5, \"password\": \"\" },\n  \"upload\": {\n    \"path\": \"/Users/carole/carole-admin/upload\",\n    \"config\": {\n      \"img\": {\n        \"fileSize\": 2097152,\n        \"files\": 1,\n        \"fieldSize\": 524288,\n        \"fields\": 100,\n        \"fieldNameSize\": 100,\n        \"parts\": 100,\n        \"headerPairs\": 100\n      },\n      \"file\": {\n        \"fileSize\": 104857600,\n        \"files\": 10,\n        \"fieldSize\": 524288,\n        \"fields\": 100,\n        \"fieldNameSize\": 100,\n        \"parts\": 100,\n        \"headerPairs\": 100\n      }\n    }\n  },\n  \"gen\": {\n    \"author\": \"carole\",\n    \"packageName\": \"admin\",\n    \"moduleName\": \"system\",\n    \"autoRemovePre\": false,\n    \"tablePrefix\": [\"sys_\"]\n  },\n  \"mail\": {\n    \"enable\": false,\n    \"timeout\": 30000,\n    \"config\": {\n      \"host\": null,\n      \"port\": 465,\n      \"auth\": { \"user\": null, \"pass\": null },\n      \"secure\": true,\n      \"tls\": { \"rejectUnauthorized\": false }\n    }\n  }\n}\n"
  },
  {
    "path": "server/src/config.ts",
    "content": "import * as dotenv from 'dotenv';\r\nimport { join } from 'path';\r\nimport { watch } from 'fs';\r\nimport { readJsonFile } from './common/utils';\r\ndotenv.config({ path: join(__dirname, `.env`) });\r\n//运行模式，根据不同的模式加载不同的配置文件 development=>开发环境  production=>生产环境\r\nexport let runMode: \"development\" | \"production\" = \"development\";\r\nconst config_file_path = join(__dirname, `config-${runMode}.json`)\r\n\r\n/* 根据运行模式加载文件后，会覆盖默认配置\r\n可直接修改对应的json文件  config-${runMode}.json  或者删除json文件中对应的key，默认就使用下面的配置。\r\n后台提供了默认的配置文件修改，Config也会自动加载修改后的配置。 */\r\nexport const Config = {\r\n  // 是否是演示模式\r\n  is_demo:false,\r\n  // 是否由后端托管前端文件\r\n  is_managed_by_backend: false,\r\n  //托管文件所在的目录路径\r\n  backend_directory: join(__dirname,\"./front/\"),\r\n  //服务器的HTTP端口，默认为3000\r\n  port: 3000,\r\n  //# 应用的访问路径前缀\r\n  contextPath: '/v1',\r\n  swagger: {\r\n    //是否启用swagger\r\n    enable: true,\r\n    //接口文档路径\r\n    prefix: '/api',\r\n  },\r\n  captcha: {\r\n    //验证码类型 math或text\r\n    mode: 'math',\r\n    //验证码过期时间\r\n    expiresIn: 60 * 2,\r\n  },\r\n  //配置文件列表,管理后台可快捷编辑同步Config数据  注意：开发环境运行在dist目录，修改的也是dist里面的配置文件\r\n  //根据业务可能会有多个配置文件\r\n  ConfigFileMap: {\r\n    \"production_config\": {\r\n      desc: \"生产环境配置\",\r\n      filePath: join(__dirname, \"./config-production.json\")\r\n    },\r\n    \"dev_config\": {\r\n      desc: \"开发环境配置\",\r\n      filePath: join(__dirname, \"./config-production.json\")\r\n    }\r\n  },\r\n  //接口限流 2分钟内同一个接口允许60次请求\r\n  rateLimit: {\r\n    //数据存储在redis or memory\r\n    storage: 'redis',\r\n    ttl: 2 * 60 * 1000,\r\n    limit: 60,\r\n  },\r\n  crypto: {\r\n    //密码加密秘钥\r\n    psdSecret: 'carole123456',\r\n  },\r\n  token: {\r\n    // token加密秘钥\r\n    secret: 'carole123456',\r\n    //过期时间秒\r\n    expiresIn: 60 * 60 * 24,\r\n  },\r\n  prisma: {\r\n    //是否显示执行的sql指令\r\n    logEnable: false,\r\n    //显示那些日志\r\n    log: ['query', 'info', 'warn', 'error'] as any\r\n  },\r\n  //redis连接配置\r\n  redis: {\r\n    //主机地址\r\n    host: '127.0.0.1',\r\n    //端口\r\n    port: 6379,\r\n    //数据库\r\n    db: 5,\r\n    //密码\r\n    password: \"\"\r\n  },\r\n  upload: {\r\n    //上传文件存储基目录 请设置一个绝对路径\r\n    path: join(__dirname, \"uploads\"),\r\n    config: {\r\n      img: {\r\n        fileSize: 2 * 1024 * 1024,\r\n        files: 1,\r\n        fieldSize: 0.5 * 1024 * 1024,\r\n        fields: 100,\r\n        fieldNameSize: 100,\r\n        parts: 100,\r\n        headerPairs: 100,\r\n      },\r\n      file: {\r\n        fileSize: 100 * 1024 * 1024,\r\n        files: 10,\r\n        fieldSize: 0.5 * 1024 * 1024,\r\n        fields: 100,\r\n        fieldNameSize: 100,\r\n        parts: 100,\r\n        headerPairs: 100,\r\n      },\r\n    },\r\n  },\r\n  //生成配置\r\n  gen: {\r\n    //作者\r\n    author: 'carole',\r\n    //默认生成模块\r\n    packageName: 'admin',\r\n    //子模块目录\r\n    moduleName: 'system',\r\n    //是否去除表前缀，默认是false\r\n    autoRemovePre: false,\r\n    //表前缀（生成类名不会包含表前缀，多个用逗号分隔）\r\n    tablePrefix: ['sys_'],\r\n  },\r\n  //邮件发送配置\r\n  mail: {\r\n    //是否启用邮箱\r\n    enable: false,\r\n    //超时设置， 30秒未发送邮件，则返回失败\r\n    timeout: 30 * 1000,\r\n    config: {\r\n      //邮箱服务器 qq：smtp.qq.com 网易： smtp.163.com\r\n      host: \"\",\r\n      //端口\r\n      port: 465,\r\n      auth: {\r\n        //用户名\r\n        user: \"\",\r\n        //密码\r\n        pass: \"\",\r\n      },\r\n      // 端口465设置true, 其他false\r\n      secure: true,\r\n      tls: {\r\n        //建立 TLS 连接时是否应该拒绝未经授权的服务器证书\r\n        rejectUnauthorized: false,\r\n      },\r\n    },\r\n  },\r\n};\r\ninitConfig();\r\nexport function initConfig() {\r\n  let data = readJsonFile(config_file_path)\r\n  if (data) {\r\n    for (let k in data) {\r\n      Config[k] = data[k];\r\n    }\r\n  }\r\n}\r\n// 监听config文件变化\r\nwatch(config_file_path, (eventType, filename) => {\r\n  if (eventType === 'change') {\r\n    try {\r\n      initConfig();\r\n      console.log('config已更新')\r\n    } catch (err) {\r\n      console.log('更新config失败:', err)\r\n    }\r\n  }\r\n})\r\n//是否开发环境\r\nexport function isDevelopment() {\r\n  return runMode === \"development\";\r\n}\r\n//是否生产环境\r\nexport function isProduction() {\r\n  return runMode === \"production\";\r\n}"
  },
  {
    "path": "server/src/main.ts",
    "content": "import 'module-alias/register';\r\nimport { NestFactory } from '@nestjs/core';\r\nimport { AppModule } from './app.module';\r\nimport { NestExpressApplication } from '@nestjs/platform-express';\r\nimport { Config } from '@/config';\r\nimport { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';\r\nimport { lightBlue } from 'kolorist';\r\nimport { Constants } from './common/constant/Constants';\r\nasync function bootstrap() {\r\n  const app = await NestFactory.create<NestExpressApplication>(AppModule);\r\n  app.set('trust proxy', true);\r\n  app.disable('x-powered-by');\r\n  app.setGlobalPrefix(Config.contextPath || '/');\r\n  app.enableCors();\r\n  //是否由后端托管前端管理系统文件\r\n  if (Config.is_managed_by_backend) {\r\n    app.useStaticAssets(Config.backend_directory, {\r\n      prefix: \"/\",\r\n      setHeaders: (res, filePath) => {\r\n        if (filePath.endsWith('.html')) {\r\n          // 禁止 HTML 文件缓存\r\n          res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');\r\n          res.setHeader('Pragma', 'no-cache');\r\n          res.setHeader('Expires', '0');\r\n        } else {\r\n          // 其他文件缓存一天\r\n          res.setHeader('Cache-Control', 'public, max-age=86400');\r\n        }\r\n      }\r\n    });\r\n  }\r\n  app.useStaticAssets(Config.upload.path, {\r\n    prefix: Config.contextPath.replace(/\\/$/, '') + '/file',\r\n    maxAge: 86400000 * 365,\r\n  });\r\n  app.useStaticAssets(Config.upload.path, {\r\n    prefix: Config.contextPath.replace(/\\/$/, '') + Constants.FILE_PREFIX,\r\n    maxAge: 86400000 * 365,\r\n  });\r\n  if (Config.swagger.enable) {\r\n    const options = new DocumentBuilder()\r\n      .setTitle('Carole后台管理系统接口文档')\r\n      .setDescription('Carole后台管理系统接口文档')\r\n      .setVersion('1.0')\r\n      .addBearerAuth()\r\n      .addTag('NestJS')\r\n      .build();\r\n    const document = SwaggerModule.createDocument(app, options);\r\n    SwaggerModule.setup(\r\n      Config.contextPath.replace(/\\/$/, '') + Config.swagger.prefix,\r\n      app,\r\n      document,\r\n    );\r\n  }\r\n  await app.listen(Config.port);\r\n  console.log(\r\n    lightBlue(`server is running to http://localhost:${Config.port}`),\r\n  );\r\n}\r\nbootstrap();\r\n"
  },
  {
    "path": "server/src/prisma/schema/gen.prisma",
    "content": "model GenTable {\n  tableId        Int              @id @default(autoincrement()) @map(\"table_id\") @db.UnsignedInt\n  tableName      String?          @default(\"\") @map(\"table_name\") @db.VarChar(200)\n  tableComment   String?          @default(\"\") @map(\"table_comment\") @db.VarChar(500)\n  subTableName   String?          @map(\"sub_table_name\") @db.VarChar(64)\n  subTableFkName String?          @map(\"sub_table_fk_name\") @db.VarChar(64)\n  className      String?          @default(\"\") @map(\"class_name\") @db.VarChar(100)\n  tplCategory    String?          @default(\"crud\") @map(\"tpl_category\") @db.VarChar(200)\n  tplWebType     String?          @default(\"\") @map(\"tpl_web_type\") @db.VarChar(30)\n  packageName    String?          @map(\"package_name\") @db.VarChar(100)\n  moduleName     String?          @map(\"module_name\") @db.VarChar(30)\n  businessName   String?          @map(\"business_name\") @db.VarChar(30)\n  functionName   String?          @map(\"function_name\") @db.VarChar(50)\n  functionAuthor String?          @map(\"function_author\") @db.VarChar(50)\n  genType        String?          @default(\"0\") @map(\"gen_type\") @db.Char(1)\n  genPath        String?          @default(\"/\") @map(\"gen_path\") @db.VarChar(200)\n  options        String?          @map(\"options\") @db.VarChar(1000)\n  createBy       String?          @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime     String?          @map(\"create_time\") @db.VarChar(25)\n  updateBy       String?          @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime     String?          @map(\"update_time\") @db.VarChar(25)\n  remark         String?          @db.VarChar(500)\n  tableColumns   GenTableColumn[]\n\n  @@map(\"gen_table\")\n}\n\nmodel GenTableColumn {\n  columnId      Int       @id @default(autoincrement()) @map(\"column_id\") @db.UnsignedInt\n  tableId       Int?      @map(\"table_id\") @db.UnsignedInt\n  columnName    String?   @map(\"column_name\") @db.VarChar(200)\n  columnComment String?   @map(\"column_comment\") @db.VarChar(500)\n  columnType    String?   @map(\"column_type\") @db.VarChar(100)\n  javaType      String?   @map(\"java_type\") @db.VarChar(500)\n  javaField     String?   @map(\"java_field\") @db.VarChar(200)\n  isPk          String?   @map(\"is_pk\") @db.Char(1)\n  isIncrement   String?   @map(\"is_increment\") @db.Char(1)\n  isRequired    String?   @map(\"is_required\") @db.Char(1)\n  isInsert      String?   @map(\"is_insert\") @db.Char(1)\n  isEdit        String?   @map(\"is_edit\") @db.Char(1)\n  isList        String?   @map(\"is_list\") @db.Char(1)\n  isQuery       String?   @map(\"is_query\") @db.Char(1)\n  queryType     String?   @default(\"EQ\") @map(\"query_type\") @db.VarChar(200)\n  htmlType      String?   @map(\"html_type\") @db.VarChar(200)\n  dictType      String?   @default(\"\") @map(\"dict_type\") @db.VarChar(200)\n  sort          Int?      @map(\"sort\")\n  createBy      String?   @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime    String?   @map(\"create_time\") @db.VarChar(25)\n  updateBy      String?   @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime    String?   @map(\"update_time\") @db.VarChar(25)\n  table         GenTable? @relation(fields: [tableId], references: [tableId])\n\n  @@index([tableId])\n  @@map(\"gen_table_column\")\n}"
  },
  {
    "path": "server/src/prisma/schema/system.prisma",
    "content": "model SysConfig {\n  configId    Int     @id @default(autoincrement()) @map(\"config_id\")\n  configName  String? @default(\"\") @map(\"config_name\") @db.VarChar(100)\n  configKey   String? @default(\"\") @map(\"config_key\") @db.VarChar(100)\n  configValue String? @default(\"\") @map(\"config_value\") @db.VarChar(500)\n  configType  String? @default(\"N\") @map(\"config_type\") @db.Char(1)\n  createBy    String? @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime  String? @map(\"create_time\") @db.VarChar(25)\n  updateBy    String? @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime  String? @map(\"update_time\") @db.VarChar(25)\n  remark      String? @map(\"remark\") @db.VarChar(500)\n\n  @@map(\"sys_config\")\n}\n\nmodel SysDept {\n  deptId     Int           @id @default(autoincrement()) @map(\"dept_id\") @db.UnsignedInt\n  parentId   Int?          @default(0) @map(\"parent_id\") @db.UnsignedInt\n  ancestors  String?       @default(\"\") @map(\"ancestors\") @db.VarChar(50)\n  deptName   String?       @default(\"\") @map(\"dept_name\") @db.VarChar(30)\n  orderNum   Int?          @default(0) @map(\"order_num\")\n  leader     String?       @map(\"leader\") @db.VarChar(20)\n  phone      String?       @map(\"phone\") @db.VarChar(11)\n  email      String?       @map(\"email\") @db.VarChar(50)\n  status     String?       @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy   String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy   String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime String?       @map(\"update_time\") @db.VarChar(25)\n  users      SysUser[]\n  roles      SysRoleDept[]\n\n  @@map(\"sys_dept\")\n}\n\nmodel SysDictData {\n  dictCode    Int          @id @default(autoincrement()) @map(\"dict_code\") @db.UnsignedInt\n  dictSort    Int?         @default(0) @map(\"dict_sort\")\n  dictLabel   String?      @default(\"\") @map(\"dict_label\") @db.VarChar(100)\n  dictValue   String?      @default(\"\") @map(\"dict_value\") @db.VarChar(100)\n  dictType    String?      @default(\"\") @map(\"dict_type\") @db.VarChar(100)\n  cssClass    String?      @map(\"css_class\") @db.VarChar(100)\n  listClass   String?      @map(\"list_class\") @db.VarChar(100)\n  isDefault   String?      @default(\"N\") @map(\"is_default\") @db.Char(1)\n  status      String?      @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy    String?      @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime  String?      @map(\"create_time\") @db.VarChar(25)\n  updateBy    String?      @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime  String?      @map(\"update_time\") @db.VarChar(25)\n  remark      String?      @map(\"remark\") @db.VarChar(500)\n  sysDictType SysDictType? @relation(fields: [dictType], references: [dictType])\n\n  @@index([dictType])\n  @@map(\"sys_dict_data\")\n}\n\nmodel SysDictType {\n  dictId     Int           @id @default(autoincrement()) @map(\"dict_id\") @db.UnsignedInt\n  dictName   String?       @default(\"\") @map(\"dict_name\") @db.VarChar(100)\n  dictType   String?       @unique(map: \"dict_type\") @default(\"\") @map(\"dict_type\") @db.VarChar(100)\n  status     String?       @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy   String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy   String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime String?       @map(\"update_time\") @db.VarChar(25)\n  remark     String?       @map(\"remark\") @db.VarChar(500)\n  dictDatas  SysDictData[]\n\n  @@map(\"sys_dict_type\")\n}\n\nmodel SysLogininfor {\n  infoId        Int     @id @default(autoincrement()) @map(\"info_id\") @db.UnsignedInt\n  userName      String? @default(\"\") @map(\"user_name\") @db.VarChar(50)\n  ipaddr        String? @default(\"\") @map(\"ipaddr\") @db.VarChar(128)\n  loginLocation String? @default(\"\") @map(\"login_location\") @db.VarChar(255)\n  browser       String? @default(\"\") @map(\"browser\") @db.VarChar(50)\n  os            String? @default(\"\") @map(\"os\") @db.VarChar(50)\n  status        String? @default(\"1\") @map(\"status\") @db.Char(1)\n  msg           String? @default(\"\") @map(\"msg\") @db.VarChar(255)\n  loginTime     String? @map(\"login_time\") @db.VarChar(25)\n\n  @@index([loginTime], map: \"idx_sys_logininfor_lt\")\n  @@index([status], map: \"idx_sys_logininfor_s\")\n  @@map(\"sys_logininfor\")\n}\n\nmodel SysMenu {\n  menuId     Int           @id @default(autoincrement()) @map(\"menu_id\") @db.UnsignedInt\n  menuName   String        @map(\"menu_name\") @db.VarChar(50)\n  parentId   Int?          @default(0) @map(\"parent_id\") @db.UnsignedInt\n  orderNum   Int?          @default(0) @map(\"order_num\")\n  path       String?       @default(\"\") @map(\"path\") @db.VarChar(200)\n  component  String?       @map(\"component\") @db.VarChar(255)\n  query      String?       @map(\"query\") @db.VarChar(255)\n  isFrame    Int?          @default(0) @map(\"is_frame\")\n  isCache    Int?          @default(1) @map(\"is_cache\")\n  menuType   String?       @default(\"\") @map(\"menu_type\") @db.Char(1)\n  visible    String?       @default(\"1\") @map(\"visible\") @db.Char(1)\n  status     String?       @default(\"1\") @map(\"status\") @db.Char(1)\n  perms      String?       @map(\"perms\") @db.VarChar(100)\n  icon       String?       @default(\"#\") @map(\"icon\") @db.VarChar(100)\n  createBy   String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy   String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime String?       @map(\"update_time\") @db.VarChar(25)\n  remark     String?       @default(\"\") @map(\"remark\") @db.VarChar(500)\n  roles      SysRoleMenu[]\n\n  @@map(\"sys_menu\")\n}\n\nmodel SysNotice {\n  noticeId      Int     @id @default(autoincrement()) @map(\"notice_id\")\n  noticeTitle   String  @map(\"notice_title\") @db.VarChar(50)\n  noticeType    String  @map(\"notice_type\") @db.Char(1)\n  noticeContent String? @map(\"notice_content\") @db.MediumText\n  status        String? @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy      String? @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime    String? @map(\"create_time\") @db.VarChar(25)\n  updateBy      String? @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime    String? @map(\"update_time\") @db.VarChar(25)\n  remark        String? @map(\"remark\") @db.VarChar(255)\n\n  @@map(\"sys_notice\")\n}\n\nmodel SysPost {\n  postId     Int           @id @default(autoincrement()) @map(\"post_id\") @db.UnsignedInt\n  postCode   String        @map(\"post_code\") @db.VarChar(64)\n  postName   String        @map(\"post_name\") @db.VarChar(50)\n  postSort   Int           @map(\"post_sort\")\n  status     String        @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy   String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy   String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime String?       @map(\"update_time\") @db.VarChar(25)\n  remark     String?       @map(\"remark\") @db.VarChar(500)\n  users      SysUserPost[]\n\n  @@map(\"sys_post\")\n}\n\nmodel SysUserPost {\n  userId Int     @map(\"user_id\") @db.UnsignedInt\n  postId Int     @map(\"post_id\") @db.UnsignedInt\n  user   SysUser @relation(fields: [userId], references: [userId])\n  post   SysPost @relation(fields: [postId], references: [postId])\n\n  @@id([userId, postId])\n  @@index([postId])\n  @@map(\"sys_user_post\")\n}\n\nmodel SysRoleDept {\n  roleId Int     @map(\"role_id\") @db.UnsignedInt\n  deptId Int     @map(\"dept_id\") @db.UnsignedInt\n  role   SysRole @relation(fields: [roleId], references: [roleId])\n  dept   SysDept @relation(fields: [deptId], references: [deptId])\n\n  @@id([roleId, deptId])\n  @@index([deptId])\n  @@map(\"sys_role_dept\")\n}\n\nmodel SysRoleMenu {\n  roleId Int     @map(\"role_id\") @db.UnsignedInt\n  menuId Int     @map(\"menu_id\") @db.UnsignedInt\n  menu   SysMenu @relation(fields: [menuId], references: [menuId])\n  role   SysRole @relation(fields: [roleId], references: [roleId])\n\n  @@id([roleId, menuId])\n  @@index([menuId])\n  @@map(\"sys_role_menu\")\n}\n\nmodel SysUser {\n  userId      Int           @id @default(autoincrement()) @map(\"user_id\") @db.UnsignedInt\n  deptId      Int?          @map(\"dept_id\") @db.UnsignedInt\n  userName    String        @map(\"user_name\") @db.VarChar(30)\n  nickName    String        @map(\"nick_name\") @db.VarChar(30)\n  userType    String?       @default(\"00\") @map(\"user_type\") @db.VarChar(2)\n  email       String?       @default(\"\") @map(\"email\") @db.VarChar(50)\n  phonenumber String?       @default(\"\") @map(\"phonenumber\") @db.VarChar(11)\n  sex         String?       @default(\"0\") @map(\"sex\") @db.Char(1)\n  avatar      String?       @default(\"\") @map(\"avatar\") @db.VarChar(100)\n  password    String?       @default(\"\") @map(\"password\") @db.VarChar(100)\n  status      String?       @default(\"1\") @map(\"status\") @db.Char(1)\n  loginIp     String?       @default(\"\") @map(\"login_ip\") @db.VarChar(128)\n  loginDate   String?       @map(\"login_date\") @db.VarChar(25)\n  createBy    String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime  String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy    String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime  String?       @map(\"update_time\") @db.VarChar(25)\n  remark      String?       @map(\"remark\") @db.VarChar(500)\n  dept        SysDept?      @relation(fields: [deptId], references: [deptId])\n  roles       SysUserRole[]\n  posts       SysUserPost[]\n\n  @@index([deptId])\n  @@map(\"sys_user\")\n}\n\nmodel SysRole {\n  roleId            Int           @id @default(autoincrement()) @map(\"role_id\") @db.UnsignedInt\n  roleName          String        @map(\"role_name\") @db.VarChar(30)\n  roleKey           String        @map(\"role_key\") @db.VarChar(100)\n  roleSort          Int           @map(\"role_sort\")\n  dataScope         String?       @default(\"5\") @map(\"data_scope\") @db.Char(1)\n  menuCheckStrictly Int?          @default(1) @map(\"menu_check_strictly\") @db.TinyInt\n  deptCheckStrictly Int?          @default(1) @map(\"dept_check_strictly\") @db.TinyInt\n  status            String        @default(\"1\") @map(\"status\") @db.Char(1)\n  createBy          String?       @default(\"\") @map(\"create_by\") @db.VarChar(64)\n  createTime        String?       @map(\"create_time\") @db.VarChar(25)\n  updateBy          String?       @default(\"\") @map(\"update_by\") @db.VarChar(64)\n  updateTime        String?       @map(\"update_time\") @db.VarChar(25)\n  remark            String?       @map(\"remark\") @db.VarChar(500)\n  users             SysUserRole[]\n  menus             SysRoleMenu[]\n  depts             SysRoleDept[]\n\n  @@map(\"sys_role\")\n}\n\nmodel SysUserRole {\n  userId Int     @map(\"user_id\") @db.UnsignedInt\n  roleId Int     @map(\"role_id\") @db.UnsignedInt\n  user   SysUser @relation(fields: [userId], references: [userId])\n  role   SysRole @relation(fields: [roleId], references: [roleId])\n\n  @@id([userId, roleId])\n  @@index([roleId])\n  @@map(\"sys_user_role\")\n}\n"
  },
  {
    "path": "server/src/prisma/schema.prisma",
    "content": "generator client {\n  provider        = \"prisma-client-js\"\n  output          = \"./common/prisma-client\"\n  previewFeatures = [\"views\", \"relationJoins\", \"prismaSchemaFolder\", \"omitApi\"]\n  //这里可以指定平台引擎，native就是当前系统， 如果需要其他系统的自行添加，或者到目标系统执行npx prisma generate\n  binaryTargets   = [\"native\"]\n  // binaryTargets   = [\"native\", \"windows\", \"linux-musl\",\"debian-openssl-3.0.x\",\"darwin\",\"darwin-arm64\"]\n}\n\ndatasource db {\n  provider     = \"mysql\"\n  url          = env(\"DATABASE_URL\")\n  relationMode = \"prisma\"\n}\n"
  },
  {
    "path": "server/src/schedule/index.ts",
    "content": "import { Injectable } from '@nestjs/common';\r\n// import { Cron } from '@nestjs/schedule';\r\n\r\n@Injectable()\r\nexport class TasksService {\r\n  //cron任务，每隔两秒执行一次\r\n  // @Cron('*/2 * * * * *')\r\n  // testCron() {\r\n  //   console.log(\"cron excute...\")\r\n  // }\r\n}\r\n"
  },
  {
    "path": "server/test/app.e2e-spec.ts",
    "content": "import { Test, TestingModule } from '@nestjs/testing';\r\nimport { INestApplication } from '@nestjs/common';\r\nimport * as request from 'supertest';\r\nimport { AppModule } from './../src/app.module';\r\n\r\ndescribe('AppController (e2e)', () => {\r\n  let app: INestApplication;\r\n\r\n  beforeEach(async () => {\r\n    const moduleFixture: TestingModule = await Test.createTestingModule({\r\n      imports: [AppModule],\r\n    }).compile();\r\n\r\n    app = moduleFixture.createNestApplication();\r\n    await app.init();\r\n  });\r\n\r\n  it('/ (GET)', () => {\r\n    return request(app.getHttpServer())\r\n      .get('/')\r\n      .expect(200)\r\n      .expect('Hello World!');\r\n  });\r\n});\r\n"
  },
  {
    "path": "server/test/jest-e2e.json",
    "content": "{\r\n  \"moduleFileExtensions\": [\"js\", \"json\", \"ts\"],\r\n  \"rootDir\": \".\",\r\n  \"testEnvironment\": \"node\",\r\n  \"testRegex\": \".e2e-spec.ts$\",\r\n  \"transform\": {\r\n    \"^.+\\\\.(t|j)s$\": \"ts-jest\"\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/test/password.js",
    "content": "const path = require(\"path\")\r\nconst dotenv = require(\"dotenv\").config({path:path.join(__dirname, \"../src/.env\")})\r\nconst HmacSHA256 = require(\"crypto-js/hmac-sha256\")\r\nconst key = process.env.psdSecret\r\nconsole.log(HmacSHA256(\"carole\", key).toString())\r\nconsole.log(HmacSHA256(\"123456\", key).toString())"
  },
  {
    "path": "server/tsconfig.build.json",
    "content": "{\r\n  \"extends\": \"./tsconfig.json\",\r\n  \"exclude\": [\"node_modules\", \"test\", \"dist\", \"**/*spec.ts\"],\r\n  \"compilerOptions\": {\r\n    \"paths\": {\r\n      \"@prismaClient\": [\"src/common/prisma-client\"],\r\n      \"@/*\": [\"src/*\"]\r\n    },\r\n    \"module\": \"commonjs\",\r\n    \"declaration\": false,\r\n    \"removeComments\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true,\r\n    \"allowSyntheticDefaultImports\": true,\r\n    \"target\": \"ES2021\",\r\n    \"sourceMap\": true,\r\n    \"outDir\": \"./dist\",\r\n    \"baseUrl\": \"./\",\r\n    \"incremental\": true,\r\n    \"skipLibCheck\": true,\r\n    \"strictNullChecks\": false,\r\n    \"noImplicitAny\": false,\r\n    \"strictBindCallApply\": false,\r\n    \"forceConsistentCasingInFileNames\": false,\r\n    \"noFallthroughCasesInSwitch\": false,\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/tsconfig.json",
    "content": "{\r\n  \"compilerOptions\": {\r\n    \"paths\": {\r\n      \"@prismaClient\": [\"src/common/prisma-client\"],\r\n      \"@/*\": [\"src/*\"]\r\n    },\r\n    \"module\": \"commonjs\",\r\n    \"declaration\": true,\r\n    \"removeComments\": true,\r\n    \"emitDecoratorMetadata\": true,\r\n    \"experimentalDecorators\": true,\r\n    \"allowSyntheticDefaultImports\": true,\r\n    \"target\": \"ES2021\",\r\n    \"sourceMap\": true,\r\n    \"outDir\": \"./dist\",\r\n    \"baseUrl\": \"./\",\r\n    \"incremental\": true,\r\n    \"skipLibCheck\": true,\r\n    \"strictNullChecks\": false,\r\n    \"noImplicitAny\": false,\r\n    \"strictBindCallApply\": false,\r\n    \"forceConsistentCasingInFileNames\": false,\r\n    \"noFallthroughCasesInSwitch\": false,\r\n  }\r\n}\r\n"
  },
  {
    "path": "server/更新prisma的model.bat",
    "content": "node ./src/common/utils/prismaUtil.js -update"
  },
  {
    "path": "server/更新prisma的model.sh",
    "content": "#!/bin/bash\nnode ./src/common/utils/prismaUtil.js -update"
  },
  {
    "path": "server/驼峰生成prisma的model.bat",
    "content": "node ./src/common/utils/prismaUtil.js -generate"
  },
  {
    "path": "server/驼峰生成prisma的model.sh",
    "content": "#!/bin/bash\nnode ./src/common/utils/prismaUtil.js -generate"
  }
]