shinnosuke
2026-08-06 737b17d61d66b5451cd7336d219f6ebb04ae7c09
fix(merchant): 按原型展示核销人才卡权益 (bug #24139)
1个文件已修改
19 ■■■■■ 已修改文件
rencaika_merchant/pages/consume-input/consume-input.uvue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rencaika_merchant/pages/consume-input/consume-input.uvue
@@ -4,7 +4,7 @@
        <view v-if="loadState == 'loading'" class="page-state"><text>正在读取人才权益...</text></view>
        <view v-else-if="loadState == 'error'" class="page-state"><text>{{loadError}}</text><text class="retry-text" @tap="loadDetail">重新加载</text></view>
        <scroll-view v-else class="content" scroll-y="true">
            <view class="talent-card"><text class="talent-title">{{cardLevel}}用户</text><text class="talent-person">{{customerName}} {{customerMobile}}</text><text class="talent-benefit">当前权益:{{benefitText}}</text></view>
            <view class="talent-card"><view class="talent-card-glow"></view><view class="talent-card-head"><text class="talent-name">{{customerName}}</text><text class="talent-level">{{cardLevel}}</text></view><text class="talent-mobile">{{displayMobile(customerMobile)}}</text><view class="talent-benefit-line"><text class="talent-benefit-label">当前权益</text><text class="talent-benefit">{{benefitText}}</text></view></view>
            <view class="amount-card"><text class="card-label">消费金额</text><view class="amount-input-row"><text class="currency">¥</text><input class="amount-input" type="digit" placeholder="0.00" :value="amountText" @input="onAmountInput" @blur="quoteCurrentAmount" /></view><text v-if="amountError.length > 0" class="field-error">{{amountError}}</text></view>
            <view class="method-card"><text class="card-label">优惠方式</text><view v-if="selectedRuleId.length > 0" class="benefit-tag-list"><text class="benefit-tag benefit-rule-tag">{{selectedRuleName()}}</text><text class="benefit-tag benefit-card-tag">{{cardLevel}}</text></view><text v-else class="field-error">当前人才卡暂未配置可用优惠</text></view>
            <view class="summary-card"><view class="summary-row"><text>原价</text><text>¥{{formatMoney(quote.originalAmount)}}</text></view><view class="summary-row"><text>优惠金额</text><text>- ¥{{formatMoney(quote.discountAmount)}}</text></view><view class="summary-row strong-row"><text>用户实付</text><text class="pay-amount">¥{{formatMoney(quote.payAmount)}}</text></view><view class="summary-row"><text>补贴金额</text><text>¥{{formatMoney(quote.subsidyAmount)}}</text></view></view>
@@ -48,6 +48,10 @@
            if (rules.value[index].id == selectedRuleId.value) return rules.value[index].name
        }
        return '人才专属优惠'
    }
    const displayMobile = (mobile: string): string => {
        if (mobile.length < 7) return mobile
        return mobile.substring(0, 3) + '***' + mobile.substring(mobile.length - 4)
    }
    const resetQuote = () => { quote.value = { originalAmount: 0, discountAmount: 0, payAmount: 0, subsidyAmount: 0, ruleName: '' } }
@@ -153,10 +157,15 @@
    .back-icon { width: 38rpx; height: 38rpx; transform: rotate(180deg); }
    .content { flex: 1; height: 0; padding: 32rpx 30rpx 0; box-sizing: border-box; }
    .talent-card, .amount-card, .method-card, .summary-card { border-radius: 14rpx; background-color: #FFFFFF; box-shadow: 0 4rpx 18rpx rgba(49, 62, 83, 0.06); box-sizing: border-box; }
    .talent-card { display: flex; min-height: 174rpx; padding: 28rpx 30rpx; flex-direction: column; }
    .talent-title { color: #1F2937; font-size: 29rpx; line-height: 41rpx; font-weight: 700; }
    .talent-person { margin-top: 12rpx; color: #697587; font-size: 27rpx; line-height: 38rpx; }
    .talent-benefit { margin-top: 10rpx; color: #697587; font-size: 25rpx; line-height: 35rpx; }
    .talent-card { display: flex; min-height: 204rpx; padding: 28rpx 30rpx; flex-direction: column; border-width: 1rpx; border-style: solid; border-color: #E4BE59; background-image: linear-gradient(135deg, #C99D32 0%, #F7E69D 55%, #E5BD4E 100%); position: relative; overflow: hidden; }
    .talent-card-glow { width: 180rpx; height: 180rpx; border-radius: 90rpx; position: absolute; top: -72rpx; right: -15rpx; background-color: rgba(255, 255, 255, 0.18); }
    .talent-card-head { display: flex; flex-direction: row; justify-content: space-between; align-items: center; position: relative; }
    .talent-name { color: #FFFFFF; font-size: 38rpx; line-height: 53rpx; font-weight: 700; }
    .talent-level { padding: 8rpx 18rpx; border-radius: 22rpx; color: #FFFFFF; font-size: 21rpx; line-height: 30rpx; font-weight: 600; background-color: rgba(149, 104, 22, 0.46); }
    .talent-mobile { display: block; margin-top: 14rpx; color: #FFFFFF; font-size: 27rpx; line-height: 38rpx; font-weight: 600; position: relative; }
    .talent-benefit-line { display: flex; margin-top: 14rpx; flex-direction: row; align-items: center; position: relative; }
    .talent-benefit-label { color: rgba(255, 255, 255, 0.78); font-size: 22rpx; line-height: 31rpx; }
    .talent-benefit { margin-left: 18rpx; color: #FFFFFF; font-size: 22rpx; line-height: 31rpx; font-weight: 600; }
    .amount-card, .method-card, .summary-card { margin-top: 26rpx; padding: 27rpx 30rpx; }
    .card-label { display: block; color: #5F6979; font-size: 26rpx; line-height: 37rpx; }
    .amount-input-row { display: flex; height: 88rpx; margin-top: 9rpx; flex-direction: row; align-items: center; }