teamBillMore 修改

This commit is contained in:
tianfeng 2025-08-26 11:59:56 +08:00
parent 3451ee849b
commit d50ace8464
3 changed files with 130 additions and 8 deletions

View File

@ -46,7 +46,9 @@
<div class="user-name">{{ member.memberProfile?.userNickname || 'Unknown User' }}</div>
<div class="user-id">ID: {{ member.memberProfile?.account || 'N/A' }}</div>
<div class="user-target">
<span class="target-badge">Target: A</span>
<span :class="['target-badge', getTargetClass(member.target?.acceptGiftValue)]">
{{ formatTargetDisplay(member.target?.acceptGiftValue) }}
</span>
</div>
</div>
@ -74,8 +76,9 @@
</template>
<script setup>
import { ref, computed } from 'vue'
import { formatBillStatus } from '../../api/teamBill.js'
import { ref, computed, onMounted } from 'vue'
import { formatBillStatus, getTeamReleasePolicy } from '../../api/teamBill.js'
import { getTeamId } from '../../utils/userStore.js'
const props = defineProps({
billData: {
@ -87,12 +90,90 @@ const props = defineProps({
const emit = defineEmits(['close'])
const loading = ref(false)
const policyData = ref(null)
const loadingPolicy = ref(false)
// billData
const members = computed(() => {
return props.billData?.members || []
})
//
const fetchPolicyData = async () => {
try {
loadingPolicy.value = true
const teamId = getTeamId()
if (!teamId) {
console.warn('No team ID available')
return
}
const response = await getTeamReleasePolicy(teamId)
if (response && response.status && response.body) {
policyData.value = response.body
console.debug('Policy data loaded:', policyData.value)
}
} catch (error) {
console.error('Failed to fetch policy data:', error)
} finally {
loadingPolicy.value = false
}
}
//
const getTargetLevel = (giftValue) => {
if (!policyData.value?.policy || !giftValue) {
return 'N/A'
}
const numValue = parseFloat(giftValue)
if (isNaN(numValue)) {
return 'N/A'
}
// targetgiftValuelevel
const sortedPolicy = [...policyData.value.policy].sort((a, b) => {
return parseFloat(b.target) - parseFloat(a.target)
})
console.log('sortedPolicy', JSON.stringify(sortedPolicy))
console.log('numValue', JSON.stringify(numValue))
for (const policy of sortedPolicy) {
if (numValue >= parseFloat(policy.target)) {
return policy.level
}
}
//
const minLevel = Math.min(...policyData.value.policy.map(p => p.level))
return minLevel
}
// Target
const formatTargetDisplay = (giftValue) => {
if (loadingPolicy.value) {
return 'Loading...'
}
const level = getTargetLevel(giftValue)
return `Level ${level}`
}
// Target
const getTargetClass = (giftValue) => {
const level = getTargetLevel(giftValue)
if (typeof level === 'number') {
return `target-level-${level}`
}
return 'target-default'
}
//
onMounted(() => {
fetchPolicyData()
})
//
const getStatusText = (status) => {
const statusInfo = formatBillStatus(status)
@ -316,6 +397,44 @@ const handleImageError = (event) => {
font-size: 11px;
font-weight: 500;
border: 1px solid #d1d5db;
transition: all 0.2s ease;
}
/* 不同等级的颜色样式 */
.target-level-1 {
background-color: #dbeafe;
color: #1d4ed8;
border-color: #93c5fd;
}
.target-level-2 {
background-color: #dcfce7;
color: #166534;
border-color: #86efac;
}
.target-level-3 {
background-color: #fef3c7;
color: #92400e;
border-color: #fbbf24;
}
.target-level-4 {
background-color: #ede9fe;
color: #6b21a8;
border-color: #c4b5fd;
}
.target-level-5 {
background-color: #fce7f3;
color: #be185d;
border-color: #f9a8d4;
}
.target-default {
background-color: #f3f4f6;
color: #6b7280;
border-color: #d1d5db;
}
/* 右侧统计信息 */

View File

@ -298,7 +298,10 @@ export function usePageInitialization(options = {}) {
if (response.status && response.body) {
// 更新任务信息
taskInfo.anchorType = 'Chat' // 固定值
taskInfo.minutesProgress = response.body.ownTime
const ownTime = Number(response.body.ownTime) || 0
const otherTime = Number(response.body.otherTime) || 0
const totalTime = ownTime + otherTime
taskInfo.minutesProgress = totalTime >= taskInfo.minutesTotal ? taskInfo.minutesTotal : totalTime
taskInfo.giftTask = response.body.acceptGiftValue || 0 // acceptGiftValue
}

View File

@ -97,7 +97,7 @@
<div class="progress-details">
<div class="progress-item">
<span>Target: {{ progressInfo.target }}</span>
<span>Level: {{ progressInfo.target }}</span>
<span>Salary: ${{ progressInfo.salary }}</span>
</div>
<div class="progress-item">
@ -138,9 +138,9 @@ const router = useRouter()
const progressInfo = reactive({
date: '2025.08',
status: 'Pending',
target: 'B',
salary: 50,
timeDays: 20,
target: '-',
salary: 0.00,
timeDays: 0,
diamond: 50000,
hostSalary: '',
agentSalary: '',