added chat 2

This commit is contained in:
2026-07-30 18:33:08 +03:30
parent 106b0ebbdf
commit 5b0bb45e52
21 changed files with 5243 additions and 25 deletions
+55 -12
View File
@@ -1,5 +1,6 @@
import { computed, ref } from 'vue'
import { message } from 'ant-design-vue'
import { useRouter } from 'vue-router'
import {
buildDepositSmsUrl,
buildSupportPhoneUrl,
@@ -26,39 +27,66 @@ import {
hasDepositFieldValue,
} from '@/utils/depositGuideText'
import { useSettingsStore } from '@/store/settingsStore'
import { isUserSupportChatEnabled } from '@/utils/chat'
/** plain: منوی شناور / درباره ما — بدون پیش‌متن | deposit: مودال واریز — با deposit_support_message_text */
type SupportPickerIntent = 'plain' | 'deposit'
const CHAT_PICKER_ENTRY: ResolvedSupportMessengerEntry = {
messenger: 'chat',
id: 'support-chat',
label: 'چت پشتیبانی',
icon: 'vuesax-linear:messages-2',
accent: '#16a34a',
url: '',
}
export function useSupportMessenger() {
const settingsStore = useSettingsStore()
const router = useRouter()
const supportPickerOpen = supportMessengerPickerOpen
const supportPickerIntent = ref<SupportPickerIntent>('plain')
const isChatEnabled = computed(() => isUserSupportChatEnabled())
const legacySupportLink = computed(() => '')
const depositSupportMessage = computed(() => resolveDepositSupportMessage())
/** لینک‌های تمیز بدون پیش‌متن — متن فقط موقع باز کردن (قصد deposit) اضافه می‌شود */
const supportMessengerEntries = computed(() =>
resolveSupportMessengerEntries(supportMessengerSettings.value),
)
const pickerEntries = computed(() => {
const list = [...supportMessengerEntries.value]
if (isChatEnabled.value) {
list.unshift(CHAT_PICKER_ENTRY)
}
return list
})
const primaryMessengerEntry = computed(() => supportMessengerEntries.value[0] ?? null)
const messengerType = computed(
() => (primaryMessengerEntry.value?.messenger ?? supportMessengerSettings.value.messenger ?? '').trim().toLowerCase(),
)
const messengerMeta = computed(() =>
primaryMessengerEntry.value
const messengerMeta = computed(() => {
if (isChatEnabled.value && supportMessengerEntries.value.length === 0) {
return {
label: CHAT_PICKER_ENTRY.label,
icon: CHAT_PICKER_ENTRY.icon,
accent: CHAT_PICKER_ENTRY.accent,
}
}
return primaryMessengerEntry.value
? {
label: primaryMessengerEntry.value.label,
icon: primaryMessengerEntry.value.icon,
accent: primaryMessengerEntry.value.accent,
}
: resolveSupportMessengerMeta(messengerType.value),
)
: resolveSupportMessengerMeta(messengerType.value)
})
const messengerLink = computed(() =>
primaryMessengerEntry.value?.url
@@ -69,8 +97,16 @@ export function useSupportMessenger() {
),
)
function goToSupportChat() {
void router.push({ name: 'support' })
return true
}
async function openMessengerEntry(entry: ResolvedSupportMessengerEntry, text?: string) {
// فقط وقتی از مودال واریز آمده‌ایم پیش‌نویس می‌گذاریم؛ منوی شناور همیشه خالی
if (entry.messenger === 'chat') {
return goToSupportChat()
}
const messageText =
text !== undefined
? text.trim()
@@ -99,7 +135,12 @@ export function useSupportMessenger() {
const draft =
intent === 'deposit' ? depositSupportMessage.value.trim() : ''
const entries = supportMessengerEntries.value
const messengerEntries = supportMessengerEntries.value
const entries = pickerEntries.value
if (isChatEnabled.value && messengerEntries.length === 0) {
return goToSupportChat()
}
if (entries.length === 0) {
return openSupportMessengerWithMessage(
@@ -126,12 +167,10 @@ export function useSupportMessenger() {
return true
}
/** منوی شناور / صفحات درباره ما — بدون پیش‌نویس پیام */
async function openSupportMessenger(anchorEl?: HTMLElement | null) {
return openSupportPicker('plain', anchorEl)
}
/** مودال راهنمای واریز — با متن deposit_support_message_text */
async function openDepositSupportMessenger(anchorEl?: HTMLElement | null) {
return openSupportPicker('deposit', anchorEl)
}
@@ -209,8 +248,10 @@ export function useSupportMessenger() {
)
}
const hasMessengerLink = computed(() => supportMessengerEntries.value.length > 0 || !!messengerLink.value)
const hasMultipleMessengers = computed(() => supportMessengerEntries.value.length > 1)
const hasMessengerLink = computed(
() => isChatEnabled.value || supportMessengerEntries.value.length > 0 || !!messengerLink.value,
)
const hasMultipleMessengers = computed(() => pickerEntries.value.length > 1)
const hasSupportPhoneLink = computed(() => !!supportPhoneLink.value)
const hasSupportActions = computed(() => hasSupportPhoneLink.value || hasMessengerLink.value)
const opensInNewTab = computed(() => /^https?:\/\//i.test(messengerLink.value))
@@ -218,7 +259,8 @@ export function useSupportMessenger() {
return {
supportPickerOpen,
supportPickerAnchor: supportMessengerPickerAnchor,
supportMessengerEntries,
supportMessengerEntries: pickerEntries,
isChatEnabled,
messengerType,
messengerMeta,
messengerLink,
@@ -240,6 +282,7 @@ export function useSupportMessenger() {
openDepositSupportMessenger,
openMessengerEntry,
handleSupportMessengerClick,
goToSupportChat,
hasMessengerLink,
hasMultipleMessengers,
hasSupportPhoneLink,