diff --git a/src/api/teamBill.js b/src/api/teamBill.js
new file mode 100644
index 0000000..3cd655a
--- /dev/null
+++ b/src/api/teamBill.js
@@ -0,0 +1,322 @@
+import { get, post } from '../utils/http.js'
+
+/**
+ * 获取团队成员列表
+ * @param {string} teamId - 团队ID
+ * @returns {Promise}
+ */
+export const getTeamMembers = async (teamId) => {
+ try {
+ const response = await get(`/team/members?id=${teamId}`)
+ return response
+ } catch (error) {
+ console.error('Failed to fetch team members:', error)
+ throw error
+ }
+}
+
+/**
+ * 删除团队成员
+ * @param {string} memberId - 成员ID
+ * @returns {Promise}
+ */
+export const deleteMember = async (memberId) => {
+ try {
+ const response = await post('/team/member/remove', {
+ memberId: memberId
+ })
+ return response
+ } catch (error) {
+ console.error('Failed to delete member:', error)
+ throw error
+ }
+}
+
+/**
+ * 获取团队发布的政策
+ * @param {string} teamId - 团队ID
+ * @returns {Promise}
+ */
+export const getTeamReleasePolicy = async (teamId) => {
+ try {
+ const response = await get(`/team/release/policy?id=${teamId}`)
+ return response
+ } catch (error) {
+ console.error('Failed to fetch team release policy:', error)
+ throw error
+ }
+}
+
+/**
+ * 获取用户等待申请的团队信息
+ * @returns {Promise}
+ */
+export const getUserSendJoinWaitApplyTeamProfile = async () => {
+ try {
+ const response = await get('/team/wait-apply/profile')
+ return response
+ } catch (error) {
+ console.error('Failed to get user wait apply team profile:', error)
+ throw error
+ }
+}
+
+/**
+ * 搜索团队信息
+ * @param {string} account - 团队账户
+ * @returns {Promise}
+ */
+export const searchTeamByAccount = async (account) => {
+ try {
+ const response = await get(`/team/search-account?account=${account}`)
+ return response
+ } catch (error) {
+ console.error('Failed to search team by account:', error)
+ throw error
+ }
+}
+
+/**
+ * 提交团队申请
+ * @param {string} teamId - 团队ID
+ * @returns {Promise}
+ */
+export const sendTeamApplyJoin = async (teamId) => {
+ try {
+ const response = await post('/team/user/apply', {
+ teamId,
+ reason: 'JOIN'
+ })
+ return response
+ } catch (error) {
+ console.error('Failed to send team apply join:', error)
+ throw error
+ }
+}
+
+/**
+ * 取消加入申请
+ * @param {string} messageId - 申请消息ID
+ * @returns {Promise}
+ */
+export const cancelJoinApplyById = async (messageId) => {
+ try {
+ const response = await post('/team/user/join-apply-cancel', {
+ id: messageId
+ })
+ return response
+ } catch (error) {
+ console.error('Failed to cancel join apply:', error)
+ throw error
+ }
+}
+
+/**
+ * 获取邀请消息列表
+ * @returns {Promise}
+ */
+export const getInviteMessageList = async () => {
+ try {
+ const response = await get('/anchor-agent/invite/message')
+ return response
+ } catch (error) {
+ console.error('Failed to get invite message list:', error)
+ throw error
+ }
+}
+
+/**
+ * 处理邀请消息
+ * @param {object} data - 处理数据 {id, status, contact}
+ * @returns {Promise}
+ */
+export const processInviteMessage = async (data) => {
+ try {
+ const response = await post('/anchor-agent/invite/process', data)
+ return response
+ } catch (error) {
+ console.error('Failed to process invite message:', error)
+ throw error
+ }
+}
+
+/**
+ * 获取团队成员工作报告
+ * @param {string} userId - 用户ID
+ * @returns {Promise}
+ */
+export const getTeamMemberWork = async (userId) => {
+ try {
+ const response = await get(`/team/member-work?userId=${userId}`)
+ return response
+ } catch (error) {
+ console.error('Failed to fetch team member work:', error)
+ throw error
+ }
+}
+
+/**
+ * 格式化显示状态
+ * @param {string} status - 状态值
+ * @returns {object} 包含显示文本和样式类的对象
+ */
+export const formatBillStatus = (status) => {
+ const statusMap = {
+ 'UNPAID': {
+ text: 'In Progress',
+ class: 'in-progress',
+ color: '#3B82F6'
+ },
+ 'HANG_UP': {
+ text: 'Pending',
+ class: 'pending',
+ color: '#EF4444'
+ },
+ 'PAID': {
+ text: 'Completed',
+ class: 'completed',
+ color: '#10B981'
+ },
+ 'SETTLED': {
+ text: 'Settled',
+ class: 'settled',
+ color: '#059669'
+ }
+ }
+
+ return statusMap[status] || {
+ text: status,
+ class: 'unknown',
+ color: '#666'
+ }
+}
+
+/**
+ * 格式化时间显示
+ * @param {number|string} minutes - 分钟数
+ * @returns {string} 格式化的时间字符串
+ */
+export const formatOnlineTime = (minutes) => {
+ if (!minutes || minutes === '0') return '0h'
+ const numMinutes = parseInt(minutes)
+ const hours = Math.floor(numMinutes / 60)
+ const mins = numMinutes % 60
+ if (hours > 0) {
+ return mins > 0 ? `${hours}h ${mins}m` : `${hours}h`
+ }
+ return `${mins}m`
+}
+
+/**
+ * 格式化礼物价值显示
+ * @param {string|number} value - 礼物价值
+ * @returns {string} 格式化的价值字符串
+ */
+export const formatGiftValue = (value) => {
+ if (!value || value === '0') return '$0'
+
+ // 如果已经是格式化的字符串,直接返回
+ if (typeof value === 'string' && value.includes('K')) {
+ return `$${value}`
+ }
+
+ const numValue = parseFloat(value)
+ if (isNaN(numValue)) return '$0'
+
+ if (numValue >= 1000000) {
+ return `$${(numValue / 1000000).toFixed(1)}M`
+ } else if (numValue >= 1000) {
+ return `$${(numValue / 1000).toFixed(1)}K`
+ }
+ return `$${numValue.toFixed(0)}`
+}
+
+/**
+ * 格式化钻石价值显示
+ * @param {string|number} value - 钻石价值
+ * @returns {string} 格式化的钻石价值字符串
+ */
+export const formatDiamondValue = (value) => {
+ if (!value || value === '0') return '0'
+ const numValue = parseInt(value)
+ if (isNaN(numValue)) return '0'
+
+ if (numValue >= 1000000) {
+ return `${(numValue / 1000000).toFixed(1)}M`
+ } else if (numValue >= 1000) {
+ return `${(numValue / 1000).toFixed(1)}K`
+ }
+ return numValue.toLocaleString()
+}
+
+/**
+ * 格式化日期显示
+ * @param {number} dateNumber - 日期数字格式 (如: 20250808)
+ * @returns {string} 格式化的日期字符串
+ */
+export const formatDateDisplay = (dateNumber) => {
+ if (!dateNumber) return ''
+ const dateStr = dateNumber.toString()
+ if (dateStr.length !== 8) return dateStr
+
+ const year = dateStr.substring(0, 4)
+ const month = dateStr.substring(4, 6)
+ const day = dateStr.substring(6, 8)
+ return `${month}/${day}/${year}`
+}
+
+/**
+ * 格式化账户显示
+ * @param {object} memberProfile - 成员资料对象
+ * @returns {string} 格式化的账户字符串
+ */
+export const formatAccount = (memberProfile) => {
+ if (!memberProfile) return ''
+
+ // 如果有特殊ID,优先显示特殊ID
+ if (memberProfile.ownSpecialId && memberProfile.ownSpecialId.account) {
+ return memberProfile.ownSpecialId.account
+ }
+
+ // 否则显示普通账户
+ return memberProfile.account || ''
+}
+
+/**
+ * 检查是否可以领取道具奖励
+ * @param {object} item - 账单项目
+ * @returns {boolean} 是否可以领取奖励
+ */
+export const canReceivePropsReward = (item) => {
+ if (item.status !== 'SETTLED') {
+ return false
+ }
+
+ if (!item.target || !item.target.settlementResult) {
+ return false
+ }
+
+ const propsRewards = item.target.settlementResult.propsRewards
+ if (!propsRewards || propsRewards.length <= 0) {
+ return false
+ }
+
+ return true
+}
+
+/**
+ * 领取政策道具奖励
+ * @param {string} targetId - 目标ID
+ * @returns {Promise}
+ */
+export const receivePolicyPropsReward = async (targetId) => {
+ try {
+ const response = await post('/team/policy-props-reward', {
+ id: targetId
+ })
+ return response
+ } catch (error) {
+ console.error('Failed to receive policy props reward:', error)
+ throw error
+ }
+}
diff --git a/src/api/wallet.js b/src/api/wallet.js
index 4885200..dc680de 100644
--- a/src/api/wallet.js
+++ b/src/api/wallet.js
@@ -1,11 +1,11 @@
-import { get } from '../utils/http.js'
+import {get, post} from '../utils/http.js'
/**
* 获取钱包流水详情
* @returns {Promise} 返回流水详情数据
*/
export function getWalletDetails() {
- return get('/wallet/salary-diamond/balance/water/details')
+ return get('/wallet/bank/balance/water/details')
}
/**
@@ -24,6 +24,25 @@ export function userBankCheckTransfer() {
return get('/wallet/bank/check/transfer')
}
+/**
+ * 验证兑换金币限制
+ * @returns {Promise} 返回用户角色和权限信息
+ */
+export function userSalaryCheckExchange() {
+ return get('/wallet/salary-diamond/check/exchange-gold')
+}
+
+// 获取用户银行卡余额-兑换金币
+export function userBankExchangeGold(data) {
+ return post('/wallet/bank/exchange/gold', data)
+}
+
+// 用户银行卡余额-转账
+export function userBankTransfer(data) {
+ return post('/wallet/bank/transfer', data)
+}
+
+
/**
* 搜索用户资料
* @param {string} type - 用户类型 (AGENT/BD/ANCHOR)
@@ -46,7 +65,7 @@ export function formatDateTime(timestamp) {
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
-
+
return `${day}/${month}/${year} ${hours}:${minutes}`
}
diff --git a/src/components/team/TeamBillMore.vue b/src/components/team/TeamBillMore.vue
new file mode 100644
index 0000000..8d8623a
--- /dev/null
+++ b/src/components/team/TeamBillMore.vue
@@ -0,0 +1,532 @@
+
+ No daily data available{{ billData?.billTitle }}
+
+ {{ getStatusText(billData?.status) }}
+
+ Summary
+ Daily Details
+