feat: 资产详情前代后代换货标识
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 5m17s
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 5m17s
This commit is contained in:
@@ -214,6 +214,46 @@
|
||||
</ElDescriptionsItem>
|
||||
</ElDescriptions>
|
||||
|
||||
<template v-if="previousExchangeAsset || nextExchangeAsset">
|
||||
<ElDivider content-position="left">换货链路</ElDivider>
|
||||
<ElDescriptions :column="descriptionsColumn" border>
|
||||
<ElDescriptionsItem v-if="previousExchangeAsset" label="前代资产">
|
||||
<div class="exchange-asset">
|
||||
<ElTag type="success" size="small">换货新资产</ElTag>
|
||||
<ElButton
|
||||
v-if="previousExchangeAsset.can_view"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleNavigateToExchangeAsset(previousExchangeAsset)"
|
||||
>
|
||||
{{ previousExchangeAsset.identifier }}
|
||||
</ElButton>
|
||||
<span v-else>{{ previousExchangeAsset.identifier }}</span>
|
||||
<span v-if="previousExchangeAsset.exchange_no" class="exchange-no">
|
||||
换货单:{{ previousExchangeAsset.exchange_no }}
|
||||
</span>
|
||||
</div>
|
||||
</ElDescriptionsItem>
|
||||
<ElDescriptionsItem v-if="nextExchangeAsset" label="后代资产">
|
||||
<div class="exchange-asset">
|
||||
<ElTag type="warning" size="small">已换出旧资产</ElTag>
|
||||
<ElButton
|
||||
v-if="nextExchangeAsset.can_view"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleNavigateToExchangeAsset(nextExchangeAsset)"
|
||||
>
|
||||
{{ nextExchangeAsset.identifier }}
|
||||
</ElButton>
|
||||
<span v-else>{{ nextExchangeAsset.identifier }}</span>
|
||||
<span v-if="nextExchangeAsset.exchange_no" class="exchange-no">
|
||||
换货单:{{ nextExchangeAsset.exchange_no }}
|
||||
</span>
|
||||
</div>
|
||||
</ElDescriptionsItem>
|
||||
</ElDescriptions>
|
||||
</template>
|
||||
|
||||
<!-- 设备绑定卡列表 -->
|
||||
<template v-if="cardInfo?.asset_type === 'device'">
|
||||
<ElDivider content-position="left">绑定卡列表</ElDivider>
|
||||
@@ -532,7 +572,7 @@
|
||||
ElMessage
|
||||
} from 'element-plus'
|
||||
import { CopyDocument } from '@element-plus/icons-vue'
|
||||
import type { AssetPollingStatus } from '@/types/api'
|
||||
import type { AssetExchangeTrace, AssetExchangeTraceAsset, AssetPollingStatus } from '@/types/api'
|
||||
import { useAssetFormatters } from '../composables/useAssetFormatters'
|
||||
import { useAuth } from '@/composables/useAuth'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
@@ -589,6 +629,7 @@
|
||||
last_real_name_check_at?: string | null
|
||||
last_card_status_check_at?: string | null
|
||||
polling?: AssetPollingStatus | null
|
||||
exchange_trace?: AssetExchangeTrace | null
|
||||
bound_device_id?: number
|
||||
bound_device_no?: string
|
||||
bound_device_name?: string
|
||||
@@ -759,6 +800,11 @@
|
||||
})
|
||||
})
|
||||
|
||||
const previousExchangeAsset = computed(
|
||||
() => props.cardInfo.exchange_trace?.previous_asset ?? null
|
||||
)
|
||||
const nextExchangeAsset = computed(() => props.cardInfo.exchange_trace?.next_asset ?? null)
|
||||
|
||||
// 设备详情里的实名状态和实名时间从选中的绑定卡取值:
|
||||
// 只有一张卡时直接取该卡,多张卡时仅取 is_current=true 的卡。
|
||||
const selectedDeviceStatusCard = computed(() => {
|
||||
@@ -797,6 +843,17 @@
|
||||
emit('navigateToCard', iccid)
|
||||
}
|
||||
|
||||
const handleNavigateToExchangeAsset = (asset: AssetExchangeTraceAsset) => {
|
||||
if (!asset.can_view) return
|
||||
|
||||
if (asset.asset_type === 'card') {
|
||||
emit('navigateToCard', asset.identifier)
|
||||
return
|
||||
}
|
||||
|
||||
emit('navigateToDevice', asset.identifier)
|
||||
}
|
||||
|
||||
// 复制ICCID
|
||||
const handleCopyICCID = async (iccid: string) => {
|
||||
try {
|
||||
@@ -956,6 +1013,17 @@
|
||||
}
|
||||
}
|
||||
|
||||
.exchange-asset {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
align-items: center;
|
||||
|
||||
.exchange-no {
|
||||
color: var(--el-text-color-secondary);
|
||||
}
|
||||
}
|
||||
|
||||
@media (width <= 768px) {
|
||||
.card-header {
|
||||
flex-direction: column;
|
||||
|
||||
@@ -124,6 +124,7 @@ export function useAssetInfo() {
|
||||
accumulated_recharge: data.accumulated_recharge,
|
||||
first_commission_paid: data.first_commission_paid,
|
||||
polling: data.polling ?? null,
|
||||
exchange_trace: data.exchange_trace ?? null,
|
||||
|
||||
// 卡专属字段 (asset_type === 'card')
|
||||
iccid: data.iccid || '',
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* 资产信息页面类型定义
|
||||
*/
|
||||
|
||||
import type { AssetPollingStatus } from '@/types/api'
|
||||
import type { AssetExchangeTrace, AssetPollingStatus } from '@/types/api'
|
||||
|
||||
// 资产类型枚举
|
||||
export type AssetType = 'card' | 'device'
|
||||
@@ -40,6 +40,7 @@ export interface AssetInfo {
|
||||
last_real_name_check_at?: string | null
|
||||
last_card_status_check_at?: string | null
|
||||
polling?: AssetPollingStatus | null
|
||||
exchange_trace?: AssetExchangeTrace | null
|
||||
}
|
||||
|
||||
// 设备绑定卡信息
|
||||
|
||||
Reference in New Issue
Block a user