4 mejoras en canales de comunicación con el cliente
1. Reintentos automáticos (Telegram Job): usa autoAplicarRecarga para ejecutar la compra pendiente automáticamente al confirmar el pago, sin botón extra. 2. Pagar servicio directo con Bre-B sin recargar saldo previamente (ambos canales): botón 'Pagar con Bre-B directo' en el flujo de compra con saldo insuficiente. 3. Mensaje de gracias + bloque de credenciales fácil de copiar al entregar servicio: Telegram usa bloque de código (tiene botón Copy nativo), Chat Web muestra el texto completo de gracias con copia por campo y botón 'Copiar todo'. 4. Botón copiar llave Bre-B: ya existía en Chat Web, confirmado sin cambio. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
932a9b43c7
commit
1245d255bb
@@ -440,21 +440,62 @@
|
||||
|
||||
{{-- CREDENCIALES: tarjeta con usuario/contraseña --}}
|
||||
@elseif ($tipoUi === 'credenciales')
|
||||
<div class="max-w-[85%] bg-[#202c33] rounded-xl rounded-tl-sm shadow overflow-hidden">
|
||||
<div class="px-4 py-2 bg-[#00a884]/20">
|
||||
<div class="max-w-[85%] bg-[#202c33] rounded-xl rounded-tl-sm shadow overflow-hidden"
|
||||
x-data="{
|
||||
copiado: null,
|
||||
copiarCampo(val, id) {
|
||||
navigator.clipboard.writeText(val).then(() => { this.copiado = id; setTimeout(() => this.copiado = null, 2000); });
|
||||
},
|
||||
copiarTodo() {
|
||||
let email = $refs.cred_email ? $refs.cred_email.innerText : '';
|
||||
let pass = $refs.cred_pass ? $refs.cred_pass.innerText : '';
|
||||
let parts = [
|
||||
'Servicio: {{ addslashes($payload['servicio'] ?? '') }}',
|
||||
email ? 'Email: ' + email : '',
|
||||
pass ? 'Password: ' + pass : '',
|
||||
'{{ !empty($payload['perfil']) ? 'Perfil: ' . addslashes($payload['perfil']) : '' }}',
|
||||
'{{ !empty($payload['vence']) ? 'Vence: ' . $payload['vence'] : '' }}'
|
||||
].filter(Boolean);
|
||||
navigator.clipboard.writeText(parts.join('\n')).then(() => { this.copiado = 'todo'; setTimeout(() => this.copiado = null, 2000); });
|
||||
}
|
||||
}">
|
||||
{{-- Encabezado servicio --}}
|
||||
<div class="px-4 py-2 bg-[#00a884]/20 flex items-center justify-between">
|
||||
<p class="text-[#00a884] text-xs font-semibold uppercase tracking-wider">{{ $payload['servicio'] ?? 'Credenciales' }}</p>
|
||||
<span class="text-[#00a884] text-[10px]">✅ Compra exitosa</span>
|
||||
</div>
|
||||
{{-- Mensaje de gracias --}}
|
||||
@if (!empty($msg['contenido']))
|
||||
<div class="px-4 pt-3 pb-1">
|
||||
<p class="text-[#e9edef] text-sm leading-snug">{{ $msg['contenido'] }}</p>
|
||||
</div>
|
||||
@endif
|
||||
{{-- Campos con copiar individual --}}
|
||||
<div class="px-4 py-3 space-y-2">
|
||||
@if (!empty($payload['email']))
|
||||
<div class="bg-[#0b141a] rounded-lg px-3 py-2">
|
||||
<p class="text-[#8696a0] text-[11px] mb-0.5">Usuario / Email</p>
|
||||
<p class="text-white text-sm font-mono break-all">{{ $payload['email'] }}</p>
|
||||
<div class="bg-[#0b141a] rounded-lg px-3 py-2 cursor-pointer active:opacity-70"
|
||||
@click="copiarCampo($refs.cred_email.innerText, 'email')">
|
||||
<div class="flex justify-between items-center mb-0.5">
|
||||
<p class="text-[#8696a0] text-[11px]">Usuario / Email</p>
|
||||
<svg class="w-3.5 h-3.5 transition" :class="copiado==='email' ? 'text-green-400' : 'text-[#8696a0]'" fill="none" viewBox="0 0 24 24" stroke-width="1.8" stroke="currentColor">
|
||||
<template x-if="copiado !== 'email'"><path stroke-linecap="round" stroke-linejoin="round" d="M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184" /></template>
|
||||
<template x-if="copiado === 'email'"><path stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 6 6 9-13.5" /></template>
|
||||
</svg>
|
||||
</div>
|
||||
<p class="text-white text-sm font-mono break-all" x-ref="cred_email">{{ $payload['email'] }}</p>
|
||||
</div>
|
||||
@endif
|
||||
@if (!empty($payload['password']))
|
||||
<div class="bg-[#0b141a] rounded-lg px-3 py-2">
|
||||
<p class="text-[#8696a0] text-[11px] mb-0.5">Contraseña</p>
|
||||
<p class="text-white text-sm font-mono">{{ $payload['password'] }}</p>
|
||||
<div class="bg-[#0b141a] rounded-lg px-3 py-2 cursor-pointer active:opacity-70"
|
||||
@click="copiarCampo($refs.cred_pass.innerText, 'pass')">
|
||||
<div class="flex justify-between items-center mb-0.5">
|
||||
<p class="text-[#8696a0] text-[11px]">Contraseña</p>
|
||||
<svg class="w-3.5 h-3.5 transition" :class="copiado==='pass' ? 'text-green-400' : 'text-[#8696a0]'" fill="none" viewBox="0 0 24 24" stroke-width="1.8" stroke="currentColor">
|
||||
<template x-if="copiado !== 'pass'"><path stroke-linecap="round" stroke-linejoin="round" d="M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184" /></template>
|
||||
<template x-if="copiado === 'pass'"><path stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 6 6 9-13.5" /></template>
|
||||
</svg>
|
||||
</div>
|
||||
<p class="text-white text-sm font-mono" x-ref="cred_pass">{{ $payload['password'] }}</p>
|
||||
</div>
|
||||
@endif
|
||||
@if (!empty($payload['perfil']))
|
||||
@@ -464,9 +505,28 @@
|
||||
</div>
|
||||
@endif
|
||||
@if (!empty($payload['vence']))
|
||||
<p class="text-[#8696a0] text-xs text-center mt-1">Vence: {{ $payload['vence'] }}</p>
|
||||
<p class="text-[#8696a0] text-xs text-center">📅 Vence: {{ $payload['vence'] }}</p>
|
||||
@endif
|
||||
</div>
|
||||
{{-- Botón Copiar todo --}}
|
||||
<div class="px-4 pb-3">
|
||||
<button @click="copiarTodo()"
|
||||
class="w-full py-2 rounded-xl text-sm font-semibold transition flex items-center justify-center gap-2"
|
||||
:class="copiado === 'todo' ? 'bg-green-500/20 text-green-400' : 'bg-[#00a884]/10 text-[#00a884] active:bg-[#00a884]/20'">
|
||||
<template x-if="copiado !== 'todo'">
|
||||
<span class="flex items-center gap-1.5">
|
||||
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke-width="1.8" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184" /></svg>
|
||||
Copiar todo
|
||||
</span>
|
||||
</template>
|
||||
<template x-if="copiado === 'todo'">
|
||||
<span class="flex items-center gap-1.5">
|
||||
<svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke-width="2.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 6 6 9-13.5" /></svg>
|
||||
¡Copiado!
|
||||
</span>
|
||||
</template>
|
||||
</button>
|
||||
</div>
|
||||
<div class="px-4 pb-2 text-right">
|
||||
<span class="text-[#8696a0] text-[11px]">{{ $msg['created_at'] }}</span>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user