app/assets/javascript/c80_estate/backend/admin/src/areas.js in c80_estate-0.1.0.30 vs app/assets/javascript/c80_estate/backend/admin/src/areas.js in c80_estate-0.1.0.31

- old
+ new

@@ -236,10 +236,14 @@ var $item_props_container; // здесь живут селекты свойств var $btn_submit; var atype_id; // id подкатегории, которой принадлежит редактируемый предмет, извлекается из селекта $select_area_atype var $btn_add_area_prop; // кнопка "добавить свойство" + var init_price; + var init_price_area; + var init_square; + // вернёт true, если найдёт в $item_props_container селект свойства atype_id var _fCheckSelect = function (atype_id) { var result = false; var $selects = $item_props_container.find("fieldset").find('select'); $selects.each(function () { @@ -248,10 +252,26 @@ } }); return result; }; + // при входе на страницу - запомнить начальные значения + // они потом пригодятся если будем менять тип + var fGrabInitValues = function () { + init_price = $('ol.v_1').find('input[type=text]').addClass('highl').val(); + init_price_area = $('ol.v_14').find('input[type=text]').addClass('highl').val(); + init_square = $('ol.v_9').find('input[type=text]').addClass('highl').val(); + }; + + // когда сменили тип, необходимо установить сохранённые значения + // в соотв. текстовые поля + var fSetInitValuesToInputs = function () { + $('ol.v_1').find('input[type=text]').val(init_price).addClass('highl'); + $('ol.v_14').find('input[type=text]').val(init_price_area).addClass('highl'); + $('ol.v_9').find('input[type=text]').val(init_square).addClass('highl'); + }; + var fReqPropList = function (atype_id) { $.ajax({ url: "/estate/get_atype_propnames", data: { atype_id:atype_id }, dataType: "json", @@ -359,20 +379,169 @@ //} $fieldset.addClass('v_'+ielem["id"]); } + /*фиксируем начальные значения избранных свойств*/ + fGrabInitValues(); + fLoadingHide(); } else { alert( "done: не удалось получить данные о свойствах выбранной подкатегории." ); } }).fail(function(jqXHR, textStatus) { alert( "fail: не удалось получить данные о свойствах выбранной подкатегории: " + textStatus ); }); }; + var fInitSelectListening = function () { + + // допишем поясняющий текст "сначала выберите подкатегорию" + //var __fWelcomeTextAdd = function () { + // jsinit.$item_props_container_span.text("Характеристики [сначала выберите подкатегорию, тогда появятся свойства, присущие выбранной категории]"); + //}; + // + //удалим поясняющий текст "сначала выберите подкатегорию" + //var __fWelcomeTextRemove = function () { + // jsinit.$item_props_container_span.text("Характеристики"); + //}; + + // удалим, возможно уже добавленные в форму, свойства + var __removeMayBeAddedProps = function () { + //$("a.has_many_remove").click(); + $item_props_container.find('.inputs.has_many_fields').remove(); + }; + + // запрашиваем список имён свойств указанной подкатегории + var __reqStrsubcatPropnames = function (atype_id) { + //jsinit._log("[_reqStrsubcatPropnames]: atype_id = " + atype_id); + + $.ajax({ + url: "/estate/get_atype_propnames", + data: { atype_id:atype_id }, + dataType: "json", + type: 'POST' + }).done(function(data,result) { + //jsinit._log( data ); + + if (result == "success") { + console.log( "Кол-во свойств: " + data.length ); + + // удалим, возможно уже добавленные в форму, свойства + __removeMayBeAddedProps(); + //return; + + // количество свойств + var n = data.length; + + // "цикловые" переменные + var $ifs, // fieldset, + $iselprop, // очередной селект "имя свойства" + $iinputprop, // очередной input "значение свойства" + $ifindbyid, // вспомогательная переменная: содержит результат поиска по id с помощью регулярки + ielem; // очередной элемент из data + + for (var i=0; i<n; i++) { + + // фиксируем объект с данными, описывающий свойство предмета + ielem = data[i]; + + // нажмём кнопку "Добавить Item prop" + $btn_add_area_prop.click(); + + // фиксируем добавленный в форму fieldset + + //<fieldset class="inputs has_many_fields processed"> + // <ol> + // <li id="area_item_props_attributes_37_prop_name_input"> + // <select id="area_item_props_attributes_37_prop_name_id"> + // <option value="37">Артикул</option> + // </select> + // </li> + // <li id="area_item_props_attributes_37_value_input"> + // <input id="area_item_props_attributes_37_value" type="text"> + // </li> + // </ol> + //</fieldset> + + $ifs = $item_props_container.find("fieldset").not(".processed"); + $ifs.addClass("processed"); + + $ifindbyid = $ifs.find('[id^="area_item_props_attributes_"]'); + + // находим в ifs селект, отвечающий за имя свойства + $iselprop = $ifindbyid.find('select'); + //console.log(iselprop); + + // находим в ifs input, отвечающий за значение свойства + $iinputprop = $ifindbyid.find('input'); + + // в этот селект жестоко предустанавливаем значение из data, дописываем единицу измерения + $iselprop.find("option") + .filter(function () { + //console.log($(this).val() + " vs " + ielem["id"]); + return $(this).val() == ielem["id"]; //return $(this).text() == ielem["title"]; + }) + .prop('selected', true) + .text(function () { + var t = $(this).text(); + if (ielem["uom_title"] != null) { + t += ", " + ielem["uom_title"]; + } + return t; + }); // дописываем в конец единицу измерения + + //делаем его readonly + $iselprop.attr("disabled", true); // NOTE:: но в момент нажатия кнопки "Отправить" мы "разлачиваем" селект, чтобы параметры формы "правильно" отправлялись; + + // в input "производитель" - ставим "-1" и прячем его от пользователя + //if (ielem["id"] == 36) { + // $iinputprop.val("-1"); + // $ifs.css("display",'none'); + //} + $ifs.find("> ol").addClass('v_' + ielem["id"]); + } + + fLoadingHide(); + + fSetInitValuesToInputs(); + + } else { + alert( "done: не удалось получить данные о свойствах выбранной подкатегории." ); + } + + }) + .fail(function(jqXHR, textStatus) { + alert( "fail: не удалось получить данные о свойствах выбранной подкатегории: " + textStatus ); + }) + .always(function() { + //alert( "complete" ); + }); + }; + + // слушает изменения селекта с типами + // инициирует запрос за "Именами Свойств" выбранного в селекте "Типа" + // показывает загрузчик + var __onSelectStrSubcatChange = function () { + var atype_id = $select_area_atype[0].value; + //console.log("[_onSelectStrSubcatChange]: atype_id = " + atype_id); + if (atype_id == '') { + __removeMayBeAddedProps(); + //__fWelcomeTextAdd(); + } else { + fLoadingShow(); + __reqStrsubcatPropnames(atype_id); + //__fWelcomeTextRemove(); + } + }; + + // начинаем слушать изменение селекта "тип" - + $select_area_atype.on("change", __onSelectStrSubcatChange); + + }; + $(document).ready(function () { // инициализация // фиксируем селект "Тип площади" @@ -390,11 +559,11 @@ // фиксируем кнопку "Добавить свойство" $btn_add_area_prop = $item_props_container.find("a.has_many_add"); // блокируем селект "тип" - $select_area_atype.attr("disabled", true); + //$select_area_atype.attr("disabled", true); // блокируем селекты "свойства товара" $item_props_container.find("select").attr("disabled", true); // отмечаем уже имеющиеся fieldsets @@ -414,9 +583,11 @@ //e.preventDefault(); // for debug } else { e.preventDefault(); } }); + + fInitSelectListening(); }); fLoadingShow(); }; \ No newline at end of file