From 15971bffd9a8a748cd122c2bff7bafe2d4a91248 Mon Sep 17 00:00:00 2001 From: xuxin <15279969124@163.com> Date: Thu, 16 Jul 2026 16:30:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=8B=E7=9B=9F=E8=B7=9F=E8=B8=AA=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 10 ++++++++++ src/router/index.ts | 6 ++++++ src/utils/channelBridge.ts | 3 ++- src/utils/resumeExport.ts | 2 +- src/views/Agent.vue | 7 +++++++ src/views/Home.vue | 6 ++++++ src/views/HomeMobile.vue | 6 ++++++ src/views/JobDetail.vue | 33 +++++++++++++++++++++++---------- src/views/Jobs.vue | 8 ++++++++ src/views/Login.vue | 7 +++++++ src/views/Mentor.vue | 6 ++++++ src/views/MentorDetail.vue | 6 ++++++ src/views/Profile.vue | 6 ++++++ src/views/Resume.vue | 6 ++++++ src/views/ResumeDetail.vue | 6 ++++++ 15 files changed, 106 insertions(+), 12 deletions(-) diff --git a/index.html b/index.html index efdf799..f7a0fd3 100644 --- a/index.html +++ b/index.html @@ -7,6 +7,16 @@ Offer派 - 大学生AI求职平台 | 智能岗位匹配·一键自动网申·AI简历优化 + +
diff --git a/src/router/index.ts b/src/router/index.ts index 202d6ff..2b8d47c 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -172,4 +172,10 @@ router.beforeEach(async (to, _from, next) => { next() }) +// 友盟统计 - SPA 路由切换上报页面浏览(PV) +router.afterEach((to) => { + const _czc = (window as any)._czc || [] + _czc.push(['_trackPageview', to.fullPath, document.referrer]) +}) + export default router diff --git a/src/utils/channelBridge.ts b/src/utils/channelBridge.ts index 7e48037..63817d4 100644 --- a/src/utils/channelBridge.ts +++ b/src/utils/channelBridge.ts @@ -45,7 +45,8 @@ * ------------------------------------------------------------ * | 数据名(name) | 中文名称 | 说明 | * | ----------------------------- | -------------- | --------------------------------- | - * | offerpieBrowserPlugUsage | 插件使用状态 | 标识插件正在运行 { usage: string } | + * * | offerpieBrowserPlugUsage | 插件使用状态 | 标识插件正在运行 { usage: string, version: string } | + * * | offerpaiDeliveryLinkList | 投递链接列表 | 记录要投递职位的来源链接,目前用于解决投递网站的重定向 { linkList: string[] },useCsl:true | * ============================================================ */ diff --git a/src/utils/resumeExport.ts b/src/utils/resumeExport.ts index 31cd3de..3108e5e 100644 --- a/src/utils/resumeExport.ts +++ b/src/utils/resumeExport.ts @@ -102,7 +102,7 @@ export function exportResumeWord(element: HTMLElement, fileName: string) { const blob = new Blob([fullHtml], { type: 'application/msword' }) const link = document.createElement('a') link.href = URL.createObjectURL(blob) - link.download = `${fileName}.doc` + link.download = `${fileName}.docx` document.body.appendChild(link) link.click() document.body.removeChild(link) diff --git a/src/views/Agent.vue b/src/views/Agent.vue index b4fc2dc..0873a0b 100644 --- a/src/views/Agent.vue +++ b/src/views/Agent.vue @@ -262,10 +262,17 @@ import { fetchResumeList } from '@/api/resume' import { fetchMemberStatus } from '@/api/member' import JobGoalDialog from '@/components/JobGoalDialog.vue' + // ==================== 路由 & Store ==================== const router = useRouter() const store = useStore() +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + // ==================== sessionStorage 缓存 key ==================== const STORAGE_KEY = 'agent_apply_progress_list' const COMPLETED_STORAGE_KEY = 'agent_completed_apply_list' diff --git a/src/views/Home.vue b/src/views/Home.vue index 870e18b..9b01b45 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -506,6 +506,12 @@ const router = useRouter() /** Vuex 状态管理实例 */ const store = useStore() +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + /** 页面是否已向下滚动超过 20px — 用于导航栏背景切换 */ const isScrolled = ref(false) diff --git a/src/views/HomeMobile.vue b/src/views/HomeMobile.vue index 306120e..4a13261 100644 --- a/src/views/HomeMobile.vue +++ b/src/views/HomeMobile.vue @@ -173,6 +173,12 @@ import { ref } from 'vue' import { getDailyJobCount } from '@/utils/dailyJobCount' +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + /** 今日更新岗位数量 */ const dailyJobCount = getDailyJobCount() diff --git a/src/views/JobDetail.vue b/src/views/JobDetail.vue index b8fe595..9493626 100644 --- a/src/views/JobDetail.vue +++ b/src/views/JobDetail.vue @@ -200,15 +200,24 @@ import FullscreenLoading from '@/components/FullscreenLoading.vue' import MemberDialog from '@/components/MemberDialog.vue' import StepProgressOverlay from '@/components/StepProgressOverlay.vue' import { fetchJobDetail, toggleJobFavorite, removeJobFavorite, fetchSkillGap } from '@/api/jobs' -import { fetchMemberStatus } from '@/api/member' + import type { JobDetailData, SkillGapData } from '@/api/jobs' + + // ==================== 路由相关 ==================== const router = useRouter() const route = useRoute() const store = useStore() + +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + // ==================== 全屏加载状态 ==================== /** 全屏加载是否显示 */ const fullLoading = ref(false) @@ -482,16 +491,20 @@ const resumeCustomJobInfo = computed(() => ({ /** 生成岗位专属简历 — 先检查会员状态,非会员弹权限拦截弹窗 */ async function handleGenerateResume() { - // 先检查会员状态 - try { - const statusRes = await fetchMemberStatus() - if (statusRes.code === '0' && statusRes.data && !statusRes.data.isMember) { - // 非会员 — 弹出会员权限拦截弹窗 - showMemberAccessDialog.value = true - return + // 优先从 vuex store 读取会员状态,没有则请求接口 + let isMember = store.state.memberStatus?.isMember + if (isMember === undefined || isMember === null) { + try { + await store.dispatch('loadMemberStatus') + isMember = store.state.memberStatus?.isMember + } catch { + // 接口异常时不阻断,继续执行 } - } catch { - // 接口异常时不阻断,继续执行 + } + if (!isMember) { + // 非会员 — 弹出会员权限拦截弹窗 + showMemberAccessDialog.value = true + return } // 显示步骤进度遮罩 diff --git a/src/views/Jobs.vue b/src/views/Jobs.vue index 523724f..110ed89 100644 --- a/src/views/Jobs.vue +++ b/src/views/Jobs.vue @@ -390,6 +390,7 @@ import JobResumeTemplate from '@/components/JobResumeTemplate.vue' import type { ResumeTemplateData } from '@/components/JobResumeTemplate.vue' + // 2. 注意:这里的字符串不需要再手动转义双引号了 const paymentFormHtml = ref(`
@@ -405,6 +406,13 @@ const router = useRouter() const route = useRoute() const store = useStore() + +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + /** 招聘分类标签背景色:校招=#3AC6E5,社招=#B95DDD,实习=#50D3B5 */ function recruitCategoryColor(category: number | undefined | null): string { if (category === 1) return '#3AC6E5' // 校招 diff --git a/src/views/Login.vue b/src/views/Login.vue index 7381b27..3831c46 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -291,6 +291,13 @@ const store = useStore() const router = useRouter() const route = useRoute() + +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + // ==================== 左侧动画面板 ==================== /** 舞台引用 */ const stageRef = ref(null) diff --git a/src/views/Mentor.vue b/src/views/Mentor.vue index 1183309..7bef389 100644 --- a/src/views/Mentor.vue +++ b/src/views/Mentor.vue @@ -164,6 +164,12 @@ import { toOssUrl } from '@/utils/image' const router = useRouter() const store = useStore() +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + /** 行业 Tab 标签列表 */ const industryTabs = ['推荐', '互联网', '金融', '快消', '咨询', '央国企', '硬科技', '生涯规划', '名校导师', '心理咨询', '其他'] diff --git a/src/views/MentorDetail.vue b/src/views/MentorDetail.vue index 8ebd693..ba8a6e5 100644 --- a/src/views/MentorDetail.vue +++ b/src/views/MentorDetail.vue @@ -125,6 +125,12 @@ import MentorQrCodeDialog from '@/components/MentorQrCodeDialog.vue' const router = useRouter() const route = useRoute() +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + /** 导师 ID,从路由参数获取(字符串,避免大数精度丢失) */ const mentorId = route.params.id as string diff --git a/src/views/Profile.vue b/src/views/Profile.vue index 70f6cd2..c23b9dd 100644 --- a/src/views/Profile.vue +++ b/src/views/Profile.vue @@ -55,6 +55,12 @@ import type { SaveEducationItem, SaveWorkItem, SaveProjectItem, SaveCompetitionI const router = useRouter() const store = useStore() +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + // ==================== 全屏加载状态 ==================== /** 全屏加载是否显示 */ const fullLoading = ref(false) diff --git a/src/views/Resume.vue b/src/views/Resume.vue index 04ab477..8d598c1 100644 --- a/src/views/Resume.vue +++ b/src/views/Resume.vue @@ -142,6 +142,12 @@ import StepProgressOverlay from '@/components/StepProgressOverlay.vue' const router = useRouter() +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + // ==================== 全屏加载状态 ==================== /** 全屏加载是否显示 */ const fullLoading = ref(false) diff --git a/src/views/ResumeDetail.vue b/src/views/ResumeDetail.vue index c1a41e0..080eff0 100644 --- a/src/views/ResumeDetail.vue +++ b/src/views/ResumeDetail.vue @@ -639,6 +639,12 @@ import StepProgressOverlay from '@/components/StepProgressOverlay.vue' // ==================== Store 实例 ==================== const store = useStore() +// 声明友盟统计 _czc 对象 +const _czc: any[] = (window as any)._czc || []; +(window as any)._czc = _czc; +// 绑定 siteid,请用您的 siteid 替换下方 "XXXXXXXX" 部分 +_czc.push(["_setAccount", "1281490571"]); + // ==================== Tab 导航栏相关 ==================== /** 简历详情 Tab 导航列表 */