mirror of
https://github.com/geekgeekrun/geekgeekrun.git
synced 2026-07-07 07:11:22 +08:00
Merge branch 'feature/multi-process' of github.com-geekgeekrun:geekgeekrun/geekgeekrun into feature/multi-process
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
[
|
||||
"青钱","软通动力","南天","睿服","中电金信","佰钧成","云链","博彦","汉克时代","柯莱特","拓保","亿达信息","纬创","微创","微澜","诚迈科技","法本","兆尹","诚迈","联合永道","新致软件","宇信科技","华为","德科","FESCO","科锐","科之锐",
|
||||
"抖音","字节","字跳","有竹居","脸萌","头条","懂车帝","滴滴","嘀嘀","巨量引擎","小桔","网易","有道","腾讯","酷狗","酷我","阅文","搜狗","小鹅通","富途","京东","沃东天骏","达达","达冠","百度","昆仑芯","小度","度小满","爱奇艺","携程","趣拿","去哪儿","集度","智图","长地万方","瑞图万方","道道通","小熊博望","理想","蔚来","顺丰","丰巢","中通","圆通","申通","跨越","讯飞","同程","艺龙","马蜂窝","贝壳","自如","链家","我爱我家","相寓","多点","金山","小米","猎豹","新浪","微博","阿里","淘宝","淘麦郎","天猫","盒马","口碑","优视","夸克","UC","蚂蚁","高德","LAZADA","来赞达","飞猪","菜鸟","哈啰","钉钉","乌鸫","饿了么","美团","三快","猫眼","快手","映客","小红书","行吟","奇虎","360","三六零","鸿盈","奇富","奇元","亚信","启明星辰","奇安信","深信服","长亭","绿盟","天融信","商汤","SenseTime","大华","海康威视","hikvision","汽车之家","车好多","瓜子","易车","昆仑万维","昆仑天工","闲徕","趣加","FunPlus","完美","马上消费","轻松","水滴","白龙马","58","车欢欢","五八","红布林","致美","快狗","天鹅到家","转转","美餐","知乎","智者四海","易点云","搜狐","用友","畅捷通","猿辅导","小猿","猿力","好未来","学而思","希望学","新东方","东方甄选","东方优选","作业帮","高途","跟谁学","学科网","天学网","一起教育","一起作业","美术宝","火花思维","粉笔","51talk","爱学习","高思","老虎国际","一心向上","向上一意","联想","拉勾","乐视","欢聚","竞技世界","拼多多","寻梦","从鲸","TEMU","得物","有赞","Moka","希瑞亚斯","北森","OPPO","欧珀","vivo","维沃","小天才","步步高","读书郎","货拉拉","陌陌","探探","Shopee","虾皮","首汽租车","GoFun","神州租车","天眼查","旷视","小冰","美图","智谱华章","MiniMax","石头科技","迅雷","TP","锐捷","Tenda","腾达","斐讯","希音","SHEIN","稀宇","深言","百川智能","与爱为舞","牵手","Grab","爱回收","洋钱罐","瓴岳","得到","思维造物","地平线","咪咕","翼支付","电信","天翼","联通","蓝湖","墨刀","海尔","美的","米哈游","传音","同花顺","国美","TCL"
|
||||
]
|
||||
@@ -1,4 +1 @@
|
||||
[
|
||||
"青钱","软通动力","南天","睿服","中电金信","佰钧成","云链","博彦","汉克时代","柯莱特","拓保","亿达信息","纬创","微创","微澜","诚迈科技","法本","兆尹","诚迈","联合永道","新致软件","宇信科技","华为","德科","FESCO","科锐","科之锐",
|
||||
"抖音","字节","字跳","有竹居","脸萌","头条","懂车帝","滴滴","嘀嘀","巨量引擎","小桔","网易","有道","腾讯","酷狗","酷我","阅文","搜狗","小鹅通","富途","京东","沃东天骏","达达","达冠","百度","昆仑芯","小度","度小满","爱奇艺","携程","趣拿","去哪儿","集度","智图","长地万方","瑞图万方","道道通","小熊博望","理想","蔚来","顺丰","丰巢","中通","圆通","申通","跨越","讯飞","同程","艺龙","马蜂窝","贝壳","自如","链家","我爱我家","相寓","多点","金山","小米","猎豹","新浪","微博","阿里","淘宝","淘麦郎","天猫","盒马","口碑","优视","夸克","UC","蚂蚁","高德","LAZADA","来赞达","飞猪","菜鸟","哈啰","钉钉","乌鸫","饿了么","美团","三快","猫眼","快手","映客","小红书","行吟","奇虎","360","三六零","鸿盈","奇富","奇元","亚信","启明星辰","奇安信","深信服","长亭","绿盟","天融信","商汤","SenseTime","大华","海康威视","hikvision","汽车之家","车好多","瓜子","易车","昆仑万维","昆仑天工","闲徕","趣加","FunPlus","完美","马上消费","轻松","水滴","白龙马","58","车欢欢","五八","红布林","致美","快狗","天鹅到家","转转","美餐","知乎","智者四海","易点云","搜狐","用友","畅捷通","猿辅导","小猿","猿力","好未来","学而思","希望学","新东方","东方甄选","东方优选","作业帮","高途","跟谁学","学科网","天学网","一起教育","一起作业","美术宝","火花思维","粉笔","51talk","爱学习","高思","老虎国际","一心向上","向上一意","联想","拉勾","乐视","欢聚","竞技世界","拼多多","寻梦","从鲸","TEMU","得物","有赞","Moka","希瑞亚斯","北森","OPPO","欧珀","vivo","维沃","小天才","步步高","读书郎","货拉拉","陌陌","探探","Shopee","虾皮","首汽租车","GoFun","神州租车","天眼查","旷视","小冰","美图","智谱华章","MiniMax","石头科技","迅雷","TP","锐捷","Tenda","腾达","斐讯","希音","SHEIN","稀宇","深言","百川智能","与爱为舞","牵手","Grab","爱回收","洋钱罐","瓴岳","得到","思维造物","地平线","咪咕","翼支付","电信","天翼","联通","蓝湖","墨刀","海尔","美的","米哈游","传音","同花顺","国美","TCL"
|
||||
]
|
||||
[]
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "geekgeekrun-ui",
|
||||
"version": "0.14.2",
|
||||
"description": "Boss 炸弹 - 自动开聊Boss,助力每位打工人求职!",
|
||||
"description": "BOSS 炸弹 - 自动开聊BOSS,助力每位打工人求职!",
|
||||
"main": "./out/main/index.js",
|
||||
"author": "geekgeekrun",
|
||||
"productName": "GeekGeekRun",
|
||||
|
||||
@@ -133,7 +133,7 @@ const runAutoChat = async () => {
|
||||
await dialog.showMessageBox({
|
||||
type: `error`,
|
||||
message: `登录状态无效`,
|
||||
detail: `请重新登录Boss直聘`
|
||||
detail: `请重新登录BOSS直聘`
|
||||
})
|
||||
process.exit(AUTO_CHAT_ERROR_EXIT_CODE.LOGIN_STATUS_INVALID)
|
||||
break
|
||||
|
||||
@@ -264,6 +264,11 @@ const mainLoop = async () => {
|
||||
bossCookies = readStorageFile('boss-cookies.json')
|
||||
cookieCheckResult = checkCookieListFormat(bossCookies)
|
||||
} catch (err) {
|
||||
await dialog.showMessageBox({
|
||||
type: `error`,
|
||||
message: `登录状态无效`,
|
||||
detail: `请重新登录BOSS直聘`
|
||||
})
|
||||
sendToDaemon({
|
||||
type: 'worker-to-gui-message',
|
||||
data: {
|
||||
@@ -314,7 +319,7 @@ const mainLoop = async () => {
|
||||
await dialog.showMessageBox({
|
||||
type: `error`,
|
||||
message: `登录状态无效`,
|
||||
detail: `请重新登录Boss直聘`
|
||||
detail: `请重新登录BOSS直聘`
|
||||
})
|
||||
sendToDaemon({
|
||||
type: 'worker-to-gui-message',
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<el-col :span="6"><el-form-item label="公司">{{ jobInfo.companyName }}</el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="职位名称">{{ jobInfo.jobName }}</el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="职位分类">{{ jobInfo.positionName }}</el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="Boss及其身份">{{ jobInfo.bossName }} {{ jobInfo.bossTitle }}</el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="BOSS及其身份">{{ jobInfo.bossName }} {{ jobInfo.bossTitle }}</el-form-item></el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-divider content-position="left">变更记录</el-divider>
|
||||
|
||||
@@ -4,11 +4,12 @@
|
||||
<el-form ref="formRef" :model="formData" :rules="rules" flex flex-col of-hidden h-full>
|
||||
<div class="bg-#f6f6f6" flex-0>
|
||||
<el-form-item
|
||||
class="w-80%"
|
||||
class="w-90%"
|
||||
label="浏览器可执行文件路径"
|
||||
label-position="top"
|
||||
prop="browserPath"
|
||||
pt50px
|
||||
pb50px
|
||||
pt30px
|
||||
pb30px
|
||||
ml-auto
|
||||
mr-auto
|
||||
mb-0
|
||||
@@ -21,17 +22,19 @@
|
||||
@click="autoDetectPuppeteerExecutable"
|
||||
>自动检测</el-button
|
||||
>
|
||||
<el-button :style="{ marginLeft: 0 }" @click="browserExecutableFile">浏览</el-button>
|
||||
<el-button :style="{ marginLeft: 0 }" @click="chooseExecutableFile"
|
||||
>手动选择</el-button
|
||||
>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div flex-1 of-auto font-size-14px line-height-1.5em>
|
||||
<div mt10px ml-auto mr-auto class="w-80%">
|
||||
<div mt10px ml-auto mr-auto class="w-90%">
|
||||
<div>常见问题</div>
|
||||
<div>
|
||||
<details>
|
||||
<summary>不能自动检测到浏览器?</summary>
|
||||
<div ml12px class="color-#666">
|
||||
<div class="faq-main">
|
||||
<details class="faq-item">
|
||||
<summary>“自动检测”点击后提示“未检测到可用浏览器的可执行文件”?</summary>
|
||||
<div class="faq-answer">
|
||||
请尝试如下方案之一来处理:
|
||||
<ul pl1em m0>
|
||||
<li>
|
||||
@@ -55,7 +58,8 @@
|
||||
:loading="isAutoDetectLoading"
|
||||
@click="autoDetectPuppeteerExecutable"
|
||||
>自动检测</a
|
||||
>按钮再次尝试。目前(2026.2.7)已知 Chrome 最新版本为 144.0.7559.133
|
||||
>按钮再次尝试。截至本程序开发时(2026.2.7)Google Chrome 最新版本为
|
||||
144.0.7559.133
|
||||
,多数情况下本程序都可以正常工作,但由于浏览器会自动升级,版本不固定,可能存在<span
|
||||
color-orange
|
||||
>浏览器升级后某些功能不兼容导致本程序不能正确运行</span
|
||||
@@ -68,6 +72,101 @@
|
||||
</ul>
|
||||
</div>
|
||||
</details>
|
||||
<details class="faq-item">
|
||||
<summary>
|
||||
如果要手动选择浏览器,可选择的浏览器有哪些?对于浏览器有什么要求?
|
||||
</summary>
|
||||
<div class="faq-answer">
|
||||
<div>
|
||||
截至本程序开发时(2026.2.7),已确定支持的各操作系统下的浏览器及版本包括:
|
||||
</div>
|
||||
<ul>
|
||||
<li>
|
||||
<div>macOS</div>
|
||||
<ul>
|
||||
<li>Google Chrome for Testing {{ EXPECT_CHROMIUM_BUILD_ID }}</li>
|
||||
<li>Google Chrome 144.0.7559.133</li>
|
||||
<li>Microsoft Edge 144.0.3719.115</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<div>Windows</div>
|
||||
<ul>
|
||||
<li>Google Chrome for Testing {{ EXPECT_CHROMIUM_BUILD_ID }}</li>
|
||||
<li>Google Chrome 144.0.7559.133</li>
|
||||
<li>Microsoft Edge 144.0.3719.93</li>
|
||||
<li>Opera 127.0.5778.14(基于 Chromium 143.0.7499.194)</li>
|
||||
<li>Yandex Browser 25.12.3.1126 (基于 Chromium 142.0.7444.1126)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<div>Linux (Ubuntu)</div>
|
||||
<ul>
|
||||
<li>Google Chrome for Testing {{ EXPECT_CHROMIUM_BUILD_ID }}</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div>
|
||||
下列浏览器可以使用,但由于Chromium内核版本低于本程序设置的版本,可能存在潜在问题,不一定能完全支持所有功能,你可以尝试进行配置:
|
||||
</div>
|
||||
<ul>
|
||||
<li>
|
||||
<div>Windows</div>
|
||||
<ul>
|
||||
<li>360 安全浏览器 16.1.2552.64 (基于 Chromium 132.0.6834.83)</li>
|
||||
<li>360 极速浏览器X 23.1.1187.64 (基于 Chromium 132.0.6805.0)</li>
|
||||
<li>夸克 6.4.0.728 (基于 Chromium 130.0.6723.44)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div>下列浏览器经过测试已明确不可用:</div>
|
||||
<ul>
|
||||
<li>
|
||||
<div>Windows</div>
|
||||
<ul>
|
||||
<li>QQ 浏览器 20.1.0 (基于 Chromium 116.0.5845.97)</li>
|
||||
<li>搜狗高速浏览器 13.8 (基于 Chromium 116.0.5845.97)</li>
|
||||
<li>猎豹浏览器(基于 Chromium 112.0.5615.138)</li>
|
||||
<li>Brave 1.86.148 (基于 Chromium 144.0.7559.133)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div>
|
||||
本程序目前仅支持 Chromium 内核浏览器,因此 Safari、Firefox、Windows Internet
|
||||
Explorer、旧版 Microsoft Edge 等<span color-orange
|
||||
>非Chromium内核浏览器无法使用</span
|
||||
>;同时,对于 Chromium 内核浏览器,本程序<span color-orange
|
||||
>仅支持
|
||||
{{ EXPECT_CHROMIUM_BUILD_ID }}
|
||||
或更高内核版本</span
|
||||
>,你可以打开在你想要尝试的浏览器,访问 “chrome://version” 找到 “用户代理” /
|
||||
“User Agent” 行来查看当前浏览器的内核版本。<br />
|
||||
目前,大部分中国大陆厂商发布的基于Chromium内核的浏览器,均由于版本过低,不被本程序支持。
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
<details class="faq-item">
|
||||
<summary>如果我选择了一个不支持的浏览器,会发生什么?</summary>
|
||||
<div class="faq-answer">
|
||||
<div>可能会发生的情况:</div>
|
||||
<ul>
|
||||
<li>浏览器将会启动,但会开启一个空白页面,之后浏览器不会做任何事</li>
|
||||
<li>浏览器启动失败,你不会看到任何界面</li>
|
||||
<li>浏览器会每隔一段时间打开一个新的浏览器窗口</li>
|
||||
</ul>
|
||||
</div>
|
||||
</details>
|
||||
<details class="faq-item">
|
||||
<summary>如果我选择了一个不是浏览器的可执行文件,会发生什么?</summary>
|
||||
<div class="faq-answer">
|
||||
<div>可能会发生的情况:</div>
|
||||
<ul>
|
||||
<li>可执行文件将会启动,但会开启一个空白页面,之后可执行文件不会做任何事</li>
|
||||
<li>可执行文件闪退并报错,闪退后会自动重启,继续报错</li>
|
||||
<li>可执行文件会不断运行多个实例</li>
|
||||
</ul>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -78,7 +177,7 @@
|
||||
:style="{
|
||||
display: 'flex',
|
||||
justifyContent: 'end',
|
||||
width: '80%',
|
||||
width: '90%',
|
||||
margin: '0 auto',
|
||||
paddingLeft: '',
|
||||
paddingRight: ''
|
||||
@@ -100,7 +199,7 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { useRouter } from 'vue-router'
|
||||
import { ref } from 'vue'
|
||||
import { nextTick, ref } from 'vue'
|
||||
import debounce from 'lodash/debounce'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { gtagRenderer as baseGtagRenderer } from '@renderer/utils/gtag'
|
||||
@@ -172,12 +271,14 @@ async function autoDetectPuppeteerExecutable() {
|
||||
type: 'success',
|
||||
grouping: true
|
||||
})
|
||||
await nextTick()
|
||||
await formRef.value.validateField()
|
||||
} finally {
|
||||
isAutoDetectLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
async function browserExecutableFile() {
|
||||
async function chooseExecutableFile() {
|
||||
const chooseResult = await ipcRenderer.invoke('choose-file', {
|
||||
fileChooserConfig: {
|
||||
properties: ['openFile', 'treatPackageAsDirectory'],
|
||||
@@ -194,6 +295,8 @@ async function browserExecutableFile() {
|
||||
return
|
||||
}
|
||||
formData.value.browserPath = chooseResult.filePaths[0]
|
||||
await nextTick()
|
||||
await formRef.value.validateField()
|
||||
}
|
||||
|
||||
ipcRenderer.invoke('get-last-used-and-available-browser').then((res) => {
|
||||
@@ -239,4 +342,21 @@ a:hover,
|
||||
a:active {
|
||||
color: #409eff;
|
||||
}
|
||||
|
||||
.faq-main {
|
||||
.faq-item {
|
||||
summary {
|
||||
padding: 4px 0;
|
||||
}
|
||||
.faq-answer {
|
||||
color: #666;
|
||||
margin-left: 12px;
|
||||
ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-left: 1em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
<template>
|
||||
<div class="h-screen of-hidden flex flex-col flex-items-center flex-justify-center">
|
||||
<div>
|
||||
<div>你可能是第一次安装本程序</div>
|
||||
<div>正在查找可用浏览器,请稍等...</div>
|
||||
<div>
|
||||
由于您是首次使用本程序,或者您之前配置的浏览器被卸载/被删除/被移动/被更新/版本太旧,因此需要重新配置浏览器
|
||||
</div>
|
||||
<div>
|
||||
首先将尝试自动配置;自动配置成功后,本对话框将自动关闭;如自动配置失败,请在下个页面中手动配置
|
||||
</div>
|
||||
<div>正在尝试自动配置,请稍等...</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,16 +1,11 @@
|
||||
<template>
|
||||
<div class="cookie-assistant-page">
|
||||
<div ml1em mt1em mb1em font-size-16px>Boss 登录助手</div>
|
||||
<el-alert
|
||||
v-if="cookieInvalid"
|
||||
type="warning"
|
||||
:closable="false"
|
||||
title="需要获取您的Boss直聘Cookie才能继续"
|
||||
>
|
||||
由于您是首次使用本程序,或者您之前使用的Boss直聘账号登录状态失效,因此您需要重新获取登录凭证。
|
||||
<div ml1em mt1em mb1em font-size-16px>BOSS登录助手</div>
|
||||
<el-alert v-if="cookieInvalid" type="warning" :closable="false">
|
||||
由于您是首次使用本程序,或者您之前使用的BOSS直聘账号登录状态失效,因此您需要重新获取登录凭证
|
||||
</el-alert>
|
||||
<div ml1em mt1em line-height-normal>
|
||||
如果您了解如何获取Cookie、了解有效的Cookie格式,可以直接在下方输入框中进行编辑。由于手动编辑较为麻烦,建议您打开已登录过Boss直聘的浏览器,使用<a
|
||||
如果您了解如何获取Cookie、了解有效的Cookie格式,可以直接在下方输入框中进行编辑。由于手动编辑较为麻烦,建议您打开已登录过BOSS直聘的浏览器,使用<a
|
||||
class="color-blue! decoration-none"
|
||||
href="javascript:void(0)"
|
||||
@click.prevent="handleEditThisCookieExtensionStoreLinkClick"
|
||||
@@ -29,14 +24,14 @@
|
||||
>
|
||||
启动浏览器
|
||||
</li>
|
||||
<li>按照正常流程,通过 <b>短信验证码/二维码/微信小程序</b> 登录您的Boss直聘账号</li>
|
||||
<li>按照正常流程,通过 <b>短信验证码/二维码/微信小程序</b> 登录您的BOSS直聘账号</li>
|
||||
<li>接下来将自动进行一些页面跳转,最终将会停留在首页</li>
|
||||
<li>
|
||||
登录后预计5-10秒内(具体取决于您的网速),您的Cookie将被自动填入下方输入框。
|
||||
<details>
|
||||
<summary color-orange cursor-pointer>我已完成登录,但Cookie一直没出现?</summary>
|
||||
<div ml-2em max-h-200px of-auto>
|
||||
如果您确实已经在打开浏览器中看到您已登录了Boss直聘,请尝试按照如图所示方式复制Cookie:
|
||||
如果您确实已经在打开浏览器中看到您已登录了BOSS直聘,请尝试按照如图所示方式复制Cookie:
|
||||
<figure>
|
||||
<figcaption>依次点击浏览器右上角“扩展程序”图标、“EditThisCookie”图标</figcaption>
|
||||
<img block max-w-full src="./resources/copy-cookie-step-1.png" />
|
||||
@@ -98,7 +93,7 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<footer flex mt20px pb20px flex-justify-end>
|
||||
<el-button v-if="!cookieInvalid" @click="handleCancel">取消</el-button>
|
||||
<el-button @click="handleCancel">取消</el-button>
|
||||
<el-button type="primary" @click="handleSubmit">确定</el-button>
|
||||
</footer>
|
||||
</div>
|
||||
@@ -210,7 +205,7 @@ const handleSubmit = async () => {
|
||||
fileName: 'boss-cookies.json',
|
||||
data: formContent.value.collectedCookies
|
||||
})
|
||||
ElMessage.success('Boss直聘 Cookie 保存成功')
|
||||
ElMessage.success('BOSS直聘 Cookie 保存成功')
|
||||
gtagRenderer('save_cookie_done')
|
||||
|
||||
window.electron.ipcRenderer.send('cookie-saved')
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
gtagRenderer('view_boss_agreement_clicked')
|
||||
}
|
||||
"
|
||||
>《Boss直聘用户协议》</el-link
|
||||
>(2023年3月版)相关条款相违背,您在注册Boss直聘时已签署过这一条款;根据该条款
|
||||
>《BOSS直聘用户协议》</el-link
|
||||
>(2023年3月版)相关条款相违背,您在注册BOSS直聘时已签署过这一条款;根据该条款
|
||||
<i>七、用户的平台使用义务</i>、<i>八、违约责任</i>
|
||||
章节,如果一些非正常用户行为被风控监测到,您需要承受包括不仅限于<b class="color-red"
|
||||
>账号被强制退出登录、账号被限制使用、账号被封禁</b
|
||||
@@ -31,10 +31,10 @@
|
||||
>,且如果相关风险发生,<b class="color-red">您需要自行承担相关后果,本程序不负责</b>。
|
||||
</ElCheckbox>
|
||||
<ElCheckbox :label="1" :class="[unreadItemsAfterClickSubmit[1] ? 'unread' : '']">
|
||||
本程序需要存储您的登录凭据,即Cookie,来模拟您在Boss直聘上开聊Boss的行为;本程序仅会把您的Cookie存储在本地,并在您访问Boss直聘时将其传输到Boss直聘,<b
|
||||
本程序需要存储您的登录凭据,即Cookie,来模拟您在BOSS直聘上开聊BOSS的行为;本程序仅会把您的Cookie存储在本地,并在您访问BOSS直聘时将其传输到BOSS直聘,<b
|
||||
class="color-red"
|
||||
>不会泄露给第三方</b
|
||||
>,也不会进行除自动开聊Boss以外的行为;<b class="color-red">请勿向他人泄漏您的Cookie</b
|
||||
>,也不会进行除自动开聊BOSS以外的行为;<b class="color-red">请勿向他人泄漏您的Cookie</b
|
||||
>。
|
||||
</ElCheckbox>
|
||||
<ElCheckbox :label="2" :class="[unreadItemsAfterClickSubmit[2] ? 'unread' : '']">
|
||||
@@ -42,11 +42,11 @@
|
||||
class="color-red"
|
||||
>注意节制</b
|
||||
>,建议当天开聊次数用尽后,隔几天再使用。建议您<b class="color-red"
|
||||
>注册一个本程序专用的新的Boss直聘账号</b
|
||||
>注册一个本程序专用的新的BOSS直聘账号</b
|
||||
>进行求职。
|
||||
</ElCheckbox>
|
||||
<ElCheckbox :label="3" :class="[unreadItemsAfterClickSubmit[3] ? 'unread' : '']">
|
||||
本程序原理是模拟用户在Boss直聘网页上,寻找关键元素并进行点击操作;Boss直聘网站经常<b>发生改版</b>,且有可能<b>包含A/B实验</b>,这将导致本程序相关脚本失效(典型表现为本程序运行到某一步骤后,<b
|
||||
本程序原理是模拟用户在BOSS直聘网页上,寻找关键元素并进行点击操作;BOSS直聘网站经常<b>发生改版</b>,且有可能<b>包含A/B实验</b>,这将导致本程序相关脚本失效(典型表现为本程序运行到某一步骤后,<b
|
||||
class="color-red"
|
||||
>浏览器重复“闪退、重新启动”</b
|
||||
>)。如果您在使用过程中遇上程序未按照预期执行的情况,请点击程序左下角进行反馈。
|
||||
@@ -81,16 +81,16 @@
|
||||
</ElCheckbox>
|
||||
<ElCheckbox :label="7" :class="[unreadItemsAfterClickSubmit[7] ? 'unread' : '']">
|
||||
本程序<b class="color-red">不对您的求职过程与结果负责</b
|
||||
>,为您开聊的职位均在Boss直聘上发布,职位信息真实性由Boss直聘负责;请<b
|
||||
>,为您开聊的职位均在BOSS直聘上发布,职位信息真实性由BOSS直聘负责;请<b
|
||||
class="color-red"
|
||||
>自行甄别为您开聊的公司、认真决定是否参加面试、慎重选择Offer</b
|
||||
>。
|
||||
</ElCheckbox>
|
||||
<ElCheckbox :label="8" :class="[unreadItemsAfterClickSubmit[8] ? 'unread' : '']">
|
||||
请在Boss直聘上自行<b class="color-red">屏蔽您不期望投递的公司</b
|
||||
>;如果您不希望您当前公司其它具有招聘账号的员工看到您在Boss直聘上活跃,请<b
|
||||
请在BOSS直聘上自行<b class="color-red">屏蔽您不期望投递的公司</b
|
||||
>;如果您不希望您当前公司其它具有招聘账号的员工看到您在BOSS直聘上活跃,请<b
|
||||
class="color-red"
|
||||
>在Boss直聘上屏蔽当前公司及与之关联的公司</b
|
||||
>在BOSS直聘上屏蔽当前公司及与之关联的公司</b
|
||||
>。
|
||||
</ElCheckbox>
|
||||
<ElCheckbox :label="9" :class="[unreadItemsAfterClickSubmit[9] ? 'unread' : '']">
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<FlyingCompanyLogoList class="flying-company-logo-list" />
|
||||
<div class="tip">
|
||||
<article>
|
||||
<h1>👋 BOSS炸弹正在运行</h1>
|
||||
<h1>👋 自动开聊正在运行</h1>
|
||||
<p>💬 正在为你开聊BOSS,请静候佳音</p>
|
||||
<p>📱 你可以在<b>手机</b> / <b>平板电脑</b>上,使用BOSS直聘App与为你开聊的BOSS聊天</p>
|
||||
<p>🍀 祝你求职顺利!</p>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<FlyingCompanyLogoList class="flying-company-logo-list" />
|
||||
<div class="tip">
|
||||
<article>
|
||||
<h1>👋 已读不回提醒器正在运行</h1>
|
||||
<h1>👋 已读不回自动复聊正在运行</h1>
|
||||
<p>🍀 祝你求职顺利!</p>
|
||||
</article>
|
||||
<el-button :disabled="isStopping" @click="handleStopButtonClick">停止开聊</el-button>
|
||||
|
||||
@@ -10,25 +10,6 @@
|
||||
<div class="form-wrap geek-auto-start-run-with-boss">
|
||||
<el-form ref="formRef" :model="formContent" label-position="top" :rules="formRules">
|
||||
<el-card class="config-section">
|
||||
<div flex>
|
||||
<el-form-item>
|
||||
<div>
|
||||
<div font-size-14px>BOSS直聘 Cookie</div>
|
||||
<el-button size="small" type="primary" @click="handleClickLaunchLogin"
|
||||
>编辑Cookie</el-button
|
||||
>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<div w1px class="bg-#dee1e8" ml16px mr16px />
|
||||
<el-form-item>
|
||||
<div>
|
||||
<div font-size-14px>浏览器</div>
|
||||
<el-button size="small" type="primary" @click="handleClickBrowserSetting"
|
||||
>编辑浏览器设置</el-button
|
||||
>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div>
|
||||
<div font-size-14px>
|
||||
摸鱼模式
|
||||
@@ -39,7 +20,7 @@
|
||||
>
|
||||
<template #content>
|
||||
<div>
|
||||
本程序运行较长时间后,Boss直聘会对账号进行风控,导致本程序不能继续执行。<br />
|
||||
本程序运行较长时间后,BOSS直聘会对账号进行风控,导致本程序不能继续执行。<br />
|
||||
为此,加入摸鱼模式。通过此配置,主动减慢本程序的运行速度,降低潜在的被风控监测到的概率。<br />
|
||||
你可以自定义开启摸鱼模式的频率 - 默认为操作100次后,暂停运行15分钟。
|
||||
</div>
|
||||
@@ -129,7 +110,7 @@
|
||||
<div w-full>
|
||||
<div ref="jobSourceFormItemSectionEl" font-size-16px>
|
||||
<div>
|
||||
你想投递Boss直聘上哪些列表里的职位?
|
||||
你想投递BOSS直聘上哪些列表里的职位?
|
||||
<el-tooltip
|
||||
effect="light"
|
||||
placement="bottom-start"
|
||||
@@ -142,7 +123,7 @@
|
||||
</template>
|
||||
<el-button type="text" font-size-12px
|
||||
><span><QuestionFilled w-1em h-1em mr2px /></span
|
||||
>下方展示的各条目与Boss直聘界面对应关系是怎样的?</el-button
|
||||
>下方展示的各条目与BOSS直聘界面对应关系是怎样的?</el-button
|
||||
>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
@@ -159,7 +140,7 @@
|
||||
<el-form-item prop="filter" mt18px mb0px w-full>
|
||||
<div flex-1>
|
||||
<div font-size-16px>
|
||||
你希望Boss直聘为你筛选出什么样的职位?
|
||||
你希望BOSS直聘为你筛选出什么样的职位?
|
||||
<el-tooltip
|
||||
effect="light"
|
||||
placement="bottom-start"
|
||||
@@ -168,7 +149,7 @@
|
||||
<template #content>
|
||||
<ul m0 line-height-1.5em w-540px pl2em>
|
||||
<li>
|
||||
这个配置决定了下面列表中会展示哪些职位。查找职位时,会在Boss直聘页面上自动组合下方设置的筛选条件。对应UI:<br />
|
||||
这个配置决定了下面列表中会展示哪些职位。查找职位时,会在BOSS直聘页面上自动组合下方设置的筛选条件。对应UI:<br />
|
||||
<img h-270px src="../resources/intro-of-job-filter-auto-change.png" />
|
||||
</li>
|
||||
<li color-orange>
|
||||
@@ -306,6 +287,7 @@
|
||||
:autosize="{ minRows: 4 }"
|
||||
max-h-8lh
|
||||
type="textarea"
|
||||
placeholder="置空表示“不限公司,任意公司都可以投递”"
|
||||
@blur="normalizeExpectCompanies"
|
||||
/>
|
||||
</el-form-item>
|
||||
@@ -905,7 +887,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<b>“职位类型正则”填写过程中请注意</b
|
||||
>,“职位类型”是由Boss直聘预定义好的一系列职位分类,因此<b>请按照这个分类来编写正则</b>。<br />
|
||||
>,“职位类型”是由BOSS直聘预定义好的一系列职位分类,因此<b>请按照这个分类来编写正则</b>。<br />
|
||||
这个分类可以在此找到:<br />
|
||||
<img w-400px src="../resources/job-type-source-entry.png" />
|
||||
</div>
|
||||
@@ -1164,7 +1146,7 @@ import {
|
||||
formatStaticCombineFilters
|
||||
} from '@geekgeekrun/geek-auto-start-chat-with-boss/combineCalculator.mjs'
|
||||
import { gtagRenderer as baseGtagRenderer } from '@renderer/utils/gtag'
|
||||
import defaultTargetCompanyListConf from '@geekgeekrun/geek-auto-start-chat-with-boss/default-config-file/target-company-list.json'
|
||||
import sampleCompanyList from '@geekgeekrun/geek-auto-start-chat-with-boss/default-config-file/sample-company-list.json'
|
||||
import { ArrowDown } from '@element-plus/icons-vue'
|
||||
import {
|
||||
CombineRecommendJobFilterType,
|
||||
@@ -1617,41 +1599,15 @@ const normalizeExpectCompanies = () => {
|
||||
.join(',')
|
||||
}
|
||||
|
||||
const handleClickLaunchLogin = async () => {
|
||||
gtagRenderer('launch_login_clicked')
|
||||
try {
|
||||
await electron.ipcRenderer.invoke('login-with-cookie-assistant')
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: 'Cookie 保存成功'
|
||||
})
|
||||
} catch {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
const handleClickBrowserSetting = async () => {
|
||||
gtagRenderer('browser_setting_clicked')
|
||||
try {
|
||||
await electron.ipcRenderer.invoke('config-with-browser-assistant')
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: '浏览器设置保存成功'
|
||||
})
|
||||
} catch {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
const expectCompanyTemplateList = [
|
||||
{
|
||||
name: '默认值',
|
||||
value: defaultTargetCompanyListConf.join(',')
|
||||
},
|
||||
{
|
||||
name: '不限公司(随便投)',
|
||||
value: ''
|
||||
},
|
||||
{
|
||||
name: '示例公司',
|
||||
value: sampleCompanyList.join(',')
|
||||
},
|
||||
{
|
||||
name: '大厂及关联企业',
|
||||
value: `抖音,字节,字跳,有竹居,脸萌,头条,懂车帝,滴滴,嘀嘀,巨量引擎,小桔,网易,有道,腾讯,酷狗,酷我,阅文,搜狗,小鹅通,富途,京东,沃东天骏,达达,达冠,百度,昆仑芯,小度,度小满,爱奇艺,携程,趣拿,去哪儿,集度,智图,长地万方,瑞图万方,道道通,小熊博望,理想,蔚来,顺丰,丰巢,中通,圆通,申通,跨越,讯飞,同程,艺龙,马蜂窝,贝壳,自如,链家,我爱我家,相寓,多点,金山,小米,猎豹,新浪,微博,阿里,淘宝,淘麦郎,天猫,盒马,口碑,优视,夸克,UC,蚂蚁,高德,LAZADA,来赞达,飞猪,菜鸟,哈啰,钉钉,乌鸫,饿了么,美团,三快,猫眼,快手,映客,小红书,行吟,奇虎,360,三六零,鸿盈,奇富,奇元,亚信,启明星辰,奇安信,深信服,长亭,绿盟,天融信,商汤,SenseTime,大华,海康威视,hikvision,汽车之家,车好多,瓜子,易车,昆仑万维,昆仑天工,闲徕,趣加,FunPlus,完美,马上消费,轻松,水滴,白龙马,58,车欢欢,五八,红布林,致美,快狗,天鹅到家,转转,美餐,知乎,智者四海,易点云,搜狐,用友,畅捷通,猿辅导,小猿,猿力,好未来,学而思,希望学,新东方,东方甄选,东方优选,作业帮,高途,跟谁学,学科网,天学网,一起教育,一起作业,美术宝,火花思维,粉笔,51talk,爱学习,高思,老虎国际,一心向上,向上一意,联想,拉勾,乐视,欢聚,竞技世界,拼多多,寻梦,从鲸,TEMU,得物,有赞,Moka,希瑞亚斯,北森,OPPO,欧珀,vivo,维沃,小天才,步步高,读书郎,货拉拉,陌陌,探探,Shopee,虾皮,首汽租车,GoFun,神州租车,天眼查,旷视,小冰,美图,智谱华章,MiniMax,石头科技,迅雷,TP,锐捷,Tenda,腾达,斐讯,希音,SHEIN,稀宇,深言,百川智能,与爱为舞,牵手,Grab,爱回收,洋钱罐,瓴岳,得到,思维造物,地平线,咪咕,翼支付,电信,天翼,联通,蓝湖,墨刀,海尔,美的,米哈游,传音,同花顺,国美,TCL`
|
||||
@@ -1696,7 +1652,7 @@ function handleExpectJobFilterTemplateClicked(item) {
|
||||
|
||||
const strategyOptionWhenCurrentJobNotMatch = [
|
||||
{
|
||||
name: '在Boss直聘上标记不合适(推荐,这确保Boss直聘推荐新职位来置换不合适职位)',
|
||||
name: '在BOSS直聘上标记不合适(推荐,这确保BOSS直聘推荐新职位来置换不合适职位)',
|
||||
value: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS
|
||||
},
|
||||
{
|
||||
|
||||
@@ -214,7 +214,7 @@ function handleViewJobSnapshotButtonClick(record: VMarkAsNotSuitLog) {
|
||||
}
|
||||
|
||||
const markReasonTopicMap = {
|
||||
[MarkAsNotSuitReason.BOSS_INACTIVE]: 'Boss不活跃',
|
||||
[MarkAsNotSuitReason.BOSS_INACTIVE]: 'BOSS不活跃',
|
||||
[MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON]: '手动标记不合适',
|
||||
[MarkAsNotSuitReason.JOB_NOT_SUIT]: '职位不合适',
|
||||
[MarkAsNotSuitReason.JOB_CITY_NOT_SUIT]: '工作地不合适',
|
||||
@@ -233,8 +233,8 @@ function formatMarkReason(row: VMarkAsNotSuitLog) {
|
||||
}
|
||||
})()
|
||||
return [
|
||||
extInfo?.bossActiveTimeDesc && `Boss活跃情况:${extInfo.bossActiveTimeDesc}`,
|
||||
extInfo?.chosenReasonInUi?.text && `Boss选项内容:${extInfo.chosenReasonInUi.text}`
|
||||
extInfo?.bossActiveTimeDesc && `BOSS活跃情况:${extInfo.bossActiveTimeDesc}`,
|
||||
extInfo?.chosenReasonInUi?.text && `BOSS选项内容:${extInfo.chosenReasonInUi.text}`
|
||||
]
|
||||
.filter(Boolean)
|
||||
.join('\n')
|
||||
@@ -247,7 +247,7 @@ function formatMarkReason(row: VMarkAsNotSuitLog) {
|
||||
return null
|
||||
}
|
||||
})()
|
||||
return [extInfo?.chosenReasonInUi?.text && `Boss选项内容:${extInfo.chosenReasonInUi.text}`]
|
||||
return [extInfo?.chosenReasonInUi?.text && `BOSS选项内容:${extInfo.chosenReasonInUi.text}`]
|
||||
.filter(Boolean)
|
||||
.join('\n')
|
||||
}
|
||||
@@ -260,7 +260,7 @@ function formatMarkReason(row: VMarkAsNotSuitLog) {
|
||||
return null
|
||||
}
|
||||
})()
|
||||
return [extInfo?.chosenReasonInUi?.text && `Boss选项内容:${extInfo.chosenReasonInUi.text}`]
|
||||
return [extInfo?.chosenReasonInUi?.text && `BOSS选项内容:${extInfo.chosenReasonInUi.text}`]
|
||||
.filter(Boolean)
|
||||
.join('\n')
|
||||
}
|
||||
@@ -274,7 +274,7 @@ function formatMarkReason(row: VMarkAsNotSuitLog) {
|
||||
})()
|
||||
return [
|
||||
extInfo?.salaryDesc && `薪资:${extInfo.salaryDesc}`,
|
||||
extInfo?.chosenReasonInUi?.text && `Boss选项内容:${extInfo.chosenReasonInUi.text}`
|
||||
extInfo?.chosenReasonInUi?.text && `BOSS选项内容:${extInfo.chosenReasonInUi.text}`
|
||||
]
|
||||
.filter(Boolean)
|
||||
.join('\n')
|
||||
|
||||
@@ -7,27 +7,14 @@
|
||||
:model="formContent.autoReminder"
|
||||
label-position="top"
|
||||
>
|
||||
<div flex>
|
||||
<el-form-item label="BOSS直聘 Cookie">
|
||||
<el-button size="small" type="primary" @click="handleClickLaunchLogin"
|
||||
>编辑Cookie</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
<div w1px class="bg-#dee1e8" ml16px mr16px />
|
||||
<el-form-item label="浏览器">
|
||||
<el-button size="small" type="primary" @click="handleClickBrowserSetting"
|
||||
>编辑浏览器设置</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<el-form-item>
|
||||
<div>
|
||||
<el-checkbox v-if="!expectJobTypeRegExpStr?.trim()" :model-value="false" disabled>
|
||||
发送提醒消息前,先按照“Boss炸弹-职位类型正则”校验正在与Boss沟通的岗位是否满足期望,校验通过后再提醒
|
||||
发送提醒消息前,先按照“自动开聊-职位类型正则”校验正在与BOSS沟通的岗位是否满足期望,校验通过后再提醒
|
||||
</el-checkbox>
|
||||
<template v-else>
|
||||
<el-checkbox v-model="formContent.autoReminder.onlyRemindBossWithExpectJobType">
|
||||
发送提醒消息前,先按照“Boss炸弹-职位类型正则”校验正在与Boss沟通的岗位是否满足期望,校验通过后再提醒
|
||||
发送提醒消息前,先按照“自动开聊-职位类型正则”校验正在与BOSS沟通的岗位是否满足期望,校验通过后再提醒
|
||||
</el-checkbox>
|
||||
<div ml1.5em color-gray>
|
||||
<div>当前职位类型正则:{{ expectJobTypeRegExpStr?.trim() }}</div>
|
||||
@@ -44,7 +31,7 @@
|
||||
</template>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item class="mb0" label="跟进话术 - 当发现已读不回的Boss时,将要向Boss发出:">
|
||||
<el-form-item class="mb0" label="跟进话术 - 当发现已读不回的BOSS时,将要向BOSS发出:">
|
||||
<el-radio-group v-model="formContent.autoReminder.rechatContentSource">
|
||||
<div>
|
||||
<el-tooltip
|
||||
@@ -74,32 +61,6 @@
|
||||
RECHAT_CONTENT_SOURCE.GEMINI_WITH_CHAT_CONTEXT
|
||||
"
|
||||
>
|
||||
<el-form-item class="mb4px">
|
||||
<div>
|
||||
<el-button size="small" type="primary" @click="handleClickConfigLlm">
|
||||
配置大语言模型
|
||||
</el-button>
|
||||
<div class="font-size-12px color-#666">
|
||||
支持
|
||||
<span
|
||||
class="pl6px pr6px pt4px pb2px color-white border-rd-full font-size-0.8em"
|
||||
style="background-color: #3c4efd"
|
||||
>DeepSeek-V3</span
|
||||
>
|
||||
<span
|
||||
class="ml4px pl6px pr6px pt4px pb2px color-white border-rd-full font-size-0.8em"
|
||||
style="background-color: #000000"
|
||||
>GPT-4o mini</span
|
||||
>
|
||||
<span
|
||||
class="ml4px pl6px pr6px pt4px pb2px color-white border-rd-full font-size-0.8em"
|
||||
style="background-color: #462ac4"
|
||||
>Qwen2.5</span
|
||||
>
|
||||
模型;支持多个“服务商-模型”组合按权重搭配使用
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item class="mb4px">
|
||||
<div>
|
||||
<el-button size="small" type="primary" @click="handleClickEditResume">
|
||||
@@ -151,7 +112,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button size="small" type="primary" @click="handleTestEffectClicked"
|
||||
>使用当前配置模拟已读不回复聊过程</el-button
|
||||
>使用当前配置模拟已读不回自动复聊过程</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
<el-form-item prop="recentMessageQuantityForLlm">
|
||||
@@ -181,7 +142,7 @@
|
||||
:precision="1"
|
||||
:step="0.5"
|
||||
@blur="handleThrottleIntervalMinutesBlur"
|
||||
/> 分钟内不多次跟进同一Boss
|
||||
/> 分钟内不多次跟进同一BOSS
|
||||
</el-form-item>
|
||||
<el-form-item label="跟进时限(天)" prop="rechatLimitDay" mb-0>
|
||||
<div>
|
||||
@@ -213,7 +174,7 @@
|
||||
请向你不想继续提醒的Boss发送任意消息,发送后立即撤回的这条消息即可。
|
||||
<br />
|
||||
<br />
|
||||
对于PC端Boss直聘,鼠标移动到要撤回的消息,点按鼠标右键调出菜单,再鼠标左键点击菜单中的“撤回”。如图所示:
|
||||
对于PC端BOSS直聘,鼠标移动到要撤回的消息,点按鼠标右键调出菜单,再鼠标左键点击菜单中的“撤回”。如图所示:
|
||||
<br />
|
||||
<img block w-full src="./resources/withdraw-message-guide.png" />
|
||||
</li>
|
||||
@@ -221,7 +182,7 @@
|
||||
</template>
|
||||
<el-button type="text" font-size-12px
|
||||
><span><QuestionFilled w-1em h-1em mr2px /></span
|
||||
>我不想持续提醒某个Boss了,如何处理?</el-button
|
||||
>我不想持续提醒某个BOSS了,如何处理?</el-button
|
||||
>
|
||||
</el-tooltip>
|
||||
</el-form-item>
|
||||
@@ -562,31 +523,6 @@ const restoreDefaultTemplate = async () => {
|
||||
})
|
||||
}
|
||||
|
||||
const handleClickLaunchLogin = async () => {
|
||||
gtagRenderer('launch_login_clicked')
|
||||
try {
|
||||
await electron.ipcRenderer.invoke('login-with-cookie-assistant')
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: 'Cookie 保存成功'
|
||||
})
|
||||
} catch {
|
||||
//
|
||||
}
|
||||
}
|
||||
const handleClickBrowserSetting = async () => {
|
||||
gtagRenderer('browser_setting_clicked')
|
||||
try {
|
||||
await electron.ipcRenderer.invoke('config-with-browser-assistant')
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: '浏览器设置保存成功'
|
||||
})
|
||||
} catch {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
const currentStamp = ref(new Date())
|
||||
let timer = 0
|
||||
function updateCurrentStamp() {
|
||||
@@ -604,15 +540,6 @@ const rechatLimitDateString = computed(() => {
|
||||
).format('YYYY-MM-DD HH:mm:ss')
|
||||
})
|
||||
|
||||
const handleClickConfigLlm = async () => {
|
||||
gtagRenderer('config_llm_clicked')
|
||||
try {
|
||||
await electron.ipcRenderer.invoke('llm-config')
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
}
|
||||
}
|
||||
|
||||
const handleClickEditResume = async () => {
|
||||
gtagRenderer('edit_resume_clicked')
|
||||
try {
|
||||
@@ -634,7 +561,7 @@ const rechatLlmFallbackOptions = [
|
||||
value: RECHAT_LLM_FALLBACK.SEND_LOOK_FORWARD_EMOTION
|
||||
},
|
||||
{
|
||||
name: '退出已读不回提醒器',
|
||||
name: '退出已读不回自动复聊',
|
||||
value: RECHAT_LLM_FALLBACK.EXIT_REMINDER_PROGRAM
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,100 +1,155 @@
|
||||
<template>
|
||||
<div class="flex h100vh">
|
||||
<div class="flex flex-col min-w200px w200px pt30px pl30px aside-nav of-hidden">
|
||||
<div class="nav-list flex-1 of-auto">
|
||||
<div class="nav-list flex-1 of-auto pl20px ml--20px">
|
||||
<RouterLink v-show="false" to="./TaskManager">任务管理</RouterLink>
|
||||
<RouterLink to="./GeekAutoStartChatWithBoss">
|
||||
Boss炸弹
|
||||
<el-tooltip
|
||||
placement="right"
|
||||
:enterable="false"
|
||||
@show="gtagRenderer('tooltip_show_for_nav_boss_b_entry')"
|
||||
>
|
||||
<template #content>
|
||||
<div w-480px>
|
||||
<div>扩列神器!按照你所设置的求职偏好,自动开聊推荐职位列表中的匹配的Boss。</div>
|
||||
<br />
|
||||
<div>匹配步骤</div>
|
||||
<ol m0 pl2em>
|
||||
<li>
|
||||
按照公司名称查找职位,查找到目标职位后,自动点击这个职位,右侧将会展示职位详情
|
||||
</li>
|
||||
<li>
|
||||
检查Boss活跃度
|
||||
<ul pl2em>
|
||||
<div class="group-item">
|
||||
<div class="group-title">BOSS直聘</div>
|
||||
<div flex flex-col class="link-list">
|
||||
<RouterLink to="./GeekAutoStartChatWithBoss">
|
||||
自动开聊
|
||||
<el-tooltip
|
||||
placement="right"
|
||||
:enterable="false"
|
||||
@show="gtagRenderer('tooltip_show_for_nav_boss_b_entry')"
|
||||
>
|
||||
<template #content>
|
||||
<div w-480px>
|
||||
<div>扩列神器!按照你所设置的求职偏好,自动开聊推荐职位列表中的匹配的BOSS。</div>
|
||||
<br />
|
||||
<div>匹配步骤</div>
|
||||
<ol m0 pl2em>
|
||||
<li>
|
||||
如果Boss活跃度为本月活跃或更往前的时间,则会把职位标记为不合适,一段时间内你将不会在Boss上看到这个职位,且将会推荐新职位置换这个职位
|
||||
按照公司名称查找职位,查找到目标职位后,自动点击这个职位,右侧将会展示职位详情
|
||||
</li>
|
||||
<li>
|
||||
检查BOSS活跃度
|
||||
<ul pl2em>
|
||||
<li>
|
||||
如果BOSS活跃度为本月活跃或更往前的时间,则会把职位标记为不合适,一段时间内你将不会在BOSS上看到这个职位,且将会推荐新职位置换这个职位
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
对职位名称、职位类型、职位描述进行匹配
|
||||
<ul pl2em>
|
||||
<li>如果匹配则自动点击开聊按钮</li>
|
||||
<li>
|
||||
不匹配则标记这个职位为不合适,一段时间内你将不会在BOSS上看到这个职位,且将会推荐新职位置换这个职位
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<br />
|
||||
<div>异常情况</div>
|
||||
<ol m0 pl2em>
|
||||
<li>
|
||||
当前页面筛选条件下,如果没有更多职位,则自动切换备选筛选条件,以获取更多新职位
|
||||
</li>
|
||||
<li>
|
||||
如当天开聊次数用完,本程序会暂停运行60分钟,之后尝试继续重新运行;如重新运行时间已在第二天,则将会继续开聊
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</template>
|
||||
<QuestionFilled w-1em h-1em mr10px />
|
||||
</el-tooltip>
|
||||
</RouterLink>
|
||||
<RouterLink to="./ReadNoReplyReminder">
|
||||
已读不回自动复聊
|
||||
<el-tooltip
|
||||
placement="right"
|
||||
:enterable="false"
|
||||
@show="gtagRenderer('tooltip_show_for_rnrr_entry')"
|
||||
>
|
||||
<template #content>
|
||||
<div w-480px>
|
||||
<div>
|
||||
BOSS不明原因已读不回?简历就是投不出去?<br />
|
||||
已读不回自动复聊,提醒一下已读不回的 BOSS,助力把握每次机会
|
||||
</div>
|
||||
<br />
|
||||
<div>匹配逻辑</div>
|
||||
<div>在聊天列表中查找对你消息已读不回的BOSS,再发一条消息,多次复聊;同时:</div>
|
||||
<ul m0 pl2em>
|
||||
<li>如果设置了“跟进时限”,那么在这个时间之前活跃的聊天将不会被检查</li>
|
||||
<li>
|
||||
如果设置了“跟进间隔”,且再次检查时发现BOSS已读不回,且距离上次提醒时间间隔小于这个时间,那么聊天将暂时不会跟进,直到下次检查时距离上次提醒时间间隔大于这个时间
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
对职位名称、职位类型、职位描述进行匹配
|
||||
<ul pl2em>
|
||||
<li>如果匹配则自动点击开聊按钮</li>
|
||||
<li>
|
||||
不匹配则标记这个职位为不合适,一段时间内你将不会在Boss上看到这个职位,且将会推荐新职位置换这个职位
|
||||
</li>
|
||||
<br />
|
||||
<div>发送内容</div>
|
||||
<ul m0 pl2em>
|
||||
<li>“[盼回复]”表情</li>
|
||||
<li>由大语言模型(根据简历及当前聊天上下文)生成的内容</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<br />
|
||||
<div>异常情况</div>
|
||||
<ol m0 pl2em>
|
||||
<li>
|
||||
当前页面筛选条件下,如果没有更多职位,则自动切换备选筛选条件,以获取更多新职位
|
||||
</li>
|
||||
<li>
|
||||
如当天开聊次数用完,本程序会暂停运行60分钟,之后尝试继续重新运行;如重新运行时间已在第二天,则将会继续开聊
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</template>
|
||||
<QuestionFilled w-1em h-1em mr10px />
|
||||
</el-tooltip>
|
||||
</RouterLink>
|
||||
<a href="javascript:void(0)" @click="handleClickLaunchBossLogin">
|
||||
编辑登录凭据<TopRight w-1em h-1em mr10px />
|
||||
</a>
|
||||
<a href="javascript:void(0)" @click="handleLaunchBossSite">
|
||||
手动逛<TopRight w-1em h-1em mr10px />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="group-divider" />
|
||||
<div class="group-item">
|
||||
<div class="group-title">全局设置</div>
|
||||
<div flex flex-col class="link-list">
|
||||
<a href="javascript:void(0)" @click="handleClickBrowserSetting">
|
||||
编辑浏览器偏好<TopRight w-1em h-1em mr10px />
|
||||
</a>
|
||||
<a href="javascript:void(0)" @click="handleClickConfigLlm">
|
||||
配置大语言模型
|
||||
<div>
|
||||
<el-tooltip
|
||||
placement="right"
|
||||
:enterable="false"
|
||||
@show="gtagRenderer('tooltip_show_for_rnrr_entry')"
|
||||
>
|
||||
<template #content>
|
||||
<div class="font-size-12px">
|
||||
支持
|
||||
<span
|
||||
class="pl6px pr6px pt4px pb2px color-white border-rd-full font-size-0.8em"
|
||||
style="background-color: #3c4efd"
|
||||
>DeepSeek-V3</span
|
||||
>
|
||||
<span
|
||||
class="ml4px pl6px pr6px pt4px pb2px color-black border-rd-full font-size-0.8em"
|
||||
style="background-color: #fff"
|
||||
>GPT-4o mini</span
|
||||
>
|
||||
<span
|
||||
class="ml4px pl6px pr6px pt4px pb2px color-white border-rd-full font-size-0.8em"
|
||||
style="background-color: #462ac4"
|
||||
>Qwen2.5</span
|
||||
>
|
||||
模型<br />支持多个“服务商-模型”组合按权重搭配使用
|
||||
</div>
|
||||
</template>
|
||||
<QuestionFilled w-1em h-1em mr10px />
|
||||
</el-tooltip>
|
||||
<TopRight w-1em h-1em mr10px />
|
||||
</div>
|
||||
</template>
|
||||
<QuestionFilled w-1em h-1em mr10px />
|
||||
</el-tooltip>
|
||||
</RouterLink>
|
||||
<RouterLink to="./ReadNoReplyReminder">
|
||||
已读不回提醒器
|
||||
<el-tooltip
|
||||
placement="right"
|
||||
:enterable="false"
|
||||
@show="gtagRenderer('tooltip_show_for_rnrr_entry')"
|
||||
>
|
||||
<template #content>
|
||||
<div w-480px>
|
||||
<div>
|
||||
Boss不明原因已读不回?简历就是投不出去?<br />
|
||||
已读不回提醒器,有事没事提醒一下已读不回的 Ta,助力把握每次机会
|
||||
</div>
|
||||
<br />
|
||||
<div>匹配逻辑</div>
|
||||
<div>在聊天列表中查找对你消息已读不回的Boss,再发一条消息,多次复聊;同时:</div>
|
||||
<ul m0 pl2em>
|
||||
<li>如果设置了“跟进时限”,那么在这个时间之前活跃的聊天将不会被检查</li>
|
||||
<li>
|
||||
如果设置了“跟进间隔”,且再次检查时发现Boss已读不回,且距离上次提醒时间间隔小于这个时间,那么聊天将暂时不会跟进,直到下次检查时距离上次提醒时间间隔大于这个时间
|
||||
</li>
|
||||
</ul>
|
||||
<br />
|
||||
<div>发送内容</div>
|
||||
<ul m0 pl2em>
|
||||
<li>“[盼回复]”表情</li>
|
||||
<li>由大语言模型(根据简历及当前聊天上下文)生成的内容</li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
<QuestionFilled w-1em h-1em mr10px />
|
||||
</el-tooltip>
|
||||
</RouterLink>
|
||||
<hr w180px />
|
||||
<a href="javascript:void(0)" @click="handleLaunchBossSite">
|
||||
手动逛Boss<TopRight w-1em h-1em mr10px />
|
||||
</a>
|
||||
<hr w180px />
|
||||
<RouterLink to="./StartChatRecord">开聊记录</RouterLink>
|
||||
<RouterLink to="./MarkAsNotSuitRecord">标记不合适记录</RouterLink>
|
||||
<RouterLink to="./JobLibrary">职位库</RouterLink>
|
||||
<RouterLink to="./BossLibrary">Boss库</RouterLink>
|
||||
<RouterLink to="./CompanyLibrary">公司库</RouterLink>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="group-divider" />
|
||||
<div class="group-item">
|
||||
<div class="group-title">运行数据</div>
|
||||
<div flex flex-col class="link-list">
|
||||
<RouterLink to="./StartChatRecord">开聊记录</RouterLink>
|
||||
<RouterLink to="./MarkAsNotSuitRecord">标记不合适记录</RouterLink>
|
||||
<RouterLink to="./JobLibrary">职位库</RouterLink>
|
||||
<RouterLink to="./BossLibrary">BOSS库</RouterLink>
|
||||
<RouterLink to="./CompanyLibrary">公司库</RouterLink>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pt-16px pb-16px flex-0 font-size-12px">
|
||||
<div v-if="updateStore.availableNewRelease" mb16px>
|
||||
@@ -137,11 +192,13 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<RouterView v-slot="{ Component }" class="flex-1 of-hidden">
|
||||
<KeepAlive>
|
||||
<component :is="Component" />
|
||||
</KeepAlive>
|
||||
</RouterView>
|
||||
<div class="router-view-wrap">
|
||||
<RouterView v-slot="{ Component }" class="flex-1 of-hidden">
|
||||
<KeepAlive>
|
||||
<component :is="Component" />
|
||||
</KeepAlive>
|
||||
</RouterView>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -152,6 +209,7 @@ import useBuildInfo from '@renderer/hooks/useBuildInfo'
|
||||
import { debounce } from 'lodash'
|
||||
import { gtagRenderer } from '@renderer/utils/gtag'
|
||||
import { useUpdateStore, useTaskManagerStore } from '../../store/index'
|
||||
import { ElMessage } from 'element-plus'
|
||||
|
||||
useRouter()
|
||||
|
||||
@@ -188,34 +246,82 @@ function handleViewNewReleaseClick() {
|
||||
|
||||
const taskManagerStore = useTaskManagerStore()
|
||||
void taskManagerStore
|
||||
|
||||
const handleClickLaunchBossLogin = async () => {
|
||||
gtagRenderer('launch_login_clicked')
|
||||
try {
|
||||
await electron.ipcRenderer.invoke('login-with-cookie-assistant')
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: '登录凭据保存成功'
|
||||
})
|
||||
} catch {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
const handleClickBrowserSetting = async () => {
|
||||
gtagRenderer('browser_setting_clicked')
|
||||
try {
|
||||
await electron.ipcRenderer.invoke('config-with-browser-assistant')
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: '浏览器偏好保存成功'
|
||||
})
|
||||
} catch {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
const handleClickConfigLlm = async () => {
|
||||
gtagRenderer('config_llm_clicked')
|
||||
try {
|
||||
await electron.ipcRenderer.invoke('llm-config')
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.aside-nav {
|
||||
background-image: linear-gradient(45deg, #eaf4f1, #dcf6f2);
|
||||
.nav-list {
|
||||
> a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 2.5em;
|
||||
box-sizing: border-box;
|
||||
padding-left: 2em;
|
||||
&.router-link-active {
|
||||
background-color: #fff;
|
||||
font-weight: 700;
|
||||
color: #2faa9e;
|
||||
border-radius: 9999px 0 0 9999px;
|
||||
}
|
||||
}
|
||||
> hr {
|
||||
hr.group-divider {
|
||||
width: 100%;
|
||||
border: 0 solid;
|
||||
height: 1px;
|
||||
background-color: #b3c8c3;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-top: 4px;
|
||||
margin-bottom: 4px;
|
||||
margin-right: 0;
|
||||
}
|
||||
.group-item {
|
||||
.group-title {
|
||||
color: #849492;
|
||||
font-size: 12px;
|
||||
padding: 0.25em 0;
|
||||
}
|
||||
.link-list {
|
||||
a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 2em;
|
||||
box-sizing: border-box;
|
||||
padding-left: 1em;
|
||||
font-size: 14px;
|
||||
&.router-link-active {
|
||||
background-color: #fff;
|
||||
font-weight: 700;
|
||||
color: #2faa9e;
|
||||
border-radius: 9999px 0 0 9999px;
|
||||
position: relative;
|
||||
box-shadow: 0px 0px 10px rgba(50, 114, 108, 0.187);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.feedback-button-area,
|
||||
.update-button-area {
|
||||
@@ -226,4 +332,10 @@ void taskManagerStore
|
||||
}
|
||||
}
|
||||
}
|
||||
.router-view-wrap {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
box-shadow: -4px 1px 20px rgb(50 114 108 / 29%);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -14,7 +14,7 @@ const routes: Array<RouteRecordRaw> = [
|
||||
path: '/cookieAssistant',
|
||||
component: () => import('@renderer/page/CookieAssistant/index.vue'),
|
||||
meta: {
|
||||
title: 'Boss 登录助手'
|
||||
title: 'BOSS登录助手'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -56,7 +56,7 @@ const routes: Array<RouteRecordRaw> = [
|
||||
path: '/readNoReplyReminderLlmMock',
|
||||
component: () => import('@renderer/page/ReadNoReplyReminderLlmMock/index.vue'),
|
||||
meta: {
|
||||
title: '已读不回提醒器 大语言模型测试'
|
||||
title: '已读不回自动复聊 大语言模型测试'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -75,14 +75,14 @@ const routes: Array<RouteRecordRaw> = [
|
||||
path: 'GeekAutoStartChatWithBoss',
|
||||
component: () => import('@renderer/page/MainLayout/GeekAutoStartChatWithBoss/index.vue'),
|
||||
meta: {
|
||||
title: 'BOSS炸弹'
|
||||
title: '自动开聊'
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'ReadNoReplyReminder',
|
||||
component: () => import('@renderer/page/MainLayout/ReadNoReplyReminder.vue'),
|
||||
meta: {
|
||||
title: '已读不回提醒器'
|
||||
title: '已读不回自动复聊'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -110,7 +110,7 @@ const routes: Array<RouteRecordRaw> = [
|
||||
path: 'BossLibrary',
|
||||
component: () => import('@renderer/page/MainLayout/BossLibrary.vue'),
|
||||
meta: {
|
||||
title: 'Boss库'
|
||||
title: 'BOSS库'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -130,14 +130,14 @@ const routes: Array<RouteRecordRaw> = [
|
||||
path: 'prepareRun',
|
||||
component: () => import('@renderer/page/GeekAutoStartChatWithBoss/PrepareRun.vue'),
|
||||
meta: {
|
||||
title: 'BOSS炸弹 正在预热'
|
||||
title: '自动开聊 正在预热'
|
||||
}
|
||||
},
|
||||
{
|
||||
path: 'runningStatus',
|
||||
component: () => import('@renderer/page/GeekAutoStartChatWithBoss/RunningStatus.vue'),
|
||||
meta: {
|
||||
title: 'BOSS炸弹 正在为你开聊BOSS'
|
||||
title: '自动开聊 正在为你开聊BOSS'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -147,7 +147,7 @@ const routes: Array<RouteRecordRaw> = [
|
||||
'@renderer/page/GeekAutoStartChatWithBoss/RunningStatusForReadNoReplyReminder.vue'
|
||||
),
|
||||
meta: {
|
||||
title: '已读不回提醒器 正在为你开聊BOSS'
|
||||
title: '已读不回自动复聊 正在为你开聊BOSS'
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user