UNPKG

carget

Version:

optimization js code for carget website

372 lines (345 loc) 12.7 kB
let Google_DB = {} let carData = {} let modelsArray = [] function innerGoogleBD() { // Проходимся по элементам Google_DB for (let i = 0; i < Google_DB.length; i++) { // Пропускаем первый элемент и проверяем наличие данных в текущем строковом массиве if (i === 0 || Google_DB[i].some((entry) => entry !== '')) { // Фильтруем пустые элементы и пропускаем первый элемент let filteredData = Google_DB[i].slice(1).filter((entry) => entry !== '') // Если есть данные в текущем строковом массиве if (filteredData.length > 0) { // Создаем объект для хранения данных текущей категории let categoryData = {} // Если текущая категория - модели if (Google_DB[i][0] === 'models') { // Проходимся по элементам данных и преобразуем строки в объекты for (let j = 0; j < filteredData.length; j++) { // Проверяем, является ли текущий элемент строкой if (typeof filteredData[j] === 'string') { // Удаляем лишние символы "{" и "}", а также лишние пробелы и разбиваем строку на ключ и значение let parts = filteredData[j] .replace('{', '') .replace('}', '') .trim() .split(':') // Если удалось разделить строку if (parts.length === 2) { // Извлекаем ключ и значение и добавляем данные в объект let key = parts[0].trim() let value = JSON.parse(parts[1].trim()) categoryData[key] = value } } } } else { // Проходимся по элементам данных и парсим их в объекты for (let j = 0; j < filteredData.length; j++) { // Проверяем, является ли текущий элемент строкой if (typeof filteredData[j] === 'string') { // Разбиваем строку на ключ и значение по разделителю ":" let parts = filteredData[j].split(':') // Если удалось разделить строку if (parts.length === 2) { // Удаляем лишние пробелы в ключе и значении и добавляем данные в объект let key = parts[0].trim() let value = parts[1].trim() categoryData[key] = value } } } } // Добавляем данные текущей категории в объект carData carData[Google_DB[i][0]] = categoryData } } } // Выводим объект с данными в консоль console.log(carData) } function convertModelsData(modelsData) { // Проходимся по элементам массива данных о моделях, начиная с второго элемента for (let i = 1; i < modelsData.length; i++) { // Если текущий элемент не пустой if (modelsData[i]) { // Разделяем элемент на имя модели и данные о ней по символу '#' let [modelName, modelDataStr] = modelsData[i] .split('#') .map((str) => str.trim()) // Инициализируем объект данных о модели let modelData = {} // Разделяем данные о модели на строки let modelDataLines = modelDataStr.split('\n') // Проходимся по каждой строке данных о модели modelDataLines.forEach((line) => { // Если строка не пустая if (line.trim() !== '') { // Разделяем строку на ключ и значение по символу ':' let [key, value] = line.split(':').map((str) => str.trim()) // Если есть ключ и значение if (key && value) { // Приводим значение к числу, если это возможно value = !isNaN(value) ? parseFloat(value) : value // Добавляем пару ключ-значение к данным о модели modelData[key] = value } } }) // Создаем объект модели для добавления в массив моделей let modelObject = { [modelName]: modelData } // Добавляем объект модели в массив моделей modelsArray.push(modelObject) } } return modelsArray } function gExel() { const sheetName = document.title const URL_GOOGLE_SHEET = 'https://script.google.com/macros/s/AKfycbx4y_rXdz-EGRs2WbBDp5DmQ40wAMtAqcm9NW3Ki6c70dAy1-xj2T4I5a06gl6PkAUk/exec?sheetName=' const app = URL_GOOGLE_SHEET + sheetName let xhr = new XMLHttpRequest() xhr.open('GET', app) xhr.onreadystatechange = function () { if (xhr.readyState !== 4) return if (xhr.status == 200) { try { var r = JSON.parse(xhr.responseText) Google_DB = r['result'] console.log('result', Google_DB) } catch (e) { console.error('Error parsing JSON:', e) } } } xhr.send() } gExel() let carState = { model: ['Zeekr 001 NEW', 'We'], // выбранная модель models: [ // все модели, стоимости в юанях { We: { price: 269000, sale: 0 } }, { We_4wd: { price: 269000, sale: 0 } }, { Me: { price: 299000, sale: 0 } }, { You: { price: 329000, sale: 0 } }, { Zsport: { price: 279398, sale: 0 } }, ], // ОПЦИИ options: { color: [ 0, 'ХАКИ', // названия как в каруселях alt [ { price: 0, sale: 78000, color: 'ХАКИ', show: false, models: ['We', 'We_4wd', 'Me', 'You'], }, { price: 0, sale: 78000, color: 'ОРАНЖЕВЫЙ', show: false, models: ['We', 'We_4wd', 'Me', 'You', 'Zsport'], }, { price: 0, sale: 78000, color: 'СИНИЙ', show: false, models: ['We', 'We_4wd', 'Me', 'You', 'Zsport'], }, { price: 0, sale: 0, color: 'БЕЛЫЙ', show: false, models: ['We', 'We_4wd', 'Me', 'You'], }, { price: 0, sale: 0, color: 'СЕРЫЙ', show: false, models: ['We', 'We_4wd', 'Me', 'You'], }, { price: 0, sale: 0, color: 'ЧЕРНЫЙ', show: false, models: ['We', 'We_4wd', 'Me', 'You'], }, ], ], // ВЫБОР КОЛЕСА wheels: [ 0, '21” DOUBLE STAR', [ { color: '21” DOUBLE STAR', diametr: 21, price: 0, sale: 208000, show: false, models: ['We', 'We_4wd', 'Me', 'You', 'Zsport'], }, { color: '21” ARC PHANTOM', diametr: 21, price: 0, sale: 208000, show: false, models: ['We', 'We_4wd', 'Me', 'You'], }, { color: '22” MULTI SPOKE SPORT', diametr: 22, price: 260000, sale: 0, models: ['We', 'We_4wd', 'Me', 'You'], }, ], true, ], // ВЫБОР ЦВЕТА САЛОНА interiorColor: [ 0, 'СЕРЫЙ', // названия как в каруселях alt [ { price: 0, sale: 0, color: 'СЕРЫЙ', show: false, models: ['We', 'We_4wd', 'Me', 'You'], }, { price: 0, sale: 0, color: 'СЕРЫЙ С СИНЕЙ ПОЛОСОЙ', show: false, models: ['We', 'We_4wd', 'Me', 'You'], }, { price: 0, sale: 0, color: 'БЕЖЕВЫЙ-СИНИЙ', show: false, models: ['We', 'We_4wd', 'Me', 'You'], }, { price: 0, sale: 0, color: 'ЗЕЛЁНЫЙ', show: false, models: ['We', 'We_4wd', 'Me', 'You'], }, { price: 0, sale: 0, color: 'СЕРЫЙ-ОРАНЖЕВЫЙ', show: false, models: ['Zsport'], }, ], ], // ВЫБОР ДОПОЛНИТЕЛЬНОЙ ОПЦИИ runningBoards: [ [ // перечисления опций { price: 364000, sale: 0, show: false, check: true, title: 'ПНЕВМАТИЧЕСКАЯ ПОДВЕСКА', description: 'Высота кузова меняется в диапазоне 117-200 мм, гибко адаптируясь к различным дорожным условиям', models: ['We', 'We_4wd'], }, { price: 208000, sale: 0, show: false, check: true, title: 'ПАНОРАМНАЯ КРЫША ИЗ ЭЛЕКТРОХРОМНОГО СТЕКЛА ', description: 'Цвет и рисунок стекла может варьироваться. Защита от ультрафиолета 99%', models: ['We', 'We_4wd', 'Me'], }, { price: 208000, sale: 0, show: false, check: true, title: '4 СЕНСОРНЫЕ АВТОМАТИЧЕСКИЕ ДВЕРИ', description: 'С ДАТЧИКАМИ ПРЕПЯТСТВИЙ И ЗАДНЯЯ ИНДУКЦИОННАЯ ДВЕРЬ С ПАМЯТЬЮ', models: ['We', 'We_4wd', 'Me'], }, { price: 65000, sale: 0, show: false, check: true, title: '15.6 ДЮЙМОВЫЙ ПЛАВАЮЩИЙ ДИСПЛЕЙ', description: 'С интеллектуальным поворотным механизмом', models: ['We', 'We_4wd', 'Me'], }, { price: 91000, sale: 0, show: false, check: true, title: 'ФАРКОП', description: 'Максимальная масса буксируемого прицепа 2 тонны', models: ['All'], }, { price: 26000, sale: 0, show: false, check: true, title: 'КРЫША ЧЕРНОГО ЦВЕТА ', description: '', models: ['All'], }, { price: 166400, sale: 0, show: true, check: false, title: 'ДОМАШНЯЯ ЗАРЯДКА 20 КВТ', description: 'ПРОВОД 30 МЕТРОВ', models: ['All'], }, { price: 78000, sale: 0, show: true, check: false, title: 'ДОМАШНЯЯ ЗАРЯДКА 7 КВТ', description: 'ПРОВОД 30 МЕТРОВ', models: ['All'], }, ], true, // если надо СКРЫТЬ то ставим false ], }, delivery: { fromTurgartToBishkek: 1200, // Стоимость доставки из Тургарт в Бишкек в долларах customs: 4500, // Стоимость таможни в долларах otherExpenses: 1400, // Прочие расходы в долларах fromBishkekToRussia: 1200, // Стоимость доставки из Бишкека в РФ в долларах }, labFees: 45000, // Стоимость лаборатории (СБКТС и ЭПТС) в рублях recyclingFee: 32600, // Стоимость утилизационного сбора в рублях carLocalization: 0, // Стоимость руссификации авто в рублях marga: [10, 2, 22], // Маржа в процентах (5%, 1.5%, 28%) }