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=""),""},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(/·/g,"·").replace(/</g,"<").replace(/>/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,"<").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
+
};