diff --git a/Dockerfile b/Dockerfile index 180081e..fd360ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,8 +29,8 @@ WORKDIR /app # 复制 package.json 和 yarn.lock COPY package.json yarn.lock* ./ -# 安装依赖,确保 dotenv 被正确安装 -RUN yarn install --frozen-lockfile && \ +# 安装所有依赖,包括开发依赖 +RUN yarn install --frozen-lockfile --production=false && \ yarn add dotenv@16.3.1 --exact # 复制项目文件 diff --git a/src/api/finance.js b/src/api/finance.js index 873f964..f294835 100644 --- a/src/api/finance.js +++ b/src/api/finance.js @@ -79,4 +79,12 @@ export function cancelWithdraw(withdrawId) { url: `/api/withdraw/${withdrawId}/cancel`, method: 'post' }); +} + +export function getAccountDetails(params) { + return request({ + url: '/api/account/details', + method: 'get', + params + }); } \ No newline at end of file diff --git a/src/layouts/AdminLayout.vue b/src/layouts/AdminLayout.vue index 880f799..86e5308 100644 --- a/src/layouts/AdminLayout.vue +++ b/src/layouts/AdminLayout.vue @@ -31,6 +31,11 @@ 银行卡管理 + + + + 账户明细 + @@ -101,7 +106,8 @@ import { DollarOutlined, CreditCardOutlined, WalletOutlined, - UserOutlined + UserOutlined, + ProfileOutlined } from '@ant-design/icons-vue'; export default { @@ -112,7 +118,8 @@ export default { DollarOutlined, CreditCardOutlined, WalletOutlined, - UserOutlined + UserOutlined, + ProfileOutlined }, setup() { const store = useStore(); diff --git a/src/router/index.js b/src/router/index.js index 4cf9515..1adc4ea 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -40,6 +40,12 @@ const routes = [ component: () => import('../views/BankCard.vue'), meta: { title: '银行卡管理', parentTitle: '财务管理', icon: 'credit-card' } }, + { + path: 'finance/account-details', + name: 'FinanceAccountDetails', + component: () => import('../views/AccountDetails.vue'), + meta: { title: '账户明细', parentTitle: '财务管理', icon: 'profile' } + }, { path: 'bank-card', name: 'BankCard', diff --git a/src/utils/format.js b/src/utils/format.js new file mode 100644 index 0000000..7ecb0be --- /dev/null +++ b/src/utils/format.js @@ -0,0 +1,71 @@ +/** + * 格式化日期时间 + * @param {string|Date} date - 日期对象或日期字符串 + * @param {string} format - 格式化模式,默认为 'YYYY-MM-DD HH:mm:ss' + * @returns {string} - 格式化后的日期字符串 + */ +export function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') { + if (!date) return '-'; + + const d = typeof date === 'string' ? new Date(date) : date; + + // 检查日期是否有效 + if (isNaN(d.getTime())) { + return '-'; + } + + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + const hours = String(d.getHours()).padStart(2, '0'); + const minutes = String(d.getMinutes()).padStart(2, '0'); + const seconds = String(d.getSeconds()).padStart(2, '0'); + + return format + .replace('YYYY', year) + .replace('MM', month) + .replace('DD', day) + .replace('HH', hours) + .replace('mm', minutes) + .replace('ss', seconds); +} + +/** + * 格式化金额,保留两位小数 + * @param {number|string} amount - 金额 + * @param {number} decimals - 小数位数,默认为2 + * @param {string} prefix - 前缀,默认为空 + * @returns {string} - 格式化后的金额字符串 + */ +export function formatAmount(amount, decimals = 2, prefix = '') { + if (amount === undefined || amount === null) return `${prefix}0.00`; + + const num = parseFloat(amount); + if (isNaN(num)) return `${prefix}0.00`; + + return `${prefix}${num.toFixed(decimals)}`; +} + +/** + * 格式化手机号码,中间四位显示为星号 + * @param {string} phone - 手机号码 + * @returns {string} - 格式化后的手机号码 + */ +export function formatPhone(phone) { + if (!phone || phone.length < 11) return phone; + + return `${phone.substring(0, 3)}****${phone.substring(7)}`; +} + +/** + * 格式化银行卡号,仅显示后四位 + * @param {string} cardNumber - 银行卡号 + * @returns {string} - 格式化后的银行卡号 + */ +export function formatBankCard(cardNumber) { + if (!cardNumber) return ''; + + if (cardNumber.length <= 4) return cardNumber; + + return `**** **** **** ${cardNumber.slice(-4)}`; +} \ No newline at end of file diff --git a/src/views/AccountDetails.vue b/src/views/AccountDetails.vue new file mode 100644 index 0000000..87c8d2e --- /dev/null +++ b/src/views/AccountDetails.vue @@ -0,0 +1,245 @@ + + + + + \ No newline at end of file diff --git a/src/views/Finance.vue b/src/views/Finance.vue index 8efe6f5..46cf671 100644 --- a/src/views/Finance.vue +++ b/src/views/Finance.vue @@ -15,6 +15,9 @@ ¥ {{ accountInfo.total_balance || '0.00' }} + @@ -177,8 +180,8 @@