puzzle/views/admin/objects/object_edit.ejs
n0rdye 3555ff1dec modified: views/admin/objects/object_edit.ejs
Changed:
        page behaviour when saved
        object loading from GET request
2023-11-17 13:29:02 +00:00

340 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<style>
.object{
background-color: #bfe4ff;
border: dashed 4px transparent;
border-radius: 4px;
height: 55px;
width: 55px;
margin: 5px;
margin-top: 0px;
margin-bottom: 20px;
}
img{
width: 100%;
height: 100%;
object-fit: contain;
pointer-events: none;
}
#objs_in_group,#founded_objs_list{
display: flex;
flex-wrap: wrap;
padding: 0px;
}
#find_obj_btns{
/* display: flex; */
margin: auto 0px;
/* height: 25px; */
}
.object *{
font-size: calc(var(--main-font-size)/1.6);
}
.object td{
border: 1px #777777 solid;
padding: 0.5vw;
}
.object{
table-layout: fixed;
border-collapse: collapse;
border: 1px solid #B9B9B9;
}
.obj_table_labels{
background-color: #B9B9B9;
}
.obj_table_divs{
background-color: #ffffff;
}
</style>
<div style="display: flex;justify-content: space-between;padding-block: 1vw;">
<h1>Изменение объектов</h1>
<div id="find_obj_btns">
<button onclick="edit_get_objs(true)" class="btn_blue">Найти по названию</button>
<button onclick='gids = [];edit_get_objs();' class="btn_blue">Сбосить</button>
</div>
</div>
<div>
<div id="objs_in_group"></div>
</div>
<script>
// load_groups(()=>{
// edit_get_objs();
// });
const get_object_id = new URL(window.location).searchParams.get("object_id");
let wait_msg_object_load = (get_object_id != null)? msg("загружаем прошлый объект",{type:"wait"}):null;
function set_edit(id){
window.history.pushState({}, null, `${(new URL(window.location)).toString().split("?")[0]}?object_id=${id}`);
let menu = document.getElementById(`object_${id}`);
set_obj_edit_params(menu.getAttribute("src"),
menu.getAttribute("name").split("~")[0],
menu.getAttribute("height"),
menu.getAttribute("width"),
menu.getAttribute("cost"),
menu.getAttribute("gid"),
menu.getAttribute("colors"),
menu.getAttribute("grouped"),
menu.getAttribute("obj_id"));
window.scrollTo({
top: 0,
behavior: "smooth",
});
}
function edit_get_objs(by_name = false,callback){
document.getElementById("objs_in_group").innerHTML = "";
// if (obj_edit_type == "edit") set_obj_edit_params();
edit_load_objs((data)=>{
let wait_msg = msg("Загрузка объектов",{type:"wait"})
data.forEach(value => {
// console.log(value);
// // console.log($.cookie("cache"));
edit_load_obj(value["name"],"`img`",(odata)=>{
make_obj(odata["img"],value,"objs_in_group");
if(data.at(-1)["id"] == value["id"]){
msg_del(wait_msg.id);
msg("Объекты загружены")
if(get_object_id != null && wait_msg_object_load != null){
set_edit(get_object_id);
msg_del(wait_msg_object_load.id);
wait_msg_object_load = null;
}
if(callback)callback(true);
}
})
});
},by_name)
}
function gids_change(){
if (typeof gids[0] == 'undefined'){
gids = []
// edit_get_objs();
}
else{
let last = gids.at(-1)
gids = [last];
// edit_get_objs();
}
hide_menus();
}
function obj_del(id){
// let select = document.getElementById("group_select");
let menu = document.getElementById(`object_${id}`);
msg(`вы точно хотите удалить ${menu.getAttribute("name").split("~")[0]}?`,{type:"ask",res:(out)=>{if(out){
let wait_msg = msg("удаление товара",{type:"wait"});
$.post( "/admin/objects/delete", { id:id,})
.done(function( res ) {
if(res["out"] == "good"){
msg_del(wait_msg.id);
msg("товара удалён");
edit_get_objs();
}
});
}}})
}
function save_edited_obj(id){
let gid = gids[0];
let menu = document.getElementById(`object_${id}`);
let attributes = ["name","img","height","width","cost","colors","grouped"];
let cur_atts = {
name : document.getElementById("nobj_name").value,
height : document.getElementById("obj_height").value,
width : document.getElementById("obj_width").value,
img : document.getElementById('img_prev').getAttribute("src"),
cost : document.getElementById("obj_cost").value,
colors : String(document.getElementById("obj_color_check").checked),
grouped : String(document.getElementById("obj_group_check").checked)
}
let changes = {}
attributes.forEach(element => {
if(element != attributes.at(-1)){
check_change(element);
// console.log(element);
}
else if (element == attributes.at(-1)){
check_change(element);
// console.log(changes);
if(Object.keys(changes).length > 0){
make_obj_save(changes);
// console.log(changes);
}
else{
msg("нет изменений")
}
}
});
function check_change(element){
// console.log(changes[element],cur_atts[element]);
if(element == "name" && cur_atts[element] != menu.getAttribute(`${element}`).split("~")[0]){
changes[element] = cur_atts[element];
}
else if (element == "img" && cur_atts[element] != menu.getAttribute(`src`)){
let tmp = getBase64Image(cur_atts[element]);
changes[element] = tmp;
}
else if ((element != "name" && element != "img") && cur_atts[element] != menu.getAttribute(`${element}`)){
changes[element] = cur_atts[element];
}
}
function make_obj_save(){
load_group(gid,(group_db)=>{
if(changes["name"]) changes["name"] = (changes["name"]+"~g~"+group_db["name"]).replaceAll(" ","$");
let wait_msg = msg("сохранение товара",{type:"wait"});
$.post( "/admin/objects/edit", { id:menu.getAttribute(`obj_id`),changes:JSON.stringify(changes),gid:gid})
.done(function( res ) {
// console.log(res);
msg_del(wait_msg.id);
if(res["out"] == "good"){
if(res["name_err"]){
msg("название товара не было изменино поскольку оно занято",{type:"warning"})
}
else{
// window.history.pushState({}, null, `${(new URL(window.location)).toString().split("?")[0]}`);
// delete get_object_id;
msg("товар сохранён");
// set_obj_edit_params();
edit_get_objs();
}
}
});
})
}
}
function edit_load_obj(name,key,callback){
$.post( "/get_obj",{name:name,key:key})
.done(function( res ) {
if(res["out"] == "good"){
// console.log(res["body"]);
callback(res["body"]);
}
});
}
function edit_load_objs(callback,by_name = false){
// let select = document.getElementById("group_select");
if(!by_name){
$.post( "/get_objs")
.done(function( res ) {
if(res["out"] == "good"){
// console.log(res["body"]);
// res["body"].forEach(object => {
// // objs_store[`${element["name"]}`] = {description:element["description"],height:element["height"],width:element["width"],id:element["id"],name:element["name"]}
// let obj_main = document.createElement("div");
// });
callback(res["body"]);
}
});
}
else{
ask("название",{func:(name)=>{
$.post( "/admin/objects/find", { name:name.replaceAll(" ","$")})
.done(function( res ) {
if(res["out"] == "good"){
// console.log(res["body"]);
callback(res["body"])
}
})
}
});
}
}
function make_obj(img,value,list_id){
let obj_list = document.getElementById(list_id);
// let obj = document.createElement('div');
// let name_text = document.createElement('div');
// let img_elm = document.createElement('img');
let obj = document.createElement("table");
obj.title = `название:${value["name"].split("~")[0].replaceAll("$"," ")}\nцена:${value["cost"]}\nширина:${value["width"]}\nвысота${value["height"]}\nименение цвета:${Boolean(value["colors"])}\nартикуль:${value["name"]}`;
obj.id = `object_${value["id"]}`;
// obj.setAttribute("onclick",`set_edit(${value["id"]})`)
obj.classList.add(value["name"]);
obj.classList.add("object");
obj.setAttribute("name",value["name"].split("~")[0].replaceAll("$"," "))
obj.setAttribute("src",`${img}?${new Date().getTime()}`)
obj.setAttribute("height",value["height"])
obj.setAttribute("width",value["width"])
obj.setAttribute("obj_id",value["id"])
obj.setAttribute("cost",value["cost"])
obj.setAttribute("colors",Boolean(value["colors"]))
obj.setAttribute("grouped",Boolean(value["grouped"]))
obj.setAttribute("gid",value["gid"])
// // name_text.innerText = value["name"].split("~")[0].replaceAll("$"," ");
// img_elm.src = img;
// obj.append(img_elm)
// obj.append(name_text)
obj.style.width = "80vw";
obj.style.wordBreak = "break-all";
let divs = {
name : value["name"].split("~")[0].replaceAll("$"," "),
object : value["name"],
height : value["height"],
width : value["width"],
cost : value["cost"],
link : img,
color : Boolean(value["colors"]),
grouped : Boolean(value["grouped"]),
edit : `set_edit(${value["id"]})`
}
let labels = {
name : "Название",
object : "Объект",
height : "Высота",
width : "Ширина",
cost : "Цена",
link : "Ссылка на изображение",
color : "Меняет цвет",
grouped : "группированный",
edit : "Радактировать"
}
// var load_img = new Image();
// load_img.src = img;
obj.innerHTML =
"<tr class='obj_table_labels'>"+
`<td>${labels["name"]}</td>`+
`<td>${labels["object"]}</td>`+
`<td>${labels["height"]}</td>`+
`<td>${labels["width"]}</td>`+
`<td>${labels["cost"]}</td>`+
`<td>${labels["link"]}</td>`+
`<td>${labels["color"]}</td>`+
`<td>${labels["grouped"]}</td>`+
`<td>${labels["edit"]}</td>`+
"</tr>"+
"<tr class='obj_table_divs'>"+
`<td>${divs["name"]}</td>`+
`<td>${divs["object"]}</td>`+
`<td>${divs["height"]}</td>`+
`<td>${divs["width"]}</td>`+
`<td>${divs["cost"]}</td>`+
`<td><a href='${divs["link"]}'>${divs["link"]}</a></td>`+
`<td><input type='checkbox' id='obj_edit_color_check' ${(divs["color"] == true)? "checked":""} onclick='return false' onkeydown='return false'/></td>`+
`<td><input type='checkbox' id='obj_edit_group_check' ${(divs["grouped"] == true)? "checked":""} onclick='return false' onkeydown='return false'/></td>`+
`<td><button onclick='${divs["edit"]}' class='btn_blue'>Выбрать</button></td>`+
"</tr>";
obj_list.append(obj)
// console.log("obj");
}
edit_get_objs();
</script>