Changed design and bug fixes
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-01-16 15:40:14 +06:00
parent e6264efac6
commit fbfddf3c7a
16 changed files with 920 additions and 844 deletions

View File

@@ -4,7 +4,7 @@ import axios from 'axios';
import { API_URL } from '../config';
import { notify } from './NotificationSystem';
export default function TicketChat({ ticket, token, user, theme, onBack }) {
export default function TicketChat({ ticket, token, user, onBack }) {
const [messages, setMessages] = useState(ticket.messages || []);
const [newMessage, setNewMessage] = useState('');
const [currentTicket, setCurrentTicket] = useState(ticket);
@@ -150,22 +150,22 @@ export default function TicketChat({ ticket, token, user, theme, onBack }) {
}
};
const canChangeStatus = user.role === 'admin' || user.role === 'support';
const canChangeStatus = user.role === 'owner' || user.role === 'admin' || user.role === 'support';
return (
<div className={`h-full flex flex-col ${theme.primary}`}>
<div className="h-full flex flex-col bg-dark-900">
{/* Header */}
<div className={`${theme.secondary} ${theme.border} border-b p-4`}>
<div className="bg-dark-800 border-gray-700 border-b p-4">
<div className="flex items-center gap-4 mb-3">
<button
onClick={onBack}
className={`${theme.hover} p-2 rounded-lg transition`}
className="hover:bg-dark-700 p-2 rounded-lg transition"
>
<ArrowLeft className="w-5 h-5" />
</button>
<div className="flex-1">
<h2 className="text-lg font-bold">{currentTicket.title}</h2>
<p className={`text-sm ${theme.textSecondary}`}>
<p className="text-sm text-gray-400">
Автор: {currentTicket.author} Создан: {new Date(currentTicket.created_at).toLocaleString('ru-RU')}
</p>
</div>
@@ -184,7 +184,7 @@ export default function TicketChat({ ticket, token, user, theme, onBack }) {
className={`flex-1 px-3 py-2 rounded-lg border transition ${
currentTicket.status === 'pending'
? 'bg-yellow-500/20 text-yellow-500 border-yellow-500/50'
: `${theme.card} ${theme.hover} ${theme.border}`
: 'bg-dark-800 hover:bg-dark-700 border-gray-700'
}`}
>
<Clock className="w-4 h-4 inline mr-2" />
@@ -196,7 +196,7 @@ export default function TicketChat({ ticket, token, user, theme, onBack }) {
className={`flex-1 px-3 py-2 rounded-lg border transition ${
currentTicket.status === 'in_progress'
? 'bg-blue-500/20 text-blue-500 border-blue-500/50'
: `${theme.card} ${theme.hover} ${theme.border}`
: 'bg-dark-800 hover:bg-dark-700 border-gray-700'
}`}
>
<AlertCircle className="w-4 h-4 inline mr-2" />
@@ -208,7 +208,7 @@ export default function TicketChat({ ticket, token, user, theme, onBack }) {
className={`flex-1 px-3 py-2 rounded-lg border transition ${
currentTicket.status === 'closed'
? 'bg-green-500/20 text-green-500 border-green-500/50'
: `${theme.card} ${theme.hover} ${theme.border}`
: 'bg-dark-800 hover:bg-dark-700 border-gray-700'
}`}
>
<CheckCircle className="w-4 h-4 inline mr-2" />
@@ -228,20 +228,20 @@ export default function TicketChat({ ticket, token, user, theme, onBack }) {
<div
className={`max-w-[70%] rounded-2xl px-4 py-3 ${
msg.author === 'system'
? `${theme.tertiary} ${theme.border} border text-center`
? 'bg-dark-700 border-gray-700 border text-center'
: msg.author === user.username
? `${theme.accent} text-white`
: `${theme.card} ${theme.border} border`
? 'bg-primary-600 text-white'
: 'bg-dark-800 border-gray-700 border'
}`}
>
{msg.author !== 'system' && msg.author !== user.username && (
<div className={`text-xs font-semibold mb-1 ${theme.textSecondary}`}>
<div className="text-xs font-semibold mb-1 text-gray-400">
{msg.author}
</div>
)}
<div className="whitespace-pre-wrap break-words">{msg.text}</div>
<div className={`text-xs mt-1 ${
msg.author === user.username ? 'text-white/70' : theme.textSecondary
msg.author === user.username ? 'text-white/70' : 'text-gray-400'
}`}>
{new Date(msg.timestamp).toLocaleTimeString('ru-RU')}
</div>
@@ -253,7 +253,7 @@ export default function TicketChat({ ticket, token, user, theme, onBack }) {
{/* Input */}
{currentTicket.status !== 'closed' && (
<form onSubmit={sendMessage} className={`${theme.border} border-t p-4`}>
<form onSubmit={sendMessage} className="border-gray-700 border-t p-4">
<div className="flex gap-2">
<input
type="text"
@@ -261,12 +261,12 @@ export default function TicketChat({ ticket, token, user, theme, onBack }) {
onChange={(e) => setNewMessage(e.target.value)}
placeholder="Введите сообщение..."
disabled={loading}
className={`flex-1 ${theme.input} ${theme.border} border rounded-xl px-4 py-3 ${theme.text} focus:outline-none focus:ring-2 focus:ring-blue-500 transition`}
className="input flex-1"
/>
<button
type="submit"
disabled={loading || !newMessage.trim()}
className={`${theme.accent} ${theme.accentHover} px-6 py-3 rounded-xl flex items-center gap-2 text-white transition disabled:opacity-50`}
className="btn-primary px-6 py-3 flex items-center gap-2 disabled:opacity-50"
>
<Send className="w-4 h-4" />
Отправить