This commit is contained in:
che
2026-07-28 08:53:19 +05:00
parent 2dd7d33c8b
commit e79bbbfcc4
25 changed files with 1303 additions and 148 deletions
@@ -135,6 +135,14 @@ function quickReplies(mode: ReplyMode) {
return mode === "success" ? executorSuccessReplies : executorFailureReplies;
}
function employeeName(employee: Employee | null | undefined) {
return employee?.name || employee?.short_name || "не указан";
}
function showEmployeeName(employee: Employee | null | undefined) {
showToast(employeeName(employee));
}
async function sendMessage(status: string, text: string) {
const key = actionKey(status);
if (sendingActionKey.value) {
@@ -184,67 +192,48 @@ async function sendMessage(status: string, text: string) {
>
<div class="approval-task-head">
<div class="approval-task-head__main">
<div class="approval-task-title">
{{ task.text?.trim() || task.result?.trim() || `Задача #${task.id}` }}
<div class="approval-task-title-row">
<RemoteImage
class="approval-person-avatar approval-person-avatar--author"
round
width="30"
height="30"
:src="task.author?.avatar_small ?? ''"
:fallback-text="employeeName(task.author)"
@click.stop="showEmployeeName(task.author)"
/>
<div class="approval-task-title">
{{ task.text?.trim() || task.result?.trim() || `Задача #${task.id}` }}
</div>
</div>
<div class="approval-task-meta">ID {{ task.id }} · {{ task.deadline }}</div>
</div>
<van-tag plain :type="statusType(task.get_status_class)">
{{ task.get_status }}
</van-tag>
</div>
<van-cell-group inset>
<div class="approval-person-list">
<div class="approval-person-item">
<div class="approval-task-status">
<van-tag plain :type="statusType(task.get_status_class)">
{{ task.get_status }}
</van-tag>
<div class="approval-status-avatars">
<RemoteImage
class="approval-person-avatar"
round
width="32"
height="32"
width="28"
height="28"
:src="task.doer?.avatar_small ?? ''"
:fallback-text="employeeName(task.doer)"
@click.stop="showEmployeeName(task.doer)"
/>
<div class="approval-person-body">
<div class="approval-person-role">Исполнитель</div>
<div class="approval-person-name">
{{ task.doer?.short_name ?? task.doer?.name ?? 'не указан' }}
</div>
</div>
</div>
<div class="approval-person-item">
<RemoteImage
class="approval-person-avatar"
round
width="32"
height="32"
:src="task.author?.avatar_small ?? ''"
/>
<div class="approval-person-body">
<div class="approval-person-role">Автор</div>
<div class="approval-person-name">
{{ task.author?.short_name ?? task.author?.name ?? 'не указан' }}
</div>
</div>
</div>
<div class="approval-person-item">
<RemoteImage
class="approval-person-avatar"
round
width="32"
height="32"
width="28"
height="28"
:src="task.responsible?.avatar_small ?? ''"
:fallback-text="employeeName(task.responsible)"
@click.stop="showEmployeeName(task.responsible)"
/>
<div class="approval-person-body">
<div class="approval-person-role">Ответственный</div>
<div class="approval-person-name">
{{ task.responsible?.short_name ?? task.responsible?.name ?? 'не указан' }}
</div>
</div>
</div>
</div>
</van-cell-group>
</div>
<div class="approval-task-messages">
<div class="approval-task-messages__title">Сообщения</div>
@@ -436,13 +425,34 @@ async function sendMessage(status: string, text: string) {
min-width: 0;
}
.approval-task-title-row {
display: flex;
align-items: flex-start;
gap: 8px;
}
.approval-task-title {
min-width: 0;
font-size: 15px;
font-weight: 600;
line-height: 1.35;
word-break: break-word;
}
.approval-task-status {
display: flex;
flex: none;
flex-direction: column;
align-items: flex-start;
gap: 8px;
}
.approval-status-avatars {
display: flex;
align-items: center;
gap: 6px;
}
.approval-task-meta {
margin-top: 4px;
color: #6b7280;
@@ -453,41 +463,13 @@ async function sendMessage(status: string, text: string) {
padding: 12px 16px 16px;
}
.approval-person-list {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 6px;
padding: 8px 10px;
}
.approval-person-item {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
}
.approval-person-avatar {
flex: none;
cursor: pointer;
}
.approval-person-body {
min-width: 0;
flex: 1;
}
.approval-person-role {
color: #6b7280;
font-size: 10px;
line-height: 1.2;
}
.approval-person-name {
.approval-person-avatar--author {
margin-top: 1px;
font-size: 12px;
font-weight: 500;
line-height: 1.35;
word-break: break-word;
}
.approval-task-messages__title {