enhance gtag name and args

This commit is contained in:
geekgeekrun
2025-04-22 00:18:45 +08:00
parent 011c22e0fe
commit 954553d8d8
14 changed files with 55 additions and 53 deletions
@@ -209,7 +209,7 @@ export const sendGptContent = async (page: Page, chatRecords) => {
rawMarkdownText.replace(/^```json/m, '').replace(/```$/m, '') rawMarkdownText.replace(/^```json/m, '').replace(/```$/m, '')
)?.response )?.response
} catch (err) { } catch (err) {
gtag('encounter_error_when_parse_llm_respond_text', { gtag('encounter_error_when_parse_llm_text', {
err, err,
model: llmConfig?.model, model: llmConfig?.model,
providerCompleteApiUrl: llmConfig?.providerCompleteApiUrl providerCompleteApiUrl: llmConfig?.providerCompleteApiUrl
@@ -297,16 +297,16 @@ const mainLoop = async () => {
.filter((it) => it.bizType !== 101 && it.isSelf) .filter((it) => it.bizType !== 101 && it.isSelf)
.slice(-recentMessageQuantityForLlm) .slice(-recentMessageQuantityForLlm)
await sendGptContent(pageMapByName.boss!, messageListForGpt) await sendGptContent(pageMapByName.boss!, messageListForGpt)
gtag('read_no_reply_reminder_llm_content_sent') gtag('rnrr_llm_content_sent')
} catch (err) { } catch (err) {
console.log(err) console.log(err)
if (rechatLlmFallback === RECHAT_LLM_FALLBACK.SEND_LOOK_FORWARD_EMOTION) { if (rechatLlmFallback === RECHAT_LLM_FALLBACK.SEND_LOOK_FORWARD_EMOTION) {
await sendLookForwardReplyEmotion(pageMapByName.boss!) await sendLookForwardReplyEmotion(pageMapByName.boss!)
gtag('read_no_reply_reminder_look_forward_reply_emotion_sent', { gtag('rnrr_look_forward_reply_emotion_sent', {
fallback: true fallback: true
}) })
} else { } else {
gtag('read_no_reply_reminder_encounter_error', { gtag('rnrr_encounter_error', {
error: err error: err
}) })
throw err throw err
@@ -314,7 +314,7 @@ const mainLoop = async () => {
} }
} else { } else {
await sendLookForwardReplyEmotion(pageMapByName.boss!) await sendLookForwardReplyEmotion(pageMapByName.boss!)
gtag('read_no_reply_reminder_look_forward_reply_emotion_sent') gtag('rnrr_look_forward_reply_emotion_sent')
} }
} else { } else {
cursorToContinueFind += 1 cursorToContinueFind += 1
+2
View File
@@ -1,4 +1,5 @@
import buildInfo from '../../../common/build-info.json' import buildInfo from '../../../common/build-info.json'
import os from 'node:os'
type LowercaseLetter = type LowercaseLetter =
| 'a' | 'a'
@@ -55,6 +56,7 @@ function getCommonParams() {
return { return {
app_version: buildInfo.version, app_version: buildInfo.version,
app_build_hash: buildInfo.buildHash, app_build_hash: buildInfo.buildHash,
os_info: `${os.type()} | ${os.release()} | ${os.arch()}`,
t: Number(new Date()) t: Number(new Date())
} }
} }
@@ -27,7 +27,7 @@
<el-tooltip <el-tooltip
content="待对比条目少于2个" content="待对比条目少于2个"
:disabled="tableProps.length > 1" :disabled="tableProps.length > 1"
@show="gtagRenderer('tooltip_shown_about_compare_item_no_enough')" @show="gtagRenderer('tooltip_show_about_lake_of_compare_item')"
> >
<el-radio v-model="diffPivot" :label="item.value" :disabled="tableProps.length <= 1">作为diff基准</el-radio> <el-radio v-model="diffPivot" :label="item.value" :disabled="tableProps.length <= 1">作为diff基准</el-radio>
</el-tooltip> </el-tooltip>
@@ -67,7 +67,7 @@ const processTasks = async () => {
}) })
await p await p
} catch { } catch {
gtagRenderer('encounter_error_when_downloading_dependencies') gtagRenderer('encounter_error_when_download_deps')
await ElMessageBox.confirm('需要重试吗?', '核心组件下载失败', { await ElMessageBox.confirm('需要重试吗?', '核心组件下载失败', {
closeOnClickModal: false, closeOnClickModal: false,
closeOnPressEscape: false, closeOnPressEscape: false,
@@ -76,11 +76,11 @@ const processTasks = async () => {
cancelButtonText: '退出程序' cancelButtonText: '退出程序'
}) })
.then(() => { .then(() => {
gtagRenderer('start_retry_download_dependencies') gtagRenderer('start_retry_download_deps')
processTasks() processTasks()
}) })
.catch(() => { .catch(() => {
gtagRenderer('cancel_download_dependencies_and_exit') gtagRenderer('cancel_download_deps_and_exit')
promiseList.length = 0 promiseList.length = 0
electron.ipcRenderer.invoke('exit-app-immediately') electron.ipcRenderer.invoke('exit-app-immediately')
}) })
@@ -87,7 +87,7 @@
font-size-inherit font-size-inherit
@click=" @click="
() => { () => {
gtagRenderer('replace_inputted_cookie_by_collected_cookie') gtagRenderer('replace_inputted_cookie_by_collected')
fillCollectedCookie() fillCollectedCookie()
} }
" "
@@ -144,13 +144,13 @@ const formRules = {
`JSON格式无效 - 存在语法错误: ${err.message};建议使用EditThisCookie扩展程序进行复制。` `JSON格式无效 - 存在语法错误: ${err.message};建议使用EditThisCookie扩展程序进行复制。`
) )
) )
gtagRenderer('wrong_cookie_format_for_json_syntax-error') gtagRenderer('wrong_cookie_format_json_syntax_error')
return return
} }
if (!checkCookieListFormat(JSON.parse(formContent.value.collectedCookies))) { if (!checkCookieListFormat(JSON.parse(formContent.value.collectedCookies))) {
cb(new Error(`Cookie格式无效 - 部分字段缺失;建议使用EditThisCookie扩展程序进行复制。`)) cb(new Error(`Cookie格式无效 - 部分字段缺失;建议使用EditThisCookie扩展程序进行复制。`))
gtagRenderer('wrong_cookie_format_for_field_loss') gtagRenderer('wrong_cookie_format_field_loss')
return return
} }
cb() cb()
@@ -168,7 +168,7 @@ const handleCookieCollected = (_, payload) => {
fillCollectedCookie() fillCollectedCookie()
gtagRenderer('cookie_collected_and_auto_filled') gtagRenderer('cookie_collected_and_auto_filled')
} else { } else {
gtagRenderer('cookie_collected_but_user_has_changed_input') gtagRenderer('cookie_collected_after_changed_input')
} }
} }
const fillCollectedCookie = () => { const fillCollectedCookie = () => {
@@ -24,19 +24,19 @@ const { ipcRenderer } = electron
const router = useRouter() const router = useRouter()
const handleStopButtonClick = async () => { const handleStopButtonClick = async () => {
gtagRenderer('geek_auto_start_chat_with_boss_stop_button_clicked') gtagRenderer('gascwb_stop_button_clicked')
ipcRenderer.invoke('stop-geek-auto-start-chat-with-boss') ipcRenderer.invoke('stop-geek-auto-start-chat-with-boss')
} }
const isStopping = ref(false) const isStopping = ref(false)
const handleStopping = () => { const handleStopping = () => {
gtagRenderer('geek_auto_start_chat_with_boss_become_stopping') gtagRenderer('gascwb_become_stopping')
isStopping.value = true isStopping.value = true
} }
ipcRenderer.once('geek-auto-start-chat-with-boss-stopping', handleStopping) ipcRenderer.once('geek-auto-start-chat-with-boss-stopping', handleStopping)
const handleStopped = () => { const handleStopped = () => {
gtagRenderer('geek_auto_start_chat_with_boss_become_stopped') gtagRenderer('gascwb_become_stopped')
router.replace('/main-layout/GeekAutoStartChatWithBoss') router.replace('/main-layout/GeekAutoStartChatWithBoss')
} }
ipcRenderer.once('geek-auto-start-chat-with-boss-stopped', handleStopped) ipcRenderer.once('geek-auto-start-chat-with-boss-stopped', handleStopped)
@@ -51,14 +51,14 @@ onMounted(async () => {
await electron.ipcRenderer.invoke('run-geek-auto-start-chat-with-boss') await electron.ipcRenderer.invoke('run-geek-auto-start-chat-with-boss')
} catch (err) { } catch (err) {
if (err instanceof Error && err.message.includes('NEED_TO_CHECK_RUNTIME_DEPENDENCIES')) { if (err instanceof Error && err.message.includes('NEED_TO_CHECK_RUNTIME_DEPENDENCIES')) {
gtagRenderer('geek_auto_start_chat_with_boss_cannot_run_due_to_corrupt') gtagRenderer('gascwb_cannot_run_for_corrupt')
ElMessage.error({ ElMessage.error({
message: `核心组件损坏,正在尝试修复` message: `核心组件损坏,正在尝试修复`
}) })
router.replace('/') router.replace('/')
} }
console.error(err) console.error(err)
gtagRenderer('geek_auto_start_chat_with_boss_cannot_run_due_to_unknown_error', { err }) gtagRenderer('gascwb_cannot_run_for_unknown_error', { err })
} }
}) })
</script> </script>
@@ -22,19 +22,19 @@ const { ipcRenderer } = electron
const router = useRouter() const router = useRouter()
const handleStopButtonClick = async () => { const handleStopButtonClick = async () => {
gtagRenderer('read_no_reply_reminder_stop_button_clicked') gtagRenderer('rnrr_stop_button_clicked')
ipcRenderer.invoke('stop-geek-auto-start-chat-with-boss') ipcRenderer.invoke('stop-geek-auto-start-chat-with-boss')
} }
const isStopping = ref(false) const isStopping = ref(false)
const handleStopping = () => { const handleStopping = () => {
gtagRenderer('read_no_reply_reminder_become_stopping') gtagRenderer('rnrr_become_stopping')
isStopping.value = true isStopping.value = true
} }
ipcRenderer.once('geek-auto-start-chat-with-boss-stopping', handleStopping) ipcRenderer.once('geek-auto-start-chat-with-boss-stopping', handleStopping)
const handleStopped = () => { const handleStopped = () => {
gtagRenderer('read_no_reply_reminder_become_stopped') gtagRenderer('rnrr_become_stopped')
router.replace('/main-layout/ReadNoReplyReminder') router.replace('/main-layout/ReadNoReplyReminder')
} }
ipcRenderer.once('geek-auto-start-chat-with-boss-stopped', handleStopped) ipcRenderer.once('geek-auto-start-chat-with-boss-stopped', handleStopped)
@@ -49,14 +49,14 @@ onMounted(async () => {
await electron.ipcRenderer.invoke('run-read-no-reply-auto-reminder') await electron.ipcRenderer.invoke('run-read-no-reply-auto-reminder')
} catch (err) { } catch (err) {
if (err instanceof Error && err.message.includes('NEED_TO_CHECK_RUNTIME_DEPENDENCIES')) { if (err instanceof Error && err.message.includes('NEED_TO_CHECK_RUNTIME_DEPENDENCIES')) {
gtagRenderer('read_no_reply_reminder_cannot_run_due_to_corrupt') gtagRenderer('rnrr_cannot_run_for_corrupt')
ElMessage.error({ ElMessage.error({
message: `核心组件损坏,正在尝试修复` message: `核心组件损坏,正在尝试修复`
}) })
router.replace('/') router.replace('/')
} }
console.error(err) console.error(err)
gtagRenderer('read_no_reply_reminder_cannot_run_due_to_unknown_error', { err }) gtagRenderer('rnrr_cannot_run_for_unknown_error', { err })
} }
}) })
</script> </script>
@@ -24,7 +24,7 @@
期望公司以逗号分隔不区分大小写<el-tooltip 期望公司以逗号分隔不区分大小写<el-tooltip
effect="light" effect="light"
placement="bottom-start" placement="bottom-start"
@show="gtagRenderer('tooltip_shown_about_expect_company_figure')" @show="gtagRenderer('tooltip_show_about_expect_company_figure')"
> >
<template #content> <template #content>
<img block h-270px src="./resources/intro-of-job-entry.png" /> <img block h-270px src="./resources/intro-of-job-entry.png" />
@@ -52,7 +52,7 @@
<el-tooltip <el-tooltip
effect="light" effect="light"
placement="bottom" placement="bottom"
@show="gtagRenderer('tooltip_shown_about_expect_job_info_figure')" @show="gtagRenderer('tooltip_show_about_expect_job_info_figure')"
> >
<template #content> <template #content>
<img block h-270px src="./resources/intro-of-job-info.png" /> <img block h-270px src="./resources/intro-of-job-info.png" />
@@ -64,7 +64,7 @@
<el-tooltip <el-tooltip
effect="light" effect="light"
placement="bottom-start" placement="bottom-start"
@show="gtagRenderer('tooltip_shown_about_mark_not_suit_intro')" @show="gtagRenderer('tooltip_show_about_mark_not_suit_intro')"
> >
<template #content> <template #content>
<ol m0 line-height-1.5em w-400px pl2em> <ol m0 line-height-1.5em w-400px pl2em>
@@ -80,7 +80,7 @@
style="color: var(--el-color-primary)" style="color: var(--el-color-primary)"
@click.prevent=" @click.prevent="
() => { () => {
gtagRenderer('click_view_mark_as_not_suit_record_from_boss_b_tooltip') gtagRenderer('click_view_mansr_from_boss_b_tooltip')
$router.push('/main-layout/MarkAsNotSuitRecord') $router.push('/main-layout/MarkAsNotSuitRecord')
} }
" "
@@ -286,7 +286,7 @@ const handleSubmit = async () => {
path: '/geekAutoStartChatWithBoss/prepareRun', path: '/geekAutoStartChatWithBoss/prepareRun',
query: { flow: 'geek-auto-start-chat-with-boss' } query: { flow: 'geek-auto-start-chat-with-boss' }
}) })
gtagRenderer('config_saved_and_will_launch_auto_start_chat', { gtagRenderer('config_saved_and_launch_auto_start_chat', {
has_dingtalk_robot_token: !!formContent.value?.dingtalkRobotAccessToken has_dingtalk_robot_token: !!formContent.value?.dingtalkRobotAccessToken
}) })
} }
@@ -77,7 +77,7 @@
size="small" size="small"
@click=" @click="
() => { () => {
gtagRenderer('mark_as_not_suit_record_refresh_clicked') gtagRenderer('mansr_refresh_clicked')
getMarkAsNotSuitRecord() getMarkAsNotSuitRecord()
} }
" "
@@ -104,7 +104,7 @@
scene="markAsNotSuitRecord" scene="markAsNotSuitRecord"
@closed=" @closed="
() => { () => {
gtagRenderer('mark_as_not_suit_record_closed') gtagRenderer('mansr_closed')
selectedJobInfoForViewSnapshot = null selectedJobInfoForViewSnapshot = null
} }
" "
@@ -137,7 +137,7 @@ const tableRef = ref<InstanceType<typeof ElTable>>()
const isTableLoading = ref(false) const isTableLoading = ref(false)
async function getMarkAsNotSuitRecord() { async function getMarkAsNotSuitRecord() {
try { try {
gtagRenderer('mark_as_not_suit_record_request_sent', { gtagRenderer('mansr_request_sent', {
page_no: pagination.value.pageNo, page_no: pagination.value.pageNo,
page_size: pagination.value.pageSize, page_size: pagination.value.pageSize,
}) })
@@ -152,12 +152,12 @@ async function getMarkAsNotSuitRecord() {
pageNo: res.pageNo, pageNo: res.pageNo,
pageSize: pagination.value.pageSize pageSize: pagination.value.pageSize
} }
gtagRenderer('mark_as_not_suit_record_request_success', { gtagRenderer('mansr_request_success', {
page_no: pagination.value.pageNo, page_no: pagination.value.pageNo,
page_size: pagination.value.pageSize, page_size: pagination.value.pageSize,
}) })
} catch (err) { } catch (err) {
gtagRenderer('mark_as_not_suit_record_request_error', { gtagRenderer('mansr_request_error', {
err, err,
page_no: pagination.value.pageNo, page_no: pagination.value.pageNo,
page_size: pagination.value.pageSize, page_size: pagination.value.pageSize,
@@ -18,7 +18,7 @@
effect="light" effect="light"
placement="right" placement="right"
:enterable="false" :enterable="false"
@show="gtagRenderer('tooltip_shown_about_look_forward_reply_emotion_figure')" @show="gtagRenderer('tooltip_show_about_lfr_emotion_figure')"
> >
<template #content> <template #content>
<img block h-100px src="./resources/look-forward-reply-emotion.gif" /> <img block h-100px src="./resources/look-forward-reply-emotion.gif" />
@@ -271,21 +271,21 @@ const handleSubmit = async () => {
RECHAT_CONTENT_SOURCE.GEMINI_WITH_CHAT_CONTEXT RECHAT_CONTENT_SOURCE.GEMINI_WITH_CHAT_CONTEXT
) { ) {
if (!(await electron.ipcRenderer.invoke('check-is-resume-content-valid'))) { if (!(await electron.ipcRenderer.invoke('check-is-resume-content-valid'))) {
gtagRenderer('cannot_launch_due_to_invalid_resume_content_dialog_show') gtagRenderer('cannot_launch_for_invalid_rc_dialog_show')
try { try {
await ElMessageBox.confirm(`简历内容无效;您需要编辑一下您的简历`, { await ElMessageBox.confirm(`简历内容无效;您需要编辑一下您的简历`, {
cancelButtonText: '取消', cancelButtonText: '取消',
confirmButtonText: '好的,去编辑我的简历', confirmButtonText: '好的,去编辑我的简历',
dangerouslyUseHTMLString: true dangerouslyUseHTMLString: true
}) })
gtagRenderer('cannot_launch_due_to_invalid_resume_content_dialog_click_confirm') gtagRenderer('invalid_rc_dialog_click_confirm')
try { try {
await electron.ipcRenderer.invoke('resume-edit') await electron.ipcRenderer.invoke('resume-edit')
} catch (err) { } catch (err) {
console.log(err) console.log(err)
} }
} catch { } catch {
gtagRenderer('cannot_launch_due_to_invalid_resume_content_dialog_click_cancel') gtagRenderer('invalid_rc_dialog_click_cancel')
} }
return return
} }
@@ -293,7 +293,7 @@ const handleSubmit = async () => {
await electron.ipcRenderer.invoke('check-if-llm-config-list-valid') await electron.ipcRenderer.invoke('check-if-llm-config-list-valid')
} catch (err) { } catch (err) {
if (err?.message?.includes(`CANNOT_FIND_VALID_CONFIG`)) { if (err?.message?.includes(`CANNOT_FIND_VALID_CONFIG`)) {
gtagRenderer('cannot_launch_due_to_invalid_llm_config') gtagRenderer('cannot_launch_for_invalid_llm_config')
console.log(`大模型配置无效`, err) console.log(`大模型配置无效`, err)
ElMessageBox.confirm( ElMessageBox.confirm(
'大模型配置不存在或者包含无效配置<br />您是否希望查看并修正当前大模型配置?', '大模型配置不存在或者包含无效配置<br />您是否希望查看并修正当前大模型配置?',
@@ -307,7 +307,7 @@ const handleSubmit = async () => {
} }
) )
.then(async () => { .then(async () => {
gtagRenderer('view_llm_config_clicked_in_invalid_tip_dialog') gtagRenderer('invalid_llm_config_tip_dialog_confirm')
try { try {
await electron.ipcRenderer.invoke('llm-config') await electron.ipcRenderer.invoke('llm-config')
} catch (err) { } catch (err) {
@@ -315,10 +315,10 @@ const handleSubmit = async () => {
} }
}) })
.catch(() => { .catch(() => {
gtagRenderer('close_invalid_llm_config_tip_dialog') gtagRenderer('invalid_llm_config_tip_dialog_cancel')
}) })
} else { } else {
gtagRenderer('cannot_launch_due_to_unknown_error_when_check_llm_config', { err }) gtagRenderer('cannot_launch_for_check_llm_config_error', { err })
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '大模型配置检查未通过,请重试' message: '大模型配置检查未通过,请重试'
@@ -330,7 +330,7 @@ const handleSubmit = async () => {
await electron.ipcRenderer.invoke('check-if-auto-remind-prompt-valid') await electron.ipcRenderer.invoke('check-if-auto-remind-prompt-valid')
} catch (err) { } catch (err) {
if (err?.message?.includes(`RESUME_PLACEHOLDER_NOT_EXIST`)) { if (err?.message?.includes(`RESUME_PLACEHOLDER_NOT_EXIST`)) {
gtagRenderer('cannot_launch_due_to_resume_placeholder_not_exist') gtagRenderer('cannot_launch_for_no_resume_placehold')
console.log(`提示词模板无效`, err) console.log(`提示词模板无效`, err)
ElMessageBox.confirm( ElMessageBox.confirm(
'提示词模板缺少简历内容占位符:<br /><b>__REPLACE_REAL_RESUME_HERE__</b><br /><br />您是否希望还原默认的提示词模板?', '提示词模板缺少简历内容占位符:<br /><b>__REPLACE_REAL_RESUME_HERE__</b><br /><br />您是否希望还原默认的提示词模板?',
@@ -344,14 +344,14 @@ const handleSubmit = async () => {
} }
) )
.then(async () => { .then(async () => {
gtagRenderer('reset_template_clicked_in_invalid_tip_dialog') gtagRenderer('confirm_invalid_rt_tip_dialog')
await restoreDefaultTemplate() await restoreDefaultTemplate()
}) })
.catch(() => { .catch(() => {
gtagRenderer('close_invalid_resume_template_tip_dialog') gtagRenderer('close_invalid_rt_tip_dialog')
}) })
} else { } else {
gtagRenderer('cannot_launch_due_to_unknown_error_when_check_prompt', { err }) gtagRenderer('cannot_launch_for_check_prompt_error', { err })
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '用于生成自动提醒消息的提示词检查未通过,请重试' message: '用于生成自动提醒消息的提示词检查未通过,请重试'
@@ -360,7 +360,7 @@ const handleSubmit = async () => {
return return
} }
if (!(await electron.ipcRenderer.invoke('resume-content-enough-detect'))) { if (!(await electron.ipcRenderer.invoke('resume-content-enough-detect'))) {
gtagRenderer('resume_content_not_enough_dialog_show') gtagRenderer('rc_not_enough_dialog_show')
try { try {
await ElMessageBox.confirm( await ElMessageBox.confirm(
`简历内容可能不够充足(各个部分内容长度相加 <800 字)<br />后续大模型根据简历生成的内容将可能不符合预期(例如相同内容重复生成、生成预期之外的内容)<br /><br />要继续运行吗?`, `简历内容可能不够充足(各个部分内容长度相加 <800 字)<br />后续大模型根据简历生成的内容将可能不符合预期(例如相同内容重复生成、生成预期之外的内容)<br /><br />要继续运行吗?`,
@@ -370,9 +370,9 @@ const handleSubmit = async () => {
dangerouslyUseHTMLString: true dangerouslyUseHTMLString: true
} }
) )
gtagRenderer('resume_content_not_enough_dialog_click_confirm') gtagRenderer('rc_not_enough_dialog_click_confirm')
} catch { } catch {
gtagRenderer('resume_content_not_enough_dialog_click_cancel') gtagRenderer('rc_not_enough_dialog_click_cancel')
return return
} }
} }
@@ -7,7 +7,7 @@
<el-tooltip <el-tooltip
placement="right" placement="right"
:enterable="false" :enterable="false"
@show="gtagRenderer('tooltip_shown_for_nav_boss_b_entry')" @show="gtagRenderer('tooltip_show_for_nav_boss_b_entry')"
> >
<template #content> <template #content>
<div w-480px> <div w-480px>
@@ -56,7 +56,7 @@
<el-tooltip <el-tooltip
placement="right" placement="right"
:enterable="false" :enterable="false"
@show="gtagRenderer('tooltip_shown_for_read_no_reply_reminder_entry')" @show="gtagRenderer('tooltip_show_for_rnrr_entry')"
> >
<template #content> <template #content>
<div w-480px> <div w-480px>
@@ -408,7 +408,7 @@ const handleSubmit = async () => {
}) })
) { ) {
try { try {
gtagRenderer('resume_content_not_enough_dialog_show') gtagRenderer('rc_not_enough_dialog_show')
await ElMessageBox.confirm( await ElMessageBox.confirm(
`简历内容可能不够充足(各个部分内容长度相加 <800 字)<br />后续大模型根据简历生成的内容将可能不符合预期(例如相同内容重复生成、生成预期之外的内容)<br /><br />要继续保存吗?`, `简历内容可能不够充足(各个部分内容长度相加 <800 字)<br />后续大模型根据简历生成的内容将可能不符合预期(例如相同内容重复生成、生成预期之外的内容)<br /><br />要继续保存吗?`,
{ {
+2 -2
View File
@@ -4,8 +4,8 @@ export function gtagRenderer(name, params: any = null) {
name, name,
params: { params: {
...(params ?? {}), ...(params ?? {}),
user_agent: navigator.userAgent, page_location: location.href,
current_href: location.href, page_title: document.title,
screen_w: window.screen?.width ?? null, screen_w: window.screen?.width ?? null,
screen_h: window.screen?.height ?? null, screen_h: window.screen?.height ?? null,
screen_dpr: window.devicePixelRatio screen_dpr: window.devicePixelRatio