From f2bbded81b11f936923a15827cc3d1b85b6db8c0 Mon Sep 17 00:00:00 2001 From: n0rdye Date: Tue, 15 Aug 2023 23:59:02 +0500 Subject: [PATCH] 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 --- admin.js | 10 +- func.js | 4 +- index.js | 71 +++++- object.js | 140 ++++++++++-- project.js | 25 +- public/img/drop.png | Bin 0 -> 300 bytes public/img/icon/back.png | Bin 0 -> 600 bytes public/img/icon/copy.png | Bin 0 -> 661 bytes public/img/icon/del.png | Bin 0 -> 688 bytes public/img/icon/download.png | Bin 0 -> 579 bytes public/img/icon/forw.png | Bin 0 -> 603 bytes public/img/icon/save.png | Bin 0 -> 1510 bytes public/lib/fn.js | 130 +++++++++-- public/lib/inter.js | 104 +++++---- views/admin.ejs | 13 +- views/admin/objects.ejs | 22 ++ views/admin/objects/object_creation.ejs | 11 +- views/admin/objects/object_edit.ejs | 89 ++++---- views/admin/objects/object_groups.ejs | 94 ++++++-- views/admin/users.ejs | 21 ++ views/admin/users/user_reg.ejs | 56 ++++- views/header.ejs | 59 +++-- views/load.ejs | 45 +++- views/login.ejs | 2 +- views/main.ejs | 17 +- views/project.ejs | 290 ++++++++++++++++++------ views/static/end.ejs | 6 +- views/static/start.ejs | 3 + 28 files changed, 942 insertions(+), 270 deletions(-) create mode 100644 public/img/drop.png create mode 100644 public/img/icon/back.png create mode 100644 public/img/icon/copy.png create mode 100644 public/img/icon/del.png create mode 100644 public/img/icon/download.png create mode 100644 public/img/icon/forw.png create mode 100644 public/img/icon/save.png create mode 100644 views/admin/objects.ejs create mode 100644 views/admin/users.ejs diff --git a/admin.js b/admin.js index 85b86fe..9bdf02e 100644 --- a/admin.js +++ b/admin.js @@ -94,6 +94,7 @@ module.exports.new_user = (inp,cook,res)=>{ let admin = inp["admin"]; let pass = inp["pass"]; let login = inp["login"]; + let rights = inp["rights"]; check_db(); function check_db() { db.ggv("users","id","login",`'${inp["login"]}'`, (ldata)=>{ldata = ldata[0] @@ -103,7 +104,7 @@ module.exports.new_user = (inp,cook,res)=>{ if(udata==null && ldata==null){ good_reg(); // func.log("/reg_user good reg"); - func.log(`good boy ${uuid} registered user ${login} with uuid = ${uuid} admin = ${admin}`); + func.log(`good boy ${inp["uuid"]} registered user ${login} with uuid = ${uuid} admin = ${admin}`); } else if(udata!=null){ @@ -112,7 +113,7 @@ module.exports.new_user = (inp,cook,res)=>{ // res.send({out:"bad", body:"uuid"}); } else if (ldata != null){ - func.log(`bad boy ${uuid} tried to register user ${login} with uuid = ${uuid} admin = ${admin} but login in use`); + func.log(`bad boy ${inp["uuid"]} tried to register user ${login} with uuid = ${uuid} admin = ${admin} but login in use`); res.send({out:"bad", body:"login"}); return; } @@ -121,9 +122,10 @@ module.exports.new_user = (inp,cook,res)=>{ } function good_reg(){ db.nr("users",'`login`,`pass`,`uuid`,`admin`',`'${login}','${pass}','${uuid}',${admin}`,true); - if (admin){ + if (admin == "true"){ + console.log("admin"); db.ggv("users","`id`","uuid",`'${uuid}'`,(udata)=>{ udata = udata[0] - db.nr("admins",'`login`,`uid`',`'${login}',${udata["id"]}`,true); + db.nr("admins",'`login`,`uid`,`rights`',`'${login}',${udata["id"]},${rights}`,true); },true) } res.send({out:"good", body:{uuid:uuid,login:login,admin:admin}}); diff --git a/func.js b/func.js index 88ed931..5441e27 100644 --- a/func.js +++ b/func.js @@ -36,9 +36,9 @@ module.exports.sid = (cook,res,callback,auto = true,admin_check = false)=>{ if (udata != null && udata["id"] == sdata["uid"] && uuid == udata["uuid"]){ if (!admin_check) callback(true); else if (admin_check && udata["admin"] != false){ - db.ggv("admins","`login`,`uid` ","uid",`'${udata["id"]}'`,(adata)=>{ adata = adata[0] + db.gv("admins","uid",`'${udata["id"]}'`,(adata)=>{ adata = adata[0] if(adata != null){ - callback(true); + callback(adata["rights"],true); } else{ db.sv("users","admin","0","id",udata["id"],()=>{},true); diff --git a/index.js b/index.js index 14c84c7..f341ed7 100644 --- a/index.js +++ b/index.js @@ -106,7 +106,7 @@ app.post("/get_cr_uuid", (req,res) => { } }) /// project -app.get("/proj/:name" , (req,res) =>{ +app.get("/proj/load/:name" , (req,res) =>{ res.render('project',{proj_name:req.params["name"]}); }) app.post("/save_proj", (req,res) => { @@ -142,6 +142,17 @@ app.post("/proj/delete", (req,res) => { func.log("router project loading error - "+error); } }) +app.post("/proj/download", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,()=>{ + proj.download(inp,cook,res); + }) + } catch (error) { + func.log("router project loading error - "+error); + } +}) app.post("/get_projs", (req,res) => { try{ let inp = req.body; @@ -189,18 +200,74 @@ app.post("/get_groups", (req,res) => { func.log("router single object getting error - "+error); } }) +app.post("/object/parts/get", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + // func.log(inp["name"]); + func.sid(cook,res,()=>{ + obj.load_parts(inp,cook,res); + }) + } catch (error) { + func.log("router single object getting error - "+error); + } +}) +app.post("/object/group/get", (req,res) => { + try{ + let inp = req.body; + let cook = req.cookies; + // func.log(inp["name"]); + func.sid(cook,res,()=>{ + obj.load_group(inp,cook,res); + }) + } catch (error) { + func.log("router single object getting error - "+error); + } +}) /// admin app.get("/admin", (req,res) =>{ try { let inp = req.body; let cook = req.cookies; - func.sid(cook,res,()=>{ + func.sid(cook,res,(rights)=>{ res.render('admin'); },true,true) } catch (error) { func.log("router admin page error - "+error); } }); +app.get("/admin/objects", (req,res) =>{ + try { + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,(rights)=>{ + if (rights == 1 || rights == 3){ + res.render('admin/objects'); + } + else{ + res.redirect('/admin'); + } + },true,true) + } catch (error) { + func.log("router admin page error - "+error); + } +}); +app.get("/admin/users", (req,res) =>{ + try { + let inp = req.body; + let cook = req.cookies; + func.sid(cook,res,(rights)=>{ + if (rights == 2 || rights == 3){ + res.render('admin/users'); + } + else{ + res.redirect('/admin'); + } + },true,true) + } catch (error) { + func.log("router admin page error - "+error); + } +}); app.get("/home", (req,res) =>{ res.render('home'); }); diff --git a/object.js b/object.js index d4f4916..b8e3a2c 100644 --- a/object.js +++ b/object.js @@ -30,21 +30,24 @@ module.exports.load = (inp,cook,res)=>{ module.exports.new = (inp,cook,res)=>{ try { - db.ggv("object_groups","name","id",`'${inp["gid"]}'`,(gname)=>{gname = gname[0] - db.ggv("objects","name","gid",`'${inp["gid"]}' AND name = '${inp["name"]}/g/${gname["name"]}'`,(db_name)=>{ - if(db_name[0] != null){ - res.send({out:"bad",err:"name"}); - } - else if (db_name[0] == null){ - db.nr("objects","`cost`,`name`,`img`,`height`,`width`,`description`,`gid`",`'${inp["cost"]}','${inp["name"]}/g/${gname["name"]}','${inp["img"]}','${inp["height"]}','${inp["width"]}','${inp["desc"]}','${inp["gid"]}'`,true); - db.sv("object_groups","count",`(count + 1)`,"id",inp["gid"],()=>{},true,true) - func.log(`admin object created name:${inp["name"]} group:${gname["name"]}`); - res.send({out:"good"}); - } - // console.log(db_name); - // db.ggv("objects","gid","name",`'${inp["name"]}'`,(db_name)=>{ - // }) - },true) + + db.gv("object_groups","id",`'${inp["gid"]}'`,(gname)=>{gname = gname[0] + db.gv("object_partition","id",`'${gname["pid"]}'`,(pname)=>{pname = pname[0] + db.ggv("objects","name","gid",`'${inp["gid"]}' AND name = '${inp["name"]}/g/${gname["name"]}'`,(db_name)=>{ + if(db_name[0] != null){ + res.send({out:"bad",err:"name"}); + } + else if (db_name[0] == null){ + db.nr("objects","`cost`,`name`,`img`,`height`,`width`,`description`,`gid`",`'${inp["cost"]}','${inp["name"]}/g/${gname["name"]}/p/${pname["name"]}','${inp["img"]}','${inp["height"]}','${inp["width"]}','${inp["desc"]}','${inp["gid"]}'`,true); + db.sv("object_groups","count",`(count + 1)`,"id",inp["gid"],()=>{},true,true) + func.log(`admin object created name:${inp["name"]} group:${gname["name"]}`); + res.send({out:"good"}); + } + // console.log(db_name); + // db.ggv("objects","gid","name",`'${inp["name"]}'`,(db_name)=>{ + // }) + },true) + }) }) } catch (error) { func.log("backend object creating error - "+error); @@ -92,10 +95,12 @@ module.exports.save = (inp,cook,res)=>{ } module.exports.del = (inp,cook,res)=>{ try { - let name = inp["name"].split("/")[0]; - db.ggv("object_groups","name","id",inp["gid"],(gname)=>{let group = gname[0]["name"] - db.dl("objects",`id`,`'${inp["id"]}' AND gid = '${inp["gid"]}'`,()=>{ - func.log(`admin group deleted name:${name} group:${group}`); + db.gv("objects","id",`'${inp["id"]}'`,(obj_db)=>{obj_db = obj_db[0]; + let gid = obj_db["gid"]; + let name = obj_db["name"]; + db.dl("objects",`id`,`'${inp["id"]}'`,()=>{ + db.sv("object_groups","count",`(count - 1)`,"id",`${gid}`,()=>{},true,true) + func.log(`admin object deleted name:${name} group:${gid}`); res.send({out:"good"}); },true); }) @@ -114,6 +119,16 @@ module.exports.load_groups = (inp,cook,res)=>{ func.log("backend object groups loading err0r - "+error); } } +module.exports.load_group = (inp,cook,res)=>{ + try { + db.gv("object_groups","id",`${inp["gid"]}`,(gdata)=>{ + // func.log(odata); + res.send({out:"good",body:gdata[0]}); + }) + } catch (error) { + func.log("backend object groups loading err0r - "+error); + } +} module.exports.new_group = (inp,cook,res)=>{ try { db.ggv("object_groups","id","name",`'${inp["name"]}'`,(gdata)=>{gdata = gdata[0] @@ -122,8 +137,19 @@ module.exports.new_group = (inp,cook,res)=>{ res.send({out:"bad"}); } else if (gdata == null){ - db.nr("object_groups","`name`,`count`",`'${inp["name"]}','0'`,true,()=>{ - res.send({out:"good"}); + db.nr("object_groups","`name`,`count`,`pid`",`'${inp["name"]}','0',${inp["pid"]}`,true,()=>{ + db.glv("object_groups","id",(new_group)=>{ new_group = new_group[0]; + db.gv("object_partition","id",`${inp["pid"]}`,(part_db)=>{part_db = part_db[0]; + if (part_db["groups"].split(",").lenght<2){ + db.sv("object_partition","`groups`",`${part_db["groups"]}`,"id",`${inp["pid"]}`,()=>{},true) + } + else{ + db.sv("object_partition","`groups`",`${part_db["groups"]},${new_group["id"]}`,"id",`${inp["pid"]}`,()=>{},true) + } + res.send({out:"good"}); + func.log(`admin group created ${new_group["name"]}`); + }) + }) }) } }) @@ -134,10 +160,32 @@ module.exports.new_group = (inp,cook,res)=>{ module.exports.del_group = (inp,cook,res)=>{ try { db.ggv("object_groups",`name`,`id`,`'${inp["gid"]}'`,(gname)=>{gname = gname[0]["name"] - db.dl("object_groups",`id`,`'${inp["gid"]}'`,()=>{ - func.log(`admin group deleted ${gname}`); - res.send({out:"good"}); - },true); + db.ggv("object_partition","`groups`","`id`",`${inp["pid"]}`,(groups)=>{ + groups = groups[0]["groups"].split(","); + let new_groups=[]; + if(groups.includes(`${inp["gid"]}`)){ + if (groups.length < 2){ + groups.splice(groups.indexOf(`${inp["gid"]}`),1); + new_groups = groups; + } + else{ + groups.splice(groups.indexOf(`${inp["gid"]}`),1); + new_groups = groups.join(","); + } + } + else{ + new_groups = groups.join(",") + } + // console.log(groups.length,"len"); + // console.log(groups,"group"); + // console.log(new_groups,"new"); + db.sv("object_partition","`groups`",`${new_groups}`,"`id`",`${inp["pid"]}`,()=>{ + db.dl("object_groups",`id`,`'${inp["gid"]}'`,()=>{ + func.log(`admin group deleted ${gname}`); + res.send({out:"good"}); + },true); + },true) + }) }) } catch (error) { func.log("backend single object loading err0r - "+error); @@ -152,4 +200,46 @@ module.exports.find = (inp,cook,res)=>{ } catch (error) { func.log("backend single object loading err0r - "+error); } +} + +module.exports.load_parts = (inp,cook,res)=>{ + try { + db.gav("object_partition","0",(gdata)=>{ + // console.log(gdata); + // func.log(odata); + res.send({out:"good",body:gdata}); + }) + } catch (error) { + func.log("backend object part loading err0r - "+error); + } +} + +module.exports.new_part = (inp,cook,res)=>{ + try { + db.ggv("object_partition","id","name",`'${inp["name"]}'`,(gdata)=>{gdata = gdata[0] + // func.log(odata); + if(gdata != null){ + res.send({out:"bad"}); + } + else if (gdata == null){ + db.nr("object_partition","`name`,`count`",`'${inp["name"]}','0'`,true,()=>{ + res.send({out:"good"}); + }) + } + }) + } catch (error) { + func.log("backend single object loading err0r - "+error); + } +} +module.exports.del_part = (inp,cook,res)=>{ + try { + db.ggv("object_partition",`name`,`id`,`'${inp["gid"]}'`,(gname)=>{gname = gname[0]["name"] + db.dl("object_partition",`id`,`'${inp["gid"]}'`,()=>{ + func.log(`admin part deleted ${gname}`); + res.send({out:"good"}); + },true); + }) + } catch (error) { + func.log("backend single object loading err0r - "+error); + } } \ No newline at end of file diff --git a/project.js b/project.js index d89a539..ff3ce22 100644 --- a/project.js +++ b/project.js @@ -40,17 +40,28 @@ module.exports.loads = (inp,cook,res)=>{ } } +module.exports.download = (inp,cook,res)=>{ + try { + db.ggv("projects","`body`","id",`'${inp["id"]}'`,(proj)=>{ proj = proj[0]; + res.send(JSON.stringify(proj)); + }) + } catch (error) { + func.log("backend projects loading err0r - " - error); + } +} + module.exports.del = (inp,cook,res)=>{ try { - db.ggv("users","`id`","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0]; - db.gv("projects","name",`'${inp["name"]}'`,(pdata)=>{pdata=pdata[0] - // res.send({out:"good",body:pdata}); - db.dl("projects","id",pdata["id"],()=>{ - res.send({out:"good"}); - func.log(`good boy ${udata["uuid"]} deleted project ${inp["name"]} from ${cook["sid"]}`); - }) + db.gv("projects","name",`'${inp["name"]}'`,(pdata)=>{pdata=pdata[0] + // res.send({out:"good",body:pdata}); + db.dl("projects","id",pdata["id"],()=>{ + res.send({out:"good"}); + func.log(`good boy ${cook["uuid"]} deleted project ${inp["name"]} from ${cook["sid"]}`); }) }) + // db.ggv("users","`name`,`id`","uuid",`'${cook["uuid"]}'`,(udata)=>{ udata = udata[0]; + // console.log(udata); + // }) } catch (error) { func.log("backend projects delete err0r - " - error); } diff --git a/public/img/drop.png b/public/img/drop.png new file mode 100644 index 0000000000000000000000000000000000000000..e3f89846aa3f23a89fe0c82a6c216c2dcba4946c GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^;y}#9!3HEdt<`=2Db50q$YKTtZeb8+WSBKa0w~B> z9OUlAu@#wgP$n8GY^ zkn;*Bhp>dY!d!>BF762}eGgdHzMnM7BqGDN(w-x;`hMXOpA!Z=yt(rW)%}--96l3% zOXJ+m=(j z!Y~ZRzy2A3ZV=vh>_m9FA2>2cU{Lj0iL zoi2{SPQECT6$6H07>3a^d7cm0&?DD~gaka&;fHKT?R)e@ln@cIlvDOdj-F5pX^3E| z#`#6Lf`StwCS_Sx=!sw5a*H5!fBn`7sq zIrV+eZ#9(gSeoOTnuT;_bpA#C)w!|i66J(v3PeKlu5g@KyaGR}Xl#gKPn2kfrPKCG z`O#&(h`A#h#w=(J+<68*@uw;pF9F^B4u=djJeL)tJ(3D0BsEM(YNRYA3;A=BLK@pj zwNF8ssz;ujb~n{;*T^dF)>liPaY?Q0vhBLYAwDX4t%g2hlktdn!WF?x;mIv}L_ENO zUEqJYK9`c-3(co4Uz~ST#^{c@RMp;SJTgXiA}X?Jh$r@FgskL(8QOtA$o3m_>JKw@ m){5P1*ptF`t6><1Vf+F@7@@MZB43pN0000^#=9; literal 0 HcmV?d00001 diff --git a/public/img/icon/copy.png b/public/img/icon/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..e444478f4b5b1786f3d36454a2f6480244019114 GIT binary patch literal 661 zcmV;G0&4wpaNqBVg*vdl|TvZl099NNkZ-tZ!-7I>|8jK zEbso=1$x5ZTIFmu8&fgoOR_}Fl@pmEJCbekJU8&jA0Z@SNkv9BM!W3bQP71D67hsW zL{}KHsShzDdqE-=xD>%d;f3rV4qf3Mo{({4B~r)bmTU?~&OJgR5-Q%60|QSjbq(^D zp%7$QldoquFqASyMtgF9QdxkT+E~M+Zn8?YsBsbbEjUR!FYuQi(XW zhMZ)zj~yI23z62)Vlr~JbqLwe#9KXEi3)*CpY|5!bu7_*6dUa*nlBQEDqQ^xY{ z-;2rGYwVZfO!T8U2CGA-Ok0zm8;3>g;DL*Mgj`?Qyw-~acL>W=xo0Ckh^6^B^+?Cy58hoIKd43%6Kj^@AUUhSjM-*B9Q&m+Nj}A_V zO8r@ObvDZ&;#xAXZ8j@aUm4WgV+LqQ2T4I(!_ zMU)tdBqoNCDF;r{3O29Fa#is>i&;|#8im*z&tc~kw-ro#X13JzF=>X z7CWP6a@aG;Y4eLI*s$i_fEqZZBSG3C%sCyN&96m?KZt1f#mKekY#2RebRh6ajetkY zLNYWrc6Pk*1p&_$QybqqcB!){zbnZj8MWNu^opuKoY@+zx_7-R9j2%nwIjZh&cm-Q z%o4Uh{MEb1wYfz2>7|cso@I@gAY#lTihgR%pSa3vpNEsWKIuyzsq@n5!RWO}}@Hz-~iRdN5T$qQK<`=M=Sk4E@endoQfx7O|eNrFk z8%aptNJ9EX5+cOda81o_RF}+&i}Fc?tem)}Fz#Su*hAn1==ugk`6M&DD}=YK8igtZ z`O4WorvU7hSUX8`NxsGwv4wVPWkmZW_pU|0G-)3hJ8|uMOJZTYE00dnM7o9(AN1fO z>@d^rM_}U^t5*aLxiB5_S5ML*i)O|we?}BGfZ;lRMf7OjI|HiI{U@HQX-M~r+foe WWv}84f4<@X0000``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxf`A?jv*C{Z*Sf8J!~Mt`rz<+23f^DUndGC zG#fD{F4I~X z&tuk}n~%h9JIU?DenJ0V3FVf={I|wPO4tI`|!2o zg#&J@fASQpD>`{Mp~s-?!Q?r$zqq+ByGaRa?~)#P~;A zjzQ}=nEzV#CI*% z6oaoGqmH9TP>^_3ijVuO6J(vy?jZYK{|)n(cn)O3ho?XM<<_h@GxdM z{m3&{Wrbi<>Bl8jB7U3;T|Q1pEwvCim9*@4y95vOFNv*R7oOcyacY}Qol;BTZGpbD zPdncn4Zil5(O7X#QjksReFZ_mrpS*eo1CBUE6xz}R})rRd@s@dv*G7QCu{mA{E;rR zxF;I4q+(aY#&xg1oqjrLvc&!E&Knl0 literal 0 HcmV?d00001 diff --git a/public/img/icon/forw.png b/public/img/icon/forw.png new file mode 100644 index 0000000000000000000000000000000000000000..bc04a678d95b82e41c0cfedf5b7f4b81f67be04c GIT binary patch literal 603 zcmV-h0;K(kP)B`=~dIQ|Cj5lEE(isVlSjBcG>1%v1 zzxU>42yN4kOfpFT5{X12k@)9iS=NImC+HXw@yrF;nrvJY#TE)q(LI?h2V^fK>;ej6 z5VCN5wU{$>%x1GG`~5zL_{dgWlHE|<6Mgs5^f{diVM2(BLI~q4<{X~bc%EQ4XgS7J zgY^hsV}@*4ccItxOCsh}%n$;1?p=CpfySwL9 za}ryUmE17&!i^5w(hD1o= z_yg^+O`TX=QLju82~r`vsWQ&zm0gB+j(E>*_v_WIuEB0O z{#JKL&=x+24^=Ut;7R39x^-41M7vt$LxD$xXMa8>LY>)J4B3=iKB{3sp+d?)u}uj2 p|A@^kzWHVAdm@uaBoc{)luzn(7ErIjK^OclikU-G7XP9N^6fq{WD5!0-WsI9GS%*n}l3!xv7 zjYU6|`6h}O36ET%fX2qg+U4ct&+wM(sA;b6xyHlOp`04D`m_#y#pRV0u&Nwib9usU zySTp{cMoZ*bli=lrKLloqoY@>M7iOAi16>pE#Xh(=H_5-9<-U!Lu_4W0KaMe|YOdYrfLpLoCLOqFduMQp`8XEd2lJIHB zGO~2yo=^eRwY7Z<5^4eT`*vs031N@1CnGM)ddO)3Z`(b-67e4 z7{pO6ps%mb$2|Q-CS#3}?lU*IF*Y{#hZw|hU4Y4tT3Xw-yv~jSk|0>?qYVuWGm;|I z3N{hqQUJRuewLJ0u!KUCNSYFt0$7q>UR+%4##<>4fL1ux*4FkrJ3P+Jy+--EpW1Mk3%aC|In*32KfQiq+FyT8>d3F$i zFF8+mjmmgVwM>-qJaHdKlQEVq@R<7H0hb&md=M(=m_7|wWmLyyuBh@wlZd%~rPb$o z$Qf}UYH~&y&+1@#Q&ZDD(d3It0sL`MnBON3g~|!pBf3LTGUyN2oACN`HqQ~xs50Q;dkLYuHQAb zgPrll4z~sxg5sdpy18oG~5a+Yzedv%8M61@y$`NP&$v}TXV|`2& zBzzROsNHssz*2qSnGAARtnJbM%T{Da0j#jT(cUt@-+x#(7;M?8lda&#Q*5c7vf@Ju zU}klW1Q&Gh1u`fl*s{%?OjK(|mRIHGM^lQwSxWz4-Cr?ov9r@a|M*n&mt*+7w2U6y ze+jDdHr0>L68=-1$)jAY+W!St9#=b8nU0%gw0g(K-j`cnkZlO4 zv { + $.post("/object/group/get",{gid:gid}) + .done(function( res ) { + if(res["out"] == "good"){ + console.log(res["body"]); + let group = res["body"] + let group_div = document.createElement("div"); + group_div.classList.add(`obj_group`); + + let group_label = document.createElement("label"); + group_label.innerText = group["name"].replace("$"," "); + group_label.setAttribute("for",`obj_group_${group["id"]}`) + + let group_inp = document.createElement("input"); + group_inp.setAttribute("type","checkbox"); + group_inp.setAttribute("onchange",`group_check(${group["id"]})`) + // group_inp.innerText = group["name"].replace("$"," "); + group_inp.setAttribute("group_count",group["count"]); + group_inp.setAttribute("gid",group["id"]); + group_inp.id = `obj_group_${group["id"]}`; + group_inp.setAttribute("pid",`${group["pid"]}`); + + if (gids.includes(group["id"])){ + group_inp.setAttribute("checked","true"); + } + + // console.log(document.url); + if(admin){ + let group_del_btn = document.createElement("button"); + group_del_btn.setAttribute("onclick",`delete_group(${group["id"]},${group["pid"]})`) + group_del_btn.innerText = "удалить"; + group_del_btn.style = "font-size: 1vw;width: 70px;"; + group_div.append(group_del_btn) + } + + group_div.append(group_inp); + group_div.append(group_label); + select.append(group_div) + } + // callback(res); + }); + if(gid == gids.at(-1)){ + if(callback)callback(); + } + }); +} + +function group_check(gid){ + let gid_el = document.getElementById(`obj_group_${gid}`); + if(gid_el.checked){ + gids[gids.indexOf(gids.at(-1))+1] = gid; + } + else if (!gid_el.checked){ + gids.splice(gids.indexOf(gid),1); + } + // if (!gids.includes(gid)){ + // gids[gids.indexOf(gids.at(-1))+1] = gid; + // } + // else{ + // gids.pop(gid); + // } + + console.log(gids); + if (typeof gids_change != 'undefined'){ + gids_change(); + } +} + +function load_parts(callback){ + let parts_div = document.getElementById("part_select"); + $.post( "/object/parts/get", {}) .done(function( res ) { if(res["out"] == "good"){ - select.innerHTML = ""; - res["body"].forEach(group => { - let group_div = document.createElement("option"); - group_div.innerText = group["name"].replace("$"," "); - group_div.setAttribute("group_count",group["count"]); - group_div.setAttribute("gid",group["id"]); - group_div.id = `obj_group_${group["id"]}`; - select.append(group_div); - if(group["id"] == res["body"].at(-1)["id"]){ - if(callback)callback(); - } - }); + // console.log(res["body"]); + callback(res["body"]); + } + }); +} +function load_group(gid,callback){ + $.post( "/object/group/get", {gid:gid}) + .done(function( res ) { + if(res["out"] == "good"){ + // console.log(res["body"]); + callback(res["body"]); + // Object.values(res["body"]).forEach(part => { + // console.log(part); + // }); } - // callback(res); }); } @@ -147,4 +220,27 @@ function postForm(path, params, method) { document.body.appendChild(form); form.submit(); -} \ No newline at end of file +} + +function downloadTextFile(text, name) { + const a = document.createElement('a'); + const type = name.split(".").pop(); + a.href = URL.createObjectURL( new Blob([text], { type:`text/${type === "txt" ? "plain" : type}` }) ); + a.download = name; + a.click(); +} + +var openFile = function(event,callback) { + var input = event.target; + console.log(input.files[0]); + + var reader = new FileReader(); + reader.onload = function() { + var text = reader.result; + // var node = document.getElementById('import_file'); + // node.innerText = text; + console.log(reader.result.substring(0, 200)); + callback(text) + }; + reader.readAsText(input.files[0]); +}; \ No newline at end of file diff --git a/public/lib/inter.js b/public/lib/inter.js index 33ed26b..b521143 100644 --- a/public/lib/inter.js +++ b/public/lib/inter.js @@ -1,9 +1,13 @@ window.dragMoveListener = dragMoveListener; let root = document.getElementById("drags"); -let objs = { height:"2",width:"4"}; +let objs = { height:"2",width:"4",color:"#FFFFFF"}; let objs_store = {}; let objs_imgs = {}; let proj_from = "cloud"; +let cur_obj; +let objs_back = []; +let objs_forw = []; +let proj_state = "loading"; function create(clas,x,y,body,id,size){ let main_clas = clas.split(" ")[0]; @@ -20,16 +24,17 @@ function create(clas,x,y,body,id,size){ // db_data.forEach(db_data => { // }); if (db_data == null) { - delete objs[main_clas][id]; - if(proj_from == "cloud"){ - save(()=>{ - goto("/proj/"+proj_name); - },false); - } - else if (proj_from == "local"){ - save_local(); - load_proj_local(); - } + delete objs[main_clas]; + reload(); + // if(proj_from == "cloud"){ + // // save(()=>{ + // // // goto("/proj/load/"+proj_name); + // // },false); + // } + // else if (proj_from == "local"){ + // save_local(); + // load_proj_local(); + // } } else if (db_data != null){ if (objs_imgs[main_clas] == null){ @@ -54,6 +59,7 @@ function create(clas,x,y,body,id,size){ } calc_total(); }) + obj.setAttribute("onclick",`cur_obj = "${id}"`); root.append(obj); set_pos(obj,x,y); } @@ -67,6 +73,8 @@ function resize_drags(){ } function wall_size_change(type,value = null){ + if (proj_state == "loaded"){objs_back.push(JSON.parse(JSON.stringify(objs)));} + let wall = document.getElementsByClassName("wall")[0]; let scroll; if(type != null && type == "width") { @@ -94,7 +102,7 @@ function wall_size_change(type,value = null){ function calc_total(start = false){ document.getElementById("cost_list").innerHTML = "" if (start) { - document.getElementById("proj_cost").setAttribute("value",`стоимость: ${objs["total"]} руб.`); + document.getElementById("proj_cost_text").innerText = `стоимость: ${objs["total"]} руб.`; return; } let total=0; @@ -119,16 +127,17 @@ function calc_total(start = false){ // return total; objs["total"] = total; - document.getElementById("proj_cost").setAttribute("value",`стоимость: ${total} руб.`); + document.getElementById("proj_cost_text").innerText = `стоимость: ${total} руб.`; } function load(objss){ + proj_state = "loading"; // objs = JSON.parse($.cookie("objs")); // console.log(objs); objs = objss; Object.entries(objs).forEach(([keys, values]) => { - // console.log(keys,values); - if (keys != "width" && keys != "height"){ + console.log(keys,values); + if (keys != "width" && keys != "height" && keys != "color"){ Object.entries(values).forEach(([key, value]) => { if(key != "class"){ // console.log(key,keys); @@ -145,12 +154,23 @@ function load(objss){ // document.getElementById("drags").style.left = $(".dropzone")[0].getBoundingClientRect().x; } + if (keys == "color"){ + document.getElementById("wall").style.backgroundColor = values; + } if (keys == Object.keys(objs).at(-1)){ loaded(); + proj_state = "loaded"; } }); resize_drags(); } +function reload(save = false){ + // objs = JSON.parse($.cookie("objs")); + // console.log(objs); + document.getElementById("drags").innerHTML = ""; + load(objs); + if(save){save(()=>{},false)} +} function load_proj_cloud(){ proj_from = "cloud"; @@ -169,7 +189,7 @@ function load_proj_cloud(){ else if(res["out"] == "bad proj"){ console.log("bad"); save(()=>{ - goto("/proj/"+proj_name); + goto("/proj/load/"+proj_name); },false); } }) @@ -264,40 +284,40 @@ function dragMoveListener (event) { var y = (parseFloat(drag.getAttribute('data-y')) || 0) + event.dy set_pos(drag,x,y); } - let dragzone = document.getElementsByClassName('wall')[0]; + let dragzone = document.getElementsByClassName('wall')[0]; interact('.drag').draggable({ inertia: true, modifiers: [ - interact.modifiers.restrictRect({restriction: dragzone,endOnly: true}), + interact.modifiers.restrictRect({restriction: dragzone,endOnly: true,elementRect:{ left: 0.15, right: 0.85, top: 0, bottom: 1 }}), interact.modifiers.snap({targets: [interact.snappers.grid({ x: 2, y: 2 })],range: Infinity,relativePoints: [ { x: 0, y: 0 } ]}), ], autoScroll: true, listeners: {move: dragMoveListener, end (event) {}} }) -interact('.trash').dropzone({ - accept: '.drag', - overlap: 0.2, +// interact('.trash').dropzone({ +// accept: '.drag', +// overlap: 0.2, - ondragenter: function (event) {var drag = event.relatedTarget;var zone = event.target; +// ondragenter: function (event) {var drag = event.relatedTarget;var zone = event.target; - // console.log(drag.classList); - if(objs[drag.classList[0]] != null&&objs[drag.classList[0]][drag.id] != null) { - delete objs[drag.classList[0]][drag.id]; - } - calc_total() +// // console.log(drag.classList); +// if(objs[drag.classList[0]] != null&&objs[drag.classList[0]][drag.id] != null) { +// delete objs[drag.classList[0]][drag.id]; +// } +// calc_total() - zone.classList.add('drop-target');drag.classList.add('can-drop'); - drag.remove(); - }, - ondragleave: function (event) {var drag = event.relatedTarget;var zone = event.target;zone.classList.remove('drop-target');drag.classList.remove('in_zone');drag.classList.remove('can-drop');}, - ondrop: function (event) {var drag = event.relatedTarget; - // console.log(drag.id); - // console.log(objs); - drag.classList.add('in_zone');drag.classList.remove('can-drop'); - }, - ondropdeactivate: function (event) {var zone = event.target;zone.classList.remove('drop-active');zone.classList.remove('drop-target');} -}) +// zone.classList.add('drop-target');drag.classList.add('can-drop'); +// drag.remove(); +// }, +// ondragleave: function (event) {var drag = event.relatedTarget;var zone = event.target;zone.classList.remove('drop-target');drag.classList.remove('in_zone');drag.classList.remove('can-drop');}, +// ondrop: function (event) {var drag = event.relatedTarget; +// // console.log(drag.id); +// // console.log(objs); +// drag.classList.add('in_zone');drag.classList.remove('can-drop'); +// }, +// ondropdeactivate: function (event) {var zone = event.target;zone.classList.remove('drop-active');zone.classList.remove('drop-target');} +// }) interact('.dropzone').dropzone({ accept: '.drag', @@ -313,15 +333,17 @@ interact('.dropzone').dropzone({ objs[drag.classList[0]][drag.id] = {}; calc_total() } - + drag.setAttribute("onclick",`cur_obj = "${drag.id}"`); zone.classList.add('drop-target');drag.classList.add('can-drop'); }, ondragleave: function (event) {var drag = event.relatedTarget;var zone = event.target;zone.classList.remove('drop-target');drag.classList.remove('in_zone');drag.classList.remove('can-drop');}, ondrop: function (event) {var drag = event.relatedTarget + if (proj_state == "loaded"){objs_back.push(JSON.parse(JSON.stringify(objs)));} objs[drag.classList[0]][drag.id] = {y:drag.getAttribute('data-y'),x:drag.getAttribute('data-x'),body:drag.innerHTML}; - drag.classList.add('in_zone');drag.classList.remove('can-drop'); + // console.log(objs["KeyBoard/g/не$основное"]["KeyBoard/g/не$основное_1"]); + }, ondropdeactivate: function (event) {var zone = event.target;zone.classList.remove('drop-active');zone.classList.remove('drop-target');} }) @@ -345,7 +367,7 @@ interact('.createzone').dropzone({ let x = zone.getBoundingClientRect().left - document.getElementById("drags").getBoundingClientRect().left; let y = zone.getBoundingClientRect().top - document.getElementById("drags").getBoundingClientRect().top; create(`${zone.classList[0]} spawn drag`,x,y,`${zone.classList[0]}`,`none`); - + if (proj_state == "loaded"){objs_back.push(JSON.parse(JSON.stringify(objs)));} drag.classList.remove('spawn'); } zone.classList.remove('drop-target'); diff --git a/views/admin.ejs b/views/admin.ejs index 8a72041..c10c29d 100644 --- a/views/admin.ejs +++ b/views/admin.ejs @@ -8,17 +8,10 @@ -
-

объект

- <%- include('./admin/objects/object_groups.ejs') %> - <%- include('./admin/objects/object_creation.ejs') %> - <%- include('./admin/objects/object_edit.ejs') %> -
-
-

пользователь

- <%- include('./admin/users/user_reg.ejs') %> - <%- include('./admin/users/user_edit.ejs') %> +
+ +
diff --git a/views/admin/objects.ejs b/views/admin/objects.ejs new file mode 100644 index 0000000..94c1d82 --- /dev/null +++ b/views/admin/objects.ejs @@ -0,0 +1,22 @@ +<%- include('../static/start.ejs',{name:"admin/objects",async: true}) %> +<%- include('../header.ejs') %> + + +
+

объект

+ <%- include('../admin/objects/object_groups.ejs') %> + <%- include('../admin/objects/object_creation.ejs') %> + <%- include('../admin/objects/object_edit.ejs') %> +
+ +<%- include('../static/end.ejs') %> + \ No newline at end of file diff --git a/views/admin/objects/object_creation.ejs b/views/admin/objects/object_creation.ejs index 25348bc..80cf45a 100644 --- a/views/admin/objects/object_creation.ejs +++ b/views/admin/objects/object_creation.ejs @@ -61,7 +61,7 @@
- +
руб.
@@ -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"]); diff --git a/views/admin/objects/object_edit.ejs b/views/admin/objects/object_edit.ejs index f697182..d72da6b 100644 --- a/views/admin/objects/object_edit.ejs +++ b/views/admin/objects/object_edit.ejs @@ -30,8 +30,8 @@

изменение объектов

- - + +
@@ -44,9 +44,9 @@
\ No newline at end of file diff --git a/views/admin/objects/object_groups.ejs b/views/admin/objects/object_groups.ejs index 1de3cdf..e5833ac 100644 --- a/views/admin/objects/object_groups.ejs +++ b/views/admin/objects/object_groups.ejs @@ -1,49 +1,113 @@

группы товаров

- -
- - + + +
+ +
    +
    \ No newline at end of file diff --git a/views/admin/users.ejs b/views/admin/users.ejs new file mode 100644 index 0000000..d380e65 --- /dev/null +++ b/views/admin/users.ejs @@ -0,0 +1,21 @@ +<%- include('../static/start.ejs',{name:"admin/users",async: true}) %> +<%- include('../header.ejs') %> + + +
    +

    пользователь

    + <%- include('../admin/users/user_reg.ejs') %> + <%- include('../admin/users/user_edit.ejs') %> +
    + +<%- include('../static/end.ejs') %> + \ No newline at end of file diff --git a/views/admin/users/user_reg.ejs b/views/admin/users/user_reg.ejs index dfcb16f..80a7914 100644 --- a/views/admin/users/user_reg.ejs +++ b/views/admin/users/user_reg.ejs @@ -14,12 +14,64 @@
    - + +
    + \ No newline at end of file diff --git a/views/login.ejs b/views/login.ejs index d89d56c..8a745af 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -8,7 +8,7 @@ margin: 0%; background-image: url("/img/background/photo_2023-06-06_08-53-47\ 1.png"); background-repeat: no-repeat; - background-position: center; + background-position: center; background-size: cover; } #login_form{ diff --git a/views/main.ejs b/views/main.ejs index dee72e7..86918b6 100644 --- a/views/main.ejs +++ b/views/main.ejs @@ -66,7 +66,7 @@ // console.log(scr) // console.log("good"); // if(callback) callback(res); - goto(`/proj/${name}`); + goto(`/proj/load/${name}`); } }) } @@ -81,16 +81,16 @@ console.log(proj); let div = document.getElementById("projs_div"); div.innerHTML += ` - + +
    +
    +
      -
      +
      \ No newline at end of file diff --git a/views/static/start.ejs b/views/static/start.ejs index a40adce..dd765ad 100644 --- a/views/static/start.ejs +++ b/views/static/start.ejs @@ -32,6 +32,7 @@ width: 90vw; margin: auto; padding-block: 20px; + min-height: 800px; } html{ background-color:aliceblue; @@ -43,6 +44,8 @@ margin: 0px; } *{ + touch-action: none; + user-select: none; font: "Circe Rounded"; font-size: var(--main-font-size); font-weight:100;