From 56eb59ed5d52b23015634c39e247c7b372ef011a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BC=8A=E5=B8=86?= Date: Tue, 15 Sep 2026 17:51:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E9=A1=B9=E7=9B=AE=E4=B8=AD=E5=BF=83?= =?UTF-8?q?=E5=92=8C=E4=B8=AA=E4=BA=BA=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/account-security.ts | 22 ++ src/constants/bill-list.ts | 9 +- src/constants/bind-email.ts | 1 + src/constants/bind-phone.ts | 3 + src/constants/feedback.ts | 1 + src/constants/finance-center.ts | 38 +++ src/constants/personal-center.ts | 6 +- src/constants/quick-entries.ts | 2 +- src/pages.json | 48 ++++ src/pages/Login/user-login/index.scss | 10 + src/pages/Login/user-login/index.vue | 11 + .../Login/user-register-success/index.vue | 10 +- .../components/PasswordStrength.scss | 6 +- .../components/PasswordStrength.vue | 8 +- .../account-security/index.scss | 107 +++++++++ .../account-security/index.vue | 103 ++++++++ .../bind-email-change/index.scss | 63 +++++ .../bind-email-change/index.vue | 80 +++++++ .../personal-center/bind-email/index.scss | 96 ++++++++ .../personal-center/bind-email/index.vue | 80 +++++++ .../personal-center/bind-phone-new/index.scss | 79 ++++++ .../personal-center/bind-phone-new/index.vue | 90 +++++++ .../personal-center/bind-phone/index.scss | 87 +++++++ .../personal-center/bind-phone/index.vue | 74 ++++++ .../change-password/index.scss | 71 ++++++ .../personal-center/change-password/index.vue | 91 +++++++ src/pages/personal-center/feedback/index.scss | 224 ++++++++++++++++++ src/pages/personal-center/feedback/index.vue | 173 ++++++++++++++ src/pages/personal-center/finance/index.scss | 154 ++++++++++++ src/pages/personal-center/finance/index.vue | 122 ++++++++++ .../project-center/bill-detail/index.scss | 51 +++- .../project-center/bill-detail/index.vue | 103 +++++++- src/pages/project-center/bill-list/index.scss | 7 +- src/pages/project-center/bill-list/index.vue | 14 +- src/static/icon/bill-details.svg | 1 + src/static/icon/bill-pending.png | Bin 0 -> 3650 bytes src/static/icon/invoice-apply.svg | 1 + src/static/icon/not-due.png | Bin 0 -> 4491 bytes src/static/icon/pending-payment.svg | 1 + src/static/icon/report-export.svg | 1 + src/types/account-security.ts | 8 + src/types/finance-center.ts | 8 + src/types/result-page.ts | 8 +- 43 files changed, 2028 insertions(+), 44 deletions(-) create mode 100644 src/constants/account-security.ts create mode 100644 src/constants/bind-email.ts create mode 100644 src/constants/bind-phone.ts create mode 100644 src/constants/feedback.ts create mode 100644 src/constants/finance-center.ts create mode 100644 src/pages/personal-center/account-security/index.scss create mode 100644 src/pages/personal-center/account-security/index.vue create mode 100644 src/pages/personal-center/bind-email-change/index.scss create mode 100644 src/pages/personal-center/bind-email-change/index.vue create mode 100644 src/pages/personal-center/bind-email/index.scss create mode 100644 src/pages/personal-center/bind-email/index.vue create mode 100644 src/pages/personal-center/bind-phone-new/index.scss create mode 100644 src/pages/personal-center/bind-phone-new/index.vue create mode 100644 src/pages/personal-center/bind-phone/index.scss create mode 100644 src/pages/personal-center/bind-phone/index.vue create mode 100644 src/pages/personal-center/change-password/index.scss create mode 100644 src/pages/personal-center/change-password/index.vue create mode 100644 src/pages/personal-center/feedback/index.scss create mode 100644 src/pages/personal-center/feedback/index.vue create mode 100644 src/pages/personal-center/finance/index.scss create mode 100644 src/pages/personal-center/finance/index.vue create mode 100644 src/static/icon/bill-details.svg create mode 100644 src/static/icon/bill-pending.png create mode 100644 src/static/icon/invoice-apply.svg create mode 100644 src/static/icon/not-due.png create mode 100644 src/static/icon/pending-payment.svg create mode 100644 src/static/icon/report-export.svg create mode 100644 src/types/account-security.ts create mode 100644 src/types/finance-center.ts diff --git a/src/constants/account-security.ts b/src/constants/account-security.ts new file mode 100644 index 0000000..25d9634 --- /dev/null +++ b/src/constants/account-security.ts @@ -0,0 +1,22 @@ +import type { AccountSecurityItem } from '@/types/account-security' + +export const ACCOUNT_SECURITY_ITEMS: AccountSecurityItem[] = [ + { + key: 'password', + title: '修改密码', + subtitle: '上次修改:15天前', + status: '已设置', + }, + { + key: 'phone', + title: '绑定手机', + subtitle: '186****9618', + status: '已绑定', + }, + { + key: 'email', + title: '绑定邮箱', + subtitle: 'yongzh******4@163.com', + status: '已绑定', + }, +] diff --git a/src/constants/bill-list.ts b/src/constants/bill-list.ts index 9ba6ac9..9a75e2c 100644 --- a/src/constants/bill-list.ts +++ b/src/constants/bill-list.ts @@ -25,8 +25,13 @@ function buildBillList(): BillItem[] { bills.push({ ...plan, projectId: project.id, - billNo: plan.id === '1' && project.id === '1' ? '20260813ZZ251245' : plan.billNo, - transactionNo: paidMeta?.transactionNo || plan.transactionNo, + billNo: ['1', '2', '3'].includes(plan.id) && project.id === '1' + ? '20260813ZZ251245' + : plan.billNo, + transactionNo: paidMeta?.transactionNo + || (['2', '3'].includes(plan.id) && project.id === '1' + ? 'T20260819153035678K2M001' + : plan.transactionNo), paidAt: paidMeta?.paidAt, paidMethod: paidMeta?.paidMethod, }) diff --git a/src/constants/bind-email.ts b/src/constants/bind-email.ts new file mode 100644 index 0000000..d243ac6 --- /dev/null +++ b/src/constants/bind-email.ts @@ -0,0 +1 @@ +export const BOUND_EMAIL_MASKED = 'yongzh******4@163.com' diff --git a/src/constants/bind-phone.ts b/src/constants/bind-phone.ts new file mode 100644 index 0000000..8d0aaf8 --- /dev/null +++ b/src/constants/bind-phone.ts @@ -0,0 +1,3 @@ +export const BOUND_PHONE_MASKED = '186****9618' + +export const BIND_PHONE_NEW_HINT = '注:换绑新手机号之后,可以用新的手机号及当前密码登录' diff --git a/src/constants/feedback.ts b/src/constants/feedback.ts new file mode 100644 index 0000000..43bfbc0 --- /dev/null +++ b/src/constants/feedback.ts @@ -0,0 +1 @@ +export const FEEDBACK_DESCRIPTION_MAX_LENGTH = 500 diff --git a/src/constants/finance-center.ts b/src/constants/finance-center.ts new file mode 100644 index 0000000..f9f423e --- /dev/null +++ b/src/constants/finance-center.ts @@ -0,0 +1,38 @@ +import type { FinanceQuickAction } from '@/types/finance-center' +import iconBillDetails from '@/static/icon/bill-details.svg' +import iconPendingPayment from '@/static/icon/pending-payment.svg' +import iconInvoiceApply from '@/static/icon/invoice-apply.svg' +import iconReportExport from '@/static/icon/report-export.svg' + +export const FINANCE_CENTER_TOTAL = 4000000 + +export const FINANCE_MONTH_OPTIONS = [ + '2026年1月', + '2025年12月', + '2025年11月', +] + +export const FINANCE_QUICK_ACTIONS: FinanceQuickAction[] = [ + { + key: 'bill-list', + label: '账单明细', + icon: iconBillDetails, + path: '/pages/project-center/bill-list/index', + }, + { + key: 'pending', + label: '待支付', + icon: iconPendingPayment, + path: '/pages/project-center/bill-list/index', + }, + { + key: 'invoice', + label: '发票申请', + icon: iconInvoiceApply, + }, + { + key: 'export', + label: '报表导出', + icon: iconReportExport, + }, +] diff --git a/src/constants/personal-center.ts b/src/constants/personal-center.ts index 2f6b2ef..960fb13 100644 --- a/src/constants/personal-center.ts +++ b/src/constants/personal-center.ts @@ -20,11 +20,11 @@ export const PERSONAL_CENTER_PROFILE: PersonalCenterProfile = { } export const PERSONAL_CENTER_MENU: PersonalCenterMenuItem[] = [ - { key: 'security', label: '账号安全', icon: iconSecurity }, + { key: 'security', label: '账号安全', icon: iconSecurity, path: '/pages/personal-center/account-security/index' }, { key: 'message-push', label: '消息推送', icon: iconMessagePush }, - { key: 'feedback', label: '意见反馈', icon: iconFeedback }, + { key: 'feedback', label: '意见反馈', icon: iconFeedback, path: '/pages/personal-center/feedback/index' }, { key: 'contract-list', label: '合同列表', icon: iconContractList }, - { key: 'finance', label: '财务管理', icon: iconFinance, path: '/pages/project-center/bill-list/index' }, + { key: 'finance', label: '财务中心', icon: iconFinance, path: '/pages/personal-center/finance/index' }, { key: 'invoice', label: '发票列表', icon: iconInvoice }, { key: 'address', label: '地址管理', icon: iconAddress }, { key: 'favorites', label: '收藏列表', icon: iconFavorites, path: '/pages/case-library/favorites/index' }, diff --git a/src/constants/quick-entries.ts b/src/constants/quick-entries.ts index 4fdb6a3..e4ad56b 100644 --- a/src/constants/quick-entries.ts +++ b/src/constants/quick-entries.ts @@ -17,7 +17,7 @@ export const QUICK_ENTRY_CATALOG: QuickEntryItem[] = [ { id: 'report', label: '快捷提报', icon: '/static/icons/quick-report.png', bgColor: '#E8FAF4' }, { id: 'service', label: '在线客服', icon: '/static/icons/quick-service.png', bgColor: '#F3E8FF' }, { id: 'contract', label: '合同管理', icon: '/static/icons/quick-contract.png', bgColor: '#FEE2E2' }, - { id: 'finance', label: '财务管理', icon: '/static/icons/quick-finance.png', bgColor: '#E0F2FE' }, + { id: 'finance', label: '财务中心', icon: '/static/icons/quick-finance.png', bgColor: '#E0F2FE' }, { id: 'personal', label: '个人中心', icon: '/static/icons/tab-personals.png', bgColor: '#E8F0FF' }, { id: 'message', label: '消息中心', icon: '/static/icons/tab-messages.png', bgColor: '#F3E8FF' }, { id: 'security', label: '账号安全', icon: '/static/icons/security.png', bgColor: '#E8FAF4' }, diff --git a/src/pages.json b/src/pages.json index 0aae421..84dd4bf 100644 --- a/src/pages.json +++ b/src/pages.json @@ -150,6 +150,54 @@ "style": { "navigationStyle": "custom" } + }, + { + "path": "pages/personal-center/account-security/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/personal-center/change-password/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/personal-center/bind-phone/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/personal-center/bind-phone-new/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/personal-center/bind-email/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/personal-center/bind-email-change/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/personal-center/feedback/index", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/personal-center/finance/index", + "style": { + "navigationStyle": "custom" + } } ], "globalStyle": { diff --git a/src/pages/Login/user-login/index.scss b/src/pages/Login/user-login/index.scss index 6409e9d..5bb78a7 100644 --- a/src/pages/Login/user-login/index.scss +++ b/src/pages/Login/user-login/index.scss @@ -1,6 +1,7 @@ @import '@/styles/variables.scss'; .login-page { + position: relative; display: flex; flex-direction: column; min-height: 100vh; @@ -8,6 +9,15 @@ background: $color-bg-page; } +.login-page__guest { + position: absolute; + top: calc(var(--status-bar-height, 44px) + 24rpx); + right: 32rpx; + z-index: 10; + font-size: 28rpx; + color: $color-text-link; +} + .login-page__header { padding-top: 120rpx; text-align: center; diff --git a/src/pages/Login/user-login/index.vue b/src/pages/Login/user-login/index.vue index d3e4215..e6ed555 100644 --- a/src/pages/Login/user-login/index.vue +++ b/src/pages/Login/user-login/index.vue @@ -47,10 +47,21 @@ function handleUserAgreement() { url: '/pages/Login/user-agreement/index', }) } + +function handleGuestMode() { + uni.redirectTo({ url: '/pages/home-index/index' }) +}