2025-04-12 18:50:34 +03:30
< template >
2025-05-04 01:07:39 +03:30
< v -toolbar color = "toolbar" title = "هوش مصنوعی حسابیکس" >
2025-07-18 02:30:04 +03:30
< v -spacer > < / v - s p a c e r >
<!-- نمایش وضعیت سرویس -- >
< div class = "d-flex align-center mr-4" >
< v -chip
: color = "aiSettings.aiEnabled ? 'success' : 'error'"
size = "small"
variant = "flat"
class = "mr-2"
>
< v -icon start size = "16" >
{ { aiSettings . aiEnabled ? 'mdi-robot' : 'mdi-robot-off' } }
< / v - i c o n >
{ { aiSettings . aiEnabled ? 'فعال' : 'غیرفعال' } }
< / v - c h i p >
< span class = "text-caption text-medium-emphasis" >
{ { aiSettings . aiAgentSource . toUpperCase ( ) } } - { { aiSettings . aiModel } }
< / span >
< / div >
<!-- نمایش وضعیت اتصال -- >
< div class = "d-flex align-center mr-4" >
< v -chip
: color = "connectionStatus.color"
size = "small"
variant = "flat"
class = "mr-2"
>
< v -icon start size = "16" >
{ { connectionStatus . icon } }
< / v - i c o n >
{ { connectionStatus . text } }
< / v - c h i p >
< / div >
2025-05-04 01:07:39 +03:30
< / v - t o o l b a r >
< div class = "page-container" >
2025-07-18 02:30:04 +03:30
<!-- کارت اطلاعات قیمت گذاری -- >
< div class = "pricing-info" v-if ="aiSettings.aiEnabled" >
< v -card variant = "outlined" class = "ma-4" elevation = "0" >
< v -card -text class = "pa-4" >
< div class = "d-flex align-center justify-space-between" >
< div class = "d-flex align-center" >
< v -icon color = "info" class = "mr-2" > mdi - currency - usd < / v - i c o n >
< span class = "text-subtitle-2" > قیمت گذاری توکن ه ا : < / span >
< / div >
< div class = "d-flex align-center gap-4" >
< div class = "text-center" >
< div class = "text-caption text-medium-emphasis" > ورودی < / div >
< div class = "text-body-2 font-weight-medium" > { { aiSettings . inputTokenPrice . toLocaleString ( 'fa-IR' ) } } ریال < / div >
< / div >
< v -divider vertical > < / v - d i v i d e r >
< div class = "text-center" >
< div class = "text-caption text-medium-emphasis" > خروجی < / div >
< div class = "text-body-2 font-weight-medium" > { { aiSettings . outputTokenPrice . toLocaleString ( 'fa-IR' ) } } ریال < / div >
< / div >
< div class = "text-caption text-medium-emphasis" > ( به ازای هر 1000 توکن ) < / div >
< / div >
< / div >
< / v - c a r d - t e x t >
< / v - c a r d >
< / div >
<!-- آمار استفاده -- >
< div class = "usage-stats" v-if ="userMessages.length > 0" >
< v -card variant = "outlined" class = "ma-4" elevation = "0" >
< v -card -text class = "pa-4" >
< div class = "d-flex align-center justify-space-between" >
< div class = "d-flex align-center" >
< v -icon color = "success" class = "mr-2" > mdi - chart - line < / v - i c o n >
< span class = "text-subtitle-2" > آمار استفاده : < / span >
< / div >
< div class = "d-flex align-center gap-4" >
< div class = "text-center" >
< div class = "text-caption text-medium-emphasis" > کل پیام ه ا < / div >
< div class = "text-body-2 font-weight-medium" > { { userMessages . length } } < / div >
< / div >
< v -divider vertical > < / v - d i v i d e r >
< div class = "text-center" >
< div class = "text-caption text-medium-emphasis" > پیام های هوش مصنوعی < / div >
< div class = "text-body-2 font-weight-medium" > { { aiMessageCount } } < / div >
< / div >
< v -divider vertical > < / v - d i v i d e r >
< div class = "text-center" >
< div class = "text-caption text-medium-emphasis" > پیام های کاربر < / div >
< div class = "text-body-2 font-weight-medium" > { { userMessageCount } } < / div >
< / div >
< / div >
< / div >
< / v - c a r d - t e x t >
< / v - c a r d >
< / div >
2025-05-04 01:07:39 +03:30
< div class = "content-container" >
< v -card class = "chat-container" elevation = "0" >
< div class = "chat-box" >
< div class = "messages-container" ref = "messagesContainer" >
<!-- پیام هوش مصنوعی -- >
< div class = "message ai-message" v-if ="displayWelcome" >
< v -avatar color = "#1a237e" size = "36" class = "mr-2" >
< v -icon color = "white" size = "20" > mdi - robot < / v - i c o n >
< / v - a v a t a r >
< div class = "message-content" >
< div class = "message-text typing-text" > { { displayWelcome } } < / div >
< / div >
< / div >
<!-- پیام های کاربر و پاسخ های هوش مصنوعی -- >
< template v-for ="(message, index) in userMessages" :key ="index" >
<!-- پیام کاربر -- >
< div class = "message user-message" v-if ="typeof message === 'string'" >
< div class = "message-content" >
< div class = "message-text" > { { message } } < / div >
2025-07-18 02:30:04 +03:30
< div class = "message-time" > { { formatTime ( new Date ( ) ) } } < / div >
2025-05-04 01:07:39 +03:30
< / div >
< v -avatar color = "grey lighten-2" size = "36" class = "ml-2" >
< v -icon color = "grey darken-1" size = "20" > mdi - account < / v - i c o n >
< / v - a v a t a r >
< / div >
<!-- پیام هوش مصنوعی -- >
< div class = "message ai-message" v -else -if = " message & & message.isAI " >
< v -avatar color = "#1a237e" size = "36" class = "mr-2" >
< v -icon color = "white" size = "20" > mdi - robot < / v - i c o n >
< / v - a v a t a r >
< div class = "message-content" : class = "{ 'details-message': message.isDetails }" >
< div class = "message-text" v-html ="message.text.replace(/\n/g, '<br>')" > < / div >
2025-07-18 02:30:04 +03:30
< div class = "message-time" > { { formatTime ( new Date ( ) ) } } < / div >
2025-05-04 01:07:39 +03:30
< / div >
< / div >
< / template >
<!-- نشانگر تایپ -- >
< div class = "message ai-message" v-if ="isTyping" >
< v -avatar color = "#1a237e" size = "36" class = "mr-2" >
< v -icon color = "white" size = "20" > mdi - robot < / v - i c o n >
< / v - a v a t a r >
< div class = "message-content" >
< div class = "message-text" >
< span class = "typing-indicator" >
< span > < / span >
< span > < / span >
< span > < / span >
< / span >
< / div >
< / div >
< / div >
< / div >
<!-- باکس ورودی پیام -- >
< div class = "input-container" >
2025-07-18 02:30:04 +03:30
< div class = "d-flex align-center justify-space-between mb-2" >
< v -btn
size = "small"
variant = "text"
color = "grey"
@ click = "clearChat"
: disabled = "userMessages.length === 0"
>
< v -icon start size = "16" > mdi - delete < / v - i c o n >
پاک کردن تاریخچه
< / v - b t n >
< span class = "text-caption text-medium-emphasis" >
{ { userMessages . length } } پیام
< / span >
< / div >
2025-05-04 01:07:39 +03:30
< v -textarea v -model = " userMessage " placeholder = "پیام خود را اینجا بنویسید..." rows = "1" auto -grow hide -details
variant = "plain" class = "message-input" @ keydown . enter . prevent = "sendMessage" > < / v - t e x t a r e a >
< v -btn color = "#1a237e" icon :loading ="isLoading" @click ="sendMessage" class = "send-button"
: disabled = "!userMessage.trim()" >
< v -icon > mdi - send < / v - i c o n >
< / v - b t n >
2025-07-18 02:30:04 +03:30
<!-- پیش نمایش پیام -- >
< div class = "message-preview" v-if ="userMessage.trim()" >
< div class = "text-caption text-medium-emphasis mb-1" > پیش نمایش : < / div >
< div class = "preview-content" >
{ { userMessage } }
< / div >
< / div >
< / div >
<!-- پیشنهادات سوالات -- >
< div class = "suggestions-container" v-if ="userMessages.length === 0" >
< div class = "text-caption text-medium-emphasis mb-2" > پیشنهادات : < / div >
< div class = "d-flex flex-wrap gap-2" >
< v -chip
v - for = "suggestion in suggestions"
: key = "suggestion"
size = "small"
variant = "outlined"
@ click = "useSuggestion(suggestion)"
class = "suggestion-chip"
>
{ { suggestion } }
< / v - c h i p >
< / div >
2025-05-04 01:07:39 +03:30
< / div >
< / div >
2025-04-12 18:50:34 +03:30
< / v - c a r d >
2025-05-04 01:07:39 +03:30
< / div >
< / div >
2025-04-12 18:50:34 +03:30
< / template >
< script >
2025-07-18 02:30:04 +03:30
import axios from 'axios'
2025-04-12 18:50:34 +03:30
export default {
name : 'WizardHome' ,
data ( ) {
return {
2025-05-04 01:07:39 +03:30
userMessage : '' ,
isLoading : false ,
isTyping : true ,
userMessages : [ ] ,
2025-07-18 02:30:04 +03:30
aiSettings : {
aiEnabled : false ,
aiAgentSource : 'gapgpt' ,
aiModel : 'gpt-4o' ,
inputTokenPrice : 0 ,
outputTokenPrice : 0 ,
aiPrompt : ''
} ,
2025-05-04 01:07:39 +03:30
aiResponses : [
{
message : 'با عرض پوزش، در حال حاضر سختافزار پردازش داده متصل نشده است. لطفاً با پشتیبانی فنی تماس بگیرید تا در اسرع وقت مشکل را برطرف کنیم.' ,
details : 'برای اتصال سختافزار پردازش داده، نیاز به تنظیمات خاصی است که باید توسط تیم فنی انجام شود. این تنظیمات شامل:\n- اتصال به سرور پردازش\n- تنظیم پارامترهای امنیتی\n- راهاندازی ماژولهای پردازشی\nمی با شد.'
} ,
{
message : 'متأسفانه در حال حاضر سیستم پردازش داده در دسترس نیست. این مشکل موقت است و به زودی برطرف خواهد شد.' ,
details : 'برای فعالسازی کامل سیستم، نیاز به انجام مراحل زیر است:\n- تأیید اتصال به سرور مرکزی\n- راهاندازی ماژولهای پردازشی\n- تنظیم پارامترهای امنیتی\nلطفا ً با پشتیبانی فنی تماس بگیرید.'
} ,
{
message : 'با کمال تأسف، سختافزار پردازش داده هنوز آماده بهرهبرداری نیست. این مشکل به زودی برطرف خواهد شد.' ,
details : 'برای راهاندازی کامل سیستم، تیم فنی در حال انجام مراحل زیر است:\n- نصب و پیکربندی سرور پردازش\n- تنظیم پارامترهای امنیتی\n- راهاندازی ماژولهای پردازشی\nلطفا ً با پشتیبانی فنی تماس بگیرید.'
} ,
{
message : 'در حال حاضر سیستم پردازش داده در حالت تعمیر و نگهداری است. به زودی سرویسدهی از سر گرفته خواهد شد.' ,
details : 'برای فعالسازی مجدد سیستم، نیاز به انجام مراحل زیر است:\n- بررسی اتصال به سرور مرکزی\n- بهروزرسانی ماژولهای پردازشی\n- تنظیم مجدد پارامترهای امنیتی\nلطفا ً با پشتیبانی فنی تماس بگیرید.'
} ,
{
message : 'با عرض پوزش، سختافزار پردازش داده در حال حاضر غیرفعال است. تیم فنی در حال بررسی و رفع مشکل است.' ,
details : 'برای فعالسازی سیستم، نیاز به انجام مراحل زیر است:\n- تأیید اتصال به سرور پردازش\n- راهاندازی ماژولهای پردازشی\n- تنظیم پارامترهای امنیتی\nلطفا ً با پشتیبانی فنی تماس بگیرید.'
}
] ,
welcomePatterns : [
{
welcome : 'سلام! 👋' ,
2025-07-18 02:30:04 +03:30
thanks : 'به هوش مصنوعی حسابیکس خوش آمدید! من آماده کمک به شما هستم.'
2025-05-04 01:07:39 +03:30
} ,
{
welcome : 'درود! 🌟' ,
2025-07-18 02:30:04 +03:30
thanks : 'خوشحالم که از هوش مصنوعی حسابیکس استفاده میکنید. چطور میتوانم کمک کنم؟'
2025-05-04 01:07:39 +03:30
} ,
{
welcome : 'سلام و وقت بخیر! ✨' ,
2025-07-18 02:30:04 +03:30
thanks : 'به عنوان دستیار هوشمند حسابیکس، آماده خدمترسانی به شما هستم.'
2025-05-04 01:07:39 +03:30
} ,
{
welcome : 'به حسابیکس خوش آمدید! 🚀' ,
2025-07-18 02:30:04 +03:30
thanks : 'من هوش مصنوعی حسابیکس هستم. سؤال یا درخواست خود را بنویسید.'
2025-05-04 01:07:39 +03:30
} ,
{
2025-07-18 02:30:04 +03:30
welcome : 'سلام! من دستیار شما هستم 🤖' ,
thanks : 'خوشحالم که میتوانم در استفاده از نرمافزار حسابیکس به شما کمک کنم.'
2025-05-04 01:07:39 +03:30
}
] ,
selectedPattern : null ,
displayWelcome : '' ,
2025-07-18 02:30:04 +03:30
suggestions : [
'چگونه میتوانم گزارش مالی تهیه کنم؟' ,
'راهنمای استفاده از نرمافزار' ,
'چگونه فاکتور جدید ایجاد کنم؟' ,
'مشکلات رایج و راهحلها' ,
'تنظیمات سیستم'
] ,
connectionStatus : {
color : 'warning' ,
icon : 'mdi-clock' ,
text : 'در حال بررسی اتصال...'
}
}
} ,
computed : {
aiMessageCount ( ) {
return this . userMessages . filter ( msg => msg && msg . isAI ) . length
} ,
userMessageCount ( ) {
return this . userMessages . filter ( msg => typeof msg === 'string' ) . length
2025-05-04 01:07:39 +03:30
}
} ,
async mounted ( ) {
2025-07-18 02:30:04 +03:30
await this . loadAISettings ( )
await this . checkConnectionStatus ( )
2025-05-04 01:07:39 +03:30
await this . startTypingAnimation ( )
} ,
watch : {
userMessages : {
handler ( ) {
this . $nextTick ( ( ) => {
this . scrollToBottom ( )
} )
} ,
deep : true
} ,
displayWelcome ( ) {
this . $nextTick ( ( ) => {
this . scrollToBottom ( )
} )
2025-04-12 18:50:34 +03:30
}
} ,
methods : {
2025-07-18 02:30:04 +03:30
async loadAISettings ( ) {
try {
const response = await axios . get ( '/api/wizard/settings' )
if ( response . data . success ) {
this . aiSettings = response . data . settings
}
} catch ( error ) {
console . error ( 'Error loading AI settings:' , error )
}
} ,
async checkConnectionStatus ( ) {
try {
const response = await axios . get ( '/api/wizard/status' )
console . log ( 'Status response:' , response . data ) // اضافه کردن log
if ( response . data . success ) {
let color = 'success'
let icon = 'mdi-check-circle'
let text = 'اتصال به سرور موفق'
switch ( response . data . status ) {
case 'available' :
color = 'success'
icon = 'mdi-check-circle'
text = 'اتصال به سرور موفق'
break
case 'disabled' :
color = 'error'
icon = 'mdi-robot-off'
text = 'سرویس هوش مصنوعی غیرفعال'
break
case 'no_api_key' :
color = 'warning'
icon = 'mdi-key-remove'
text = 'کلید API تنظیم نشده'
break
default :
color = 'error'
icon = 'mdi-alert-circle'
text = 'اتصال به سرور متصل نیست'
}
this . connectionStatus = {
color : color ,
icon : icon ,
text : text
}
console . log ( 'Connection status updated:' , this . connectionStatus ) // اضافه کردن log
} else {
this . connectionStatus = {
color : 'error' ,
icon : 'mdi-alert-circle' ,
text : 'خطا در بررسی وضعیت اتصال'
}
}
} catch ( error ) {
console . error ( 'Error checking connection status:' , error )
this . connectionStatus = {
color : 'error' ,
icon : 'mdi-alert-circle' ,
text : 'خطا در ارتباط با سرور'
}
}
2025-05-04 01:07:39 +03:30
} ,
async startTypingAnimation ( ) {
2025-07-18 02:30:04 +03:30
// تایپ یک پیام ساده
await this . typeText ( 'سلام! من دستیار هوشمند حسابیکس هستم. چطور میتوانم کمک کنم؟' , ( text ) => {
2025-05-04 01:07:39 +03:30
this . displayWelcome = text
2025-07-18 02:30:04 +03:30
} , 30 )
2025-05-04 01:07:39 +03:30
this . isTyping = false
} ,
async typeText ( text , callback , speed = 50 ) {
let currentText = ''
for ( let i = 0 ; i < text . length ; i ++ ) {
currentText += text [ i ]
callback ( currentText )
await this . delay ( speed )
}
} ,
delay ( ms ) {
return new Promise ( resolve => setTimeout ( resolve , ms ) )
} ,
async sendMessage ( ) {
if ( ! this . userMessage . trim ( ) ) return
2025-07-18 02:30:04 +03:30
// بررسی فعال بودن هوش مصنوعی
if ( ! this . aiSettings . aiEnabled ) {
this . userMessages . push ( {
text : 'سرویس هوش مصنوعی غیرفعال است. لطفاً ابتدا آن را در تنظیمات سیستم فعال کنید.' ,
isAI : true ,
isDetails : true
} )
return
}
2025-05-04 01:07:39 +03:30
const message = this . userMessage . trim ( )
this . userMessages . push ( message )
this . userMessage = ''
this . isLoading = true
2025-07-18 02:30:04 +03:30
try {
// ارسال درخواست به بکاند
const response = await axios . post ( '/api/wizard/talk' , {
message : message ,
options : {
model : this . aiSettings . aiModel ,
temperature : 0.7 ,
max _tokens : 1000
}
} )
2025-05-04 01:07:39 +03:30
2025-07-18 02:30:04 +03:30
if ( response . data . success ) {
// نمایش پاسخ هوش مصنوعی
this . userMessages . push ( {
text : response . data . response ,
isAI : true
} )
// نمایش اطلاعات اضافی در صورت وجود
if ( response . data . usage || response . data . cost ) {
let detailsText = ''
if ( response . data . usage ) {
detailsText += ` توکنهای ورودی: ${ response . data . usage . prompt _tokens || 0 } \ n `
detailsText += ` توکنهای خروجی: ${ response . data . usage . completion _tokens || 0 } \ n `
detailsText += ` کل توکنها: ${ response . data . usage . total _tokens || 0 } \ n `
}
if ( response . data . cost ) {
detailsText += ` هزینه: ${ response . data . cost . toLocaleString ( 'fa-IR' ) } ریال `
}
if ( response . data . model ) {
detailsText += ` \ nمدل: ${ response . data . model } `
}
if ( detailsText ) {
this . userMessages . push ( {
text : detailsText ,
isAI : true ,
isDetails : true
} )
}
}
} else {
// نمایش خطا
this . userMessages . push ( {
text : ` خطا: ${ response . data . error } ` ,
isAI : true ,
isDetails : true
} )
}
} catch ( error ) {
console . error ( 'Error sending message:' , error )
// نمایش خطای شبکه
this . userMessages . push ( {
text : 'خطا در ارتباط با سرور. لطفاً دوباره تلاش کنید.' ,
isAI : true ,
isDetails : true
} )
}
2025-05-04 01:07:39 +03:30
this . isLoading = false
this . $nextTick ( ( ) => {
this . scrollToBottom ( )
} )
} ,
scrollToBottom ( ) {
const container = this . $refs . messagesContainer
if ( container ) {
container . scrollTo ( {
top : container . scrollHeight ,
behavior : 'smooth'
} )
}
2025-07-18 02:30:04 +03:30
} ,
clearChat ( ) {
this . userMessages = [ ]
this . displayWelcome = ''
this . isTyping = true
this . startTypingAnimation ( )
} ,
useSuggestion ( suggestion ) {
this . userMessage = suggestion
} ,
formatTime ( date ) {
return new Intl . DateTimeFormat ( 'fa-IR' , {
hour : '2-digit' ,
minute : '2-digit' ,
second : '2-digit'
} ) . format ( date )
2025-05-04 01:07:39 +03:30
}
2025-04-12 18:50:34 +03:30
}
}
< / script >
< style scoped >
2025-05-04 01:07:39 +03:30
. page - container {
height : 100 vh ;
display : flex ;
flex - direction : column ;
}
. content - container {
flex : 1 ;
height : 100 vh ;
}
. chat - container {
height : 100 % ;
background - color : # f5f5f5 ;
}
. chat - box {
height : 100 % ;
display : flex ;
flex - direction : column ;
}
. messages - container {
flex : 1 ;
overflow - y : auto ;
padding : 20 px ;
display : flex ;
flex - direction : column ;
gap : 16 px ;
}
. message {
display : flex ;
align - items : flex - start ;
max - width : 80 % ;
2025-04-12 18:50:34 +03:30
}
2025-05-04 01:07:39 +03:30
. ai - message {
align - self : flex - start ;
2025-04-12 18:50:34 +03:30
}
2025-05-04 01:07:39 +03:30
. user - message {
align - self : flex - end ;
flex - direction : row - reverse ;
2025-04-12 18:50:34 +03:30
}
2025-05-04 01:07:39 +03:30
. message - content {
background - color : white ;
padding : 12 px 16 px ;
2025-04-12 18:50:34 +03:30
border - radius : 12 px ;
2025-05-04 01:07:39 +03:30
box - shadow : 0 1 px 2 px rgba ( 0 , 0 , 0 , 0.1 ) ;
}
. ai - message . message - content {
background - color : # e3f2fd ;
border - bottom - right - radius : 4 px ;
}
. user - message . message - content {
background - color : # 1 a237e ;
color : white ;
border - bottom - left - radius : 4 px ;
2025-04-12 18:50:34 +03:30
}
2025-05-04 01:07:39 +03:30
. message - text {
font - size : 1 rem ;
line - height : 1.5 ;
2025-04-12 18:50:34 +03:30
}
2025-07-18 02:30:04 +03:30
. message - time {
font - size : 0.75 rem ;
color : rgba ( 0 , 0 , 0 , 0.5 ) ;
margin - top : 4 px ;
text - align : right ;
}
. user - message . message - time {
color : rgba ( 255 , 255 , 255 , 0.7 ) ;
}
/* استایل برای پیشنمایش پیام */
. message - preview {
margin - top : 8 px ;
padding : 8 px ;
background - color : # f5f5f5 ;
border - radius : 8 px ;
border : 1 px solid # e0e0e0 ;
}
. preview - content {
font - size : 0.875 rem ;
color : # 424242 ;
line - height : 1.4 ;
max - height : 60 px ;
overflow - y : auto ;
}
2025-05-04 01:07:39 +03:30
. input - container {
padding : 16 px ;
background - color : white ;
border - top : 1 px solid rgba ( 0 , 0 , 0 , 0.1 ) ;
display : flex ;
align - items : center ;
gap : 12 px ;
2025-04-12 18:50:34 +03:30
}
2025-05-04 01:07:39 +03:30
. message - input {
background - color : # f5f5f5 ! important ;
border - radius : 24 px ;
padding : 8 px 16 px ! important ;
}
. message - input : deep ( . v - field _ _input ) {
padding : 8 px ! important ;
font - size : 1 rem ;
color : # 424242 ;
}
. send - button {
transition : all 0.3 s ease ;
}
. send - button : hover {
2025-04-12 18:50:34 +03:30
transform : scale ( 1.1 ) ;
}
2025-05-04 01:07:39 +03:30
. typing - indicator {
display : flex ;
gap : 4 px ;
align - items : center ;
height : 24 px ;
}
. typing - indicator span {
width : 8 px ;
height : 8 px ;
background - color : # 1 a237e ;
border - radius : 50 % ;
animation : typing 1 s infinite ease - in - out ;
}
. typing - indicator span : nth - child ( 2 ) {
animation - delay : 0.2 s ;
}
. typing - indicator span : nth - child ( 3 ) {
animation - delay : 0.4 s ;
}
@ keyframes typing {
0 % , 100 % { transform : translateY ( 0 ) ; }
50 % { transform : translateY ( - 4 px ) ; }
}
. details - message {
background - color : # f5f5f5 ! important ;
border : 1 px solid # e0e0e0 ;
font - size : 0.9 rem ;
color : # 616161 ;
}
. details - message . message - text {
white - space : pre - line ;
}
. messages - container : : - webkit - scrollbar {
width : 6 px ;
}
. messages - container : : - webkit - scrollbar - track {
background : transparent ;
2025-04-12 18:50:34 +03:30
}
2025-05-04 01:07:39 +03:30
. messages - container : : - webkit - scrollbar - thumb {
background : rgba ( 0 , 0 , 0 , 0.2 ) ;
border - radius : 3 px ;
2025-04-12 18:50:34 +03:30
}
2025-05-04 01:07:39 +03:30
. messages - container : : - webkit - scrollbar - thumb : hover {
background : rgba ( 0 , 0 , 0 , 0.3 ) ;
2025-04-12 18:50:34 +03:30
}
2025-07-18 02:30:04 +03:30
/* استایل برای کارت اطلاعات قیمتگذاری */
. pricing - info {
background : linear - gradient ( 135 deg , # f5f7fa 0 % , # c3cfe2 100 % ) ;
}
. pricing - info . v - card {
border : 1 px solid rgba ( 0 , 0 , 0 , 0.1 ) ;
background : rgba ( 255 , 255 , 255 , 0.9 ) ;
backdrop - filter : blur ( 10 px ) ;
}
/* انیمیشن برای chip وضعیت */
. v - chip {
transition : all 0.3 s ease ;
}
. v - chip : hover {
transform : scale ( 1.05 ) ;
}
/* بهبود ظاهر toolbar */
. v - toolbar {
border - bottom : 1 px solid rgba ( 0 , 0 , 0 , 0.1 ) ;
}
/* استایل برای پیامهای خطا */
. message - content . error - message {
background - color : # ffebee ! important ;
border : 1 px solid # ffcdd2 ;
color : # c62828 ;
}
/* استایل برای پیامهای موفقیت */
. message - content . success - message {
background - color : # e8f5e8 ! important ;
border : 1 px solid # c8e6c9 ;
color : # 2 e7d32 ;
}
/* استایل برای پیشنهادات */
. suggestions - container {
padding : 16 px ;
background - color : # f8f9fa ;
border - top : 1 px solid # e9ecef ;
border - bottom : 1 px solid # e9ecef ;
}
. suggestion - chip {
cursor : pointer ;
transition : all 0.3 s ease ;
background - color : white ;
border : 1 px solid # dee2e6 ;
margin : 2 px ;
}
. suggestion - chip : hover {
background - color : # e3f2fd ! important ;
transform : translateY ( - 1 px ) ;
box - shadow : 0 2 px 8 px rgba ( 0 , 0 , 0 , 0.1 ) ;
border - color : # 1 a237e ;
}
/* بهبود ظاهر input container */
. input - container {
background : linear - gradient ( 135 deg , # ffffff 0 % , # f8f9fa 100 % ) ;
border - top : 2 px solid # e9ecef ;
padding : 16 px ;
}
/* استایل برای آمار استفاده */
. usage - stats {
background : linear - gradient ( 135 deg , # e8f5e8 0 % , # c8e6c9 100 % ) ;
}
. usage - stats . v - card {
border : 1 px solid rgba ( 0 , 0 , 0 , 0.1 ) ;
background : rgba ( 255 , 255 , 255 , 0.9 ) ;
backdrop - filter : blur ( 10 px ) ;
}
/* انیمیشن برای کارتهای آمار */
. usage - stats . v - card ,
. pricing - info . v - card {
transition : all 0.3 s ease ;
}
. usage - stats . v - card : hover ,
. pricing - info . v - card : hover {
transform : translateY ( - 2 px ) ;
box - shadow : 0 4 px 20 px rgba ( 0 , 0 , 0 , 0.1 ) ;
}
2025-04-12 18:50:34 +03:30
< / style >