change login-page design

This commit is contained in:
2026-10-06 13:38:35 +03:30
parent ab22c4dd63
commit cf8a46ec9c
35 changed files with 1377 additions and 188 deletions
@@ -1,66 +1,167 @@
<template>
<div class="dauth dauth--boursecu">
<div class="dauth__layout">
<main class="dauth-form-panel">
<slot />
</main>
<div class="dauth-page-logo">
<img :src="pageLogo" alt="بورس مس" class="dauth-page-logo__img">
</div>
<aside class="dauth-brand dauth-brand--boursecu">
<div class="dauth-brand__pattern" />
<div class="dauth-brand__content">
<img
:src="logo"
alt=""
class="dauth-brand__logo"
>
<h1 class="dauth-brand__title">{{ brandTitle }}</h1>
<p v-if="tagline" class="dauth-brand__tagline">{{ tagline }}</p>
<ul class="dauth-brand__features">
<li v-for="feature in features" :key="feature" class="dauth-brand__feature">
<span class="dauth-brand__feature-icon">
<BasicIcon icon="vuesax-linear:tick-circle" size="16" />
<div class="dauth__layout">
<div class="dauth-visual-col">
<img
:src="copperProducts"
alt=""
class="dauth-visual-col__products"
loading="lazy"
>
</div>
<section class="dauth-center-col" aria-label="معرفی بورس مس">
<div class="dauth-center-col__body">
<h1 class="dauth-center-col__headline">
<span class="dauth-center-col__headline-line">به دنیای معاملات مس</span>
<span class="dauth-center-col__headline-accent">خوش آمدید</span>
</h1>
<p class="dauth-center-col__lead">
بورس مس مسیر خرید و فروش آنلاین مس را ساده، سریع و قابل اعتماد کرده است؛ با پشتوانه تولیدکنندگان واقعی.
</p>
<ul class="dauth-center-col__features">
<li v-for="item in featureItems" :key="item.title" class="dauth-center-col__feature">
<span class="dauth-center-col__feature-icon" aria-hidden="true">
<BasicIcon :icon="item.icon" size="22" />
</span>
{{ feature }}
<div class="dauth-center-col__feature-text">
<p class="dauth-center-col__feature-title">{{ item.title }}</p>
<p class="dauth-center-col__feature-desc">{{ item.desc }}</p>
</div>
</li>
</ul>
</div>
<div class="dauth-brand__footer">نسخه {{ version }}</div>
</aside>
<p class="dauth-center-col__tagline">
<span class="dauth-center-col__tagline-line" aria-hidden="true" />
<span>مس، آینده‌ای مطمئن و...</span>
</p>
</section>
<main class="dauth-form-panel">
<div class="dauth-form-column">
<div class="dauth-form-column__top">
<slot />
</div>
<div class="dauth-form-column__foot">
<nav class="dauth-form-links" aria-label="پیوندهای صفحه ورود">
<span class="dauth-form-links__text">معاملات آتی</span>
<span class="dauth-form-links__sep" aria-hidden="true">|</span>
<span class="dauth-form-links__text">دسترسی به بازار</span>
<span class="dauth-form-links__sep" aria-hidden="true">|</span>
<button type="button" class="dauth-form-links__link dauth-form-links__link--accent" @click="goAboutUs">
درباره مس
</button>
<span class="dauth-form-links__sep" aria-hidden="true">|</span>
<span class="dauth-form-links__text">پشتیبانی</span>
</nav>
<div class="dauth-page-footer__status">
<span class="dauth-page-footer__status-icon" aria-hidden="true">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M4.5 16.2L9 12.2L11.6 14.6L17.2 7.8"
stroke="currentColor"
stroke-width="1.8"
stroke-linecap="round"
stroke-linejoin="round"
/>
<path
d="M14.2 7.8H17.2V10.8"
stroke="currentColor"
stroke-width="1.8"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</span>
<span>پلتفرم معاملات مس، در دسترس است</span>
</div>
</div>
</div>
</main>
</div>
<button
type="button"
class="dauth-form-support dauth-form-support--fab"
:class="{ 'dauth-form-support--fab-dragging': supportDragging }"
:style="supportFabStyle"
title="پشتیبانی"
@pointerdown="onSupportPointerDown"
@pointermove="onSupportPointerMove"
@pointerup="onSupportFabPointerUp"
@pointercancel="onSupportPointerCancel"
>
<BasicIcon icon="vuesax-linear:headphone" size="16" />
<span>پشتیبانی</span>
</button>
</div>
</template>
<script lang="ts" setup>
import { computed } from 'vue'
import pkg from '../../../../../package.json'
import { getDisplayAppVersion } from '@/config/config-cache'
import router from '@/router'
import BasicIcon from '@/components/BasicPacks/BasicIcon.vue'
import { useConfigStore } from '@/store/configStore'
import {
getProjectDesktopLoginBrandLogo,
getProjectLoginTaglineLines,
} from '@/utils/config'
import { getProjectLoginLogo } from '@/utils/config'
import { useDraggableFloatingButton } from '@/utils/useDraggableFloatingButton'
import copperProducts from '../../assets/img/login-copper-hero.jpg'
const config = useConfigStore()
const version = getDisplayAppVersion(pkg.version)
const pageLogo = getProjectLoginLogo()
const logo = computed(() => getProjectDesktopLoginBrandLogo(config.config?.avatar))
const taglineLines = computed(() => getProjectLoginTaglineLines())
const tagline = computed(() => {
if (taglineLines.value?.length) {
return taglineLines.value.join(' ')
}
return 'پلتفرم امن و سریع برای مدیریت دارایی و معاملات شما'
const {
dragging: supportDragging,
fabStyle: supportFabStyle,
handlePointerDown: onSupportPointerDown,
handlePointerMove: onSupportPointerMove,
handlePointerUp: supportPointerUp,
handlePointerCancel: onSupportPointerCancel,
} = useDraggableFloatingButton('boursecu_login_support_fab_v2', {
width: 108,
height: 40,
defaultBottomGap: 28,
defaultRightOffset: 24,
fullViewport: true,
ignoreBottomChrome: true,
})
const brandTitle = computed(() => config.config?.name_fa ?? 'خوش آمدید')
const features = [
'قیمت لحظه‌ای و نمودار بازار',
'مدیریت دارایی و کیف پول',
'معاملات سریع و امن',
const featureItems = [
{
icon: 'vuesax-linear:box',
title: 'خرید و فروش کاتد، مفتول و سیم کابل',
desc: 'با پشتوانه تولیدکننده واقعی',
},
{
icon: 'vuesax-linear:refresh-circle',
title: 'قابلیت تبدیل محصول',
desc: 'از کاتد و مفتول به محصول نهایی (سیم و کابل)',
},
{
icon: 'vuesax-linear:truck-tick',
title: 'قابلیت تحویل فیزیکی',
desc: 'به‌صورت مطمئن و برنامه‌ریزی‌شده',
},
{
icon: 'vuesax-linear:shield-tick',
title: 'قابلیت خرید اعتباری',
desc: 'با شرایط منعطف و مطمئن',
},
]
function onSupportClick() {
void router.push({ name: 'support' })
}
function onSupportFabPointerUp(event: PointerEvent) {
const clicked = supportPointerUp(event)
if (!clicked) return
onSupportClick()
}
function goAboutUs() {
void router.push({ name: 'aboutUs' })
}
</script>
<style lang="less" src="../styles/desktop-auth.less"></style>
@@ -44,10 +44,6 @@ function goToEducate() {
function goToAboutUs() {
router.push('/aboutUs')
}
function goToAboutSoftware() {
router.push({ name: 'aboutSoftware' })
}
</script>
<template>
@@ -166,23 +162,23 @@ function goToAboutSoftware() {
>
ورود با اثر انگشت
</BasicButton>
<button type="button" class="dauth-link-btn" @click="goToAboutSoftware">
درباره نرم‌افزار
<button
v-if="!isTWA()"
type="button"
class="dauth-btn-stack"
@click="installWebApp"
>
<span>نصب وب اپلیکیشن</span>
</button>
<div v-if="!isTWA()" class="dauth-actions-row flex flex-col gap-2">
<a
v-if="!!setting.getSettingByKey('apk_download_link')"
class="dauth-link-btn dauth-link-btn--primary"
:href="setting.getSettingByKey('apk_download_link')"
>
دانلود اپ اندروید
</a>
<BasicButton html-type="button" type="primary" class="w-full" @click.prevent="installWebApp">
نصب نسخه وب اپ
</BasicButton>
</div>
<a
v-if="!isTWA() && !!setting.getSettingByKey('apk_download_link')"
class="dauth-link-btn dauth-link-btn--primary"
:href="setting.getSettingByKey('apk_download_link')"
>
دانلود اپ اندروید
</a>
</div>
<div v-if="isRegister" class="dauth-switch">
@@ -9,6 +9,8 @@ import { useConfigStore } from '@/store/configStore'
import { useSettingsStore } from '@/store/settingsStore'
import { useLoginPageContext } from '../../composables/useLoginPage'
import router from '@/router'
import { isTWA } from '@/utils/config'
import { usePwaInstall } from '@/composables/usePwaInstall'
const emit = defineEmits<{
register: [val: boolean]
@@ -16,6 +18,7 @@ const emit = defineEmits<{
const config = useConfigStore()
const settingsStore = useSettingsStore()
const { tryInstallOrOpenGuide: installWebApp } = usePwaInstall()
const referralIdRules = computed(() =>
settingsStore.isReferralRequired ? [required('کد معرف')] : [],
)
@@ -40,10 +43,6 @@ function goToAboutUs() {
router.push('/aboutUs')
}
function goToAboutSoftware() {
router.push({ name: 'aboutSoftware' })
}
function handleSuccessDismiss() {
dismissSuccess()
emit('register', false)
@@ -119,8 +118,13 @@ function handleSuccessDismiss() {
<a-spin v-if="loading" size="small" />
<span v-else>ثبت نام</span>
</BasicButton>
<button type="button" class="dauth-link-btn" @click="goToAboutSoftware">
درباره نرم‌افزار
<button
v-if="!isTWA()"
type="button"
class="dauth-btn-stack"
@click="installWebApp"
>
<span>نصب وب اپلیکیشن</span>
</button>
</div>