Обновление списка подготовленных параметров
This commit is contained in:
+179
-97
@@ -8,62 +8,69 @@ let currentToolboxData = null;
|
|||||||
|
|
||||||
// Список предопределенных характеристик с разделами
|
// Список предопределенных характеристик с разделами
|
||||||
const predefinedSpecs = {
|
const predefinedSpecs = {
|
||||||
"Универсальные": [
|
"Инструмент для ЧПУ": [
|
||||||
"Диаметр",
|
{ "Тип крепления": ["BT", "ER", "HSK", "ISO", "Weldon"] },
|
||||||
"Длина",
|
"Допуск биения",
|
||||||
"Черновая",
|
"Длина режущей части",
|
||||||
"Чистовая",
|
"Максимальная подача",
|
||||||
"Материал инструмента",
|
"Максимальные обороты",
|
||||||
"Покрытие (TiN, TiAlN, AlTiN)",
|
"Рабочая часть",
|
||||||
"Тип хвостовика",
|
{ "Тип спирали": ["Левосторонняя", "Правосторонняя"] }
|
||||||
"Назначение",
|
|
||||||
"По стали",
|
|
||||||
"По нержавейке",
|
|
||||||
"По алюминию",
|
|
||||||
"Твёрдый сплав",
|
|
||||||
"HSS"
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"Фрезеровка": [
|
"Сверла": [
|
||||||
"Кол-во перьев",
|
{ "Тип хвостовика": ["Морзе", "Цилиндрический"] }
|
||||||
"Тип фрезы (концевая, торцевая, черновая)",
|
|
||||||
"Угол спирали",
|
|
||||||
"Геометрия зубьев"
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"Токарка": [
|
"Токарка": [
|
||||||
"Пластины",
|
"Пластины",
|
||||||
"Форма пластины (C, D, V, W, T)",
|
{ "Форма пластины": ["C", "D", "T", "V", "W", "Резьбовая"] },
|
||||||
"Радиус",
|
"Радиус",
|
||||||
"Наружная",
|
{ "Тип резьбы": ["Внутренняя", "Наружная"] },
|
||||||
"Внутренняя",
|
{ "Исполнение резьбы": ["Левая", "Правая"] },
|
||||||
"Резьбовая",
|
|
||||||
"Шаг",
|
"Шаг",
|
||||||
"Тип державки",
|
{ "Угол резьбы": [30, 55, 60] },
|
||||||
"Направление (правое/левое)",
|
"Шаг",
|
||||||
"Система крепления"
|
{ "Профиль резьбы": ["Неполный", "Полный"] }
|
||||||
],
|
],
|
||||||
|
|
||||||
"Сверла": [
|
"Универсальные": [
|
||||||
"Угол заточки (118°, 135°)",
|
"Диаметр",
|
||||||
"Тип хвостовика (цилиндрический, Морзе)",
|
"Длина",
|
||||||
"Глубокое сверление"
|
{ "Вид обработки": ["На удар", "Черновая", "Чистовая"] },
|
||||||
|
{ "Материал инструмента": ["HSS", "Твёрдый сплав"] },
|
||||||
|
{ "Покрытие": ["AlTiN", "TiAlN", "TiN"] },
|
||||||
|
"Тип хвостовика",
|
||||||
|
"Назначение",
|
||||||
|
{
|
||||||
|
"Обрабатываемый материал": [
|
||||||
|
"H (Твёрдые материалы)",
|
||||||
|
"M (Нержавеющая сталь)",
|
||||||
|
"N (Цветные металлы)",
|
||||||
|
"P (Сталь)",
|
||||||
|
"S (Жаропрочные)"
|
||||||
|
]
|
||||||
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
"Инструмент для ЧПУ": [
|
"Фрезеровка": [
|
||||||
"Тип инструмента (фреза, сверло, развертка, гравёр, фасочник)",
|
"Кол-во перьев",
|
||||||
"Тип обработки (2D, 3D, контурная, карманная)",
|
{
|
||||||
"Ступенчатая геометрия",
|
"Тип фрезы": [
|
||||||
"Тип крепления (ER, Weldon, HSK, BT, ISO)",
|
"Коническая",
|
||||||
"Максимальные обороты",
|
"Концевая",
|
||||||
"Максимальная подача",
|
"Радиусная",
|
||||||
"Допуск биения",
|
"Сферическая",
|
||||||
"Тип спирали (правосторонняя, левосторонняя)",
|
"Торцевая",
|
||||||
"Длина режущей части",
|
"Фасочная"
|
||||||
"Рабочая часть"
|
]
|
||||||
|
},
|
||||||
|
"Угол спирали",
|
||||||
|
"Геометрия зубьев"
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
async function getCookieData() {
|
async function getCookieData() {
|
||||||
accessData = await getCookie('toolbox_access');
|
accessData = await getCookie('toolbox_access');
|
||||||
userData = await getCookie('toolbox_user');
|
userData = await getCookie('toolbox_user');
|
||||||
@@ -4796,81 +4803,159 @@ async function manageToolkit(toolkitData = null, categories = null, action = 'cr
|
|||||||
const specModal = document.createElement('div');
|
const specModal = document.createElement('div');
|
||||||
specModal.className = 'modal fade';
|
specModal.className = 'modal fade';
|
||||||
specModal.id = 'addSpecModal';
|
specModal.id = 'addSpecModal';
|
||||||
|
|
||||||
specModal.innerHTML = `
|
specModal.innerHTML = `
|
||||||
<div class="modal-dialog modal-dialog-centered">
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title"><i class="bi bi-gear me-2"></i>${modalTitle}</h5>
|
<h5 class="modal-title">
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
<i class="bi bi-gear me-2"></i>${modalTitle}
|
||||||
</div>
|
</h5>
|
||||||
<div class="modal-body">
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
<div class="mb-3">
|
</div>
|
||||||
<label for="specName" class="form-label required">Название характеристики</label>
|
|
||||||
<div class="input-group">
|
<div class="modal-body">
|
||||||
<input type="text" class="form-control" id="specName"
|
<!-- Название -->
|
||||||
placeholder="Введите название" value="${oldKey || ''}">
|
<div class="mb-3">
|
||||||
<button class="btn btn-outline-secondary dropdown-toggle" type="button"
|
<label class="form-label required">Название характеристики</label>
|
||||||
data-bs-toggle="dropdown" aria-expanded="false">
|
<div class="input-group">
|
||||||
<i class="bi bi-list"></i>
|
<input type="text" class="form-control" id="specName"
|
||||||
</button>
|
value="${oldKey || ''}" placeholder="Введите название">
|
||||||
<ul class="dropdown-menu dropdown-menu-end" style="max-height: 300px; overflow-y: auto;">
|
|
||||||
${Object.entries(predefinedSpecs).map(([category, items]) => `
|
<button class="btn btn-outline-secondary dropdown-toggle"
|
||||||
<li><h6 class="dropdown-header">${category}</h6></li>
|
data-bs-toggle="dropdown">
|
||||||
${items.map(item => `
|
<i class="bi bi-list"></i>
|
||||||
<li>
|
</button>
|
||||||
<button class="dropdown-item" type="button" onclick="selectPredefinedSpec('${item}')">
|
|
||||||
${item}
|
<ul class="dropdown-menu dropdown-menu-end"
|
||||||
</button>
|
style="max-height:300px;overflow-y:auto;">
|
||||||
</li>
|
${buildSpecNameDropdown()}
|
||||||
`).join('')}
|
</ul>
|
||||||
`).join('')}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="specValue" class="form-label required">Значение</label>
|
|
||||||
<input type="text" class="form-control" id="specValue"
|
|
||||||
placeholder="Введите значение" value="${oldValue || ''}">
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
<!-- Значение -->
|
||||||
<button type="button" class="btn btn-primary" id="saveSpecBtn">${saveButtonText}</button>
|
<div class="mb-3">
|
||||||
|
<label class="form-label required">Значение</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="text" class="form-control" id="specValue"
|
||||||
|
value="${oldValue || ''}" placeholder="Введите значение">
|
||||||
|
|
||||||
|
<button class="btn btn-outline-secondary dropdown-toggle"
|
||||||
|
data-bs-toggle="dropdown">
|
||||||
|
<i class="bi bi-list"></i>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<ul class="dropdown-menu dropdown-menu-end"
|
||||||
|
id="specValueDropdown"
|
||||||
|
style="max-height:300px;overflow-y:auto;">
|
||||||
|
<li>
|
||||||
|
<span class="dropdown-item disabled">
|
||||||
|
Сначала выберите параметр
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||||
|
<button class="btn btn-primary" id="saveSpecBtn">${saveButtonText}</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
document.body.appendChild(specModal);
|
document.body.appendChild(specModal);
|
||||||
const bsSpecModal = new bootstrap.Modal(specModal);
|
const bsSpecModal = new bootstrap.Modal(specModal);
|
||||||
|
|
||||||
// Функция выбора предопределенной характеристики
|
/* ---------- helpers ---------- */
|
||||||
|
|
||||||
|
function buildSpecNameDropdown() {
|
||||||
|
return Object.entries(predefinedSpecs).map(([category, items]) => `
|
||||||
|
<li><h6 class="dropdown-header">${category}</h6></li>
|
||||||
|
${items.map(item => {
|
||||||
|
const name = typeof item === 'string'
|
||||||
|
? item
|
||||||
|
: Object.keys(item)[0];
|
||||||
|
|
||||||
|
return `
|
||||||
|
<li>
|
||||||
|
<button class="dropdown-item" type="button"
|
||||||
|
onclick="selectPredefinedSpec('${name.replace(/'/g, "\\'")}')">
|
||||||
|
${name}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
`;
|
||||||
|
}).join('')}
|
||||||
|
`).join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateValueDropdown(specName) {
|
||||||
|
const dropdown = document.getElementById('specValueDropdown');
|
||||||
|
dropdown.innerHTML = '';
|
||||||
|
|
||||||
|
const values = findSpecValues(specName);
|
||||||
|
|
||||||
|
if (!values) {
|
||||||
|
dropdown.innerHTML = `
|
||||||
|
<li>
|
||||||
|
<span class="dropdown-item disabled">
|
||||||
|
Только ручной ввод
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
`;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
values.forEach(val => {
|
||||||
|
dropdown.innerHTML += `
|
||||||
|
<li>
|
||||||
|
<button class="dropdown-item" type="button"
|
||||||
|
onclick="selectSpecValue('${val}')">
|
||||||
|
${val}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function findSpecValues(name) {
|
||||||
|
for (const items of Object.values(predefinedSpecs)) {
|
||||||
|
for (const item of items) {
|
||||||
|
if (typeof item === 'object' && item[name]) {
|
||||||
|
return item[name];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------- global callbacks ---------- */
|
||||||
|
|
||||||
window.selectPredefinedSpec = function (name) {
|
window.selectPredefinedSpec = function (name) {
|
||||||
document.getElementById('specName').value = name;
|
document.getElementById('specName').value = name;
|
||||||
|
updateValueDropdown(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Обработчик сохранения
|
window.selectSpecValue = function (value) {
|
||||||
|
document.getElementById('specValue').value = value;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* ---------- save ---------- */
|
||||||
|
|
||||||
specModal.querySelector('#saveSpecBtn').addEventListener('click', () => {
|
specModal.querySelector('#saveSpecBtn').addEventListener('click', () => {
|
||||||
const name = document.getElementById('specName').value.trim();
|
const name = document.getElementById('specName').value.trim();
|
||||||
const value = document.getElementById('specValue').value.trim();
|
const value = document.getElementById('specValue').value.trim();
|
||||||
|
|
||||||
if (!name) {
|
if (!name) return showError('Введите название характеристики');
|
||||||
showError('Введите название характеристики');
|
if (!value) return showError('Введите значение характеристики');
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!value) {
|
|
||||||
showError('Введите значение характеристики');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Если это режим редактирования и название изменилось, удаляем старую характеристику
|
|
||||||
if (isEditMode && oldKey !== name) {
|
if (isEditMode && oldKey !== name) {
|
||||||
delete specifications[oldKey];
|
delete specifications[oldKey];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Добавляем/обновляем характеристику
|
|
||||||
specifications[name] = value;
|
specifications[name] = value;
|
||||||
updateSpecificationsList();
|
updateSpecificationsList();
|
||||||
|
|
||||||
@@ -4881,11 +4966,8 @@ async function manageToolkit(toolkitData = null, categories = null, action = 'cr
|
|||||||
}, 300);
|
}, 300);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Очистка при закрытии
|
|
||||||
specModal.addEventListener('hidden.bs.modal', () => {
|
specModal.addEventListener('hidden.bs.modal', () => {
|
||||||
setTimeout(() => {
|
setTimeout(() => specModal.remove(), 300);
|
||||||
if (specModal.parentNode) specModal.remove();
|
|
||||||
}, 300);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
bsSpecModal.show();
|
bsSpecModal.show();
|
||||||
|
|||||||
Reference in New Issue
Block a user