diff --git a/_doc/COMMAND_FLOW_MAPPING.md b/_doc/COMMAND_FLOW_MAPPING.md deleted file mode 100644 index e16b51a..0000000 --- a/_doc/COMMAND_FLOW_MAPPING.md +++ /dev/null @@ -1,235 +0,0 @@ -# 指令流程映射关系文档 - -## 📋 完整的指令执行流程 - -本文档说明从 Admin 前端到 boss-automation-nodejs 的完整指令映射关系。 - -## 🔄 执行流程图 - -``` -Admin 前端 (pla_account_detail.vue) - ↓ commandType -plaAccountServer.runCommand() - ↓ HTTP POST -后端 API (pla_account.js) - ↓ taskType -taskQueue.addTask() - ↓ -taskQueue.getTaskCommands() - ↓ command_type -command.executeCommand() - ↓ -jobManager[command_type]() - ↓ MQTT action -boss-automation-nodejs - ↓ -BossService[action]() -``` - -## 📊 完整映射表 - -| Admin commandType | taskType | command_type | MQTT action | Boss 方法 | 说明 | -|------------------|----------|--------------|-------------|-----------|------| -| `get_login_qr_code` | `get_login_qr_code` | `getLoginQrCode` | `get_login_qr_code` | `get_login_qr_code()` | 获取登录二维码 | -| `openBotDetection` | `openBotDetection` | `openBotDetection` | `openBotDetection` | `openBotDetection()` | 打开测试页 | -| `get_resume` | `get_resume` | `getOnlineResume` | `get_resume` | `get_resume()` | 获取用户简历 | -| `get_user_info` | `get_user_info` | `getUserInfo` | `get_user_info` | `get_user_info()` | 获取用户信息 | -| `search_jobs` | `search_jobs` | `searchJob` | `search_jobs` | `search_jobs()` | 搜索岗位 | -| `getJobList` | `getJobList` | `getJobList` | `getJobList` | `getJobList()` | 获取岗位列表 | -| `getChatList` | `getChatList` | `getChatList` | `getChatList` | `getChatList()` | 获取聊天列表 | - -## 🔍 详细说明 - -### 1. Admin 前端 (commandType) - -在 `pla_account_detail.vue` 中定义的操作类型: - -```javascript -actionMenuList: [ - { - value: 'get_login_qr_code', - label: '用户登录', - commandType: 'get_login_qr_code', - commandName: '获取登录二维码' - }, - { - value: 'getJobList', - label: '岗位列表', - commandType: 'getJobList', - commandName: '获取岗位列表' - }, - // ... -] -``` - -### 2. 后端 API (taskType) - -在 `pla_account.js` 中,`commandType` 直接作为 `taskType` 传递: - -```javascript -const task = await task_status.create({ - sn_code: account.sn_code, - taskType: commandConfig.type, // 使用 commandType - taskName: commandName || commandConfig.name, - taskParams: JSON.stringify(finalParams) -}); -``` - -### 3. 任务队列 (command_type) - -在 `taskQueue.js` 的 `getTaskCommands()` 方法中,将 `taskType` 映射为 `command_type`: - -```javascript -async getTaskCommands(task) { - const { taskType, taskParams } = task; - - switch (taskType) { - case 'get_login_qr_code': - return [{ - command_type: 'getLoginQrCode', // jobManager 方法名 - command_name: '获取登录二维码', - command_params: JSON.stringify({ platform }) - }]; - - case 'getJobList': - return [{ - command_type: 'getJobList', // jobManager 方法名 - command_name: '获取岗位列表', - command_params: JSON.stringify({ keyword, platform }) - }]; - - // ... - } -} -``` - -### 4. 指令管理器 (jobManager 方法) - -在 `command.js` 中调用 `jobManager` 的方法: - -```javascript -async executeCommand(taskId, command, mqttClient) { - const commandType = command.command_type; - const commandParams = JSON.parse(command.command_params); - - // 调用 jobManager 的方法 - if (commandType && jobManager[commandType]) { - result = await jobManager[commandType](sn_code, mqttClient, commandParams); - } -} -``` - -### 5. MQTT 通信 (action) - -在 `jobManager.js` 中,通过 MQTT 发送指令: - -```javascript -async getJobList(sn_code, mqttClient, params = {}) { - const response = await mqttClient.publishAndWait(sn_code, { - platform: 'boss', - action: "getJobList", // MQTT action,对应 Boss 方法名 - data: { keyword, pageCount } - }); - return response.data; -} -``` - -### 6. Boss 模块执行 - -在 `boss-automation-nodejs` 中,根据 `action` 调用对应方法: - -```javascript -// modules/index.js -async executeAction(platform, action, data) { - const modules = this.getModules(); - - // 调用 BossService[action] - let result = await modules[platform][action](data); - return result; -} -``` - -## ⚠️ 关键注意事项 - -### 1. 命名一致性 - -- **Admin commandType** → 用户界面显示的操作类型 -- **taskType** → 任务类型,与 commandType 相同 -- **command_type** → jobManager 中的方法名(驼峰命名) -- **MQTT action** → Boss 模块中的方法名(可能有别名) - -### 2. 参数传递 - -参数在整个流程中的传递: - -```javascript -// Admin 前端 -commandParams: { keyword: '前端', platform: 'boss' } - ↓ -// taskParams -taskParams: { keyword: '前端', platform: 'boss' } - ↓ -// command_params -command_params: '{"keyword":"前端","platform":"boss"}' - ↓ -// jobManager 方法参数 -params: { keyword: '前端', platform: 'boss' } - ↓ -// MQTT data -data: { keyword: '前端', pageCount: 3 } - ↓ -// Boss 方法参数 -data: { keyword: '前端', pageCount: 3 } -``` - -### 3. 别名支持 - -Boss 模块中的别名方法: - -```javascript -// BossService 类中 -async openBotDetection(data) { - return this.open_bot_detection(data); -} - -async get_resume(data) { - return this.getOnlineResume(data); -} - -async search_jobs(data) { - return this.searchJob(data); -} -``` - -## 🐛 常见问题 - -### Q1: 提示"未知的指令类型" - -**原因:** `command_type` 在 `jobManager` 中不存在 - -**解决:** -1. 检查 `taskQueue.js` 中的 `getTaskCommands()` 方法 -2. 确保 `command_type` 与 `jobManager` 中的方法名一致 - -### Q2: MQTT 消息发送失败 - -**原因:** `action` 在 Boss 模块中不存在 - -**解决:** -1. 检查 `jobManager.js` 中的 MQTT action -2. 确保 Boss 模块中有对应的方法或别名 - -### Q3: 参数传递错误 - -**原因:** 参数格式不正确 - -**解决:** -1. 确保 `command_params` 是 JSON 字符串 -2. 在 `jobManager` 中正确解析参数 -3. 在 MQTT 消息中正确传递参数 - ---- - -**创建时间**: 2025-11-13 -**作者**: Augment Agent - diff --git a/_doc/framework_使用文档.md b/_doc/framework_使用文档.md deleted file mode 100644 index 6de638c..0000000 --- a/_doc/framework_使用文档.md +++ /dev/null @@ -1,686 +0,0 @@ -徽标 -工单管理 -合并请求 -里程碑 -探索 -zc -/ -admin_core -代码 -工单 -合并请求 -Actions -软件包 -项目 -版本发布 -百科 -动态 -设置 -文件 -使用说明.md -完整使用文档.md -快速开始.md -.gitignore -README.md -babel.config.js -package-lock.json -package.json -postcss.config.js -webpack.config.js -admin_core -/ -_doc -/ -使用说明.md - -张成 -463d7921c1 -1 -1分钟前 -18 KiB -Admin Framework 使用说明 -一个基于 Vue2 的通用后台管理系统框架,包含完整的系统功能、登录、路由管理、布局等核心功能。 - -📦 框架特性 -✨ 核心功能 -✅ 简化的 API - 只需调用 createApp() 即可完成所有初始化 -✅ 模块化设计 - 组件、路由、状态管理等功能按模块组织 -✅ 完整的系统管理页面 - 用户、角色、菜单、日志等管理 -✅ 登录和权限管理 - 完整的登录流程和权限控制 -✅ 动态路由管理 - 基于权限菜单的动态路由生成 -✅ Vuex 状态管理 - 用户、应用状态管理 -✅ 全局组件库 - Tables、Editor、Upload、TreeGrid、FieldRenderer、FloatPanel 等 -✅ 工具库 - HTTP、日期、Token、Cookie 等工具 -✅ 内置样式 - base.less、animate.css、iconfont 等 -✅ 响应式布局 - 支持移动端适配 -🎯 内置页面组件 -主页组件 (HomePage) - 欢迎页面,显示系统标题 -系统管理页面 (SysUser, SysRole, SysLog, SysParamSetup) -高级管理页面 (SysMenu, SysControl, SysTitle) -登录页面 (LoginPage) -错误页面 (Page401, Page404, Page500) -🛠️ 内置工具 -HTTP 工具 (http) - 封装了 axios,支持拦截器、文件上传下载 -UI 工具 (uiTool) - 删除确认、树形转换、响应式设置、文件下载 -通用工具 (tools) - 日期格式化、UUID 生成、Cookie 操作、深拷贝等 -文件下载 - 支持 CSV 等格式的文件下载,自动处理换行符 -🚀 快速开始 -方式一:使用 Demo 项目(推荐) -我们提供了一个完整的 demo 项目,可以直接运行查看效果: - -# 1. 进入 demo 项目 -cd demo - -# 2. 安装依赖 -npm install - -# 3. 启动开发服务器 -npm run dev -浏览器会自动打开 http://localhost:8080,查看: - -/login - 登录页面 -/home - 主页 -/system/user - 用户管理 -/ball/games - 业务示例页面 -方式二:构建框架 -# 1. 安装依赖 -npm install - -# 2. 构建框架 -npm run build - -# 3. 产物在 dist/admin-framework.js -🎯 极简使用方式 -只需 3 步即可完成集成! -1. 引入框架 -import AdminFramework from './admin-framework.js' -2. 创建应用 -const app = AdminFramework.createApp({ - title: '我的管理系统', - apiUrl: 'http://localhost:9098/admin_api/', - componentMap: { - 'business/product': ProductComponent, - 'business/order': OrderComponent - } -}) -3. 挂载应用 -app.$mount('#app') -就这么简单! 框架会自动完成所有初始化工作。 - -📖 完整使用指南 -1. 项目结构准备 -your-project/ -├── src/ -│ ├── config/ -│ │ └── index.js # 配置文件 -│ ├── libs/ -│ │ └── admin-framework.js # 框架文件 -│ ├── views/ -│ │ └── business/ # 业务页面 -│ ├── api/ -│ │ └── business/ # 业务 API -│ ├── App.vue -│ └── main.js -├── package.json -└── webpack.config.js -2. 安装依赖 -npm install vue vue-router vuex view-design axios dayjs js-cookie vuex-persistedstate -3. 创建配置文件 -在 src/config/index.js 中: - -module.exports = { - title: '你的系统名称', - homeName: '首页', - apiUrl: 'http://localhost:9090/admin_api/', - uploadUrl: 'http://localhost:9090/admin_api/upload', - cookieExpires: 7, - uploadMaxLimitSize: 10, - oss: { - region: 'oss-cn-shanghai', - accessKeyId: 'your-key', - accessKeySecret: 'your-secret', - bucket: 'your-bucket', - url: 'http://your-bucket.oss-cn-shanghai.aliyuncs.com', - basePath: 'your-path/' - } -} -4. 创建 main.js(新版本 - 推荐) -import AdminFramework from './libs/admin-framework.js' - -// 导入业务组件(根据权限菜单接口的 component 字段) -import GamesComponent from './views/ball/games.vue' -import PayOrdersComponent from './views/order/pay_orders.vue' - -// 🎉 只需一行代码!框架自动完成所有初始化 -const app = AdminFramework.createApp({ - title: '我的管理系统', - apiUrl: 'http://localhost:9098/admin_api/', - componentMap: { - 'ball/games': GamesComponent, - 'order/pay_orders': PayOrdersComponent - // 添加更多业务组件... - }, - onReady() { - console.log('应用已启动!') - // 应用启动完成后的回调 - } -}) - -// 挂载应用 -app.$mount('#app') -5. 创建 App.vue - - - -🔧 API 使用指南 -框架实例方法 -createApp(config) - 推荐使用 -创建应用实例(新版本 API) - -const app = AdminFramework.createApp({ - title: '我的管理系统', // 应用标题(必需) - apiUrl: 'http://localhost:9098/admin_api/', // API 基础地址(必需) - uploadUrl: 'http://localhost:9098/admin_api/upload', // 上传地址(可选,默认为 apiUrl + 'upload') - componentMap: { // 业务组件映射(可选) - 'business/product': ProductComponent, - 'business/order': OrderComponent - }, - onReady() { // 应用启动完成回调(可选) - console.log('应用已启动!') - } -}) -工具库使用 -HTTP 工具 -// 在组件中使用 -export default { - async mounted() { - // GET 请求 - const res = await this.$http.get('/api/users', { page: 1 }) - - // POST 请求 - const result = await this.$http.post('/api/users', { name: 'test' }) - - // 文件导出 - await this.$http.fileExport('/api/export', { type: 'excel' }) - } -} - -// 在非 Vue 组件中使用 -import AdminFramework from './libs/admin-framework.js' -const res = await AdminFramework.http.get('/api/users') -UI 工具 -// 在组件中使用 -export default { - methods: { - handleDelete() { - // 删除确认 - this.$uiTool.delConfirm(() => { - // 执行删除逻辑 - }) - - // 设置响应式字体 - this.$uiTool.setRem() - - // 树形转换 - const treeData = this.$uiTool.transformTree(flatData) - } - } -} -功能工具 -// 在组件中使用 -export default { - methods: { - downloadFile() { - // 文件下载 - this.$uiTool.downloadFile(response, 'filename.csv') - } - } -} -通用工具 -// 在组件中使用 -export default { - methods: { - formatDate() { - // 日期格式化 - return this.$tools.formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss') - }, - - generateId() { - // UUID 生成 - return this.$tools.generateUUID() - }, - - setCookie() { - // Cookie 操作 - this.$tools.setCookie('name', 'value') - const value = this.$tools.getCookie('name') - } - } -} -Store 模块使用 -user 模块 -// 登录 -await this.$store.dispatch('user/handleLogin', { - userFrom: { username, password }, - Main: AdminFramework.Main, - ParentView: AdminFramework.ParentView, - Page404: AdminFramework.Page404 -}) - -// 登出 -this.$store.dispatch('user/handleLogOut') - -// 设置权限菜单 -this.$store.dispatch('user/setAuthorityMenus', { - Main: AdminFramework.Main, - ParentView: AdminFramework.ParentView, - Page404: AdminFramework.Page404 -}) - -// 获取用户信息 -const userName = this.$store.getters['user/userName'] -const token = this.$store.state.user.token -app 模块 -// 设置面包屑 -this.$store.commit('app/setBreadCrumb', route) - -// 获取系统标题 -this.$store.dispatch('app/getSysTitle', { - defaultTitle: '系统名称', - defaultLogo: '/logo.png' -}) - -// 获取系统配置 -const sysFormModel = this.$store.getters['app/sysFormModel'] -🗂️ 组件映射配置 -业务组件映射 -当后端权限菜单接口返回组件路径时,需要配置映射表: - -// 1. 导入业务组件 -import GamesComponent from './views/ball/games.vue' -import PayOrdersComponent from './views/order/pay_orders.vue' - -// 2. 配置映射 -const componentMap = { - 'ball/games': GamesComponent, - 'ball/games.vue': GamesComponent, // 支持带 .vue 后缀 - 'order/pay_orders': PayOrdersComponent, - 'order/pay_orders.vue': PayOrdersComponent -} - -// 3. 在 Vue.use 时传入 -Vue.use(AdminFramework, { - config, - ViewUI, - VueRouter, - Vuex, - createPersistedState, - componentMap // 传入组件映射表 -}) -框架已自动映射的系统组件 -以下组件无需配置,框架已自动映射: - -✅ home/index - 主页 -✅ system/sys_user - 用户管理 -✅ system/sys_role - 角色管理 -✅ system/sys_log - 日志管理 -✅ system/sys_param_setup - 参数设置 -✅ system/sys_menu - 菜单管理 -✅ system/sys_control - 控制器管理 -✅ system/sys_title - 系统标题设置 -🌐 全局访问 -window.framework -框架实例会自动暴露到全局,可以在任何地方访问: - -// 在非 Vue 组件中使用 -const http = window.framework.http -const uiTool = window.framework.uiTool -const config = window.framework.config - -// HTTP 请求 -const res = await window.framework.http.get('/api/users') - -// UI 工具 -window.framework.uiTool.delConfirm(() => { - // 删除逻辑 -}) -Vue 原型方法 -在 Vue 组件中可以直接使用: - -export default { - methods: { - async loadData() { - // 直接使用 this.$xxx - const res = await this.$http.get('/api/users') - this.$uiTool.delConfirm(() => {}) - this.$tools.formatDate(new Date()) - this.$uiTool.downloadFile(response, 'file.csv') - } - } -} -📁 文件下载功能 -使用 downloadFile 方法 -框架提供了便捷的文件下载功能,支持 CSV 等格式: - -// 在 Vue 组件中使用 -export default { - methods: { - // 导出数据 - exportData() { - // 调用 API 获取数据 - this.$http.fileExport('/api/export', params).then(res => { - // 使用 downloadFile 下载 - this.$uiTool.downloadFile(res, '数据导出.csv') - this.$Message.success('导出成功!') - }).catch(error => { - this.$Message.error('导出失败:' + error.message) - }) - } - } -} -支持的数据格式 -CSV 格式:自动处理换行符,保持表格格式 -Blob 对象:支持二进制文件下载 -文本数据:支持纯文本文件下载 -自动处理特性 -✅ 换行符保持:CSV 文件的换行符会被正确保持 -✅ 文件名处理:自动清理文件名中的特殊字符 -✅ 浏览器兼容:支持所有现代浏览器 -✅ 内存管理:自动清理临时 URL 对象 -🎨 全局组件使用 -FloatPanel - 浮动面板组件 -FloatPanel 是一个浮动在父窗体上的面板组件,类似于抽屉效果,常用于详情展示、表单编辑等场景。 - -基本使用: - - - - -属性说明: - -属性 类型 默认值 说明 -title String '' 面板标题 -width String/Number '100%' 面板宽度(字符串或数字),默认占满父容器 -height String/Number '100%' 面板高度(字符串或数字),默认占满父容器 -position String 'right' 面板位置:left、right、top、bottom、center -showBack Boolean true 是否显示返回按钮 -showClose Boolean false 是否显示关闭按钮 -backText String '返回' 返回按钮文字 -closeOnClickBackdrop Boolean false 点击遮罩是否关闭 -mask Boolean false 是否显示遮罩(默认不显示) -zIndex Number 1000 层级 -方法: - -方法 说明 参数 -show(callback) 显示面板 callback: 可选的回调函数 -hide() 隐藏面板 - -事件: - -事件 说明 参数 -back 点击返回按钮时触发 - -插槽: - -插槽 说明 -default 面板主体内容 -header-right 头部右侧内容(可用于添加自定义按钮) -位置说明: - -left: 从左侧滑入 -right: 从右侧滑入(默认) -top: 从顶部滑入 -bottom: 从底部滑入 -center: 居中显示,带缩放动画 -完整示例: - - - - -特性说明: - -✅ 基于父元素定位,不会遮挡菜单 -✅ 宽度和高度默认 100%,占满父容器 -✅ 无遮罩背景,完全浮在父页面上 -✅ 路由切换或组件销毁时自动关闭 -✅ 支持多种位置和动画效果 -✅ 支持自定义头部右侧内容 -📝 业务开发示例 -创建业务页面 - - - - -创建业务 API -// src/api/business/productServer.js -// 注意:不需要 import http,直接使用 http - -class ProductServer { - async getList(params) { - return await http.get('/product/list', params) - } - - async save(data) { - return await http.post('/product/save', data) - } - - async delete(id) { - return await http.post('/product/delete', { id }) - } - - async exportCsv(params) { - return await http.fileExport('/product/export', params) - } -} - -export default new ProductServer() -❓ 常见问题 -Q1: 打包后文件太大怎么办? -A: 框架已经将 Vue、VueRouter、Vuex、ViewUI、Axios 设置为外部依赖,不会打包进去。确保在项目中单独安装这些依赖。 - -Q2: 如何只使用部分功能? -A: 可以按需导入: - -import { http, uiTool, tools } from './libs/admin-framework.js' -Q3: 权限菜单中的业务页面显示 404 怎么办? -A: 需要配置组件映射表: - -Vue.use(AdminFramework, { - // ... 其他配置 - componentMap: { - 'ball/games': GamesComponent, - 'order/pay_orders': PayOrdersComponent - } -}) -Q4: 如何自定义配置? -A: 修改 config/index.js 文件: - -module.exports = { - title: '你的系统名称', - apiUrl: 'http://your-api-url/', - // ... 其他配置 -} -Q5: 如何使用登录功能? -A: 在组件中: - -export default { - methods: { - async login() { - await this.$store.dispatch('user/handleLogin', { - userFrom: { username: 'admin', password: '123456' }, - Main: AdminFramework.Main, - ParentView: AdminFramework.ParentView, - Page404: AdminFramework.Page404 - }) - this.$router.push({ name: 'home' }) - } - } -} -Q6: 需要单独引入样式文件吗? -A: 不需要! 框架已内置所有样式: - -✅ base.less - 基础样式 -✅ animate.css - 动画样式 -✅ ivewExpand.less - ViewUI 扩展样式 -✅ iconfont.css - 字体图标样式 -只需引入框架即可: - -import AdminFramework from './libs/admin-framework.js' -Vue.use(AdminFramework, { ... }) -📦 技术栈 -Vue 2.6+ -Vue Router 3.x -Vuex 3.x -View Design (iView) 4.x -Axios -Less -Webpack 5 -📄 许可证 -MIT License - -👨‍💻 作者 -light - -祝开发愉快! 🎉 - -如有问题,请查看 Demo 项目示例或联系开发团队。 - -Powered by Gitea -当前版本: -1.24.6 -页面: -273ms -模板: -13ms -许可证 -API \ No newline at end of file diff --git a/_doc/full_flow删除说明.md b/_doc/full_flow删除说明.md deleted file mode 100644 index c3fc57a..0000000 --- a/_doc/full_flow删除说明.md +++ /dev/null @@ -1,59 +0,0 @@ -# full_flow 删除说明 - -## ✅ 已删除的 full_flow 相关代码 - -### 1. 任务处理器注册 -- ✅ 删除了 `registerTaskHandlers()` 中的 `full_flow` 处理器注册 -- ✅ 删除了 `handleFullFlowTask()` 方法 - -### 2. 手动任务处理 -- ✅ 修改了 `handleManualJobRequest()`,移除了 `full_flow` 的特殊处理 -- ✅ 将 `manualExecuteJobFlow()` 标记为废弃,抛出错误提示 - -### 3. 定时任务 -- ✅ 修改了 `executeScheduledJobFlow()`,移除了 `full_flow` 任务添加 -- ✅ 添加了注释说明 `full_flow` 已废弃 - -### 4. 任务队列 -- ✅ 删除了 `taskQueue.js` 中 `getTaskCommands()` 的 `case 'full_flow':` 分支 - -### 5. 配置 -- ✅ 删除了 `config.js` 中 `taskTimeouts.full_flow` 配置 -- ✅ 删除了 `config.js` 中 `taskPriorities.full_flow` 配置 - -### 6. 数据模型注释 -- ✅ 更新了 `task_status.js` 模型中的 `taskType` 注释,移除了 `full_flow` 说明 - -## 📝 保留的方法(已废弃) - -以下方法已标记为废弃,但保留在代码中以便向后兼容: - -1. **`manualExecuteJobFlow()`** - - 状态:已废弃 - - 行为:抛出错误,提示使用其他任务类型 - - 位置:`api/middleware/schedule/index.js:681` - -2. **`executeScheduledJobFlow()`** - - 状态:定时任务已注释,方法保留但不再添加 `full_flow` 任务 - - 位置:`api/middleware/schedule/index.js:578` - -## ⚠️ 注意事项 - -1. **定时任务已禁用** - - `executeScheduledJobFlow()` 的定时任务调用已被注释 - - 如需恢复定时任务,请使用其他任务类型(如 `auto_deliver`) - -2. **替代方案** - - 如需执行完整流程,请使用: - - `auto_deliver` - 自动投递任务 - - `get_job_list` - 获取岗位列表 - - `apply_job` - 投递简历 - - 其他独立任务类型 - - -## 🔄 后续建议 - -如果不再需要以下方法,可以考虑完全删除: -- `executeScheduledJobFlow()` - 如果定时任务不再使用 -- `manualExecuteJobFlow()` - 如果所有调用都已更新 - diff --git a/_doc/js/app.25a32752.js b/_doc/js/app.25a32752.js new file mode 100644 index 0000000..f11c6f1 --- /dev/null +++ b/_doc/js/app.25a32752.js @@ -0,0 +1,24 @@ +!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("Vue"),require("Vuex"),require("VueRouter"));else if("function"==typeof define&&define.amd)define(["Vue","Vuex","VueRouter"],e);else{var n="object"==typeof exports?e(require("Vue"),require("Vuex"),require("VueRouter")):e(t.Vue,t.Vuex,t.VueRouter);for(var r in n)("object"==typeof exports?exports:t)[r]=n[r]}}(window,(function(__WEBPACK_EXTERNAL_MODULE__21__,__WEBPACK_EXTERNAL_MODULE__391__,__WEBPACK_EXTERNAL_MODULE__1137__){return function(t){function e(e){for(var r,i,s=e[0],u=e[1],c=e[2],l=0,d=[];l"+t+""};return function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={isMounted:{}};return n.isMounted.get=function(){return!!this.node},e.createFromExistingNode=function(t){return new e({id:t.getAttribute("id"),viewBox:t.getAttribute("viewBox"),content:t.outerHTML})},e.prototype.destroy=function(){this.isMounted&&this.unmount(),t.prototype.destroy.call(this)},e.prototype.mount=function(t){if(this.isMounted)return this.node;var e="string"==typeof t?document.querySelector(t):t,n=this.render();return this.node=n,e.appendChild(n),n},e.prototype.render=function(){var t=this.stringify();return function(t){var e=!!document.importNode,n=(new DOMParser).parseFromString(t,"image/svg+xml").documentElement;return e?document.importNode(n,!0):n}(u(t)).childNodes[0]},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(e.prototype,n),e}(t)},t.exports=n()}).call(this,n(58))},function(t,e,n){(function(e){var n;n=function(){"use strict";function t(t,e){return t(e={exports:{}},e.exports),e.exports}"undefined"!=typeof window?window:void 0!==e||"undefined"!=typeof self&&self;var n=t((function(t,e){t.exports=function(){function t(t){return t&&"object"==typeof t&&"[object RegExp]"!==Object.prototype.toString.call(t)&&"[object Date]"!==Object.prototype.toString.call(t)}function e(e,n){var i;return n&&!0===n.clone&&t(e)?r((i=e,Array.isArray(i)?[]:{}),e,n):e}function n(n,i,o){var a=n.slice();return i.forEach((function(i,s){void 0===a[s]?a[s]=e(i,o):t(i)?a[s]=r(n[s],i,o):-1===n.indexOf(i)&&a.push(e(i,o))})),a}function r(i,o,a){var s=Array.isArray(o),u=(a||{arrayMerge:n}).arrayMerge||n;return s?Array.isArray(i)?u(i,o,a):e(o,a):function(n,i,o){var a={};return t(n)&&Object.keys(n).forEach((function(t){a[t]=e(n[t],o)})),Object.keys(i).forEach((function(s){t(i[s])&&n[s]?a[s]=r(n[s],i[s],o):a[s]=e(i[s],o)})),a}(i,o,a)}return r.all=function(t,e){if(!Array.isArray(t)||t.length<2)throw new Error("first argument should be an array with at least two elements");return t.reduce((function(t,n){return r(t,n,e)}))},r}()})),r=t((function(t,e){e.default={svg:{name:"xmlns",uri:"http://www.w3.org/2000/svg"},xlink:{name:"xmlns:xlink",uri:"http://www.w3.org/1999/xlink"}},t.exports=e.default})),i=r.svg,o=r.xlink,a={};a[i.name]=i.uri,a[o.name]=o.uri;var s,u=function(t,e){return void 0===t&&(t=""),""+t+""},c=r.svg,l=r.xlink,f={attrs:(s={style:["position: absolute","width: 0","height: 0"].join("; "),"aria-hidden":"true"},s[c.name]=c.uri,s[l.name]=l.uri,s)},d=function(t){this.config=n(f,t||{}),this.symbols=[]};d.prototype.add=function(t){var e=this.symbols,n=this.find(t.id);return n?(e[e.indexOf(n)]=t,!1):(e.push(t),!0)},d.prototype.remove=function(t){var e=this.symbols,n=this.find(t);return!!n&&(e.splice(e.indexOf(n),1),n.destroy(),!0)},d.prototype.find=function(t){return this.symbols.filter((function(e){return e.id===t}))[0]||null},d.prototype.has=function(t){return null!==this.find(t)},d.prototype.stringify=function(){var t=this.config.attrs,e=this.symbols.map((function(t){return t.stringify()})).join("");return u(e,t)},d.prototype.toString=function(){return this.stringify()},d.prototype.destroy=function(){this.symbols.forEach((function(t){return t.destroy()}))};var p=function(t){var e=t.id,n=t.viewBox,r=t.content;this.id=e,this.viewBox=n,this.content=r};p.prototype.stringify=function(){return this.content},p.prototype.toString=function(){return this.stringify()},p.prototype.destroy=function(){var t=this;["id","viewBox","content"].forEach((function(e){return delete t[e]}))};var h=function(t){var e=!!document.importNode,n=(new DOMParser).parseFromString(t,"image/svg+xml").documentElement;return e?document.importNode(n,!0):n},g=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var n={isMounted:{}};return n.isMounted.get=function(){return!!this.node},e.createFromExistingNode=function(t){return new e({id:t.getAttribute("id"),viewBox:t.getAttribute("viewBox"),content:t.outerHTML})},e.prototype.destroy=function(){this.isMounted&&this.unmount(),t.prototype.destroy.call(this)},e.prototype.mount=function(t){if(this.isMounted)return this.node;var e="string"==typeof t?document.querySelector(t):t,n=this.render();return this.node=n,e.appendChild(n),n},e.prototype.render=function(){var t=this.stringify();return h(u(t)).childNodes[0]},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(e.prototype,n),e}(p),v={autoConfigure:!0,mountTo:"body",syncUrlsWithBaseTag:!1,listenLocationChangeEvent:!0,locationChangeEvent:"locationChange",locationChangeAngularEmitter:!1,usagesToUpdate:"use[*|href]",moveGradientsOutsideSymbol:!1},y=function(t){return Array.prototype.slice.call(t,0)},m=function(){return/firefox/i.test(navigator.userAgent)},b=function(){return/msie/i.test(navigator.userAgent)||/trident/i.test(navigator.userAgent)},w=function(){return/edge/i.test(navigator.userAgent)},x=function(t){return(t||window.location.href).split("#")[0]},_=function(t){angular.module("ng").run(["$rootScope",function(e){e.$on("$locationChangeSuccess",(function(e,n,r){var i,o,a;i=t,o={oldUrl:r,newUrl:n},(a=document.createEvent("CustomEvent")).initCustomEvent(i,!1,!1,o),window.dispatchEvent(a)}))}])},k=function(t,e){return void 0===e&&(e="linearGradient, radialGradient, pattern, mask, clipPath"),y(t.querySelectorAll("symbol")).forEach((function(t){y(t.querySelectorAll(e)).forEach((function(e){t.parentNode.insertBefore(e,t)}))})),t},S=r.xlink.uri,j=/[{}|\\\^\[\]`"<>]/g;function O(t){return t.replace(j,(function(t){return"%"+t[0].charCodeAt(0).toString(16).toUpperCase()}))}var E,C=["clipPath","colorProfile","src","cursor","fill","filter","marker","markerStart","markerMid","markerEnd","mask","stroke","style"],T=C.map((function(t){return"["+t+"]"})).join(","),A=function(t,e,n,r){var i=O(n),o=O(r);(function(t,e){return y(t).reduce((function(t,n){if(!n.attributes)return t;var r=y(n.attributes),i=e?r.filter(e):r;return t.concat(i)}),[])})(t.querySelectorAll(T),(function(t){var e=t.localName,n=t.value;return-1!==C.indexOf(e)&&-1!==n.indexOf("url("+i)})).forEach((function(t){return t.value=t.value.replace(new RegExp(i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),o)})),function(t,e,n){y(t).forEach((function(t){var r=t.getAttribute("xlink:href");if(r&&0===r.indexOf(e)){var i=r.replace(e,n);t.setAttributeNS(S,"xlink:href",i)}}))}(e,i,o)},I="mount",P="symbol_mount",z=function(t){function e(e){var r=this;void 0===e&&(e={}),t.call(this,n(v,e));var i,o=(i=i||Object.create(null),{on:function(t,e){(i[t]||(i[t]=[])).push(e)},off:function(t,e){i[t]&&i[t].splice(i[t].indexOf(e)>>>0,1)},emit:function(t,e){(i[t]||[]).map((function(t){t(e)})),(i["*"]||[]).map((function(n){n(t,e)}))}});this._emitter=o,this.node=null;var a=this.config;if(a.autoConfigure&&this._autoConfigure(e),a.syncUrlsWithBaseTag){var s=document.getElementsByTagName("base")[0].getAttribute("href");o.on(I,(function(){return r.updateUrls("#",s)}))}var u=this._handleLocationChange.bind(this);this._handleLocationChange=u,a.listenLocationChangeEvent&&window.addEventListener(a.locationChangeEvent,u),a.locationChangeAngularEmitter&&_(a.locationChangeEvent),o.on(I,(function(t){a.moveGradientsOutsideSymbol&&k(t)})),o.on(P,(function(t){var e;a.moveGradientsOutsideSymbol&&k(t.parentNode),(b()||w())&&(e=[],y(t.querySelectorAll("style")).forEach((function(t){t.textContent+="",e.push(t)})))}))}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={isMounted:{}};return r.isMounted.get=function(){return!!this.node},e.prototype._autoConfigure=function(t){var e=this.config;void 0===t.syncUrlsWithBaseTag&&(e.syncUrlsWithBaseTag=void 0!==document.getElementsByTagName("base")[0]),void 0===t.locationChangeAngularEmitter&&(e.locationChangeAngularEmitter=void 0!==window.angular),void 0===t.moveGradientsOutsideSymbol&&(e.moveGradientsOutsideSymbol=m())},e.prototype._handleLocationChange=function(t){var e=t.detail,n=e.oldUrl,r=e.newUrl;this.updateUrls(n,r)},e.prototype.add=function(e){var n=t.prototype.add.call(this,e);return this.isMounted&&n&&(e.mount(this.node),this._emitter.emit(P,e.node)),n},e.prototype.attach=function(t){var e=this,n=this;if(n.isMounted)return n.node;var r="string"==typeof t?document.querySelector(t):t;return n.node=r,this.symbols.forEach((function(t){t.mount(n.node),e._emitter.emit(P,t.node)})),y(r.querySelectorAll("symbol")).forEach((function(t){var e=g.createFromExistingNode(t);e.node=t,n.add(e)})),this._emitter.emit(I,r),r},e.prototype.destroy=function(){var t=this.config,e=this.symbols,n=this._emitter;e.forEach((function(t){return t.destroy()})),n.off("*"),window.removeEventListener(t.locationChangeEvent,this._handleLocationChange),this.isMounted&&this.unmount()},e.prototype.mount=function(t,e){if(void 0===t&&(t=this.config.mountTo),void 0===e&&(e=!1),this.isMounted)return this.node;var n="string"==typeof t?document.querySelector(t):t,r=this.render();return this.node=r,e&&n.childNodes[0]?n.insertBefore(r,n.childNodes[0]):n.appendChild(r),this._emitter.emit(I,r),r},e.prototype.render=function(){return h(this.stringify())},e.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},e.prototype.updateUrls=function(t,e){if(!this.isMounted)return!1;var n=document.querySelectorAll(this.config.usagesToUpdate);return A(this.node,n,x(t)+"#",x(e)+"#"),!0},Object.defineProperties(e.prototype,r),e}(d),L=t((function(t){var e,n,r,i,o;t.exports=(n=[],r=document,i=r.documentElement.doScroll,(o=(i?/^loaded|^c/:/^loaded|^i|^c/).test(r.readyState))||r.addEventListener("DOMContentLoaded",e=function(){for(r.removeEventListener("DOMContentLoaded",e),o=1;e=n.shift();)e()}),function(t){o?setTimeout(t,0):n.push(t)})}));window.__SVG_SPRITE__?E=window.__SVG_SPRITE__:(E=new z({attrs:{id:"__SVG_SPRITE_NODE__","aria-hidden":"true"}}),window.__SVG_SPRITE__=E);var D=function(){var t=document.getElementById("__SVG_SPRITE_NODE__");t?E.attach(t):E.mount(document.body,!0)};return document.body?D():L(D),E},t.exports=n()}).call(this,n(58))},function(t,e,n){"use strict";function r(t,e,n,r,i,o,a,s){var u,c="function"==typeof t?t.options:t;if(e&&(c.render=e,c.staticRenderFns=n,c._compiled=!0),r&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(u=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},c._ssrRegister=u):i&&(u=s?function(){i.call(this,this.$root.$options.shadowRoot)}:i),u)if(c.functional){c._injectStyles=u;var l=c.render;c.render=function(t,e){return u.call(e),l(t,e)}}else{var f=c.beforeCreate;c.beforeCreate=f?[].concat(f,u):[u]}return{exports:t,options:c}}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";var r=n(13),i=n(527),o=n(528),a=n(735),s=n(81),u=function(t){if(t&&t.forEach!==a)try{s(t,"forEach",a)}catch(e){t.forEach=a}};for(var c in i)i[c]&&u(r[c]&&r[c].prototype);u(o)},function(t,e,n){"use strict";var r=n(13),i=n(98).f,o=n(81),a=n(56),s=n(411),u=n(416),c=n(194);t.exports=function(t,e){var n,l,f,d,p,h=t.target,g=t.global,v=t.stat;if(n=g?r:v?r[h]||s(h,{}):(r[h]||{}).prototype)for(l in e){if(d=e[l],f=t.dontCallGetSet?(p=i(n,l))&&p.value:n[l],!c(g?l:h+(v?".":"#")+l,t.forced)&&void 0!==f){if(typeof d==typeof f)continue;u(d,f)}(t.sham||f&&f.sham)&&o(d,"sham",!0),a(n,l,d,t)}}},function(t,e,n){"use strict";t.exports=function(t){try{return!!t()}catch(t){return!0}}},,function(t,e,n){"use strict";var r=n(7),i=n(71).filter;r({target:"Array",proto:!0,forced:!n(202)("filter")},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(188),i=Function.prototype,o=i.call,a=r&&i.bind.bind(o,o);t.exports=r?a:function(t){return function(){return o.apply(t,arguments)}}},function(t,e,n){"use strict";var r=n(7),i=n(61),o=n(191);r({target:"Object",stat:!0,forced:n(8)((function(){o(1)}))},{keys:function(t){return o(i(t))}})},function(t,e,n){"use strict";(function(e){var n=function(t){return t&&t.Math===Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||this||Function("return this")()}).call(this,n(58))},function(t,e,n){"use strict";n(742),n(743),n(744),n(745),n(747)},function(t,e,n){var r=n(731)();t.exports=r;try{regeneratorRuntime=r}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=r:Function("r","regeneratorRuntime = r")(r)}},function(t,e){function n(t,e,n,r,i,o,a){try{var s=t[o](a),u=s.value}catch(t){return void n(t)}s.done?e(u):Promise.resolve(u).then(r,i)}t.exports=function(t){return function(){var e=this,r=arguments;return new Promise((function(i,o){var a=t.apply(e,r);function s(t){n(a,i,o,s,u,"next",t)}function u(t){n(a,i,o,s,u,"throw",t)}s(void 0)}))}},t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){"use strict";var r=n(7),i=n(8),o=n(200),a=n(43),s=n(61),u=n(64),c=n(555),l=n(147),f=n(424),d=n(202),p=n(27),h=n(144),g=p("isConcatSpreadable"),v=h>=51||!i((function(){var t=[];return t[g]=!1,t.concat()[0]!==t})),y=function(t){if(!a(t))return!1;var e=t[g];return void 0!==e?!!e:o(t)};r({target:"Array",proto:!0,arity:1,forced:!v||!d("concat")},{concat:function(t){var e,n,r,i,o,a=s(this),d=f(a,0),p=0;for(e=-1,r=arguments.length;e=e.length)return t.target=void 0,c(void 0,!0);switch(t.kind){case"keys":return c(n,!1);case"values":return c(e[n],!1)}return c([n,e[n]],!1)}),"values");var h=o.Arguments=o.Array;if(i("keys"),i("values"),i("entries"),!l&&f&&"values"!==h.name)try{s(h,"name",{value:"values"})}catch(t){}},function(t,e){t.exports=__WEBPACK_EXTERNAL_MODULE__21__},function(t,e,n){"use strict";var r=n(7),i=n(39),o=n(523),a=n(78),s=n(98),u=n(147);r({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(t){for(var e,n,r=a(t),i=s.f,c=o(r),l={},f=0;c.length>f;)void 0!==(n=i(r,e=c[f++]))&&u(l,e,n);return l}})},,,function(t,e,n){var r=n(566);t.exports=function(t,e,n){return(e=r(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){"use strict";var r=n(7),i=n(71).map;r({target:"Array",proto:!0,forced:!n(202)("map")},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(13),i=n(142),o=n(41),a=n(189),s=n(143),u=n(513),c=r.Symbol,l=i("wks"),f=u?c.for||c:c&&c.withoutSetter||a;t.exports=function(t){return o(l,t)||(l[t]=s&&o(c,t)?c[t]:f("Symbol."+t)),l[t]}},function(t,e,n){"use strict";var r=n(13),i=n(527),o=n(528),a=n(20),s=n(81),u=n(27),c=u("iterator"),l=u("toStringTag"),f=a.values,d=function(t,e){if(t){if(t[c]!==f)try{s(t,c,f)}catch(e){t[c]=f}if(t[l]||s(t,l,e),i[e])for(var n in a)if(t[n]!==a[n])try{s(t,n,a[n])}catch(e){t[n]=a[n]}}};for(var p in i)d(r[p]&&r[p].prototype,p);d(o,"DOMTokenList")},function(t,e){function n(e){return t.exports=n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,n(e)}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){"use strict";n(748),n(753),n(754),n(755),n(756),n(757)},function(t,e,n){"use strict";var r=n(514),i=r.all;t.exports=r.IS_HTMLDDA?function(t){return"function"==typeof t||t===i}:function(t){return"function"==typeof t}},function(t,e,n){"use strict";var r=n(188),i=Function.prototype.call;t.exports=r?i.bind(i):function(){return i.apply(i,arguments)}},function(t,e,n){"use strict";var r=n(39),i=n(146).EXISTS,o=n(11),a=n(99),s=Function.prototype,u=o(s.toString),c=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,l=o(c.exec);r&&!i&&a(s,"name",{configurable:!0,get:function(){try{return l(c,u(this))[1]}catch(t){return""}}})},function(t,e,n){"use strict";var r=n(419).charAt,i=n(44),o=n(65),a=n(414),s=n(195),u=o.set,c=o.getterFor("String Iterator");a(String,"String",(function(t){u(this,{type:"String Iterator",string:i(t),index:0})}),(function(){var t,e=c(this),n=e.string,i=e.index;return i>=n.length?s(void 0,!0):(t=r(n,i),e.index+=t.length,s(t,!1))}))},function(t,e,n){"use strict";var r,i,o,a=n(545),s=n(39),u=n(13),c=n(31),l=n(43),f=n(41),d=n(107),p=n(133),h=n(81),g=n(56),v=n(99),y=n(90),m=n(121),b=n(122),w=n(27),x=n(189),_=n(65),k=_.enforce,S=_.get,j=u.Int8Array,O=j&&j.prototype,E=u.Uint8ClampedArray,C=E&&E.prototype,T=j&&m(j),A=O&&m(O),I=Object.prototype,P=u.TypeError,z=w("toStringTag"),L=x("TYPED_ARRAY_TAG"),D=a&&!!b&&"Opera"!==d(u.opera),M=!1,R={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},N={BigInt64Array:8,BigUint64Array:8},$=function(t){var e=m(t);if(l(e)){var n=S(e);return n&&f(n,"TypedArrayConstructor")?n.TypedArrayConstructor:$(e)}},F=function(t){if(!l(t))return!1;var e=d(t);return f(R,e)||f(N,e)};for(r in R)(o=(i=u[r])&&i.prototype)?k(o).TypedArrayConstructor=i:D=!1;for(r in N)(o=(i=u[r])&&i.prototype)&&(k(o).TypedArrayConstructor=i);if((!D||!c(T)||T===Function.prototype)&&(T=function(){throw new P("Incorrect invocation")},D))for(r in R)u[r]&&b(u[r],T);if((!D||!A||A===I)&&(A=T.prototype,D))for(r in R)u[r]&&b(u[r].prototype,A);if(D&&m(C)!==A&&b(C,A),s&&!f(A,z))for(r in M=!0,v(A,z,{configurable:!0,get:function(){return l(this)?this[L]:void 0}}),R)u[r]&&h(u[r],L,r);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:D,TYPED_ARRAY_TAG:M&&L,aTypedArray:function(t){if(F(t))return t;throw new P("Target is not a typed array")},aTypedArrayConstructor:function(t){if(c(t)&&(!b||y(T,t)))return t;throw new P(p(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,e,n,r){if(s){if(n)for(var i in R){var o=u[i];if(o&&f(o.prototype,t))try{delete o.prototype[t]}catch(n){try{o.prototype[t]=e}catch(t){}}}A[t]&&!n||g(A,t,n?e:D&&O[t]||e,r)}},exportTypedArrayStaticMethod:function(t,e,n){var r,i;if(s){if(b){if(n)for(r in R)if((i=u[r])&&f(i,t))try{delete i[t]}catch(t){}if(T[t]&&!n)return;try{return g(T,t,n?e:D&&T[t]||e)}catch(t){}}for(r in R)!(i=u[r])||i[t]&&!n||g(i,t,e)}},getTypedArrayConstructor:$,isView:function(t){if(!l(t))return!1;var e=d(t);return"DataView"===e||f(R,e)||f(N,e)},isTypedArray:F,TypedArray:T,TypedArrayPrototype:A}},function(t,e,n){"use strict";var r=n(7),i=n(235).includes,o=n(8),a=n(233);r({target:"Array",proto:!0,forced:o((function(){return!Array(1).includes()}))},{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),a("includes")},function(t,e,n){"use strict";var r=n(7),i=n(11),o=n(187),a=n(78),s=n(247),u=i([].join);r({target:"Array",proto:!0,forced:o!==Object||!s("join",",")},{join:function(t){return u(a(this),void 0===t?",":t)}})},function(t,e,n){"use strict";var r=n(146).PROPER,i=n(56),o=n(42),a=n(44),s=n(8),u=n(428),c=RegExp.prototype.toString,l=s((function(){return"/a/b"!==c.call({source:"a",flags:"b"})})),f=r&&"toString"!==c.name;(l||f)&&i(RegExp.prototype,"toString",(function(){var t=o(this);return"/"+a(t.source)+"/"+a(u(t))}),{unsafe:!0})},function(t,e,n){"use strict";var r=n(8);t.exports=!r((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e,n){"use strict";var r=n(7),i=n(556);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==i},{assign:i})},function(t,e,n){"use strict";var r=n(11),i=n(61),o=r({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return o(i(t),e)}},function(t,e,n){"use strict";var r=n(43),i=String,o=TypeError;t.exports=function(t){if(r(t))return t;throw new o(i(t)+" is not an object")}},function(t,e,n){"use strict";var r=n(31),i=n(514),o=i.all;t.exports=i.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:r(t)||t===o}:function(t){return"object"==typeof t?null!==t:r(t)}},function(t,e,n){"use strict";var r=n(107),i=String;t.exports=function(t){if("Symbol"===r(t))throw new TypeError("Cannot convert a Symbol value to a string");return i(t)}},,function(t,e,n){"use strict";var r=n(7),i=n(74),o=n(39),a=n(13),s=n(535),u=n(11),c=n(194),l=n(41),f=n(242),d=n(90),p=n(145),h=n(412),g=n(8),v=n(120).f,y=n(98).f,m=n(70).f,b=n(544),w=n(529).trim,x=a.Number,_=s.Number,k=x.prototype,S=a.TypeError,j=u("".slice),O=u("".charCodeAt),E=function(t){var e=h(t,"number");return"bigint"==typeof e?e:C(e)},C=function(t){var e,n,r,i,o,a,s,u,c=h(t,"number");if(p(c))throw new S("Cannot convert a Symbol value to a number");if("string"==typeof c&&c.length>2)if(c=w(c),43===(e=O(c,0))||45===e){if(88===(n=O(c,2))||120===n)return NaN}else if(48===e){switch(O(c,1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+c}for(a=(o=j(c,2)).length,s=0;si)return NaN;return parseInt(o,r)}return+c},T=c("Number",!x(" 0o1")||!x("0b1")||x("+0x1")),A=function(t){return d(k,t)&&g((function(){b(t)}))},I=function(t){var e=arguments.length<1?0:x(E(t));return A(this)?f(Object(e),this,I):e};I.prototype=k,T&&!i&&(k.constructor=I),r({global:!0,constructor:!0,wrap:!0,forced:T},{Number:I});var P=function(t,e){for(var n,r=o?v(e):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),i=0;r.length>i;i++)l(e,n=r[i])&&!l(t,n)&&m(t,n,y(e,n))};i&&_&&P(s.Number,_),(T||i)&&P(s.Number,x)},,function(t,e,n){"use strict";var r=n(7),i=n(200),o=n(243),a=n(43),s=n(119),u=n(64),c=n(78),l=n(147),f=n(27),d=n(202),p=n(135),h=d("slice"),g=f("species"),v=Array,y=Math.max;r({target:"Array",proto:!0,forced:!h},{slice:function(t,e){var n,r,f,d=c(this),h=u(d),m=s(t,h),b=s(void 0===e?h:e,h);if(i(d)&&(n=d.constructor,(o(n)&&(n===v||i(n.prototype))||a(n)&&null===(n=n[g]))&&(n=void 0),n===v||void 0===n))return p(d,m,b);for(r=new(void 0===n?v:n)(y(b-m,0)),f=0;m=0&&n<=b}}function V(t){return function(e){return null==e?void 0:e[t]}}var J=V("byteLength"),K=W(J),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/,Z=c?function(t){return h?h(t)&&!$(t):K(t)&&Q.test(s.call(t))}:H(!1),Y=V("length");function X(t,e){e=function(t){for(var e={},n=t.length,r=0;r":">",'"':""","'":"'","`":"`"},Bt=$t(Ft),qt=$t(mt(Ft)),Ut=nt.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gt=/(.)^/,Ht={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Wt=/\\|'|\r|\n|\u2028|\u2029/g;function Vt(t){return"\\"+Ht[t]}var Jt=/^\s*(\w|\$)+\s*$/,Kt=0;function Qt(t,e,n,r,i){if(!(r instanceof e))return t.apply(n,i);var o=St(t.prototype),a=t.apply(o,i);return x(a)?a:o}var Zt=w((function(t,e){var n=Zt.placeholder,r=function(){for(var i=0,o=e.length,a=Array(o),s=0;s1)te(s,e-1,n,r),i=r.length;else for(var u=0,c=s.length;u0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}}var ae=Zt(oe,2);function se(t,e,n){e=Dt(e,n);for(var r,i=tt(t),o=0,a=i.length;o0?0:i-1;o>=0&&o0?s=o>=0?o:Math.max(o+u,s):u=o>=0?Math.min(o+1,u):o+u+1;else if(n&&o&&u)return r[o=n(r,i)]===i?o:-1;if(i!=i)return(o=e(a.call(r,s,u),G))>=0?o+s:-1;for(o=t>0?s:u-1;o>=0&&o0?0:a-1;for(i||(r=e[o?o[s]:s],s+=t);s>=0&&s=3;return e(t,Pt(n,i,4),r,o)}}var be=me(1),we=me(-1);function xe(t,e,n){var r=[];return e=Dt(e,n),ve(t,(function(t,n,i){e(t,n,i)&&r.push(t)})),r}function _e(t,e,n){e=Dt(e,n);for(var r=!Xt(t)&&tt(t),i=(r||t).length,o=0;o=0}var je=w((function(t,e,n){var r,i;return L(e)?i=e:(e=Ot(e),r=e.slice(0,-1),e=e[e.length-1]),ye(t,(function(t){var o=i;if(!o){if(r&&r.length&&(t=Et(t,r)),null==t)return;o=t[e]}return null==o?o:o.apply(t,n)}))}));function Oe(t,e){return ye(t,It(e))}function Ee(t,e,n){var r,i,o=-1/0,a=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var s=0,u=(t=Xt(t)?t:yt(t)).length;so&&(o=r);else e=Dt(e,n),ve(t,(function(t,n,r){((i=e(t,n,r))>a||i===-1/0&&o===-1/0)&&(o=t,a=i)}));return o}var Ce=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function Te(t){return t?F(t)?a.call(t):j(t)?t.match(Ce):Xt(t)?ye(t,Tt):yt(t):[]}function Ae(t,e,n){if(null==e||n)return Xt(t)||(t=yt(t)),t[Rt(t.length-1)];var r=Te(t),i=Y(r);e=Math.max(Math.min(e,i),0);for(var o=i-1,a=0;a1&&(r=Pt(r,e[1])),e=ot(t)):(r=Me,e=te(e,!1,!1),t=Object(t));for(var i=0,o=e.length;i1&&(n=e[1])):(e=ye(te(e,!1,!1),String),r=function(t,n){return!Se(e,n)}),Re(t,r,n)}));function $e(t,e,n){return a.call(t,0,Math.max(0,t.length-(null==e||n?1:e)))}function Fe(t,e,n){return null==t||t.length<1?null==e||n?void 0:[]:null==e||n?t[0]:$e(t,t.length-e)}function Be(t,e,n){return a.call(t,null==e||n?1:e)}var qe=w((function(t,e){return e=te(e,!0,!0),xe(t,(function(t){return!Se(e,t)}))})),Ue=w((function(t,e){return qe(t,e)}));function Ge(t,e,n,r){k(e)||(r=n,n=e,e=!1),null!=n&&(n=Dt(n,r));for(var i=[],o=[],a=0,s=Y(t);ae?(r&&(clearTimeout(r),r=null),s=c,a=t.apply(i,o),r||(i=o=null)):r||!1===n.trailing||(r=setTimeout(u,l)),a};return c.cancel=function(){clearTimeout(r),s=0,r=i=o=null},c},debounce:function(t,e,n){var r,i,o,a,s,u=function(){var c=Nt()-i;e>c?r=setTimeout(u,e-c):(r=null,n||(a=t.apply(s,o)),r||(o=s=null))},c=w((function(c){return s=this,o=c,i=Nt(),r||(r=setTimeout(u,e),n&&(a=t.apply(s,o))),a}));return c.cancel=function(){clearTimeout(r),r=o=s=null},c},wrap:function(t,e){return Zt(e,t)},negate:ie,compose:function(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}},after:function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},before:oe,once:ae,findKey:se,findIndex:ce,findLastIndex:le,sortedIndex:fe,indexOf:pe,lastIndexOf:he,find:ge,detect:ge,findWhere:function(t,e){return ge(t,At(e))},each:ve,forEach:ve,map:ye,collect:ye,reduce:be,foldl:be,inject:be,reduceRight:we,foldr:we,filter:xe,select:xe,reject:function(t,e,n){return xe(t,ie(Dt(e)),n)},every:_e,all:_e,some:ke,any:ke,contains:Se,includes:Se,include:Se,invoke:je,pluck:Oe,where:function(t,e){return xe(t,At(e))},max:Ee,min:function(t,e,n){var r,i,o=1/0,a=1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var s=0,u=(t=Xt(t)?t:yt(t)).length;sr||void 0===n)return 1;if(n=A&&(T+=j(s,A,L)+P,A=L+z.length)}return T+j(s,A)}]}),!!s((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}))||!O||E)},function(t,e,n){"use strict";var r=n(7),i=n(61),o=n(119),a=n(91),s=n(64),u=n(797),c=n(555),l=n(424),f=n(147),d=n(430),p=n(202)("splice"),h=Math.max,g=Math.min;r({target:"Array",proto:!0,forced:!p},{splice:function(t,e){var n,r,p,v,y,m,b=i(this),w=s(b),x=o(t,w),_=arguments.length;for(0===_?n=r=0:1===_?(n=0,r=w-x):(n=_-2,r=g(h(a(e),0),w-x)),c(w+n-r),p=l(b,r),v=0;vw-r+n;v--)d(b,v-1)}else if(n>r)for(v=w-r;v>x;v--)m=v+n-1,(y=v+r-1)in b?b[m]=b[y]:d(b,m);for(v=0;v1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=u(u(u({},c),l),n);return a.default.delete(t,p(e,r),r)},e.createPost=e.createGet=e.createFormPost=void 0,e.get=f,e.paramsQuery=h,e.post=d,e.put=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=u(u(u({},c),l),n);return a.default.put(t,p(e,r),r)},n(12),n(2),n(6),n(37);var i=r(n(25)),o=r(n(265)),a=r(n(673));function s(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function u(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3?arguments[3]:void 0,i=u(u({},c),n);return i.params=p(e,i),i.cancelToken=new o.default.CancelToken((function(t){r&&(r.source=t)})),a.default.get(t,i)}e.createGet=function(t,e){return function(n){return f(t,n,e)}};function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=u(u(u({},c),l),n);return a.default.post(t,p(e,r),r)}e.createPost=function(t,e){return function(n){return d(t,n,e)}},e.createFormPost=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return d(t,h(n),u(u({},e),{},{headers:u(u({},e["Content-Type"]),{},{"Content-Type":"application/x-www-form-urlencoded"})}))}};function p(t,e){return e.isRemoveField?function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=JSON.parse(JSON.stringify(t)),r=e;0===e.length&&(r=Object.keys(t));return r.forEach((function(t){var e=n[t];""!==e&&null!=e||delete n[t]})),n}(t,e.removeField):t}function h(){var t,e,n,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=[];for(t in r)if((e=r[t])instanceof Array)for(n=e.length;n--;)i.push(t+"[]="+encodeURIComponent(e[n]));else i.push(t+"="+encodeURIComponent(void 0===e?"":e));return i.join("&")}},,function(t,e,n){"use strict";(function(t){var r=n(1);Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=r(n(29));n(2),n(38),n(115),n(48),n(394),n(156),n(400),n(101),n(102),n(103),n(14),n(73),n(83),n(20),n(34),n(28),n(63),n(19),n(50),n(399),n(12),n(182),n(40),n(157),n(158),n(159),n(160),n(161),n(162),n(163),n(164),n(165),n(166),n(167),n(168),n(169),n(170),n(171),n(172),n(173),n(174),n(175),n(176),n(177),n(178),n(179),n(180),n(22),n(6),n(231),n(232),n(46),n(139);var o,a=r(n(686)),s=Object.prototype.toString,u=Object.getPrototypeOf,c=(o=Object.create(null),function(t){var e=s.call(t);return o[e]||(o[e]=e.slice(8,-1).toLowerCase())}),l=function(t){return t=t.toLowerCase(),function(e){return c(e)===t}},f=function(t){return function(e){return(0,i.default)(e)===t}},d=Array.isArray,p=f("undefined");var h=l("ArrayBuffer");var g=f("string"),v=f("function"),y=f("number"),m=function(t){return null!==t&&"object"===(0,i.default)(t)},b=function(t){if("object"!==c(t))return!1;var e=u(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||Symbol.toStringTag in t||Symbol.iterator in t)},w=l("Date"),x=l("File"),_=l("Blob"),k=l("FileList"),S=l("URLSearchParams");function j(t,e){var n,r,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=o.allOwnKeys,s=void 0!==a&&a;if(null!=t)if("object"!==(0,i.default)(t)&&(t=[t]),d(t))for(n=0,r=t.length;n0;)if(e===(n=r[i]).toLowerCase())return n;return null}var E="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:t,C=function(t){return!p(t)&&t!==E};var T,A=(T="undefined"!=typeof Uint8Array&&u(Uint8Array),function(t){return T&&t instanceof T}),I=l("HTMLFormElement"),P=function(t){var e=Object.prototype.hasOwnProperty;return function(t,n){return e.call(t,n)}}(),z=l("RegExp"),L=function(t,e){var n=Object.getOwnPropertyDescriptors(t),r={};j(n,(function(n,i){var o;!1!==(o=e(n,i,t))&&(r[i]=o||n)})),Object.defineProperties(t,r)},D="abcdefghijklmnopqrstuvwxyz",M={DIGIT:"0123456789",ALPHA:D,ALPHA_DIGIT:D+D.toUpperCase()+"0123456789"};var R=l("AsyncFunction");e.default={isArray:d,isArrayBuffer:h,isBuffer:function(t){return null!==t&&!p(t)&&null!==t.constructor&&!p(t.constructor)&&v(t.constructor.isBuffer)&&t.constructor.isBuffer(t)},isFormData:function(t){var e;return t&&("function"==typeof FormData&&t instanceof FormData||v(t.append)&&("formdata"===(e=c(t))||"object"===e&&v(t.toString)&&"[object FormData]"===t.toString()))},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&h(t.buffer)},isString:g,isNumber:y,isBoolean:function(t){return!0===t||!1===t},isObject:m,isPlainObject:b,isUndefined:p,isDate:w,isFile:x,isBlob:_,isRegExp:z,isFunction:v,isStream:function(t){return m(t)&&v(t.pipe)},isURLSearchParams:S,isTypedArray:A,isFileList:k,forEach:j,merge:function t(){for(var e=C(this)&&this||{},n=e.caseless,r={},i=function(e,i){var o=n&&O(r,i)||i;b(r[o])&&b(e)?r[o]=t(r[o],e):b(e)?r[o]=t({},e):d(e)?r[o]=e.slice():r[o]=e},o=0,a=arguments.length;o3&&void 0!==arguments[3]?arguments[3]:{},i=r.allOwnKeys;return j(e,(function(e,r){n&&v(e)?t[r]=(0,a.default)(e,n):t[r]=e}),{allOwnKeys:i}),t},trim:function(t){return t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t},inherits:function(t,e,n,r){t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),n&&Object.assign(t.prototype,n)},toFlatObject:function(t,e,n,r){var i,o,a,s={};if(e=e||{},null==t)return e;do{for(o=(i=Object.getOwnPropertyNames(t)).length;o-- >0;)a=i[o],r&&!r(a,t,e)||s[a]||(e[a]=t[a],s[a]=!0);t=!1!==n&&u(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},kindOf:c,kindOfTest:l,endsWith:function(t,e,n){t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;var r=t.indexOf(e,n);return-1!==r&&r===n},toArray:function(t){if(!t)return null;if(d(t))return t;var e=t.length;if(!y(e))return null;for(var n=new Array(e);e-- >0;)n[e]=t[e];return n},forEachEntry:function(t,e){for(var n,r=(t&&t[Symbol.iterator]).call(t);(n=r.next())&&!n.done;){var i=n.value;e.call(t,i[0],i[1])}},matchAll:function(t,e){for(var n,r=[];null!==(n=t.exec(e));)r.push(n);return r},isHTMLForm:I,hasOwnProperty:P,hasOwnProp:P,reduceDescriptors:L,freezeMethods:function(t){L(t,(function(e,n){if(v(t)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;var r=t[n];v(r)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=function(){throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:function(t,e){var n={},r=function(t){t.forEach((function(t){n[t]=!0}))};return d(t)?r(t):r(String(t).split(e)),n},toCamelCase:function(t){return t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(t,e,n){return e.toUpperCase()+n}))},noop:function(){},toFiniteNumber:function(t,e){return t=+t,Number.isFinite(t)?t:e},findKey:O,global:E,isContextDefined:C,ALPHABET:M,generateString:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:M.ALPHA_DIGIT,n="",r=e.length;t--;)n+=e[Math.random()*r|0];return n},isSpecCompliantForm:function(t){return!!(t&&v(t.append)&&"FormData"===t[Symbol.toStringTag]&&t[Symbol.iterator])},toJSONObject:function(t){var e=new Array(10);return function t(n,r){if(m(n)){if(e.indexOf(n)>=0)return;if(!("toJSON"in n)){e[r]=n;var i=d(n)?[]:{};return j(n,(function(e,n){var o=t(e,r+1);!p(o)&&(i[n]=o)})),e[r]=void 0,i}}return n}(t,0)},isAsyncFn:R,isThenable:function(t){return t&&(m(t)||v(t))&&v(t.then)&&v(t.catch)}}}).call(this,n(58))},function(t,e,n){"use strict";var r=n(31),i=n(70),o=n(522),a=n(411);t.exports=function(t,e,n,s){s||(s={});var u=s.enumerable,c=void 0!==s.name?s.name:e;if(r(n)&&o(n,c,s),s.global)u?t[e]=n:a(e,n);else{try{s.unsafe?t[e]&&(u=!0):delete t[e]}catch(t){}u?t[e]=n:i.f(t,e,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return t}},,function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.exports.__esModule=!0,t.exports.default=t.exports},function(t,e,n){var r=n(566);function i(t,e){for(var n=0;n1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r=n(7),i=n(71).find,o=n(233),a=!0;"find"in[]&&Array(1).find((function(){a=!1})),r({target:"Array",proto:!0,forced:a},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),o("find")},function(t,e,n){"use strict";var r=n(86),i=TypeError;t.exports=function(t){if(r(t))throw new i("Can't call method on "+t);return t}},function(t,e,n){"use strict";var r=n(39),i=n(517),o=n(516),a=n(42),s=n(190),u=TypeError,c=Object.defineProperty,l=Object.getOwnPropertyDescriptor;e.f=r?o?function(t,e,n){if(a(t),e=s(e),a(n),"function"==typeof t&&"prototype"===e&&"value"in n&&"writable"in n&&!n.writable){var r=l(t,e);r&&r.writable&&(t[e]=n.value,n={configurable:"configurable"in n?n.configurable:r.configurable,enumerable:"enumerable"in n?n.enumerable:r.enumerable,writable:!1})}return c(t,e,n)}:c:function(t,e,n){if(a(t),e=s(e),a(n),i)try{return c(t,e,n)}catch(t){}if("get"in n||"set"in n)throw new u("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){"use strict";var r=n(108),i=n(11),o=n(187),a=n(61),s=n(64),u=n(424),c=i([].push),l=function(t){var e=1===t,n=2===t,i=3===t,l=4===t,f=6===t,d=7===t,p=5===t||f;return function(h,g,v,y){for(var m,b,w=a(h),x=o(w),_=r(g,v),k=s(x),S=0,j=y||u,O=e?j(h,k):n||d?j(h,0):void 0;k>S;S++)if((p||S in x)&&(b=_(m=x[S],S,w),t))if(e)O[S]=b;else if(b)switch(t){case 3:return!0;case 5:return m;case 6:return S;case 2:c(O,m)}else switch(t){case 4:return!1;case 7:c(O,m)}return f?-1:i||l?l:O}};t.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},,function(t,e,n){"use strict";var r=n(7),i=n(39),o=n(13),a=n(11),s=n(41),u=n(31),c=n(90),l=n(44),f=n(99),d=n(416),p=o.Symbol,h=p&&p.prototype;if(i&&u(p)&&(!("description"in h)||void 0!==p().description)){var g={},v=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:l(arguments[0]),e=c(h,this)?new p(t):void 0===t?p():p(t);return""===t&&(g[e]=!0),e};d(v,p),v.prototype=h,h.constructor=v;var y="Symbol(description detection)"===String(p("description detection")),m=a(h.valueOf),b=a(h.toString),w=/^Symbol\((.*)\)[^)]+$/,x=a("".replace),_=a("".slice);f(h,"description",{configurable:!0,get:function(){var t=m(this);if(s(g,t))return"";var e=b(t),n=y?_(e,7,-1):x(e,w,"$1");return""===n?void 0:n}}),r({global:!0,constructor:!0,forced:!0},{Symbol:v})}},function(t,e,n){"use strict";t.exports=!1},function(t,e,n){"use strict";var r=n(1);Object.defineProperty(e,"__esModule",{value:!0}),e.copyTextValue=e.XssText=e.IS_MOBILE=e.Div=void 0,e.dataURLtoFile=function(t){var e=t.split(","),n=e[0].match(/:(.*?);/)[1],r=atob(e[1]),i=r.length,o=new Uint8Array(i);for(;i--;)o[i]=r.charCodeAt(i);return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e&&(t.name=e),t}(new Blob([o],{type:n}))},e.filterXss=e.default=e.deepClone=void 0,e.findNthOccurrence=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;if(!t)return-1;for(var r=0,i=0;i0?e.split("&"):[],i=null,o=null,a=null,s=0;s1&&void 0!==arguments[1]?arguments[1]:"",r=[],i=0,o=0;for(o=0;o<256;o++)r[o]=o;for(o=0;o<256;o++)i=(i+r[o]+t.charCodeAt(o%t.length))%256,e=r[o],r[o]=r[i],r[i]=e;o=0,i=0;for(var a=[],s=0;s')})),i},e.toDecimal=void 0,e.toHighlight=function(t){var e=t.str,n=t.highlightList,r=[];n&&n.forEach((function(t){r.unshift(t)}));var i=e;return r.forEach((function(t){var n,r=e.slice(t.startIndex,t.endIndex);n=''.concat(r,""),i=I(i,t.startIndex,t.endIndex,n)})),i},e.truncateText=H,e.useOldPdf=e.updateQueryStringParameter=void 0,e.zhLength=function(t){for(var e=0,n=(t=t.replace(/(^[\s\n\r]*)|([\s\n\r]*$)/g,"")).length,r=-1,i=0;i255?1:.5;return Math.ceil(e)};var i=r(n(15)),o=r(n(16));n(2),n(38),n(17),n(48),n(36),n(67),n(19),n(50),n(33),n(77),n(20),n(156),n(157),n(158),n(159),n(160),n(161),n(162),n(163),n(164),n(165),n(166),n(167),n(168),n(169),n(170),n(171),n(172),n(173),n(174),n(175),n(176),n(177),n(178),n(179),n(180),n(37),n(46),n(453),n(30),n(6),n(68),n(63),n(26),n(85),n(1132);var a=r(n(21)),s=r(n(1133)),u=n(678),c=new a.default;function l(){var t=0,e=0;return document.body&&(t=document.body.scrollTop),document.documentElement&&(e=document.documentElement.scrollTop),t-e>0?t:e}function f(t){var e=t;if(!e)return{top:0,left:0,width:0,height:0};for(var n={top:e.offsetTop,left:e.offsetLeft,width:e.offsetWidth,height:e.offsetHeight};e!=document.body;)e=e.offsetParent,n.top+=e.offsetTop,n.left+=e.offsetLeft;return n}function d(){return l()+("CSS1Compat"==document.compatMode?document.documentElement.clientHeight:document.body.clientHeight)==(t=0,e=0,document.body&&(t=document.body.scrollHeight),document.documentElement&&(e=document.documentElement.scrollHeight),t-e>0?t:e);var t,e}function p(t,e){return!!t.getAttribute("class")&&t.getAttribute("class").split(" ").indexOf(e)>-1}function h(t){var e;if(!t)return{};var n=t.getBoundingClientRect(),r=n.width,i=n.height,o=n.left,a=n.top,s=n.bottom,u=n.right,c=n.x,l=n.y,f=null===(e=t.ownerDocument)||void 0===e||null===(e=e.defaultView)||void 0===e?void 0:e.frameElement;if(f){var d=f.getBoundingClientRect();o+=d.left,a+=d.top,s+=d.top,u+=d.left,c+=d.left,l+=d.top}return{width:r,height:i,left:o,top:a,right:u,bottom:s,x:c,y:l}}function g(t,e){return t?e?((t.includes("/")||t.includes(".")||t.includes("-"))&&(t=t.replace(/[\/\.-]/g,"")),"".concat(t.substring(0,4)).concat(e).concat(t.substring(4,6))):t:""}function v(t){for(var e=0,n=(t=t.replace(/(^[\s\n\r]*)|([\s\n\r]*$)/g,"")).length,r=0;r255?1:.5;return Math.ceil(e)}function y(t){var e=Object.prototype.toString.call(t);return e.slice(e.indexOf(" ")+1,e.length-1).toLowerCase()}function m(t,e){var n,r,i="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),o=[];if(e=e||i.length,t)for(n=0;n$/.test(t)?t.replace(/\/g,">").replace("","").replace("","").replace("","").replace("",""):t}),x=(e.XssText=function(t){return(""+t).replace(//g,">").replace(/\n/g,"
").replace(/\\n/g,"
").replace(/&middot;/g,"·").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/</g,"<").replace(/>/g,">").replace(/·/g,"")},e.toDecimal=function(t){var e=parseFloat(t);if(isNaN(e))return!1;var n=(e=Math.round(100*t)/100).toString(),r=n.indexOf(".");for(r<0&&(r=n.length,n+=".");n.length<=r+2;)n+="0";return n}),_=e.regYuanToFen=function(t,e){var n=0,r=t.toString(),i=e.toString();try{n+=r.split(".")[1].length}catch(t){}try{n+=i.split(".")[1].length}catch(t){}return Number(r.replace(".",""))*Number(i.replace(".",""))/Math.pow(10,n)},k=e.Div=function(t,e,n){t=t.toString(),e=e.toString();var r=t.split("."),i=e.split("."),o=2==r.length?r[1]:"",a=2==i.length?i[1]:"",s=o.length-a.length,u=Number(t.replace(".",""))/Number(e.replace(".",""))*Math.pow(10,s);return"number"==typeof n?Number(u.toFixed(n)):u},S=e.isSafeUrl=function(t){var e=window.location.host.indexOf("weizhipin.com")>-1?["weizhipin.com"]:["zhipin.com"],n=((t||"").replace(/^(https?)?(:?\/\/+)([^\/?]*)(.*)?$/,"$3")||"").split(".").slice(-2).join(".");return e.indexOf(n)>-1},j=e.useOldPdf=function(){var t=(new s.default).getBrowser()||{};return["IE"].indexOf(t.name)>-1||"Chrome"==t.name&&(t.version||"").split(".")[0]<=80},O=e.isIE=function(){var t=(new s.default).getBrowser()||{};return["IE"].indexOf(t.name)>-1};e.shuffle=function(t){for(var e,n,r=t.length;0!=r;)n=Math.floor(Math.random()*r),e=t[--r],t[r]=t[n],t[n]=e;return t};var E=e.formatTel=function(t,e){var n,r,i=trim(t),o="",a="",s=0,u=0;for(e.includes("-")?(n=e.split("-"),a="-"):(n=e.split(" "),a="-"),s=0;s'+n.substr(o,a)+""+n.substr(o+a)},A=e.openNewPage=function(t){if(t){var e=document.createElement("a");e.setAttribute("target","_blank"),e.setAttribute("rel","external nofollow"),e.href=t,document.body&&document.body.appendChild(e),e.click(),setTimeout((function(){var t,n;null==e||null===(t=e.parentNode)||void 0===t||null===(n=t.removeChild)||void 0===n||n.call(t,e)}),0)}};function I(t,e,n,r){return t.substr(0,e)+r+t.substr(n,t.length)}var P=e.setCursorEnd=function(t){if(window.getSelection){t.focus();var e=window.getSelection();e&&(e.selectAllChildren(t),e.collapseToEnd())}else if(document.selection){var n=document.selection.createRange();n.moveToElementText(t),n.collapse(!1),n.select()}};function z(t){if(!t)return"";$("body").find("#boss-editor-sub").length||$("body").append('
');var e=$("body").find("#boss-editor-sub");return e.html(t),e.find("img").each((function(){var t=$(this).data("key");t&&$(this).replaceWith("".concat(t))})),t=e[0].innerText,$.trim(t)}var L=e.deepClone=function t(e){var n=Array.isArray(e)?[]:{};for(var r in e)if(e.hasOwnProperty(r)){var i=e[r],o=Object.prototype.toString.call(i);n[r]="[object Object]"===o||"[object Array]"===o?t(i):i}return n};var D=function(t){return(t="".concat(t)).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},M=function(t){return(t="".concat(t)).replace(/\[\[\|/g,"").replace(/"/g,'"')};function R(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!t||""===t)return"";var r=t.split(""),i=function(t){return'[[font data-url="'.concat(t||"",'" class="font-hightlight ').concat(n.className||"",'" ]]')},o="[[|font]]",a=n&&n.start?n.start:"startIndex",s=n&&n.end?n.end:"endIndex";e&&e.forEach((function(t){var e=t[a],n=t[s]-1;r[e]=i(t.protocol||t.url)+(r[e]||""),r[n]=(r[n]||"")+o}));var u=D(r.join("")),c=M(u);return c}function N(t){if(!t)return"";t=t.replace(/\s*/g,"");for(var e=[],n=0;n1?t.split("?")[1]:t).split("&"),r=0;r1&&(e[i[0]]=i[1])}return e}var B=e.hasLightKeyword=function(t,e){var n=(e+"").toLowerCase(),r=(t+"").toLowerCase(),i=n.indexOf(r),o=t.length,a=(0,u.match)(n,r)||[];if(i>0){a=[];for(var s=0;s0){var i=n.split("");n=(i=i.map((function(t,e){return r.includes(e)?''+t+"":t}))).join("")}return n},e.updateQueryStringParameter=function(t,e,n){if(!n)return t;var r=new RegExp("([?&])"+e+"=.*?(&|$)","i"),i=-1!==t.indexOf("?")?"&":"?";return t.match(r)?t.replace(r,"$1"+e+"="+n+"$2"):t+i+e+"="+n});function U(){var t=window.getSelection();if(t.rangeCount>0){var e=t.getRangeAt(0);return{startContainer:e.startContainer,startOffset:e.startOffset,endContainer:e.endContainer,endOffset:e.endOffset}}}function G(t){if(t){var e=document.createRange(),n=t.startContainer,r=t.startOffset,i=void 0===r?0:r,o=t.endContainer,a=t.endOffset,s=void 0===a?0:a;n&&e.setStart(n,i),o&&e.setEnd(o,s);var u=window.getSelection();u.removeAllRanges(),u.addRange(e)}}function H(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:120,n=0,r="",i=t.length;t=t.replace(/(^[\s\n\r]*)|([\s\n\r]*$)/g,"");for(var o=0;o255?1:.5)<=e)){r+="...";break}r+=t[o]}return r}var W=e.copyTextValue=function(t,e){if(t){var n=document.createElement("input");n.setAttribute("id","boss-copy-input"),n.setAttribute("readonly","readonly"),n.setAttribute("value",t),document.body.appendChild(n),n.select(),n.setSelectionRange(0,9999),document.execCommand("copy"),document.execCommand("copy")&&("function"==typeof e?e():c.$toast({content:"已复制",type:"success"})),document.body.removeChild(n)}};function V(t){var e=/^(?:https?:\/\/)?[^\/]+(\/[^?#]*)?/i.exec(t),n=e&&e[1]?e[1]:"/",r=(t.split("?")[1]||"").split("#")[0]||"",i=t.split("#")[1]||"";return n+(r?"?"+r:"")+(i?"#"+i:"")}var J=e.maskText=function(t){return t?"*".repeat(String(t).length):""};e.default={lightKeyword:T,getOffset:f,isScrollBottom:d,closest:function(t,e){for(var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector;t&&!n.call(t,e);)t=t.parentElement;return t},hasClass:p,getClientRect:function(t){var e=t.getBoundingClientRect();return{top:parseInt(e.y,10),left:parseInt(e.x,10),width:parseInt(e.width,10),height:parseInt(e.height,10)}},getFloat:function(t){var e=(t=Math.round(100*parseFloat(t))/100).toString().split(".");return 1==e.length?t=t.toString()+".00":e.length>1?(e[1].length<2&&(t=t.toString()+"0"),t):void 0},handleDateToMounth:g,getLength:v,getType:y,getUuid:m,isMobile:b,filterXss:w,toDecimal:x,regYuanToFen:_,Div:k,isSafeUrl:S,useOldPdf:j,isIE:O,formatTel:E,sleep:C,openNewPage:A,setCursorEnd:P,htmlConvertToMessage:z,deepClone:L,getElementRect:h,highlight:R,formateMobile:N,getQueryParams:F,updateQueryStringParameter:q,getCursorPosition:U,restoreCursorPosition:G,truncateText:H,copyTextValue:W,removeDomain:V,maskText:J}},function(t,e,n){"use strict";var r=n(7),i=n(71).findIndex,o=n(233),a=!0;"findIndex"in[]&&Array(1).findIndex((function(){a=!1})),r({target:"Array",proto:!0,forced:a},{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),o("findIndex")},function(t,e,n){"use strict";var r=n(32),i=n(245),o=n(42),a=n(86),s=n(80),u=n(44),c=n(69),l=n(118),f=n(246),d=n(201);i("match",(function(t,e,n){return[function(e){var n=c(this),i=a(e)?void 0:l(e,t);return i?r(i,e,n):new RegExp(e)[t](u(n))},function(t){var r=o(this),i=u(t),a=n(e,r,i);if(a.done)return a.value;if(!r.global)return d(r,i);var c=r.unicode;r.lastIndex=0;for(var l,p=[],h=0;null!==(l=d(r,i));){var g=u(l[0]);p[h]=g,""===g&&(r.lastIndex=f(i,s(r.lastIndex),c)),h++}return 0===h?null:p}]}))},function(t,e,n){"use strict";var r=n(187),i=n(69);t.exports=function(t){return r(i(t))}},function(t,e,n){"use strict";var r=n(31),i=n(133),o=TypeError;t.exports=function(t){if(r(t))return t;throw new o(i(t)+" is not a function")}},function(t,e,n){"use strict";var r=n(91),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e,n){"use strict";var r=n(39),i=n(70),o=n(106);t.exports=r?function(t,e,n){return i.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){"use strict";var r=n(664),i=Object.prototype.toString;function o(t){return"[object Array]"===i.call(t)}function a(t){return void 0===t}function s(t){return null!==t&&"object"==typeof t}function u(t){return"[object Function]"===i.call(t)}function c(t,e){if(null!=t)if("object"!=typeof t&&(t=[t]),o(t))for(var n=0,r=t.length;n@^][^\s!#%&*+<=>@^]*>/,L=/a/g,D=/a/g,M=new j(L)!==L,R=h.MISSED_STICKY,N=h.UNSUPPORTED_Y,$=r&&(!M||R||_||k||y((function(){return D[S]=!1,j(L)!==L||j(D)===D||"/a/i"!==String(j(L,"i"))})));if(a("RegExp",$)){for(var F=function(t,e){var n,r,i,o,a,c,h=l(O,this),g=f(t),v=void 0===e,y=[],w=t;if(!h&&g&&v&&t.constructor===F)return t;if((g||l(O,t))&&(t=t.source,v&&(e=p(w))),t=void 0===t?"":d(t),e=void 0===e?"":d(e),w=t,_&&"dotAll"in L&&(r=!!e&&I(e,"s")>-1)&&(e=A(e,/s/g,"")),n=e,R&&"sticky"in L&&(i=!!e&&I(e,"y")>-1)&&N&&(e=A(e,/y/g,"")),k&&(t=(o=function(t){for(var e,n=t.length,r=0,i="",o=[],a={},s=!1,u=!1,c=0,l="";r<=n;r++){if("\\"===(e=T(t,r)))e+=T(t,++r);else if("]"===e)s=!1;else if(!s)switch(!0){case"["===e:s=!0;break;case"("===e:C(z,P(t,r+1))&&(r+=2,u=!0),i+=e,c++;continue;case">"===e&&u:if(""===l||m(a,l))throw new E("Invalid capture group name");a[l]=!0,o[o.length]=[l,c],u=!1,l="";continue}u?l+=e:i+=e}return[i,o]}(t))[0],y=o[1]),a=s(j(t,e),h?this:O,F),(r||i||y.length)&&(c=b(a),r&&(c.dotAll=!0,c.raw=F(function(t){for(var e,n=t.length,r=0,i="",o=!1;r<=n;r++)"\\"!==(e=T(t,r))?o||"."!==e?("["===e?o=!0:"]"===e&&(o=!1),i+=e):i+="[\\s\\S]":i+=e+T(t,++r);return i}(t),n)),i&&(c.sticky=!0),y.length&&(c.groups=y)),t!==w)try{u(a,"source",""===w?"(?:)":w)}catch(t){}return a},B=c(j),q=0;B.length>q;)g(F,j,B[q++]);O.constructor=F,F.prototype=O,v(i,"RegExp",F,{constructor:!0})}w("RegExp")},function(t,e,n){"use strict";t.exports=function(t){return null==t}},function(t,e,n){"use strict";var r=n(13),i=n(31),o=function(t){return i(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?o(r[t]):r[t]&&r[t][e]}},,function(t,e,n){"use strict";var r=n(11),i=r({}.toString),o=r("".slice);t.exports=function(t){return o(i(t),8,-1)}},function(t,e,n){"use strict";var r=n(11);t.exports=r({}.isPrototypeOf)},function(t,e,n){"use strict";var r=n(724);t.exports=function(t){var e=+t;return e!=e||0===e?0:r(e)}},function(t,e,n){"use strict";var r=n(70).f,i=n(41),o=n(27)("toStringTag");t.exports=function(t,e,n){t&&!n&&(t=t.prototype),t&&!i(t,o)&&r(t,o,{configurable:!0,value:e})}},,function(t,e,n){"use strict";e.a=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){"use strict";var r=n(114),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=r.a?r.a.toStringTag:void 0;var u=function(t){var e=o.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=a.call(t);return r&&(e?t[s]=n:delete t[s]),i},c=Object.prototype.toString;var l=function(t){return c.call(t)},f=r.a?r.a.toStringTag:void 0;e.a=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":f&&f in Object(t)?u(t):l(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.wechatSetting=e.wechatGuide=e.wechatGetQrcode=e.webUrlRedirect=e.updateWechat=e.refreshMessage=e.hunterGeekCallReply=e.getZpChatGray=e.getWuKongUserOnline=e.getSessionCheck=e.getSceneList=e.getReplyWordList=e.getLigoList=e.getInnerLinkRuleList=e.getImgAuthUrl=e.getHistoryMsg=e.getGroupList=e.getGroupHistoryMsg=e.getGravityGroupList=e.getGeekVirtualPhone=e.getChatHelperFeedbackInfo=e.getBossData=e.getBatchGroup=e.geekShowUnread=e.checkSecondGreet=e._notifySettingGet=e._getFriendInfoRequest=void 0;var r=n(53);e.getGroupList=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/group/groupInfoList",t)},e.getBatchGroup=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/group/batchGetGroupInfo",t)},e.getLigoList=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/group/gravityGroupInfoList",t)},e.getWuKongUserOnline=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/group/userGroupEnter",t)},e.getBossData=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;return(0,r.get)("/wapi/zpchat/geek/getBossData",t,{},e)},e.getHistoryMsg=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;return(0,r.get)("/wapi/zpchat/geek/historyMsg",t,{},e)},e.getGroupHistoryMsg=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;return(0,r.get)("/wapi/zpchat/group/historyMsg",t,{},e)},e.refreshMessage=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;return(0,r.get)("/wapi/zpchat/message/refresh",t,{},e)},e.updateWechat=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;return(0,r.get)("/wapi/zpuser/wap/weChat/update",t,e)},e.hunterGeekCallReply=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;return(0,r.get)("/wapi/zpitem/web/search/hunter/geek/geekCallReply",t,e)},e.getImgAuthUrl=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;return(0,r.get)("/wapi/zpupload/oss/sign/refresh",t,{},e)},e.getGeekVirtualPhone=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/videoJob/geekGetVirtualPhone",t)},e.getChatHelperFeedbackInfo=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/chatHelper/feedback/alertInfo",t)},e._getFriendInfoRequest=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/geek/getBossData",t)},e.getSceneList=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/group/gravityScenes",t)},e.getGravityGroupList=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/group/gravityGroupInfoList",t)},e.checkSecondGreet=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/greeting/second/check",t)},e.geekShowUnread=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/config/get",t)},e.getReplyWordList=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/fastReply/replyWord/list",t)},e.wechatGuide=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/wechat/guide",t)},e.wechatGetQrcode=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/wechat/getScanMixInfo",t)},e.wechatSetting=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/wechat/setting",t)},e._notifySettingGet=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/notify/setting/get",t)},e.webUrlRedirect=function(t){return(0,r.get)("/wapi/zpchat/domain/grade/get?url="+t)},e.getInnerLinkRuleList=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/config/getInnerLinkRuleList",t)},e.getZpChatGray=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/gray/get",t)},e.getSessionCheck=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,r.get)("/wapi/zpchat/session/check",t)}},function(t,e,n){"use strict";var r,i=n(42),o=n(515),a=n(413),s=n(192),u=n(520),c=n(234),l=n(236),f=l("IE_PROTO"),d=function(){},p=function(t){return" + + + diff --git a/admin/src/views/work/apply_records.vue b/admin/src/views/work/apply_records.vue index 2d20846..38c30a7 100644 --- a/admin/src/views/work/apply_records.vue +++ b/admin/src/views/work/apply_records.vue @@ -167,7 +167,7 @@ export default { return h('Tag', { props: { color: color } }, `${score}%`) } }, - { title: '投递时间', key: 'applyTime', minWidth: 250 }, + { title: '创建时间', key: 'create_time', minWidth: 250 }, { title: '操作', key: 'action', diff --git a/admin/src/views/work/job_postings.vue b/admin/src/views/work/job_postings.vue index 66ecea1..027fcb1 100644 --- a/admin/src/views/work/job_postings.vue +++ b/admin/src/views/work/job_postings.vue @@ -126,7 +126,7 @@ export default { return h('Tag', { props: { color: status.color } }, status.text) } }, - { title: '发布时间', key: 'publishTime', minWidth: 150 }, + { title: '创建时间', key: 'create_time', minWidth: 220 }, { title: '操作', key: 'action', diff --git a/api/controller_admin/chat_records.js b/api/controller_admin/chat_records.js index ba6620a..1a27af6 100644 --- a/api/controller_admin/chat_records.js +++ b/api/controller_admin/chat_records.js @@ -104,10 +104,8 @@ module.exports = { }); return ctx.success({ - count: result.count, - total: result.count, rows: result.rows, - list: result.rows + count: result.count }); }, diff --git a/api/controller_admin/device_monitor.js b/api/controller_admin/device_monitor.js index aca7185..21288d8 100644 --- a/api/controller_admin/device_monitor.js +++ b/api/controller_admin/device_monitor.js @@ -150,8 +150,8 @@ module.exports = { }); return ctx.success({ - total: result.count, - list: list + rows: list, + count: result.count }); }, diff --git a/api/controller_admin/pla_account.js b/api/controller_admin/pla_account.js index d250093..43959c3 100644 --- a/api/controller_admin/pla_account.js +++ b/api/controller_admin/pla_account.js @@ -686,6 +686,86 @@ module.exports = { end_date: end_date } }); + }, + + /** + * @swagger + * /admin_api/pla_account/parse-resume: + * post: + * summary: 解析账号在线简历 + * description: 获取指定账号的在线简历并进行AI分析,返回简历详情 + * tags: [后台-账号管理] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * required: + * - id + * properties: + * id: + * type: integer + * description: 账号ID + * responses: + * 200: + * description: 解析成功,返回简历ID + */ + 'POST /pla_account/parse-resume': async (ctx) => { + const { id } = ctx.getBody(); + const models = await Framework.getModels(); + const { pla_account } = models; + const mqttClient = require('../middleware/mqtt/mqttClient'); + const resumeManager = require('../middleware/job/resumeManager'); + + if (!id) { + return ctx.fail('账号ID不能为空'); + } + + // 获取账号信息 + const account = await pla_account.findOne({ where: { id } }); + + if (!account) { + return ctx.fail('账号不存在'); + } + + const { sn_code, platform_type } = account; + + if (!sn_code) { + return ctx.fail('该账号未绑定设备'); + } + + try { + // 调用简历管理器获取并保存简历 + const resumeData = await resumeManager.get_online_resume(sn_code, mqttClient, { + platform: platform_type || 'boss' + }); + + // 从返回数据中获取 resumeId + // resumeManager 已经保存了简历到数据库,我们需要查询获取 resumeId + const resume_info = models.resume_info; + const savedResume = await resume_info.findOne({ + where: { + sn_code, + platform: platform_type || 'boss', + isActive: true + }, + order: [['syncTime', 'DESC']] + }); + + if (!savedResume) { + return ctx.fail('简历解析失败:未找到保存的简历记录'); + } + + return ctx.success({ + message: '简历解析成功', + resumeId: savedResume.resumeId, + data: resumeData + }); + } catch (error) { + console.error('[解析简历] 失败:', error); + return ctx.fail('解析简历失败: ' + (error.message || '未知错误')); + } } }; diff --git a/api/controller_admin/resume_info.js b/api/controller_admin/resume_info.js index d5cbd42..cbff157 100644 --- a/api/controller_admin/resume_info.js +++ b/api/controller_admin/resume_info.js @@ -69,8 +69,8 @@ const result = await resume_info.findAndCountAll({ }); return ctx.success({ - total: result.count, - list: result.rows + rows: result.rows, + count: result.count }); }, @@ -153,24 +153,45 @@ return ctx.success({ * 200: * description: 获取成功 */ - 'GET /resume/detail': async (ctx) => { + 'POST /resume/detail': async (ctx) => { const models = Framework.getModels(); const { resume_info } = models; - const { resumeId } = ctx.query; + const { resumeId } = ctx.getBody(); if (!resumeId) { return ctx.fail('简历ID不能为空'); } - -const resume = await resume_info.findOne({ where: { resumeId } }); + const resume = await resume_info.findOne({ where: { resumeId } }); -if (!resume) { - return ctx.fail('简历不存在'); -} + if (!resume) { + return ctx.fail('简历不存在'); + } -return ctx.success(resume); + // 解析 JSON 字段 + const resumeDetail = resume.toJSON(); + const jsonFields = ['skills', 'certifications', 'projectExperience', 'workExperience', 'aiSkillTags']; + jsonFields.forEach(field => { + if (resumeDetail[field]) { + try { + resumeDetail[field] = JSON.parse(resumeDetail[field]); + } catch (e) { + console.error(`解析字段 ${field} 失败:`, e); + } + } + }); + + // 解析原始数据(如果存在) + if (resumeDetail.originalData) { + try { + resumeDetail.originalData = JSON.parse(resumeDetail.originalData); + } catch (e) { + console.error('解析原始数据失败:', e); + } + } + + return ctx.success(resumeDetail); }, /** @@ -269,6 +290,74 @@ return ctx.success({ message: '简历删除成功' }); }); return ctx.success(resumeDetail); + }, + + /** + * @swagger + * /admin_api/resume/analyze-with-ai: + * post: + * summary: AI 分析简历 + * description: 使用 AI 分析简历并更新 AI 字段 + * tags: [后台-简历管理] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * required: + * - resumeId + * properties: + * resumeId: + * type: string + * description: 简历ID + * responses: + * 200: + * description: 分析成功 + */ + 'POST /resume/analyze-with-ai': async (ctx) => { + const models = Framework.getModels(); + const { resume_info } = models; + const { resumeId } = ctx.getBody(); + + if (!resumeId) { + return ctx.fail('简历ID不能为空'); + } + + const resume = await resume_info.findOne({ where: { resumeId } }); + + if (!resume) { + return ctx.fail('简历不存在'); + } + + try { + const resumeManager = require('../middleware/job/resumeManager'); + const resumeData = resume.toJSON(); + + // 调用 AI 分析 + await resumeManager.analyze_resume_with_ai(resumeId, resumeData); + + // 重新获取更新后的数据 + const updatedResume = await resume_info.findOne({ where: { resumeId } }); + const resumeDetail = updatedResume.toJSON(); + + // 解析 JSON 字段 + const jsonFields = ['skills', 'certifications', 'projectExperience', 'workExperience', 'aiSkillTags']; + jsonFields.forEach(field => { + if (resumeDetail[field]) { + try { + resumeDetail[field] = JSON.parse(resumeDetail[field]); + } catch (e) { + console.error(`解析字段 ${field} 失败:`, e); + } + } + }); + + return ctx.success(resumeDetail); + } catch (error) { + console.error('AI 分析失败:', error); + return ctx.fail('AI 分析失败: ' + error.message); + } } }; diff --git a/api/middleware/job/aiService.js b/api/middleware/job/aiService.js index 19116e8..f53a631 100644 --- a/api/middleware/job/aiService.js +++ b/api/middleware/job/aiService.js @@ -180,34 +180,50 @@ class aiService { */ async analyzeResume(resumeText) { const prompt = ` -请分析以下简历内容,提取核心要素: +请分析以下简历内容,并返回 JSON 格式的分析结果: 简历内容: ${resumeText} -请提取以下信息: -1. 技能标签(编程语言、框架、工具等) -2. 工作经验(年限、行业、项目等) -3. 教育背景(学历、专业、证书等) -4. 期望薪资范围 -5. 期望工作地点 -6. 核心优势 -7. 职业发展方向 +请按以下格式返回 JSON 结果: +{ + "skillTags": ["技能1", "技能2", "技能3"], // 技能标签数组(编程语言、框架、工具等) + "strengths": "核心优势描述", // 简历的优势和亮点 + "weaknesses": "不足之处描述", // 简历的不足或需要改进的地方 + "careerSuggestion": "职业发展建议", // 针对该简历的职业发展方向和建议 + "competitiveness": 75 // 竞争力评分(0-100的整数),综合考虑工作年限、技能、经验等因素 +} -请以JSON格式返回结果。 +要求: +1. skillTags 必须是字符串数组 +2. strengths、weaknesses、careerSuggestion 是字符串描述 +3. competitiveness 必须是 0-100 之间的整数 +4. 所有字段都必须返回,如果没有相关信息,使用空数组或空字符串 `; const result = await this.callAPI(prompt, { - systemPrompt: '你是一个专业的简历分析师,擅长提取简历的核心要素和关键信息。', - temperature: 0.2 + systemPrompt: '你是一个专业的简历分析师,擅长分析简历的核心要素、优势劣势、竞争力评分和职业发展建议。请以 JSON 格式返回分析结果,确保格式正确。', + temperature: 0.3, + maxTokens: 1500 }); try { - const analysis = JSON.parse(result.content); + // 尝试从返回内容中提取 JSON + let content = result.content.trim(); + + // 如果返回内容被代码块包裹,提取其中的 JSON + const jsonMatch = content.match(/```(?:json)?\s*(\{[\s\S]*\})\s*```/) || content.match(/(\{[\s\S]*\})/); + if (jsonMatch) { + content = jsonMatch[1]; + } + + const analysis = JSON.parse(content); return { analysis: analysis }; } catch (parseError) { + console.error(`[AI服务] 简历分析结果解析失败:`, parseError); + console.error(`[AI服务] 原始内容:`, result.content); return { analysis: { content: result.content, diff --git a/api/middleware/job/resumeManager.js b/api/middleware/job/resumeManager.js index 86ba779..98c8c41 100644 --- a/api/middleware/job/resumeManager.js +++ b/api/middleware/job/resumeManager.js @@ -181,12 +181,103 @@ class ResumeManager { console.log(`[简历管理] 简历已创建 - ID: ${resumeId}`); } - // 二期规划:AI 分析暂时禁用,使用简单的文本匹配 - console.log(`[简历管理] AI分析已禁用(二期规划),使用文本匹配过滤`); + // 调用 AI 分析简历并更新 AI 字段 + + try { + await this.analyze_resume_with_ai(resumeId, resumeInfo); + console.log(`[简历管理] AI 分析完成并已更新到数据库`); + } catch (error) { + console.error(`[简历管理] AI 分析失败:`, error); + // AI 分析失败不影响主流程,继续返回成功 + } return { resumeId, message: existingResume ? '简历更新成功' : '简历创建成功' }; } + + /** + * 构建用于 AI 分析的简历文本 + * @param {object} resumeInfo - 简历信息对象 + * @returns {string} 简历文本内容 + */ + build_resume_text_for_ai(resumeInfo) { + const parts = []; + + // 基本信息 + if (resumeInfo.fullName) parts.push(`姓名:${resumeInfo.fullName}`); + if (resumeInfo.gender) parts.push(`性别:${resumeInfo.gender}`); + if (resumeInfo.age) parts.push(`年龄:${resumeInfo.age}`); + if (resumeInfo.location) parts.push(`所在地:${resumeInfo.location}`); + + // 教育背景 + if (resumeInfo.education) parts.push(`学历:${resumeInfo.education}`); + if (resumeInfo.school) parts.push(`毕业院校:${resumeInfo.school}`); + if (resumeInfo.major) parts.push(`专业:${resumeInfo.major}`); + if (resumeInfo.graduationYear) parts.push(`毕业年份:${resumeInfo.graduationYear}`); + + // 工作经验 + if (resumeInfo.workYears) parts.push(`工作年限:${resumeInfo.workYears}`); + if (resumeInfo.currentPosition) parts.push(`当前职位:${resumeInfo.currentPosition}`); + if (resumeInfo.currentCompany) parts.push(`当前公司:${resumeInfo.currentCompany}`); + + // 期望信息 + if (resumeInfo.expectedPosition) parts.push(`期望职位:${resumeInfo.expectedPosition}`); + if (resumeInfo.expectedSalary) parts.push(`期望薪资:${resumeInfo.expectedSalary}`); + if (resumeInfo.expectedLocation) parts.push(`期望地点:${resumeInfo.expectedLocation}`); + + // 技能描述 + if (resumeInfo.skillDescription) parts.push(`技能描述:${resumeInfo.skillDescription}`); + + // 工作经历 + if (resumeInfo.workExperience) { + try { + const workExp = JSON.parse(resumeInfo.workExperience); + if (Array.isArray(workExp) && workExp.length > 0) { + parts.push('\n工作经历:'); + workExp.forEach(work => { + const workText = [ + work.company && `公司:${work.company}`, + work.position && `职位:${work.position}`, + work.startDate && work.endDate && `时间:${work.startDate} - ${work.endDate}`, + work.content && `工作内容:${work.content}` + ].filter(Boolean).join(','); + if (workText) parts.push(workText); + }); + } + } catch (e) { + // 解析失败,忽略 + } + } + + // 项目经验 + if (resumeInfo.projectExperience) { + try { + const projectExp = JSON.parse(resumeInfo.projectExperience); + if (Array.isArray(projectExp) && projectExp.length > 0) { + parts.push('\n项目经验:'); + projectExp.forEach(project => { + const projectText = [ + project.name && `项目名称:${project.name}`, + project.role && `角色:${project.role}`, + project.description && `描述:${project.description}` + ].filter(Boolean).join(','); + if (projectText) parts.push(projectText); + }); + } + } catch (e) { + // 解析失败,忽略 + } + } + + // 简历完整内容 + if (resumeInfo.resumeContent) { + parts.push('\n简历详细内容:'); + parts.push(resumeInfo.resumeContent); + } + + return parts.join('\n'); + } + /** * 从描述中提取技能标签 * @param {string} description - 描述文本 @@ -253,16 +344,23 @@ ${resumeInfo.skillDescription} // 解析AI返回的结果 const analysis = this.parse_ai_analysis(aiAnalysis, resumeInfo); - // 更新简历的AI分析字段 - await resume_info.update({ - aiSkillTags: JSON.stringify(analysis.skillTags), - aiStrengths: analysis.strengths, - aiWeaknesses: analysis.weaknesses, - aiCareerSuggestion: analysis.careerSuggestion, - aiCompetitiveness: analysis.competitiveness - }, { where: { id: resumeId } }); + // 确保所有字段都有值 + const updateData = { + aiSkillTags: JSON.stringify(analysis.skillTags || []), + aiStrengths: analysis.strengths || '', + aiWeaknesses: analysis.weaknesses || '', + aiCareerSuggestion: analysis.careerSuggestion || '', + aiCompetitiveness: parseInt(analysis.competitiveness || 70, 10) + }; - console.log(`[简历管理] AI分析完成 - 竞争力评分: ${analysis.competitiveness}`); + // 确保竞争力评分在 0-100 范围内 + if (updateData.aiCompetitiveness < 0) updateData.aiCompetitiveness = 0; + if (updateData.aiCompetitiveness > 100) updateData.aiCompetitiveness = 100; + + // 更新简历的AI分析字段 + await resume_info.update(updateData, { where: { resumeId: resumeId } }); + + console.log(`[简历管理] AI分析完成 - 竞争力评分: ${updateData.aiCompetitiveness}, 技能标签: ${updateData.aiSkillTags}`); return analysis; } catch (error) { @@ -271,9 +369,26 @@ ${resumeInfo.skillDescription} fullName: resumeInfo.fullName }); - // 如果AI分析失败,使用基于规则的默认分析 + // 如果AI分析失败,使用基于规则的默认分析,并保存到数据库 const defaultAnalysis = this.get_default_analysis(resumeInfo); + // 保存默认分析结果到数据库 + const updateData = { + aiSkillTags: JSON.stringify(defaultAnalysis.skillTags || []), + aiStrengths: defaultAnalysis.strengths || '', + aiWeaknesses: defaultAnalysis.weaknesses || '', + aiCareerSuggestion: defaultAnalysis.careerSuggestion || '', + aiCompetitiveness: parseInt(defaultAnalysis.competitiveness || 70, 10) + }; + + // 确保竞争力评分在 0-100 范围内 + if (updateData.aiCompetitiveness < 0) updateData.aiCompetitiveness = 0; + if (updateData.aiCompetitiveness > 100) updateData.aiCompetitiveness = 100; + + await resume_info.update(updateData, { where: { resumeId: resumeId } }); + + console.log(`[简历管理] 使用默认分析结果 - 竞争力评分: ${updateData.aiCompetitiveness}`); + return defaultAnalysis; } } @@ -286,39 +401,62 @@ ${resumeInfo.skillDescription} */ parse_ai_analysis(aiResponse, resumeInfo) { try { - // 尝试从AI响应中解析JSON - const content = aiResponse.content || aiResponse.analysis?.content || ''; + // aiService.analyzeResume 返回格式: { analysis: {...} } 或 { analysis: { content: "...", parseError: true } } + const analysis = aiResponse.analysis; - // 如果AI返回的是JSON格式 - if (content.includes('{') && content.includes('}')) { + // 如果解析失败,analysis 会有 parseError 标记 + if (analysis && analysis.parseError) { + console.warn(`[简历管理] AI分析结果解析失败,使用默认分析`); + return this.get_default_analysis(resumeInfo); + } + + // 如果解析成功,analysis 直接是解析后的对象 + if (analysis && typeof analysis === 'object' && !analysis.parseError) { + return { + skillTags: analysis.skillTags || analysis.技能标签 || [], + strengths: analysis.strengths || analysis.优势 || analysis.优势分析 || '', + weaknesses: analysis.weaknesses || analysis.劣势 || analysis.劣势分析 || '', + careerSuggestion: analysis.careerSuggestion || analysis.职业建议 || '', + competitiveness: parseInt(analysis.competitiveness || analysis.竞争力评分 || 70, 10) + }; + } + + // 如果 analysis 是字符串,尝试解析 + const content = analysis?.content || analysis || ''; + if (typeof content === 'string' && content.includes('{') && content.includes('}')) { const jsonMatch = content.match(/\{[\s\S]*\}/); if (jsonMatch) { const parsed = JSON.parse(jsonMatch[0]); - return { skillTags: parsed.skillTags || parsed.技能标签 || [], strengths: parsed.strengths || parsed.优势 || parsed.优势分析 || '', weaknesses: parsed.weaknesses || parsed.劣势 || parsed.劣势分析 || '', careerSuggestion: parsed.careerSuggestion || parsed.职业建议 || '', - competitiveness: parsed.competitiveness || parsed.竞争力评分 || 70 + competitiveness: parseInt(parsed.competitiveness || parsed.竞争力评分 || 70, 10) }; } } // 如果无法解析JSON,尝试从文本中提取信息 - const skillTagsMatch = content.match(/技能标签[::](.*?)(?:\n|$)/); - const strengthsMatch = content.match(/优势[分析]*[::](.*?)(?:\n|劣势)/s); - const weaknessesMatch = content.match(/劣势[分析]*[::](.*?)(?:\n|职业)/s); - const suggestionMatch = content.match(/职业建议[::](.*?)(?:\n|竞争力)/s); - const scoreMatch = content.match(/竞争力评分[::](\d+)/); + if (typeof content === 'string') { + const skillTagsMatch = content.match(/技能标签[::](.*?)(?:\n|$)/); + const strengthsMatch = content.match(/优势[分析]*[::](.*?)(?:\n|劣势)/s); + const weaknessesMatch = content.match(/劣势[分析]*[::](.*?)(?:\n|职业)/s); + const suggestionMatch = content.match(/职业建议[::](.*?)(?:\n|竞争力)/s); + const scoreMatch = content.match(/竞争力评分[::](\d+)/); - return { - skillTags: skillTagsMatch ? skillTagsMatch[1].split(/[,,、]/).map(s => s.trim()) : [], - strengths: strengthsMatch ? strengthsMatch[1].trim() : '', - weaknesses: weaknessesMatch ? weaknessesMatch[1].trim() : '', - careerSuggestion: suggestionMatch ? suggestionMatch[1].trim() : '', - competitiveness: scoreMatch ? parseInt(scoreMatch[1]) : 70 - }; + return { + skillTags: skillTagsMatch ? skillTagsMatch[1].split(/[,,、]/).map(s => s.trim()) : [], + strengths: strengthsMatch ? strengthsMatch[1].trim() : '', + weaknesses: weaknessesMatch ? weaknessesMatch[1].trim() : '', + careerSuggestion: suggestionMatch ? suggestionMatch[1].trim() : '', + competitiveness: scoreMatch ? parseInt(scoreMatch[1], 10) : 70 + }; + } + + // 如果所有解析都失败,使用默认分析 + console.warn(`[简历管理] 无法解析AI分析结果,使用默认分析`); + return this.get_default_analysis(resumeInfo); } catch (error) { console.error(`[简历管理] 解析AI分析结果失败:`, error); // 解析失败时使用默认分析 @@ -378,7 +516,7 @@ ${resumeInfo.skillDescription} // 二期规划:AI 分析暂时禁用,使用简单的文本匹配 // const analysis = await aiService.analyzeResume(resumeText); - + // 使用简单的文本匹配提取技能 const skills = this.extract_skills_from_desc(resumeData.skillDescription || resumeText); @@ -505,7 +643,7 @@ ${resumeInfo.skillDescription} throw new Error('MQTT客户端未初始化'); } } - + // 重新获取和分析 const resumeData = await this.get_online_resume(sn_code, mqttClient); return await this.analyze_resume(sn_code, resumeData); diff --git a/api/middleware/mqtt/mqttDispatcher.js b/api/middleware/mqtt/mqttDispatcher.js index 54e4c29..63f2c57 100644 --- a/api/middleware/mqtt/mqttDispatcher.js +++ b/api/middleware/mqtt/mqttDispatcher.js @@ -296,7 +296,7 @@ class MqttDispatcher { isLoggedIn: updateData.isLoggedIn || false, ...heartbeatData }; - console.log(`[MQTT心跳] 传递给 deviceManager 的数据:`, { sn_code, isLoggedIn: heartbeatPayload.isLoggedIn }); + await deviceManager.recordHeartbeat(sn_code, heartbeatPayload); } catch (error) { console.error('[MQTT心跳] 处理心跳消息失败:', error); diff --git a/api/middleware/schedule/index.js b/api/middleware/schedule/index.js index 99eaae5..56c2086 100644 --- a/api/middleware/schedule/index.js +++ b/api/middleware/schedule/index.js @@ -54,8 +54,8 @@ class ScheduleManager { console.log('[调度管理器] 心跳监听已启动'); // 5. 启动定时任务 - this.scheduledJobs.start(); - console.log('[调度管理器] 定时任务已启动'); + // this.scheduledJobs.start(); + // console.log('[调度管理器] 定时任务已启动'); this.isInitialized = true; diff --git a/api/model/job_postings.js b/api/model/job_postings.js index 78498af..8dbe4e2 100644 --- a/api/model/job_postings.js +++ b/api/model/job_postings.js @@ -264,5 +264,5 @@ module.exports = (db) => { return job_postings - // job_postings.sync({ force: true + };