modified: admin.js
modified: func.js modified: index.js modified: object.js modified: project.js new file: public/img/drop.png new file: public/img/icon/back.png new file: public/img/icon/copy.png new file: public/img/icon/del.png new file: public/img/icon/download.png new file: public/img/icon/forw.png new file: public/img/icon/save.png modified: public/lib/fn.js modified: public/lib/inter.js modified: views/admin.ejs new file: views/admin/objects.ejs modified: views/admin/objects/object_creation.ejs modified: views/admin/objects/object_edit.ejs modified: views/admin/objects/object_groups.ejs new file: views/admin/users.ejs modified: views/admin/users/user_reg.ejs modified: views/header.ejs modified: views/load.ejs modified: views/login.ejs modified: views/main.ejs modified: views/project.ejs modified: views/static/end.ejs modified: views/static/start.ejs
This commit is contained in:
		
							
								
								
									
										22
									
								
								views/admin/objects.ejs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								views/admin/objects.ejs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| <%- include('../static/start.ejs',{name:"admin/objects",async: true}) %> | ||||
| <%- include('../header.ejs') %> | ||||
| <style> | ||||
|     section{ | ||||
|         width: 80vw; | ||||
|         margin: auto; | ||||
|     } | ||||
| </style> | ||||
|  | ||||
| <section> | ||||
|     <h1 style="text-align: center;">объект</h1> | ||||
|     <%- include('../admin/objects/object_groups.ejs') %> | ||||
|     <%- include('../admin/objects/object_creation.ejs') %> | ||||
|     <%- include('../admin/objects/object_edit.ejs') %> | ||||
| </section> | ||||
|  | ||||
| <%- include('../static/end.ejs') %> | ||||
| <script> | ||||
|     setTimeout(()=>{ | ||||
|         loaded() | ||||
|     },1000); | ||||
| </script> | ||||
| @ -61,7 +61,7 @@ | ||||
|             <div style="display: flex;width: 100%;justify-content: space-between;"> | ||||
|                 <label for="obj_width">цена</label> | ||||
|                 <div style="display: flex;"> | ||||
|                     <input style="text-align: right;" id="obj_cost" type="text"> | ||||
|                     <input style="text-align: right;" id="obj_cost" type="text" oninput="this.value = this.value.replace(/[^0-9.]/g, '0').replace(/(\..*?)\..*/g, '$1').replace(/^0[^.]/, '0');" > | ||||
|                     <div>руб.</div> | ||||
|                 </div> | ||||
|             </div> | ||||
| @ -100,7 +100,8 @@ | ||||
|             document.getElementById("object_edit_type").innerText = "редактирование"; | ||||
|             document.getElementById("obj_apply_btn").value = "сохранить"; | ||||
|             document.getElementById("obj_apply_btn").setAttribute("onclick","save_edited_obj()"); | ||||
|             document.getElementById("group_select").selectedIndex = document.getElementById("group_select").options[`obj_group_${gid}`].index; | ||||
|             // document.getElementById("group_select").selectedIndex = document.getElementById("group_select").options[`obj_group_${gid}`].index; | ||||
|             gids = [parseInt(gid)] | ||||
|             console.log(gid); | ||||
|         } | ||||
|  | ||||
| @ -130,7 +131,7 @@ | ||||
|     } | ||||
|  | ||||
|     function previewFile() { | ||||
|         var preview = document.querySelector('img'); | ||||
|         var preview = document.querySelector('#img_prev'); | ||||
|         var file    = document.querySelector('input[type=file]').files[0]; | ||||
|         var reader  = new FileReader(); | ||||
|  | ||||
| @ -146,9 +147,9 @@ | ||||
|     } | ||||
|  | ||||
|     function new_obj(cost,name,img,height,width,description,callback){ | ||||
|         let select = document.getElementById("group_select"); | ||||
|         let gid = gids[0]; | ||||
|         if(name!=""){ | ||||
|             $.post( "/admin/objects/new", { cost:cost,name,img:img,desc:description,height:height,width:width,gid:select.options[select.selectedIndex].getAttribute("gid")}) | ||||
|             $.post( "/admin/objects/new", { cost:cost,name:name,img:img,desc:description,height:height,width:width,gid:gid}) | ||||
|             .done(function( res ) { | ||||
|                 // if(res["out"] == "good"){ | ||||
|                 //     console.log(res["body"]); | ||||
|  | ||||
| @ -30,8 +30,8 @@ | ||||
| <div style="display: flex;justify-content: space-between;"> | ||||
|     <h1>изменение объектов</h1> | ||||
|     <div id="find_obj_btns"> | ||||
|         <button onclick="load_groups(()=>{edit_get_objs(true);});">найти по имени</button> | ||||
|         <button onclick="load_groups(()=>{edit_get_objs();});">очистить</button> | ||||
|         <button onclick="edit_get_objs(true)">найти по имени</button> | ||||
|         <button onclick='document.getElementById("objs_in_group").innerHTML = "";'>очистить</button> | ||||
|     </div> | ||||
| </div> | ||||
| <div> | ||||
| @ -44,9 +44,9 @@ | ||||
| </div> | ||||
|  | ||||
| <script> | ||||
|     load_groups(()=>{ | ||||
|         edit_get_objs(); | ||||
|     }); | ||||
|     // load_groups(()=>{ | ||||
|     //     edit_get_objs(); | ||||
|     // }); | ||||
|  | ||||
|     function set_edit(){ | ||||
|         let menu = document.getElementById("object_edit_menu"); | ||||
| @ -67,11 +67,18 @@ | ||||
|         },by_name) | ||||
|     } | ||||
|  | ||||
|     function gids_change(){ | ||||
|         let last = gids.at(-1) | ||||
|         gids = [last]; | ||||
|         edit_get_objs(); | ||||
|         hide_menus(); | ||||
|     } | ||||
|  | ||||
|     function obj_del(){ | ||||
|         let select = document.getElementById("group_select"); | ||||
|         // let select = document.getElementById("group_select"); | ||||
|         let menu = document.getElementById("object_edit_menu"); | ||||
|         if (confirm(`вы точно хотите удалить ${menu.getAttribute("obj_name").split("/")[0]}?`)){ | ||||
|             $.post( "/admin/objects/delete", { id:menu.getAttribute(`obj_id`),gid:select.options[select.selectedIndex].getAttribute("gid"),name:menu.getAttribute("obj_name")}) | ||||
|             $.post( "/admin/objects/delete", { id:menu.getAttribute(`obj_id`),}) | ||||
|             .done(function( res ) { | ||||
|                 if(res["out"] == "good"){ | ||||
|                     edit_get_objs(); | ||||
| @ -81,7 +88,7 @@ | ||||
|     } | ||||
|  | ||||
|     function save_edited_obj(){ | ||||
|         let select = document.getElementById("group_select"); | ||||
|         let gid = gids[0]; | ||||
|         let menu = document.getElementById("object_edit_menu"); | ||||
|         let attributes = ["name","description","img","height","width","cost"]; | ||||
|         let cur_atts = { | ||||
| @ -117,25 +124,27 @@ | ||||
|             } | ||||
|         } | ||||
|         function make_obj_save(){ | ||||
|             if(changes["name"]) changes["name"] = (changes["name"]+"/g/"+select.options[select.selectedIndex].value).replace(" ","$"); | ||||
|             document.getElementById("obj_resp").innerHTML = "сохранение товара"; | ||||
|             $.post( "/admin/objects/edit", { id:menu.getAttribute(`obj_id`),changes:JSON.stringify(changes),gid:select.options[select.selectedIndex].getAttribute("gid")}) | ||||
|             .done(function( res ) { | ||||
|                 // console.log(res); | ||||
|                 if(res["out"] == "good"){ | ||||
|                     document.getElementById("obj_resp").innerHTML = "товар сохранён"; | ||||
|                     setTimeout(()=>{ | ||||
|                         edit_get_objs(); | ||||
|                         set_obj_edit_params(); | ||||
|                         if(res["name_err"]){ | ||||
|                             document.getElementById("obj_resp").innerHTML = ("название товара не было изменино поскольку оно занято"); | ||||
|                         } | ||||
|                     },1000) | ||||
|                     setTimeout(()=>{ | ||||
|                         document.getElementById("obj_resp").innerHTML = ""; | ||||
|                     },3000) | ||||
|                 } | ||||
|             }); | ||||
|             load_group(gid,(group_db)=>{ | ||||
|                 if(changes["name"]) changes["name"] = (changes["name"]+"/g/"+group_db["name"].replace(" ","$")); | ||||
|                 document.getElementById("obj_resp").innerHTML = "сохранение товара"; | ||||
|                 $.post( "/admin/objects/edit", { id:menu.getAttribute(`obj_id`),changes:JSON.stringify(changes),gid:gid}) | ||||
|                 .done(function( res ) { | ||||
|                     // console.log(res); | ||||
|                     if(res["out"] == "good"){ | ||||
|                         document.getElementById("obj_resp").innerHTML = "товар сохранён"; | ||||
|                         setTimeout(()=>{ | ||||
|                             edit_get_objs(); | ||||
|                             set_obj_edit_params(); | ||||
|                             if(res["name_err"]){ | ||||
|                                 document.getElementById("obj_resp").innerHTML = ("название товара не было изменино поскольку оно занято"); | ||||
|                             } | ||||
|                         },1000) | ||||
|                         setTimeout(()=>{ | ||||
|                             document.getElementById("obj_resp").innerHTML = ""; | ||||
|                         },3000) | ||||
|                     } | ||||
|                 }); | ||||
|             }) | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -150,18 +159,20 @@ | ||||
|     } | ||||
|          | ||||
|     function edit_load_objs(callback,by_name = false){ | ||||
|         let select = document.getElementById("group_select"); | ||||
|         // let select = document.getElementById("group_select"); | ||||
|         if(!by_name){ | ||||
|             $.post( "/get_objs",{gid:select.options[select.selectedIndex].getAttribute("gid")}) | ||||
|             .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"]); | ||||
|                 } | ||||
|             gids.forEach(gid => { | ||||
|                 $.post( "/get_objs",{gid:gid}) | ||||
|                 .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{ | ||||
| @ -200,5 +211,7 @@ | ||||
|             obj.append(img_elm) | ||||
|             obj.append(name_text) | ||||
|             obj_list.append(obj) | ||||
|  | ||||
|             console.log("obj"); | ||||
|         }               | ||||
| </script> | ||||
| @ -1,49 +1,113 @@ | ||||
|  | ||||
| <style> | ||||
|     #obj_group button,#obj_group select{ | ||||
|         height: 50px; | ||||
|         /* height: 5vh; */ | ||||
|         margin: auto 0px; | ||||
|          | ||||
|     } | ||||
|     .obj_group{ | ||||
|         display: flex; | ||||
|     } | ||||
| </style> | ||||
| <div id="obj_group"> | ||||
|     <div style="display: flex;justify-content: space-between;"> | ||||
|         <h1>группы товаров</h1> | ||||
|         <select name="" id="group_select" onchange="edit_get_objs();"></select> | ||||
|         <div style="display: flex;justify-content: space-between;width: 350px;"> | ||||
|             <button onclick="create_new_group()">создать группу</button> | ||||
|             <button onclick="delete_group()">удалить группу</button> | ||||
|         <style> | ||||
|             .group_drop{ | ||||
|                 width: 15vw; | ||||
|                 padding: 2px; | ||||
|                 min-width: 15vw; | ||||
|             } | ||||
|             .group_drop *{ | ||||
|                 pointer-events: none; | ||||
|                 overflow: auto; | ||||
|             } | ||||
|             .group_drop img{ | ||||
|                 width: 1vw; | ||||
|                 height: 0.5vw; | ||||
|             } | ||||
|         </style> | ||||
|  | ||||
|         <div id="obj_parts" style="display: flex;justify-content: space-between; overflow: scroll;min-width: 50vw;"> | ||||
|         </div> | ||||
|         <style> | ||||
|             .group_inp{ | ||||
|                 height: 1vw; | ||||
|                 width: 1vw; | ||||
|                 border: 0px; | ||||
|                 border-radius: 0.4vw; | ||||
|                 overflow: auto; | ||||
|             } | ||||
|         </style> | ||||
|         <ul id="group" class="cmenu"></ul> | ||||
|         <!-- <select name="" id="group_select" onchange="edit_get_objs();"></select> | ||||
|         <select name="" id="part_select"></select> --> | ||||
|     </div> | ||||
| </div> | ||||
|  | ||||
| <script> | ||||
|     load_groups(); | ||||
|     function delete_group() { | ||||
|     // load_groups(); | ||||
|     function delete_group(gid,pid) { | ||||
|         let select = document.getElementById("group_select"); | ||||
|         let group_id = select.options[select.selectedIndex].getAttribute("gid"); | ||||
|         if(confirm(`вы уверены вы хотите удалить группу ${select.options[select.selectedIndex].text}`) == true){ | ||||
|             $.post( "/admin/groups/delete", { gid:group_id}) | ||||
|         if(confirm(`вы уверены вы хотите удалить группу ${document.getElementById("obj_group_"+gid).innerText}`) == true){ | ||||
|             $.post( "/admin/groups/delete", { gid:gid,pid:pid}) | ||||
|             .done(function( res ) { | ||||
|                 if(res["out"] == "good"){ | ||||
|                     // console.log(res["body"]); | ||||
|                     load_groups(); | ||||
|                     // load_groups(); | ||||
|                     edit_get_objs(); | ||||
|                     hide_menus(); | ||||
|                     alert(`группа удалена`) | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|     function create_new_group() { | ||||
|     function create_new_group(pid) { | ||||
|         let group_name = ask("название группы"); | ||||
|         if(group_name != ""){ | ||||
|             $.post( "/admin/groups/new", { name:group_name.replace(" ","$")}) | ||||
|             $.post( "/admin/groups/new", { name:group_name.replace(" ","$"),pid:pid}) | ||||
|             .done(function( res ) { | ||||
|                 if(res["out"] == "good"){ | ||||
|                     // console.log(res["body"]); | ||||
|                     load_groups(); | ||||
|                     // load_groups(); | ||||
|                     edit_get_objs(); | ||||
|                     hide_menus(); | ||||
|                     setTimeout(()=>{ | ||||
|                         parts_load(); | ||||
|                         alert(`группа ${group_name.replace(" ","$")} создана`) | ||||
|                     },200) | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     function parts_load(){ | ||||
|         load_parts((db)=>{ | ||||
|             let parts = document.getElementById("obj_parts"); | ||||
|             parts.innerHTML = ""; | ||||
|             Object.values(db).forEach((value)=>{ | ||||
|                 let part = document.createElement("button") | ||||
|                 let part_text = document.createElement("div") | ||||
|                 let part_drop = document.createElement("img") | ||||
|                  | ||||
|                 part_drop.src = "/img/drop.png"; | ||||
|                 part_drop.alt = "\/"; | ||||
|  | ||||
|                 part_text.innerText = `${value["name"]}`; | ||||
|  | ||||
|                 part.id = `group_drop-${value["id"]}`; | ||||
|                 part.classList.add("menu_btn") | ||||
|                 part.classList.add("group_drop") | ||||
|                 part.setAttribute("groups",`${value["groups"]}`) | ||||
|                 part.setAttribute("pid",`${value["id"]}`) | ||||
|  | ||||
|                 part.append(part_text); | ||||
|                 part.append(part_drop); | ||||
|  | ||||
|                 parts.append(part); | ||||
|                 console.log(value); | ||||
|             }) | ||||
|         }) | ||||
|     } | ||||
|     parts_load(); | ||||
|  | ||||
| </script> | ||||
							
								
								
									
										21
									
								
								views/admin/users.ejs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								views/admin/users.ejs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| <%- include('../static/start.ejs',{name:"admin/users",async: true}) %> | ||||
| <%- include('../header.ejs') %> | ||||
| <style> | ||||
|     section{ | ||||
|         width: 80vw; | ||||
|         margin: auto; | ||||
|     } | ||||
| </style> | ||||
|  | ||||
| <section> | ||||
|     <h1 style="text-align: center;">пользователь</h1> | ||||
|     <%- include('../admin/users/user_reg.ejs') %> | ||||
|     <%- include('../admin/users/user_edit.ejs') %> | ||||
| </section> | ||||
|  | ||||
| <%- include('../static/end.ejs') %> | ||||
| <script> | ||||
|     setTimeout(()=>{ | ||||
|         loaded() | ||||
|     },1000); | ||||
| </script> | ||||
| @ -14,12 +14,64 @@ | ||||
|     </div> | ||||
|     <div> | ||||
|         <label for="admin_check">админ. привелегии</label> | ||||
|         <input type="checkbox" name="admin" value='false' id="admin_check"> | ||||
|         <input type="checkbox" name="admin" value='false' id="admin_check" onchange="admin_ch()"> | ||||
|         <div id="right_checks" style="display: none;justify-content: space-evenly;"> | ||||
|             <div> | ||||
|                 <input type="checkbox" name="admin" value='false' id="admin_user_check" onchange="right_calc()"> | ||||
|                 <label for="admin_user_check">право на изменение обьектов</label> | ||||
|             </div> | ||||
|             <div> | ||||
|                 <input type="checkbox" name="admin" value='false' id="admin_obj_check" onchange="right_calc()"> | ||||
|                 <label for="admin_obj_check">право на изменение пользователей</label> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div id="reg_response"></div> | ||||
| </form> | ||||
|  | ||||
| <script> | ||||
|     let rights = 0; | ||||
|  | ||||
|     clear_checks(); | ||||
|     function clear_checks(){ | ||||
|         let check = document.getElementById("admin_check"); | ||||
|         let obj_right = document.getElementById("admin_obj_check"); | ||||
|         let user_right = document.getElementById("admin_user_check"); | ||||
|         let checks = [check,obj_right,user_right]; | ||||
|         checks.forEach(ch => { | ||||
|             ch.checked = false; | ||||
|             rights = 0; | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|         function admin_ch(){ | ||||
|             let check = document.getElementById("admin_check").checked; | ||||
|             let right_checks = document.getElementById("right_checks"); | ||||
|             let obj_right = document.getElementById("admin_obj_check"); | ||||
|             let user_right = document.getElementById("admin_user_check"); | ||||
|             if (check){ | ||||
|                 right_checks.style.display = "flex"; | ||||
|             } | ||||
|             else{ | ||||
|                 right_checks.style.display = "none"; | ||||
|                 clear_checks(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         function right_calc(){ | ||||
|             let obj_right = document.getElementById("admin_obj_check").checked; | ||||
|             let user_right = document.getElementById("admin_user_check").checked; | ||||
|             if(obj_right & user_right){ | ||||
|                 rights = 3; | ||||
|             } | ||||
|             else if(obj_right){ | ||||
|                 rights = 1; | ||||
|             } | ||||
|             else if(user_right){ | ||||
|                 rights = 2; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         function reg(){ | ||||
|             console.log("reg"); | ||||
|             let login = document.getElementById("login").value; | ||||
| @ -28,7 +80,7 @@ | ||||
|             // console.log(login,pass,admin); | ||||
|             // console.log("cl reg"); | ||||
|             if(login != ""&&pass!=""){ | ||||
|                 $.post( "/admin/users/new", { login:login,pass:pass,admin:admin }) | ||||
|                 $.post( "/admin/users/new", { login:login,pass:pass,admin:admin,rights:rights }) | ||||
|                 .done(function( res ) { | ||||
|                     // console.log("serv reg"); | ||||
|                     if(res["out"] == "good"){ | ||||
|  | ||||
		Reference in New Issue
	
	Block a user