Правки
This commit is contained in:
@@ -434,8 +434,6 @@ defineExpose({ saveTask, deleteTask, archiveTask })
|
||||
-ms-overflow-style: none;
|
||||
/* Предотвращаем системные жесты (pull-to-refresh) */
|
||||
overscroll-behavior: contain;
|
||||
/* Разрешаем и горизонтальный и вертикальный pan - колонки внутри скроллятся вертикально */
|
||||
touch-action: pan-x pan-y;
|
||||
}
|
||||
|
||||
.board.mobile .columns::-webkit-scrollbar {
|
||||
|
||||
@@ -142,17 +142,33 @@ const handleDrop = (e) => {
|
||||
.column.mobile {
|
||||
width: 100vw;
|
||||
min-width: 100vw;
|
||||
height: 100%;
|
||||
max-height: none;
|
||||
/* Высота по контенту, но ограничена доступным пространством */
|
||||
height: fit-content;
|
||||
max-height: calc(100% - 20px);
|
||||
padding: 0 16px;
|
||||
scroll-snap-align: start;
|
||||
scroll-snap-stop: always;
|
||||
flex-shrink: 0;
|
||||
/* Вертикальный скролл на уровне колонки - убирает вложенные скроллы */
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
/* Скрываем скроллбар в мобильной версии - пользователи свайпают пальцем */
|
||||
.column.mobile {
|
||||
scrollbar-width: none;
|
||||
-ms-overflow-style: none;
|
||||
}
|
||||
|
||||
.column.mobile::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.column.mobile .cards {
|
||||
max-height: calc(100vh - 320px);
|
||||
overflow-y: auto;
|
||||
/* Без overflow - скролл на уровне .column */
|
||||
max-height: none;
|
||||
overflow: visible;
|
||||
min-height: auto;
|
||||
}
|
||||
|
||||
.column.drag-over .cards {
|
||||
|
||||
@@ -772,6 +772,13 @@ const handleSave = async () => {
|
||||
|
||||
try {
|
||||
if (isNew.value) {
|
||||
// Проверяем что у всех колонок есть имена
|
||||
const emptyColumnNew = form.value.columns.find(c => !c.name_columns?.trim())
|
||||
if (emptyColumnNew) {
|
||||
toast.error('Укажите название для всех колонок')
|
||||
return
|
||||
}
|
||||
|
||||
// Проверяем что у всех отделов есть имена (для нового проекта тоже)
|
||||
const emptyDeptNew = form.value.departments.find(d => !d.name_departments?.trim())
|
||||
if (emptyDeptNew) {
|
||||
@@ -826,6 +833,13 @@ const handleSave = async () => {
|
||||
}
|
||||
} else {
|
||||
// Редактирование проекта
|
||||
// Проверяем что у всех колонок есть имена
|
||||
const emptyColumn = form.value.columns.find(c => !c.name_columns?.trim())
|
||||
if (emptyColumn) {
|
||||
toast.error('Укажите название для всех колонок')
|
||||
return
|
||||
}
|
||||
|
||||
// Обновляем название если изменилось
|
||||
if (form.value.name !== initialForm.value.name) {
|
||||
await store.updateProject(props.project.id, form.value.name)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
:alt="selectedOption.label"
|
||||
class="option-avatar"
|
||||
>
|
||||
<span v-else-if="selectedOption?.label" class="avatar-placeholder">{{ selectedOption.label[0] }}</span>
|
||||
<span v-else-if="!selectedOption" class="no-selection-icon">—</span>
|
||||
<span class="selected-label">{{ selectedOption?.label || placeholder }}</span>
|
||||
</slot>
|
||||
@@ -54,6 +55,7 @@
|
||||
:alt="option.label"
|
||||
class="option-avatar"
|
||||
>
|
||||
<span v-else class="avatar-placeholder">{{ (option.label || '?')[0] }}</span>
|
||||
<div class="option-content">
|
||||
<span class="option-label">{{ option.label }}</span>
|
||||
<a
|
||||
@@ -133,6 +135,7 @@
|
||||
:alt="option.label"
|
||||
class="option-avatar"
|
||||
>
|
||||
<span v-else class="avatar-placeholder">{{ (option.label || '?')[0] }}</span>
|
||||
<div class="option-content">
|
||||
<span class="option-label">{{ option.label }}</span>
|
||||
<a
|
||||
@@ -498,11 +501,31 @@ onUpdated(refreshIcons)
|
||||
.option-avatar {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
border-radius: 6px;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.avatar-placeholder {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
color: var(--text-secondary);
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
text-transform: uppercase;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.dropdown-item.active .avatar-placeholder {
|
||||
background: rgba(0, 0, 0, 0.15);
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.option-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@@ -703,7 +726,14 @@ onUpdated(refreshIcons)
|
||||
.mobile-select-item .option-avatar {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 10px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.mobile-select-item .avatar-placeholder {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.mobile-select-item .option-content {
|
||||
|
||||
@@ -316,15 +316,15 @@ onUnmounted(() => {
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
||||
}
|
||||
|
||||
/* Transition — плавное появление */
|
||||
/* Transition — выезд справа для десктопа */
|
||||
.panel-enter-active,
|
||||
.panel-leave-active {
|
||||
transition: opacity 0.2s ease;
|
||||
transition: opacity 0.25s ease;
|
||||
}
|
||||
|
||||
.panel-enter-active .panel,
|
||||
.panel-leave-active .panel {
|
||||
transition: opacity 0.2s ease, transform 0.2s ease;
|
||||
transition: transform 0.25s ease;
|
||||
}
|
||||
|
||||
.panel-enter-from,
|
||||
@@ -334,8 +334,7 @@ onUnmounted(() => {
|
||||
|
||||
.panel-enter-from .panel,
|
||||
.panel-leave-to .panel {
|
||||
opacity: 0;
|
||||
transform: scale(0.98);
|
||||
transform: translateX(100%);
|
||||
}
|
||||
|
||||
/* На мобильных убираем transform из анимации - он ломает layout в iOS PWA */
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
Target Server Version : 90200 (9.2.0)
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 18/01/2026 17:17:50
|
||||
Date: 20/01/2026 10:20:56
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
@@ -30,7 +30,7 @@ CREATE TABLE `accounts` (
|
||||
`avatar_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
||||
`telegram` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for accounts_session
|
||||
@@ -45,7 +45,7 @@ CREATE TABLE `accounts_session` (
|
||||
`ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
||||
`user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 101 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 137 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for cards_task
|
||||
@@ -69,7 +69,7 @@ CREATE TABLE `cards_task` (
|
||||
`id_project` int NULL DEFAULT NULL,
|
||||
`create_id_account` int NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 64 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 103 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for columns
|
||||
@@ -82,7 +82,7 @@ CREATE TABLE `columns` (
|
||||
`id_project` int NULL DEFAULT NULL,
|
||||
`id_order` int NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 62 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 158 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for comments
|
||||
@@ -97,7 +97,7 @@ CREATE TABLE `comments` (
|
||||
`date_create` datetime NULL DEFAULT NULL,
|
||||
`file_img` json NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 23 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 32 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for departments
|
||||
@@ -108,8 +108,9 @@ CREATE TABLE `departments` (
|
||||
`name_departments` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
||||
`color` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
||||
`id_project` int NULL DEFAULT NULL,
|
||||
`order_id` int NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 44 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for labels
|
||||
@@ -134,7 +135,7 @@ CREATE TABLE `project` (
|
||||
`id_ready` int NULL DEFAULT NULL,
|
||||
`id_admin` json NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for project_invites
|
||||
@@ -152,7 +153,7 @@ CREATE TABLE `project_invites` (
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_to_user`(`id_to_user` ASC, `status` ASC) USING BTREE,
|
||||
INDEX `idx_project`(`id_project` ASC) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for project_members
|
||||
@@ -169,6 +170,6 @@ CREATE TABLE `project_members` (
|
||||
UNIQUE INDEX `unique_member`(`id_project` ASC, `id_user` ASC) USING BTREE,
|
||||
INDEX `idx_project`(`id_project` ASC) USING BTREE,
|
||||
INDEX `idx_user`(`id_user` ASC) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 22 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
Reference in New Issue
Block a user