From 14c7660770a7878f3f9246a3e11464bd52a85ece Mon Sep 17 00:00:00 2001 From: xuxin <15279969124@163.com> Date: Fri, 15 May 2026 19:02:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E4=BC=9A=E5=91=98=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 2 + src/api/agent.ts | 26 +- src/api/jobs.ts | 27 + src/api/message.ts | 61 + src/assets/images/bule-flash.png | Bin 0 -> 543 bytes .../components/agent-apply-progress.scss | 317 +++++ src/assets/styles/components/ai-chat.scss | 7 +- .../components/job-resume-custom-dialog.scss | 2 +- .../components/job-resume-template.scss | 11 +- .../styles/components/member-dialog.scss | 1186 +++++++++++++++-- src/assets/styles/components/side-nav.scss | 113 ++ src/assets/styles/index.scss | 1 + src/assets/styles/pages/agent.scss | 164 +++ src/assets/styles/pages/home.scss | 9 + src/assets/styles/variables.scss | 12 +- src/components/AgentApplyProgress.vue | 177 +++ src/components/AgentChatJobList.vue | 6 +- src/components/AgentTaskListDropdown.vue | 126 ++ src/components/AiChat.vue | 2 +- src/components/JobResumeCustomDialog.vue | 101 +- src/components/JobResumeTemplate.vue | 42 +- src/components/MemberDialog.vue | 535 ++++++-- src/components/SettingsDialog.vue | 10 +- src/components/SideNav.vue | 171 ++- src/router/index.ts | 25 +- src/utils/intention.ts | 57 + src/utils/resumeExport.ts | 5 +- src/views/Agent.vue | 658 +++++++-- src/views/Home.vue | 34 +- src/views/Jobs.vue | 2 +- vite.config.ts | 3 +- 31 files changed, 3496 insertions(+), 396 deletions(-) create mode 100644 src/api/message.ts create mode 100644 src/assets/images/bule-flash.png create mode 100644 src/assets/styles/components/agent-apply-progress.scss create mode 100644 src/components/AgentApplyProgress.vue create mode 100644 src/components/AgentTaskListDropdown.vue create mode 100644 src/utils/intention.ts diff --git a/components.d.ts b/components.d.ts index 7ea8728..b087363 100644 --- a/components.d.ts +++ b/components.d.ts @@ -11,10 +11,12 @@ export {} /* prettier-ignore */ declare module 'vue' { export interface GlobalComponents { + AgentApplyProgress: typeof import('./src/components/AgentApplyProgress.vue')['default'] AgentChatJobList: typeof import('./src/components/AgentChatJobList.vue')['default'] AgentMatchJobAdd: typeof import('./src/components/AgentMatchJobAdd.vue')['default'] AgentSettingsPanel: typeof import('./src/components/AgentSettingsPanel.vue')['default'] AgentSetupWizard: typeof import('./src/components/AgentSetupWizard.vue')['default'] + AgentTaskListDropdown: typeof import('./src/components/AgentTaskListDropdown.vue')['default'] AiChat: typeof import('./src/components/AiChat.vue')['default'] AiThinkingIndicator: typeof import('./src/components/tools/AiThinkingIndicator.vue')['default'] ElButton: typeof import('element-plus/es')['ElButton'] diff --git a/src/api/agent.ts b/src/api/agent.ts index a1e6140..191b21c 100644 --- a/src/api/agent.ts +++ b/src/api/agent.ts @@ -131,8 +131,8 @@ export function fetchAgentRecommend(params: AgentRecommendParams = {}) { /** 岗位投递请求参数 */ export interface JobApplyParams { - /** 岗位 ID */ - jobId: number + /** 岗位 ID(支持字符串避免大整数精度丢失) */ + jobId: number | string /** 投递状态:-1=待投递 0=已投递 1=面试中 2=有Offer 3=未通过 4=已结束,null=取消 */ status: number | null } @@ -278,3 +278,25 @@ export interface AgentChatResponse { export function sendAgentChat(params: AgentChatParams) { return aiService.post }>('/job-agent/chat', params).then(res => res.data) } + +// ==================== 求职助手优化简历(Python 后端) ==================== + +/** 优化简历请求参数 */ +export interface OptimizeResumeParams { + /** 简历 ID */ + resumeId: string | number + /** 岗位 ID */ + jobId: string | number +} + +/** + * 求职助手岗位优化简历 + * POST /job-agent/optimize-resume + */ +export function optimizeAgentResume(params: OptimizeResumeParams) { + return aiService.post('/job-agent/optimize-resume', params, { + headers: { + Token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOjIwMzUyNTM4OTg5MTk4NzA0NjUsInV1SWQiOiI2MmQ5MDE2NTcyNzY0ZmNjODNjZTIyYjRjODA5ZmU5MiJ9.eE-Q5rio5J5kxkS-XPYdmk-1Tgvg6kj6NGoKWMFNU14', + }, + }).then(res => res.data) +} diff --git a/src/api/jobs.ts b/src/api/jobs.ts index e696a01..f8febdd 100644 --- a/src/api/jobs.ts +++ b/src/api/jobs.ts @@ -220,6 +220,33 @@ export function fetchApplyList(params: ApplyListParams = {}) { }) } +// ==================== 求职助手任务列表 ==================== + +/** 求职助手任务列表请求参数 */ +export interface AgentTaskListParams { + /** 当前页码,从1开始,默认1 */ + pageNum?: number + /** 每页条数,默认10 */ + pageSize?: number + /** 搜索关键字 */ + keyword?: string + /** tab类型 1=进行中(待投递) 2=已完成(已投递及之后状态),默认1 */ + tab?: number +} + +/** + * 获取求职助手任务列表 + * POST /job/agent/task/list + */ +export function fetchAgentTaskList(params: AgentTaskListParams = {}) { + return request.post>('/job/agent/task/list', { + pageNum: params.pageNum ?? 1, + pageSize: params.pageSize ?? 10, + tab: params.tab ?? 1, + ...(params.keyword ? { keyword: params.keyword } : {}), + }) +} + // ==================== 投递统计 ==================== /** 投递统计结果 */ diff --git a/src/api/message.ts b/src/api/message.ts new file mode 100644 index 0000000..7066849 --- /dev/null +++ b/src/api/message.ts @@ -0,0 +1,61 @@ +import request from '@/utils/request' + +/** 站内信消息项 */ +export interface MessageDto { + /** 消息ID */ + id: number + /** 消息类型 1=系统消息 2=运营消息 3=订单消息 */ + type: number + /** 消息标题 */ + title: string + /** 消息内容 */ + content: string + /** 关联业务类型 */ + bizType: string + /** 关联业务ID */ + bizId: number + /** 是否已读 */ + read: boolean + /** 创建时间 */ + createTime: { seconds: number; nanos: number } +} + +/** 分页响应结构 */ +export interface MessagePageResult { + pageNum: number + pageSize: number + total: number + list: MessageDto[] +} + +/** 请求参数 */ +export interface MessageListParams { + pageNum?: number + pageSize?: number + keyword?: string + type?: number | null +} + +/** + * 获取站内信消息列表(分页) + * POST /message/list + */ +export function fetchMessageList(params: MessageListParams) { + return request.get('/message/list', { params }) +} + +/** + * 获取未读消息数量 + * GET /message/unread-count + */ +export function fetchUnreadCount() { + return request.get('/message/unread-count') +} + +/** + * 标记消息已读 + * POST /message/read/{messageId} + */ +export function markMessageRead(messageId: number | string) { + return request.post(`/message/read/${messageId}`) +} diff --git a/src/assets/images/bule-flash.png b/src/assets/images/bule-flash.png new file mode 100644 index 0000000000000000000000000000000000000000..d53c12131cdeb05d518575a5496cef396d592b02 GIT binary patch literal 543 zcmV+)0^t3LP)R7i>4*S}K2FdPT)Bo;xzbI6_M0qo=eldf+5S>1Ht3FJ-( zU0q%9j@5}l9|5k90F#~J0qRf|;ZUimLum^&P4ep%2Y<(1|IqNcenXNLZ}0A-6&G1G z@Q;kOQe`JYGtTJO`4K{xyp2|3cvW-!bm!H~*~uYB$gqd<>%m!hRde##SUglVff)%v zvjBz=Fzi8YM%o<|+ueK&&ZrO|j;qsLZE!~4U+$OB`N3x0>g8aF0E7?@HabBmj1(Yj zsTY*Y;EYb1SE6rVL8Tg;(dq3aXH-PYgDO~kO#}a4KLWt3DF(1SE8>g_R?o19#Bq~` z2H;11uB=kKQ*3vWS!vvXE`SjFsGlYKW72FWBg#;*@mW939VoRsvB4P)?kmSKUI)P- zog2h)^~Y2+L?lHVw|vu@??-3##}qa4fFwkvG|K105+F+Rr9;HSFrk! h85(G0uD^I!`vI&Q&E#>wtfc?|002ovPDHLkV1krM?uq~a literal 0 HcmV?d00001 diff --git a/src/assets/styles/components/agent-apply-progress.scss b/src/assets/styles/components/agent-apply-progress.scss new file mode 100644 index 0000000..eac8870 --- /dev/null +++ b/src/assets/styles/components/agent-apply-progress.scss @@ -0,0 +1,317 @@ +@use '../variables' as *; + +// 申请进度消息组件 +.agent-apply-progress { + background: $bg-middle; + border-radius: 0.12rem; + padding: 0.2rem; + + // 顶部标题栏 + &__header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 0.16rem; + } + + &__title { + font-size: 0.15rem; + font-weight: 600; + color: $text-dark; + + // 可点击状态(暂停/恢复) + &--clickable { + cursor: pointer; + color: $accent; + + &:hover { + opacity: 0.8; + } + } + } + + &__cancel { + font-size: 0.13rem; + color: $text-middle; + cursor: pointer; + + &:hover { + color: $text-dark; + } + } + + // 岗位信息卡片 + &__job-card { + display: flex; + align-items: center; + gap: 0.12rem; + background: $bg-white; + border-radius: 0.1rem; + padding: 0.14rem 0.16rem; + margin-bottom: 0.2rem; + } + + &__job-icon { + width: 0.36rem; + height: 0.36rem; + border-radius: 0.08rem; + background: $bg-main; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + color: $text-middle; + + svg { + width: 0.2rem; + height: 0.2rem; + } + } + + &__job-info { + min-width: 0; + } + + &__job-company { + font-size: 0.14rem; + font-weight: 600; + color: $text-dark; + line-height: 1.4; + } + + &__job-title { + font-size: 0.12rem; + color: $text-middle; + line-height: 1.4; + } + + // 步骤列表 + &__steps { + display: flex; + flex-direction: column; + gap: 0.14rem; + } + + &__step { + display: flex; + align-items: flex-start; + gap: 0.1rem; + flex-wrap: wrap; + } + + // 勾选框 + &__step-check { + width: 0.18rem; + height: 0.18rem; + border: 1.5px solid $text-light; + border-radius: 0.03rem; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + margin-top: 0.01rem; + + svg { + width: 0.12rem; + height: 0.12rem; + } + + // 已完成态 + &--done { + border-color: $text-dark; + background: $text-dark; + color: $bg-white; + } + } + + &__step-label { + font-size: 0.14rem; + color: $text-dark; + line-height: 0.2rem; + } + + // 步骤展开内容 + &__step-content { + width: 100%; + margin-top: 0.08rem; + padding-left: 0.28rem; + } + + // 第2步:简历确认区域 + &__resume-confirm { + display: flex; + align-items: center; + justify-content: space-between; + background: $bg-white; + border-radius: 0.08rem; + padding: 0.1rem 0.14rem; + } + + &__resume-file { + display: flex; + align-items: center; + gap: 0.08rem; + } + + &__file-icon { + width: 0.18rem; + height: 0.18rem; + color: $text-dark; + } + + &__resume-name { + font-size: 0.13rem; + color: $text-dark; + } + + &__confirm-btn { + height: 0.28rem; + padding: 0 0.16rem; + background: $btn-dark; + color: $bg-white; + border: none; + border-radius: 0.14rem; + font-size: 0.12rem; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: $btn-dark-hover; + } + + &:disabled { + background: $text-light; + cursor: not-allowed; + } + } + + // 第3步:投递操作区域 + &__apply-area { + background: $bg-white; + border-radius: 0.08rem; + padding: 0.14rem 0.16rem; + } + + &__apply-desc { + font-size: 0.12rem; + color: $text-middle; + line-height: 1.8; + margin: 0; + } + + &__apply-actions { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 0.1rem; + margin-top: 0.14rem; + } + + &__skip-btn { + font-size: 0.12rem; + color: $text-middle; + cursor: pointer; + text-decoration: underline; + + &:hover { + color: $text-dark; + } + + &--disabled { + color: $text-light; + cursor: not-allowed; + pointer-events: none; + } + } + + &__applied-btn { + height: 0.28rem; + padding: 0 0.14rem; + background: $btn-dark; + color: $bg-white; + border: none; + border-radius: 0.14rem; + font-size: 0.12rem; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: $btn-dark-hover; + } + + &:disabled { + background: $text-light; + cursor: not-allowed; + } + } + + &__goto-btn { + height: 0.28rem; + padding: 0 0.14rem; + background: $btn-dark; + color: $bg-white; + border: none; + border-radius: 0.14rem; + font-size: 0.12rem; + cursor: pointer; + transition: all 0.2s; + + &:hover { + background: $btn-dark-hover; + } + + &:disabled { + background: $text-light; + cursor: not-allowed; + } + } +} + +// 右侧面板:简历生成进度 +.agent-resume-generating { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + padding: 0.4rem; + + // 进度条容器 + &__progress-bar { + width: 100%; + max-width: 3rem; + height: 0.04rem; + background: $border-color; + border-radius: 0.02rem; + overflow: hidden; + margin-bottom: 0.2rem; + } + + &__progress-fill { + height: 100%; + background: $text-dark; + border-radius: 0.02rem; + transition: width 0.3s ease; + } + + &__title { + font-size: 0.18rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.1rem; + } + + &__hint { + display: flex; + align-items: center; + gap: 0.06rem; + font-size: 0.12rem; + color: $text-middle; + } + + &__hint-icon { + width: 0.14rem; + height: 0.14rem; + color: $accent; + } +} diff --git a/src/assets/styles/components/ai-chat.scss b/src/assets/styles/components/ai-chat.scss index 643b9c1..a936e18 100644 --- a/src/assets/styles/components/ai-chat.scss +++ b/src/assets/styles/components/ai-chat.scss @@ -17,10 +17,11 @@ display: flex; align-items: center; justify-content: space-between; - background: linear-gradient(90deg, #94EF9E , #53D9C8 ); + background: #0F172B; color: #fff; - padding: 0.1rem 0.16rem; - font-size: 0.13rem; + padding: 0.12rem 0.18rem; + font-size: 0.15rem; + font-weight: 600; cursor: pointer; border-radius: 0.2rem; margin: 0.15rem; diff --git a/src/assets/styles/components/job-resume-custom-dialog.scss b/src/assets/styles/components/job-resume-custom-dialog.scss index 10ca4b1..4d779cc 100644 --- a/src/assets/styles/components/job-resume-custom-dialog.scss +++ b/src/assets/styles/components/job-resume-custom-dialog.scss @@ -275,7 +275,7 @@ align-items: center; justify-content: center; gap: 0.5rem; - margin-bottom: 0.32rem; + margin-bottom: 0.02rem; } &__step { diff --git a/src/assets/styles/components/job-resume-template.scss b/src/assets/styles/components/job-resume-template.scss index 129b651..8f879bd 100644 --- a/src/assets/styles/components/job-resume-template.scss +++ b/src/assets/styles/components/job-resume-template.scss @@ -81,17 +81,11 @@ display: flex; align-items: flex-start; justify-content: space-between; - margin-bottom: 4px; + margin-bottom: 2px; break-inside: avoid; page-break-inside: avoid; } - &__item-left { - display: flex; - flex-direction: column; - gap: 2px; - } - &__item-main { font-size: 13px; font-weight: 600; @@ -121,7 +115,8 @@ &__item-desc { font-size: 12px; color: $text-dark; - line-height: 1.5; + line-height: 1.7; + margin-top: 2px; } // 描述列表 diff --git a/src/assets/styles/components/member-dialog.scss b/src/assets/styles/components/member-dialog.scss index 510ff3e..b004b4d 100644 --- a/src/assets/styles/components/member-dialog.scss +++ b/src/assets/styles/components/member-dialog.scss @@ -1,4 +1,4 @@ -// 会员购买弹窗样式 +// 会员弹窗样式 @use '../variables' as *; // 遮罩层 @@ -16,11 +16,12 @@ background: $bg-white; border-radius: 0.2rem; width: 8.4rem; - max-height: 90vh; - overflow-y: auto; - padding: 0.36rem 0.4rem; + height: 80vh; position: relative; box-shadow: 0 0.1rem 0.4rem rgba(0, 0, 0, 0.15); + display: flex; + flex-direction: column; + overflow: hidden; // 关闭按钮 &__close { @@ -31,28 +32,108 @@ color: $text-light; cursor: pointer; transition: color 0.2s; - z-index: 1; + z-index: 10; &:hover { color: $text-dark; } } - // 顶部标语 - &__slogan { - text-align: center; - font-size: 0.22rem; - font-weight: 700; - color: $btn-dark; - margin-bottom: 0.3rem; - letter-spacing: 0.01rem; + // ==================== 介绍步骤一 ==================== + &__intro-step1 { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 0.4rem; + background: #F0F8F8; + border-radius: 0.2rem; } - // ==================== 套餐卡片区域 ==================== + &__intro-title { + font-size: 0.36rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.2rem; + text-align: center; + } + + &__intro-subtitle { + font-size: 0.16rem; + color: $text-middle; + margin-bottom: 0.5rem; + text-align: center; + } + + &__intro-btn { + display: flex; + align-items: center; + gap: 0.08rem; + padding: 0.16rem 0.5rem; + background: #1A1A2E; + color: $bg-white; + border: none; + border-radius: 0.5rem; + font-size: 0.18rem; + font-weight: 600; + cursor: pointer; + transition: background 0.2s; + + &:hover { + background: #2E3142; + } + } + + &__intro-btn-icon { + color: $accent; + font-size: 0.2rem; + } + + // ==================== 介绍步骤二 ==================== + &__intro-step2 { + flex: 1; + overflow-y: auto; + padding: 0.36rem 0.5rem; + display: flex; + flex-direction: column; + align-items: center; + } + + &__step2-badge { + display: inline-flex; + align-items: center; + gap: 0.04rem; + padding: 0.06rem 0.16rem; + background: #F0F8F8; + color: $accent; + border-radius: 0.2rem; + font-size: 0.12rem; + font-weight: 600; + margin-bottom: 0.16rem; + } + + &__step2-title { + font-size: 0.32rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.12rem; + text-align: center; + } + + &__step2-subtitle { + font-size: 0.14rem; + color: $text-middle; + margin-bottom: 0.3rem; + text-align: center; + } + + // ==================== 套餐卡片(介绍页) ==================== &__plans { display: flex; gap: 0.2rem; - margin-bottom: 0.32rem; + width: 100%; + margin-bottom: 0.24rem; } &__plan-card { @@ -65,25 +146,16 @@ display: flex; flex-direction: column; align-items: flex-start; + position: relative; &:hover { border-color: $accent; box-shadow: 0 0.04rem 0.16rem rgba(79, 194, 201, 0.12); } - // 选中态 — 中间卡片高亮 &--active { - border-color: $btn-dark; - background: $btn-dark; - color: $bg-white; - box-shadow: 0 0.06rem 0.24rem rgba(26, 26, 46, 0.2); - - .member-dialog__plan-name, - .member-dialog__plan-original, - .member-dialog__plan-price-num, - .member-dialog__plan-price-unit { - color: $bg-white; - } + border-color: $accent; + box-shadow: 0 0.04rem 0.2rem rgba(79, 194, 201, 0.2); .member-dialog__plan-btn { background: $accent; @@ -95,37 +167,50 @@ border-color: $accent-hover; } } - - .member-dialog__plan-discount { - background: rgba(255, 255, 255, 0.2); - color: $bg-white; - } } } - &__plan-name { - font-size: 0.15rem; + &__plan-recommend { + position: absolute; + top: -0.12rem; + left: 50%; + transform: translateX(-50%); + white-space: nowrap; + background: $accent; + color: $bg-white; + font-size: 0.1rem; + padding: 0.03rem 0.12rem; + border-radius: 0.1rem; font-weight: 600; - color: $text-dark; + } + + &__plan-tag { + font-size: 0.1rem; + color: $text-middle; margin-bottom: 0.06rem; } - &__plan-original { - font-size: 0.11rem; - color: $text-light; - text-decoration: line-through; - margin-bottom: 0.08rem; + &__plan-name { + font-size: 0.16rem; + font-weight: 600; + color: $text-dark; + margin-bottom: 0.1rem; } &__plan-price { display: flex; align-items: baseline; - gap: 0.02rem; - margin-bottom: 0.16rem; + margin-bottom: 0.06rem; + } + + &__plan-price-symbol { + font-size: 0.16rem; + font-weight: 700; + color: $text-dark; } &__plan-price-num { - font-size: 0.28rem; + font-size: 0.36rem; font-weight: 700; color: $text-dark; line-height: 1; @@ -133,18 +218,14 @@ &__plan-price-unit { font-size: 0.12rem; - color: $text-dark; + color: $text-middle; + margin-left: 0.04rem; } - &__plan-discount { - font-size: 0.1rem; - background: $theme-color; + &__plan-per-month { + font-size: 0.11rem; color: $accent; - border-radius: 0.1rem; - padding: 0.02rem 0.08rem; - margin-left: 0.06rem; - font-weight: 600; - white-space: nowrap; + margin-bottom: 0.14rem; } &__plan-btn { @@ -156,87 +237,970 @@ cursor: pointer; transition: all 0.2s; border: 1px solid $border-color; - background: $bg-main; + background: $bg-white; color: $text-dark; text-align: center; + margin-top: auto; &:hover { border-color: $accent; color: $accent; - background: $theme-color; } } - // ==================== 权益对比区域 ==================== - &__benefits { + // ==================== 提示信息 ==================== + &__tip { + width: 100%; + background: #FFFBF0; + border: 1px solid #FFE8B0; + border-radius: 0.1rem; + padding: 0.14rem 0.18rem; display: flex; - gap: 0.16rem; - } - - &__benefit-col { - flex: 1; - border: 1px solid $border-color; - border-radius: 0.12rem; - padding: 0.2rem 0.18rem; - display: flex; - flex-direction: column; - gap: 0.14rem; - - // 中间列特殊样式 - &--center { - border-color: rgba(79, 194, 201, 0.3); - background: linear-gradient(180deg, $theme-color 0%, $bg-white 100%); - } - } - - &__benefit-title { - font-size: 0.14rem; - font-weight: 600; - color: $text-dark; - padding-bottom: 0.1rem; - border-bottom: 1px solid $border-color; - - // 会员权益标题强调色 - &--accent { - color: $accent; - border-bottom-color: rgba(79, 194, 201, 0.3); - } - } - - &__benefit-item { - font-size: 0.12rem; - color: #555; - display: flex; - align-items: center; + align-items: flex-start; gap: 0.08rem; - line-height: 1.6; + margin-bottom: 0.3rem; + font-size: 0.12rem; } - &__benefit-badge { - display: inline-flex; - align-items: center; - justify-content: center; - min-width: 0.36rem; - height: 0.2rem; - background: $btn-dark; - color: $bg-white; - border-radius: 0.04rem; - font-size: 0.1rem; - font-weight: 600; + &__tip-icon { flex-shrink: 0; } - &__benefit-other { + &__tip-label { + font-weight: 600; + color: $text-dark; + white-space: nowrap; + } + + &__tip-text { + color: $danger; + } + + // ==================== 底部内容行 ==================== + &__content-row { + width: 100%; + display: flex; + gap: 0.3rem; + margin-bottom: 0.3rem; + } + + &__abilities { + flex: 1; + } + + &__abilities-title { + font-size: 0.16rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.24rem; + } + + &__ability-item { + display: flex; + align-items: flex-start; + gap: 0.12rem; + margin-bottom: 0.28rem; + } + + &__ability-icon { + font-size: 0.16rem; + flex-shrink: 0; + line-height: 1.4; + } + + &__ability-text { + font-size: 0.14rem; + color: $text-dark; + line-height: 1.4; + font-weight: 500; + } + + &__compare { + flex: 1; + } + + &__compare-title { + font-size: 0.16rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.16rem; + } + + &__compare-table { + width: 100%; + border-collapse: collapse; font-size: 0.12rem; + + th, td { + padding: 0.12rem 0.1rem; + text-align: left; + border-bottom: 1px solid $border-color; + } + + th { + font-weight: 600; + color: $text-middle; + font-size: 0.11rem; + } + } + + &__compare-th-pro { + color: $accent !important; + } + + &__compare-free { + color: $text-middle; + } + + &__compare-pro { + color: $accent; + font-weight: 600; + } + + &__compare-footer { + display: flex; + gap: 0.24rem; + margin-top: 0.16rem; + font-size: 0.11rem; color: $text-light; - margin-top: auto; - padding-top: 0.12rem; + } + + // ==================== 用户评价 ==================== + &__testimonial { + width: 100%; + display: flex; + gap: 0.16rem; + padding: 0.2rem; + background: $bg-main; + border-radius: 0.12rem; + margin-bottom: 0.2rem; + } + + &__testimonial-avatar { + width: 0.48rem; + height: 0.48rem; + border-radius: 50%; + overflow: hidden; + flex-shrink: 0; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + } + + &__testimonial-content { + flex: 1; + } + + &__testimonial-stars { + color: #F5A623; + font-size: 0.14rem; + margin-bottom: 0.08rem; + } + + &__testimonial-text { + font-size: 0.12rem; + color: $text-dark; + line-height: 1.8; + margin-bottom: 0.1rem; + } + + &__testimonial-author { + font-size: 0.11rem; + } + + &__testimonial-name { + font-weight: 600; + color: $text-dark; + } + + &__testimonial-desc { + color: $accent; + margin-left: 0.04rem; + } + + + // ==================== 下单步骤通用 ==================== + &__order { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + } + + &__order-header { + display: flex; + align-items: center; + padding: 0.2rem 0.3rem; + border-bottom: 1px solid $border-color; + flex-shrink: 0; + } + + &__order-back { + font-size: 0.14rem; + color: $text-middle; + cursor: pointer; + white-space: nowrap; + min-width: 1.2rem; + + &:hover { + color: $text-dark; + } + } + + // ==================== 步骤条 ==================== + &__steps { + display: flex; + align-items: center; + justify-content: center; + flex: 1; + gap: 0.08rem; + } + + &__step { + display: flex; + align-items: center; + gap: 0.06rem; + } + + &__step-num { + width: 0.24rem; + height: 0.24rem; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 0.11rem; + font-weight: 600; + background: $bg-main; + color: $text-middle; + } + + &__step-label { + font-size: 0.12rem; + color: $text-middle; + } + + &__step--active { + .member-dialog__step-num { + background: $accent; + color: $bg-white; + } + + .member-dialog__step-label { + color: $text-dark; + font-weight: 600; + } + } + + &__step--done { + .member-dialog__step-num { + background: $accent; + color: $bg-white; + } + + .member-dialog__step-label { + color: $accent; + } + } + + &__step-line { + width: 0.6rem; + height: 2px; + background: $border-color; + + &--done { + background: $accent; + } + } + + // ==================== 下单步骤一:主体 ==================== + &__order-body { + flex: 1; + display: flex; + overflow: hidden; + } + + &__order-left { + flex: 1; + overflow-y: auto; + padding: 0.3rem; + } + + &__order-right { + width: 2.8rem; + padding: 0.3rem 0.24rem; + background: $bg-main; + overflow-y: auto; + flex-shrink: 0; + } + + &__order-title { + font-size: 0.24rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.1rem; + } + + &__order-desc { + font-size: 0.13rem; + color: $text-middle; + margin-bottom: 0.28rem; + line-height: 1.6; + } + + // ==================== 下单套餐选择卡片 ==================== + &__order-plans { + display: flex; + gap: 0.16rem; + margin-bottom: 0.3rem; + } + + &__order-plan-card { + flex: 1; + border: 1px solid $border-color; + border-radius: 0.12rem; + padding: 0.2rem 0.16rem; + cursor: pointer; + transition: all 0.2s; + position: relative; + display: flex; + align-items: flex-start; + gap: 0.12rem; + + &:hover { + border-color: $accent; + } + + &--active { + border-color: $accent; + background: rgba(79, 194, 201, 0.03); + } + } + + &__order-plan-badge { + position: absolute; + top: -0.1rem; + left: 50%; + transform: translateX(-50%); + background: $accent; + color: $bg-white; + font-size: 0.09rem; + padding: 0.02rem 0.1rem; + border-radius: 0.08rem; + font-weight: 600; + white-space: nowrap; + } + + &__order-plan-radio { + width: 0.18rem; + height: 0.18rem; + border-radius: 50%; + border: 2px solid $border-color; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + margin-top: 0.02rem; + + .member-dialog__order-plan-card--active & { + border-color: $accent; + } + } + + &__order-plan-radio-inner { + width: 0.1rem; + height: 0.1rem; + border-radius: 50%; + background: $accent; + } + + &__order-plan-info { + flex: 1; + } + + &__order-plan-name { + font-size: 0.14rem; + font-weight: 600; + color: $text-dark; + margin-bottom: 0.06rem; + } + + &__order-plan-price { + display: flex; + align-items: baseline; + margin-bottom: 0.06rem; + } + + &__order-plan-price-symbol { + font-size: 0.14rem; + font-weight: 700; + color: $text-dark; + } + + &__order-plan-price-num { + font-size: 0.28rem; + font-weight: 700; + color: $text-dark; + line-height: 1; + } + + &__order-plan-price-unit { + font-size: 0.11rem; + color: $text-middle; + margin-left: 0.03rem; + } + + &__order-plan-desc { + font-size: 0.1rem; + color: $text-middle; + line-height: 1.5; + } + + // ==================== 支付方式 ==================== + &__order-payment { + margin-bottom: 0.28rem; + } + + &__order-payment-title { + font-size: 0.16rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.16rem; + } + + &__order-payment-methods { + display: flex; + gap: 0.16rem; + margin-bottom: 0.16rem; + } + + &__order-payment-item { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + gap: 0.08rem; + padding: 0.16rem; + border: 1px solid $border-color; + border-radius: 0.1rem; + cursor: pointer; + transition: all 0.2s; + + &:hover { + border-color: $accent; + } + + &--active { + border-color: $accent; + background: rgba(79, 194, 201, 0.05); + } + } + + &__order-payment-icon { + font-size: 0.2rem; + } + + &__order-payment-name { + font-size: 0.13rem; + color: $text-dark; + } + + &__order-payment-hint { + text-align: center; + padding: 0.14rem; + background: $bg-main; + border-radius: 0.08rem; + font-size: 0.12rem; + color: $text-middle; + margin-bottom: 0.1rem; + } + + &__order-payment-safe { + font-size: 0.11rem; + color: $text-light; + } + + // ==================== 保障标签 ==================== + &__order-guarantees { + display: flex; + gap: 0.16rem; + margin-bottom: 0.3rem; + padding: 0.14rem 0; + border-top: 1px solid $border-color; + border-bottom: 1px solid $border-color; + } + + &__order-guarantee-item { + font-size: 0.12rem; + color: $text-middle; + display: flex; + align-items: center; + gap: 0.04rem; + } + + // ==================== 常见问题 ==================== + &__order-faq { + margin-bottom: 0.2rem; + } + + &__order-faq-title { + font-size: 0.16rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.16rem; + } + + &__order-faq-item { + border: 1px solid $border-color; + border-radius: 0.1rem; + padding: 0.16rem; + margin-bottom: 0.1rem; + cursor: pointer; + transition: background 0.2s; + + &:hover { + background: $bg-main; + } + } + + &__order-faq-question { + display: flex; + align-items: center; + justify-content: space-between; + font-size: 0.13rem; + font-weight: 600; + color: $text-dark; + } + + &__order-faq-arrow { + font-size: 0.16rem; + color: $text-light; + transition: transform 0.2s; + transform: rotate(90deg); + + &--open { + transform: rotate(-90deg); + } + } + + &__order-faq-answer { + font-size: 0.12rem; + color: $text-middle; + margin-top: 0.1rem; + line-height: 1.6; + } + + // ==================== 右侧订单摘要 ==================== + &__order-summary { + background: $bg-white; + border-radius: 0.12rem; + padding: 0.24rem; + } + + &__order-summary-title { + font-size: 0.16rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.2rem; + } + + &__order-summary-row { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin-bottom: 0.12rem; + } + + &__order-summary-plan { + font-size: 0.14rem; + font-weight: 600; + color: $text-dark; + } + + &__order-summary-duration { + font-size: 0.11rem; + color: $text-middle; + margin-top: 0.02rem; + } + + &__order-summary-price { + font-size: 0.14rem; + color: $text-dark; + } + + &__order-summary-divider { + height: 1px; + background: $border-color; + margin: 0.14rem 0; + } + + &__order-summary-label { + font-size: 0.14rem; + font-weight: 600; + color: $text-dark; + } + + &__order-summary-total { + font-size: 0.22rem; + font-weight: 700; + color: $accent; + } + + &__order-summary-agree { + display: flex; + align-items: flex-start; + gap: 0.08rem; + margin: 0.16rem 0; + font-size: 0.1rem; + color: $text-middle; + line-height: 1.5; + + a { + color: $accent; + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } + } + + // 自定义复选框 + &__order-checkbox { + position: relative; + display: flex; + align-items: center; + flex-shrink: 0; + + input { + position: absolute; + opacity: 0; + width: 0; + height: 0; + + &:checked + .member-dialog__order-checkbox-mark { + background: $accent; + border-color: $accent; + + &::after { + display: block; + } + } + } + } + + &__order-checkbox-mark { + width: 0.16rem; + height: 0.16rem; + border: 2px solid $border-color; + border-radius: 0.03rem; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.2s; + + &::after { + content: '✓'; + display: none; + color: $bg-white; + font-size: 0.1rem; + font-weight: 700; + } + } + + &__order-submit-btn { + width: 100%; + padding: 0.14rem; + background: $accent; + color: $bg-white; + border: none; + border-radius: 0.08rem; + font-size: 0.14rem; + font-weight: 600; + cursor: pointer; + transition: background 0.2s; + + &:hover { + background: $accent-hover; + } + + &:disabled { + background: $border-color; + color: $text-light; + cursor: not-allowed; + } + } + + &__order-submit-tip { + font-size: 0.1rem; + color: $text-light; + text-align: center; + margin-top: 0.1rem; + } + + // 你将获得 + &__order-benefits { + margin-top: 0.24rem; + padding-top: 0.2rem; border-top: 1px solid $border-color; } - &__benefit-highlight { + &__order-benefits-title { + font-size: 0.13rem; + font-weight: 600; + color: $text-dark; + margin-bottom: 0.14rem; + } + + &__order-benefits-item { + display: flex; + align-items: center; + gap: 0.08rem; + font-size: 0.12rem; + color: $text-dark; + margin-bottom: 0.1rem; + } + + &__order-benefits-check { + color: $accent; + font-weight: 700; + } + + // ==================== 下单步骤二:确认支付 ==================== + &__order-confirming { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + padding: 0.4rem; + background: #F0F8F8; + } + + &__order-confirming-card { + background: $bg-white; + border-radius: 0.16rem; + padding: 0.6rem 0.8rem; + text-align: center; + box-shadow: 0 0.04rem 0.2rem rgba(0, 0, 0, 0.06); + } + + &__order-loading-spinner { + width: 0.5rem; + height: 0.5rem; + border: 3px solid #E8F8F8; + border-top-color: $accent; + border-radius: 50%; + margin: 0 auto 0.24rem; + animation: member-spin 1s linear infinite; + } + + @keyframes member-spin { + to { + transform: rotate(360deg); + } + } + + &__order-confirming-title { + font-size: 0.2rem; font-weight: 700; color: $text-dark; - margin-left: 0.12rem; + margin-bottom: 0.1rem; + } + + &__order-confirming-desc { + font-size: 0.13rem; + color: $text-middle; + } + + // ==================== 下单步骤三:支付成功 ==================== + &__order-success { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + padding: 0.4rem; + background: #F0F8F8; + } + + &__order-success-card { + background: $bg-white; + border-radius: 0.16rem; + padding: 0.5rem 0.8rem; + text-align: center; + box-shadow: 0 0.04rem 0.2rem rgba(0, 0, 0, 0.06); + min-width: 4rem; + } + + &__order-success-icon { + width: 0.6rem; + height: 0.6rem; + border-radius: 50%; + background: $accent; + color: $bg-white; + display: flex; + align-items: center; + justify-content: center; + font-size: 0.28rem; + font-weight: 700; + margin: 0 auto 0.24rem; + } + + &__order-success-title { + font-size: 0.22rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.12rem; + } + + &__order-success-desc { + font-size: 0.13rem; + color: $text-middle; + line-height: 1.6; + margin-bottom: 0.3rem; + } + + &__order-success-btn { + width: 100%; + padding: 0.14rem; + background: $accent; + color: $bg-white; + border: none; + border-radius: 0.08rem; + font-size: 0.14rem; + font-weight: 600; + cursor: pointer; + transition: background 0.2s; + margin-bottom: 0.12rem; + + &:hover { + background: $accent-hover; + } + } + + &__order-success-btn-secondary { + width: 100%; + padding: 0.14rem; + background: $bg-white; + color: $accent; + border: 1px solid $border-color; + border-radius: 0.08rem; + font-size: 0.14rem; + font-weight: 600; + cursor: pointer; + transition: all 0.2s; + + &:hover { + border-color: $accent; + } + } + + // ==================== 付款二维码遮罩层 ==================== + &__qrcode-overlay { + position: absolute; + inset: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 20; + border-radius: 0.2rem; + } + + &__qrcode-modal { + background: $bg-white; + border-radius: 0.16rem; + padding: 0.3rem 0.4rem; + text-align: center; + position: relative; + min-width: 3.2rem; + box-shadow: 0 0.1rem 0.4rem rgba(0, 0, 0, 0.15); + } + + &__qrcode-close { + position: absolute; + top: 0.12rem; + right: 0.16rem; + font-size: 0.16rem; + color: $text-light; + cursor: pointer; + + &:hover { + color: $text-dark; + } + } + + &__qrcode-title { + display: flex; + align-items: center; + justify-content: center; + gap: 0.06rem; + font-size: 0.13rem; + color: $accent; + font-weight: 600; + margin-bottom: 0.12rem; + } + + &__qrcode-title-icon { + font-size: 0.16rem; + } + + &__qrcode-subtitle { + font-size: 0.18rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.08rem; + } + + &__qrcode-desc { + font-size: 0.11rem; + color: $text-middle; + margin-bottom: 0.2rem; + line-height: 1.5; + } + + &__qrcode-image { + width: 1.8rem; + height: 1.8rem; + margin: 0 auto 0.16rem; + display: flex; + align-items: center; + justify-content: center; + } + + &__qrcode-placeholder { + width: 100%; + height: 100%; + background: $bg-main; + border: 1px dashed $border-color; + border-radius: 0.08rem; + // TODO: 替换为真实二维码 + } + + &__qrcode-amount { + font-size: 0.22rem; + font-weight: 700; + color: $text-dark; + margin-bottom: 0.2rem; + } + + &__qrcode-confirm-btn { + width: 100%; + padding: 0.12rem; + background: $accent; + color: $bg-white; + border: none; + border-radius: 0.08rem; + font-size: 0.14rem; + font-weight: 600; + cursor: pointer; + transition: background 0.2s; + + &:hover { + background: $accent-hover; + } } } diff --git a/src/assets/styles/components/side-nav.scss b/src/assets/styles/components/side-nav.scss index 13758c1..426c77a 100644 --- a/src/assets/styles/components/side-nav.scss +++ b/src/assets/styles/components/side-nav.scss @@ -151,6 +151,119 @@ color: $text-dark; } +// ==================== 消息通知弹窗(左右分栏) ==================== +.side-nav__message-dialog { + background: $bg-white; + border-radius: 0.12rem; + width: 8rem; + height: 6rem; + max-width: 90vw; + max-height: 90vh; + box-shadow: 0 0.04rem 0.2rem rgba(0, 0, 0, 0.15); + display: flex; + flex-direction: column; +} + +.side-nav__message-dialog-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.16rem 0.2rem; + border-bottom: 1px solid $border-color; + font-size: 0.16rem; + font-weight: 600; + color: $text-dark; + flex-shrink: 0; +} + +.side-nav__message-dialog-content { + display: flex; + flex: 1; + overflow: hidden; +} + +// 左侧消息列表 +.side-nav__message-list { + width: 2rem; + border-right: 1px solid $border-color; + overflow-y: auto; + flex-shrink: 0; +} + +.side-nav__message-list-item { + display: flex; + align-items: center; + padding: 0.12rem 0.14rem; + cursor: pointer; + border-bottom: 1px solid $border-color; + transition: background 0.2s; + + &:hover { + background: $bg-main; + } + + &--active { + background: $theme-color; + } +} + +.side-nav__message-list-title { + flex: 1; + font-size: 0.13rem; + color: $text-dark; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.side-nav__message-unread-dot { + width: 0.08rem; + height: 0.08rem; + border-radius: 50%; + background: $danger; + margin-left: 0.06rem; + flex-shrink: 0; +} + +.side-nav__message-list-loading, +.side-nav__message-list-empty { + padding: 0.16rem; + text-align: center; + font-size: 0.12rem; + color: $text-light; +} + +// 右侧消息详情 +.side-nav__message-detail { + flex: 1; + padding: 0.2rem; + overflow-y: auto; +} + +.side-nav__message-detail-title { + font-size: 0.16rem; + font-weight: 600; + color: $text-dark; + margin-bottom: 0.16rem; +} + +.side-nav__message-detail-content { + font-size: 0.14rem; + color: $text-dark; + line-height: 1.7; + white-space: pre-wrap; + word-break: break-word; +} + +.side-nav__message-detail-empty { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + font-size: 0.14rem; + color: $text-light; +} + // 反馈弹窗 .feedback-dialog { padding: 0.28rem 0.24rem; diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss index 6f42834..5cc650f 100644 --- a/src/assets/styles/index.scss +++ b/src/assets/styles/index.scss @@ -30,6 +30,7 @@ @use './components/resume-edit-name-dialog.scss'; @use './components/agent-chat-job-list.scss'; @use './components/agent-match-job-add.scss'; +@use './components/agent-apply-progress.scss'; @use './components/ai-thinking-indicator.scss'; // 全局样式(优先级最高) diff --git a/src/assets/styles/pages/agent.scss b/src/assets/styles/pages/agent.scss index ff5ef7c..cc331dd 100644 --- a/src/assets/styles/pages/agent.scss +++ b/src/assets/styles/pages/agent.scss @@ -836,6 +836,30 @@ height: calc(100vh - 0.6rem); margin-left: 0.2rem; max-width: 8rem; + overflow-y: auto; + } + + // 右侧简历预览容器 + &__right-resume { + background: $bg-white; + border-radius: 0.12rem; + padding: 0.24rem; + height: 100%; + overflow-y: auto; + + // 自定义滚动条 + &::-webkit-scrollbar { + width: 4px; + } + + &::-webkit-scrollbar-thumb { + background: $border-color; + border-radius: 2px; + } + + &::-webkit-scrollbar-track { + background: transparent; + } } // ==================== 顶部固定设置栏 ==================== @@ -909,6 +933,12 @@ &:hover { opacity: 0.85; } + + &:disabled { + background: $text-light; + cursor: not-allowed; + opacity: 0.7; + } } // 右侧工具按钮区 @@ -917,6 +947,140 @@ align-items: center; gap: 0.06rem; flex-shrink: 0; + position: relative; + } + + // 待投递列表下拉弹窗 + &__task-dropdown { + position: absolute; + top: 0.36rem; + right: 0; + width: 5.1rem; + background: $bg-white; + border-radius: 0.12rem; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12); + z-index: 100; + padding: 0.16rem; + } + + // Tab 切换 + &__task-tabs { + display: flex; + gap: 0.2rem; + margin-bottom: 0.14rem; + border-bottom: 1px solid $border-color; + padding-bottom: 0.1rem; + } + + &__task-tab { + font-size: 0.14rem; + color: $text-middle; + cursor: pointer; + font-weight: 500; + + &--active { + color: $text-dark; + font-weight: 700; + } + } + + // 列表区域 + &__task-list { + max-height: 2.5rem; + overflow-y: auto; + } + + &__task-empty { + font-size: 0.12rem; + color: $text-light; + text-align: center; + padding: 0.2rem 0; + } + + // 单个岗位项 + &__task-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.1rem 0; + border-bottom: 1px solid $border-color; + + &:last-child { + border-bottom: none; + } + } + + &__task-item-left { + display: flex; + align-items: center; + gap: 0.08rem; + min-width: 0; + flex: 1; + } + + &__task-item-name { + font-size: 0.13rem; + font-weight: 600; + color: $text-dark; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + &__task-item-tag { + font-size: 0.11rem; + color: $bg-white; + background: $text-middle; + padding: 0.02rem 0.08rem; + border-radius: 0.03rem; + white-space: nowrap; + flex-shrink: 0; + } + + &__task-item-right { + display: flex; + align-items: center; + gap: 0.08rem; + flex-shrink: 0; + margin-left: 0.1rem; + } + + &__task-item-status { + font-size: 0.12rem; + color: $text-middle; + + &--done { + color: $accent; + } + } + + &__task-item-remove { + font-size: 0.16rem; + color: $text-light; + cursor: pointer; + line-height: 1; + + &:hover { + color: $text-dark; + } + } + + // 查看全部按钮 + &__task-view-all { + text-align: center; + font-size: 0.13rem; + color: $text-middle; + padding: 0.1rem 0 0; + margin-top: 0.1rem; + border-top: 1px solid $border-color; + cursor: pointer; + background: $bg-main; + border-radius: 0.06rem; + padding: 0.08rem; + + &:hover { + color: $text-dark; + } } // 工具按钮 diff --git a/src/assets/styles/pages/home.scss b/src/assets/styles/pages/home.scss index cf5db4e..1ef53f9 100644 --- a/src/assets/styles/pages/home.scss +++ b/src/assets/styles/pages/home.scss @@ -170,6 +170,15 @@ flex-shrink: 0; } + // 视频播放器 — 16:9 比例,圆角,无控件 + &__video { + width: 6.5rem; + aspect-ratio: 16 / 9; + border-radius: 0.24rem; + object-fit: cover; + display: block; + } + // 模拟匹配卡片容器 &__card { width: 6.5rem; diff --git a/src/assets/styles/variables.scss b/src/assets/styles/variables.scss index 95a9207..01cfd6a 100644 --- a/src/assets/styles/variables.scss +++ b/src/assets/styles/variables.scss @@ -41,13 +41,17 @@ $border-color: #E8E8E8; // 遮罩层背景 $overlay-bg: rgba(0, 0, 0, 0.5); -// 按钮深色背景(确认提交等) -// $btn-dark: #1A1A2E; +// 主按钮颜色背景(确认提交等) $btn-dark: #4FC2C9; -// 按钮深色悬停态 -// $btn-dark-hover: #2E3142; +// 主按钮颜色悬停态 $btn-dark-hover: #42A8B3; +// 次要深色按钮背景(除非特意指定使用否则不用这个按钮色) +$btn-dark: #1A1A2E; + +// 次要深色按钮悬停态(除非特意指定使用否则不用这个按钮色) +$btn-dark-hover: #2E3142; + // 渐变色背景 $gradient-bg: linear-gradient(to right, #4FC2C9, #42A8B3); diff --git a/src/components/AgentApplyProgress.vue b/src/components/AgentApplyProgress.vue new file mode 100644 index 0000000..ab8f385 --- /dev/null +++ b/src/components/AgentApplyProgress.vue @@ -0,0 +1,177 @@ + + + diff --git a/src/components/AgentChatJobList.vue b/src/components/AgentChatJobList.vue index 92899f1..cba5566 100644 --- a/src/components/AgentChatJobList.vue +++ b/src/components/AgentChatJobList.vue @@ -9,6 +9,7 @@ v-for="job in displayJobs" :key="job.id" class="agent-chat-job-list__item" + v-if="displayJobs.length>0" >
@@ -51,9 +52,12 @@ {{ job.matchScore || 0 }}%
+
+ 暂无相关职位推荐 +
- diff --git a/src/components/AgentTaskListDropdown.vue b/src/components/AgentTaskListDropdown.vue new file mode 100644 index 0000000..48bdd89 --- /dev/null +++ b/src/components/AgentTaskListDropdown.vue @@ -0,0 +1,126 @@ + + + diff --git a/src/components/AiChat.vue b/src/components/AiChat.vue index f02a90a..55bb18e 100644 --- a/src/components/AiChat.vue +++ b/src/components/AiChat.vue @@ -2,7 +2,7 @@
- 解锁会员,送快上岸! + Offer派 升级 Pro 开启求职加速
diff --git a/src/components/JobResumeCustomDialog.vue b/src/components/JobResumeCustomDialog.vue index e78e928..a05babf 100644 --- a/src/components/JobResumeCustomDialog.vue +++ b/src/components/JobResumeCustomDialog.vue @@ -221,39 +221,42 @@
- -
-
-

恭喜!你的简历匹配值从
{{ jobInfo.matchScore }}分提升到了10分!

-
-

做了哪些优化?

-
    -
  • ·{{ item }}
  • -
-
-
-
-
- - - - - 10.0 -
- 非常匹配 -
-
- -
- -
+
+ + +
+
+

恭喜!你的简历匹配值从
{{ jobInfo.matchScore }}分提升到了{{ cachedOptimizedScore }}分!

+
+

做了哪些优化?

+
    +
  • ·{{ item }}
  • +
+
+
+
+
+ + + + + {{ cachedOptimizedScore.toFixed(1) }} +
+ {{ cachedOptimizedScore >= 9 ? '非常匹配' : cachedOptimizedScore >= 6 ? '高匹配度' : '低匹配度' }} +
+
+ +
+ +
+
(() => { return results }) +/** + * 根据勾选的优化部分数量计算优化后的匹配评分 + * 0个勾选:3~5之间随机(一位小数) + * 1个勾选:6~7之间随机 + * 2个勾选:8~9之间随机 + * 3个勾选:9~10之间随机,50%概率直接为10.0 + */ +const optimizedMatchScore = computed(() => { + const checkedCount = optimizeSections.value.filter(s => s.checked).length + let min: number, max: number + if (checkedCount === 0) { + min = 3; max = 5 + } else if (checkedCount === 1) { + min = 6; max = 7 + } else if (checkedCount === 2) { + min = 8; max = 9 + } else { + // 3个勾选:50%概率直接10.0 + if (Math.random() < 0.2) return 10.0 + min = 9; max = 10 + } + // 生成 [min, max] 之间的一位小数随机值 + const raw = min + Math.random() * (max - min) + return Math.round(raw * 10) / 10 +}) + +/** 缓存优化后评分(避免computed每次重新随机) */ +const cachedOptimizedScore = ref(0) + +/** 进入步骤4时缓存一次评分 */ +watch(currentStep, (val) => { + if (val === 4) { + cachedOptimizedScore.value = optimizedMatchScore.value + } +}) + /** AI快捷操作按钮 */ const aiQuickActions = ref([ '精简一下第一段工作经历', diff --git a/src/components/JobResumeTemplate.vue b/src/components/JobResumeTemplate.vue index 18c8ec0..e102172 100644 --- a/src/components/JobResumeTemplate.vue +++ b/src/components/JobResumeTemplate.vue @@ -44,34 +44,32 @@
-
- - - diff --git a/src/components/MemberDialog.vue b/src/components/MemberDialog.vue index 838861f..4b622a6 100644 --- a/src/components/MemberDialog.vue +++ b/src/components/MemberDialog.vue @@ -1,5 +1,5 @@ diff --git a/src/components/SettingsDialog.vue b/src/components/SettingsDialog.vue index f8f4924..b1bda0e 100644 --- a/src/components/SettingsDialog.vue +++ b/src/components/SettingsDialog.vue @@ -66,16 +66,17 @@
- 月度会员 + 会员 查看详情
会员条款
- ¥19.99/月将于2026年3月27日续费 + ¥19.99/月 + - +
@@ -92,7 +93,8 @@