migration start
238
back_users.sql
|
@ -2,10 +2,10 @@
|
|||
-- version 5.2.1
|
||||
-- https://www.phpmyadmin.net/
|
||||
--
|
||||
-- Хост: db
|
||||
-- Время создания: Июл 01 2023 г., 08:40
|
||||
-- Версия сервера: 8.0.33
|
||||
-- Версия PHP: 8.1.19
|
||||
-- Хост: 192.168.2.72
|
||||
-- Время создания: Сен 18 2023 г., 11:34
|
||||
-- Версия сервера: 8.1.0
|
||||
-- Версия PHP: 8.2.9
|
||||
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
START TRANSACTION;
|
||||
|
@ -21,13 +21,6 @@ SET time_zone = "+00:00";
|
|||
-- База данных: `users`
|
||||
--
|
||||
|
||||
CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'user';
|
||||
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'user'@'%' WITH GRANT OPTION;
|
||||
|
||||
|
||||
-- CREATE DATABASE IF NOT EXISTS `users` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
|
||||
-- USE `users`;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
|
@ -37,15 +30,61 @@ GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on
|
|||
CREATE TABLE `admins` (
|
||||
`id` int NOT NULL,
|
||||
`login` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`uid` int NOT NULL
|
||||
`uid` int NOT NULL,
|
||||
`rights` int NOT NULL DEFAULT '0'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
--
|
||||
-- Дамп данных таблицы `admins`
|
||||
--
|
||||
|
||||
INSERT INTO `admins` (`id`, `login`, `uid`) VALUES
|
||||
(18, 'admin', 34);
|
||||
INSERT INTO `admins` (`id`, `login`, `uid`, `rights`) VALUES
|
||||
(58, 'n0rdye', 35, 3),
|
||||
(91, 'admin', 72, 3),
|
||||
(103, 'Stolyarchuk.E', 92, 3),
|
||||
(108, 'andreeva.u', 96, 3);
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Структура таблицы `color_palette`
|
||||
--
|
||||
|
||||
CREATE TABLE `color_palette` (
|
||||
`id` int NOT NULL,
|
||||
`color` tinytext NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
--
|
||||
-- Дамп данных таблицы `color_palette`
|
||||
--
|
||||
|
||||
INSERT INTO `color_palette` (`id`, `color`) VALUES
|
||||
(20, '43368D'),
|
||||
(21, '41AB34'),
|
||||
(22, 'F7EA55'),
|
||||
(23, 'E5231F'),
|
||||
(24, 'F39223'),
|
||||
(25, '009FE3'),
|
||||
(26, 'CEE8EA'),
|
||||
(27, 'B9D585'),
|
||||
(28, 'F4F2C7'),
|
||||
(29, 'E699A7'),
|
||||
(30, 'F9C771'),
|
||||
(31, 'B7A3C7');
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Структура таблицы `logs`
|
||||
--
|
||||
|
||||
CREATE TABLE `logs` (
|
||||
`id` int NOT NULL,
|
||||
`date` date DEFAULT NULL,
|
||||
`time` time NOT NULL,
|
||||
`log` text NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
|
@ -55,14 +94,70 @@ INSERT INTO `admins` (`id`, `login`, `uid`) VALUES
|
|||
|
||||
CREATE TABLE `objects` (
|
||||
`id` int NOT NULL,
|
||||
`name` text NOT NULL,
|
||||
`img` text NOT NULL,
|
||||
`height` smallint NOT NULL,
|
||||
`width` smallint NOT NULL,
|
||||
`description` mediumtext NOT NULL,
|
||||
`gid` int NOT NULL DEFAULT '0'
|
||||
`name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`img` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`height` double NOT NULL,
|
||||
`width` double NOT NULL,
|
||||
`cost` float NOT NULL,
|
||||
`gid` int NOT NULL DEFAULT '0',
|
||||
`colors` tinyint(1) NOT NULL DEFAULT '0',
|
||||
`pid` int NOT NULL DEFAULT '0'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
--
|
||||
-- Дамп данных таблицы `objects`
|
||||
--
|
||||
|
||||
INSERT INTO `objects` (`id`, `name`, `img`, `height`, `width`, `cost`, `gid`, `colors`, `pid`) VALUES
|
||||
(81, 'KeyBoard~g~не$основное', '/img/object/KeyBoard~g~не$основное/main.jpg', 45, 100, 200, 24, 0, 1),
|
||||
(98, 'Настенная$панель$домик~g~Настенные$панели~p~Оборудование', '/img/object/Настенная$панель$домик~g~Настенные$панели~p~Оборудование/main.png', 100, 64, 17420, 73, 1, 2),
|
||||
(127, 'Бизиборд$«Лисичка»~g~основное~p~Оборудование', '/img/object/Бизиборд$«Лисичка»~g~основное~p~Оборудование/main.png', 30, 90, 13660, 20, 0, 2);
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Структура таблицы `object_groups`
|
||||
--
|
||||
|
||||
CREATE TABLE `object_groups` (
|
||||
`id` int NOT NULL,
|
||||
`name` varchar(500) NOT NULL,
|
||||
`count` int NOT NULL,
|
||||
`pid` int NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
--
|
||||
-- Дамп данных таблицы `object_groups`
|
||||
--
|
||||
|
||||
INSERT INTO `object_groups` (`id`, `name`, `count`, `pid`) VALUES
|
||||
(20, 'основное', 1, 2),
|
||||
(24, 'не$основное', 7, 1),
|
||||
(73, 'Настенные$панели', 1, 2);
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Структура таблицы `object_partition`
|
||||
--
|
||||
|
||||
CREATE TABLE `object_partition` (
|
||||
`id` int NOT NULL,
|
||||
`name` varchar(1000) NOT NULL,
|
||||
`groups` longtext NOT NULL,
|
||||
`count` int NOT NULL,
|
||||
`no-cost` tinyint(1) NOT NULL DEFAULT '0'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
--
|
||||
-- Дамп данных таблицы `object_partition`
|
||||
--
|
||||
|
||||
INSERT INTO `object_partition` (`id`, `name`, `groups`, `count`, `no-cost`) VALUES
|
||||
(1, 'Помехи$на$стене', '24', 1, 1),
|
||||
(2, 'Оборудование', '20,73', 2, 0),
|
||||
(9, 'Бизиборды', '', 0, 0);
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
|
@ -74,7 +169,9 @@ CREATE TABLE `projects` (
|
|||
`name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`uid` int NOT NULL,
|
||||
`body` json NOT NULL,
|
||||
`img` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL
|
||||
`img` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`creation_date` datetime DEFAULT NULL,
|
||||
`last_change_date` datetime DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
@ -89,6 +186,16 @@ CREATE TABLE `sids` (
|
|||
`uid` int NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
--
|
||||
-- Дамп данных таблицы `sids`
|
||||
--
|
||||
|
||||
INSERT INTO `sids` (`id`, `sid`, `uid`) VALUES
|
||||
(331, 'c2d58f63-52b2-4678-92f7-fb1bdeb404dc%%/#e621', 96),
|
||||
(342, '468bfba7-cc8d-45b9-822b-ed9359b67942%%/#e621', 72),
|
||||
(350, 'bd21222c-bd8a-460b-b3e9-32b210759720%%/#e621', 92),
|
||||
(354, '5538d163-b71e-4604-aef2-5c000a577eca%%/#e621', 35);
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
|
@ -99,7 +206,7 @@ CREATE TABLE `users` (
|
|||
`id` int NOT NULL,
|
||||
`login` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`pass` varchar(1000) NOT NULL,
|
||||
`admin` int DEFAULT '0',
|
||||
`admin` tinyint(1) DEFAULT '0',
|
||||
`uuid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
|
@ -108,7 +215,12 @@ CREATE TABLE `users` (
|
|||
--
|
||||
|
||||
INSERT INTO `users` (`id`, `login`, `pass`, `admin`, `uuid`) VALUES
|
||||
(34, 'admin', 'admin', 1, '7a910a34-8b80-4a60-8445-2400920be5d3%admin%%4a576825-deea-403d-bf0b-46bb98bb80fd#621');
|
||||
(35, 'n0rdye', '595', 1, '3bcb0c63-359a-4ec1-b7ad-49aa78a010ec%n0rdye%%bed10840-d365-4980-8b93-c018b5757217#621'),
|
||||
(72, 'admin', 'Gfzkmybr72', 1, '19e70eed-e370-43b3-894f-8192bda656b6%%U2FsdGVkX1+Wwk7/EIIpOOysfRnlDY5Q8TgojbYWxZo=#e621'),
|
||||
(76, 'voloshina.e', 'Volo1508', 0, '9c1fe660-dc56-4a0b-98c2-6eb4d7b3498a%%U2FsdGVkX18N+JSSFfr5TRLFkmGDLwlz7mhATO/pJmU=#e621'),
|
||||
(91, 'sychov.a', 'Sych1808!', 0, 'f921ba23-723c-4cb4-b5a6-e24ffbb9d181%%U2FsdGVkX19C2YLx2D1IZEVNuM/qFZjWoI37vxioL2E=#e621'),
|
||||
(92, 'Stolyarchuk.E', 'Sto2108!', 1, '3e5ac53e-f46e-4f9d-94fd-c761ce17c799%%U2FsdGVkX1/9C2IykLtuoHXA9isJjqBADD3+s1D5cVY=#e621'),
|
||||
(96, 'andreeva.u', 'Andr2908', 1, 'c2e8cb66-5d80-4905-9cc0-4830d448960e%%andreeva.u#e621');
|
||||
|
||||
--
|
||||
-- Индексы сохранённых таблиц
|
||||
|
@ -121,10 +233,37 @@ ALTER TABLE `admins`
|
|||
ADD PRIMARY KEY (`id`),
|
||||
ADD UNIQUE KEY `uid` (`uid`) USING BTREE;
|
||||
|
||||
--
|
||||
-- Индексы таблицы `color_palette`
|
||||
--
|
||||
ALTER TABLE `color_palette`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
--
|
||||
-- Индексы таблицы `logs`
|
||||
--
|
||||
ALTER TABLE `logs`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
--
|
||||
-- Индексы таблицы `objects`
|
||||
--
|
||||
ALTER TABLE `objects`
|
||||
ADD PRIMARY KEY (`id`),
|
||||
ADD KEY `gid` (`gid`),
|
||||
ADD KEY `pid` (`pid`);
|
||||
|
||||
--
|
||||
-- Индексы таблицы `object_groups`
|
||||
--
|
||||
ALTER TABLE `object_groups`
|
||||
ADD PRIMARY KEY (`id`),
|
||||
ADD KEY `object_groups_ibfk_1` (`pid`);
|
||||
|
||||
--
|
||||
-- Индексы таблицы `object_partition`
|
||||
--
|
||||
ALTER TABLE `object_partition`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
--
|
||||
|
@ -155,31 +294,55 @@ ALTER TABLE `users`
|
|||
-- AUTO_INCREMENT для таблицы `admins`
|
||||
--
|
||||
ALTER TABLE `admins`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=19;
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=109;
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT для таблицы `color_palette`
|
||||
--
|
||||
ALTER TABLE `color_palette`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=35;
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT для таблицы `logs`
|
||||
--
|
||||
ALTER TABLE `logs`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5417;
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT для таблицы `objects`
|
||||
--
|
||||
ALTER TABLE `objects`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=20;
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=141;
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT для таблицы `object_groups`
|
||||
--
|
||||
ALTER TABLE `object_groups`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=74;
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT для таблицы `object_partition`
|
||||
--
|
||||
ALTER TABLE `object_partition`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT для таблицы `projects`
|
||||
--
|
||||
ALTER TABLE `projects`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=27;
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=69;
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT для таблицы `sids`
|
||||
--
|
||||
ALTER TABLE `sids`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=72;
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=355;
|
||||
|
||||
--
|
||||
-- AUTO_INCREMENT для таблицы `users`
|
||||
--
|
||||
ALTER TABLE `users`
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=35;
|
||||
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=97;
|
||||
|
||||
--
|
||||
-- Ограничения внешнего ключа сохраненных таблиц
|
||||
|
@ -189,19 +352,32 @@ ALTER TABLE `users`
|
|||
-- Ограничения внешнего ключа таблицы `admins`
|
||||
--
|
||||
ALTER TABLE `admins`
|
||||
ADD CONSTRAINT `admins_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
||||
ADD CONSTRAINT `admins_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
|
||||
|
||||
--
|
||||
-- Ограничения внешнего ключа таблицы `objects`
|
||||
--
|
||||
ALTER TABLE `objects`
|
||||
ADD CONSTRAINT `objects_ibfk_1` FOREIGN KEY (`gid`) REFERENCES `object_groups` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT,
|
||||
ADD CONSTRAINT `objects_ibfk_2` FOREIGN KEY (`pid`) REFERENCES `object_partition` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
|
||||
|
||||
--
|
||||
-- Ограничения внешнего ключа таблицы `object_groups`
|
||||
--
|
||||
ALTER TABLE `object_groups`
|
||||
ADD CONSTRAINT `object_groups_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `object_partition` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
|
||||
|
||||
--
|
||||
-- Ограничения внешнего ключа таблицы `projects`
|
||||
--
|
||||
ALTER TABLE `projects`
|
||||
ADD CONSTRAINT `projects_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
||||
ADD CONSTRAINT `projects_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
|
||||
|
||||
--
|
||||
-- Ограничения внешнего ключа таблицы `sids`
|
||||
--
|
||||
ALTER TABLE `sids`
|
||||
ADD CONSTRAINT `sids_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
||||
ADD CONSTRAINT `sids_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
|
||||
COMMIT;
|
||||
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
|
|
2
func.js
|
@ -157,7 +157,7 @@ module.exports.img_recolor = (res,image,color) => {
|
|||
image: image,
|
||||
colors: {
|
||||
type: 'hex',
|
||||
targetColor: "#FFFFFF",
|
||||
targetColor: "#c8c8c8",
|
||||
replaceColor: `#${color}`
|
||||
},
|
||||
deltaE: 10
|
||||
|
|
29
index.js
|
@ -189,6 +189,17 @@ app.post("/object/group/get", (req,res) => {try{
|
|||
} catch (error) {func.log("router single object getting error - "+error);}
|
||||
})
|
||||
|
||||
// colors
|
||||
app.post("/object/colors/get", (req,res) => {try{
|
||||
let inp = req.body;
|
||||
let cook = req.cookies;
|
||||
// func.log(inp["name"]);
|
||||
func.sid(cook,res,()=>{
|
||||
obj.load_colors(inp,cook,res);
|
||||
})
|
||||
} catch (error) {func.log("router single object getting error - "+error);}
|
||||
})
|
||||
|
||||
|
||||
/// admin
|
||||
app.get("/admin", (req,res) =>{try {
|
||||
|
@ -217,6 +228,24 @@ app.get("/get_logs", (req,res) => {
|
|||
try{let cook = req.cookies;func.sid(cook,res,()=>{func.logs_file(res);})}
|
||||
catch (error) {func.log("router logs download error - "+error);}
|
||||
})
|
||||
app.post("/admin/colors/new", (req,res) => {try{
|
||||
let inp = req.body;
|
||||
let cook = req.cookies;
|
||||
// func.log(inp["name"]);
|
||||
func.sid(cook,res,()=>{
|
||||
obj.new_color(inp,cook,res);
|
||||
})
|
||||
} catch (error) {func.log("router single object getting error - "+error);}
|
||||
})
|
||||
app.post("/admin/colors/delete", (req,res) => {try{
|
||||
let inp = req.body;
|
||||
let cook = req.cookies;
|
||||
// func.log(inp["name"]);
|
||||
func.sid(cook,res,()=>{
|
||||
obj.del_color(inp,cook,res);
|
||||
})
|
||||
} catch (error) {func.log("router single object getting error - "+error);}
|
||||
})
|
||||
app.post("/admin/objects/new", (req,res) => {try{
|
||||
let inp = req.body;
|
||||
let cook = req.cookies;
|
||||
|
|
50
object.js
|
@ -10,7 +10,7 @@ module.exports.loads = (inp,cook,res)=>{
|
|||
let gin
|
||||
if (typeof inp["gid"] == 'undefined' || inp["gid"] == null) gin = "1 OR 1=1"
|
||||
else gin = inp["gid"]
|
||||
db.ggv("objects","`name`,`id`,`height`,`width`,`cost`,`gid`,`colors`","gid",`${gin}`,(odata)=>{
|
||||
db.ggv("objects","`name`,`id`,`height`,`width`,`cost`,`gid`,`colors`,`pid`","gid",`${gin}`,(odata)=>{
|
||||
// func.log(odata);
|
||||
res.send({out:"good",body:odata});
|
||||
})
|
||||
|
@ -42,7 +42,7 @@ module.exports.new = (inp,cook,res)=>{
|
|||
res.send({out:"bad",err:"name"});
|
||||
}
|
||||
else if (db_name[0] == null){
|
||||
db.nr("objects","`cost`,`name`,`img`,`height`,`width`,`gid`,`colors`",`'${inp["cost"]}','${inp["name"]}~g~${gname["name"]}~p~${pname["name"]}','${img_path}','${inp["height"]}','${inp["width"]}','${inp["gid"]}','${inp["colors"]}'`,true);
|
||||
db.nr("objects","`cost`,`name`,`img`,`height`,`width`,`gid`,`colors`,`pid`",`'${inp["cost"]}','${inp["name"]}~g~${gname["name"]}~p~${pname["name"]}','${img_path}','${inp["height"]}','${inp["width"]}','${inp["gid"]}','${inp["colors"]}','${gname["pid"]}'`,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"});
|
||||
|
@ -56,7 +56,7 @@ module.exports.new = (inp,cook,res)=>{
|
|||
})
|
||||
function save_img(data,name,callback) {
|
||||
let img = imageDataURI.decode(data);
|
||||
if (!fs.existsSync(`public/img/object/${name}`)){fs.mkdirSync(`public/img/object/${name}`);fs.mkdirSync(`public/img/object/${name}/colored`);}
|
||||
if (!fs.existsSync(`public/img/object/${name}`)){fs.mkdirSync(`public/img/object/${name}`);}
|
||||
fs.writeFile(`public/img/object/${name}/main.${img.imageType.split("/").at(-1)}`, img.dataBuffer,()=>{
|
||||
if(callback)callback(`/img/object/${name}/main.${img.imageType.split("/").at(-1)}`);
|
||||
});
|
||||
|
@ -66,6 +66,42 @@ module.exports.new = (inp,cook,res)=>{
|
|||
}
|
||||
}
|
||||
|
||||
module.exports.new_color = (inp,cook,res)=>{
|
||||
try {
|
||||
db.fv("color_palette","color",inp["color"],(in_db)=>{in_db = in_db[0];
|
||||
if(typeof in_db == 'undefined'){
|
||||
db.nr("color_palette","color",`'${inp["color"]}'`,true,(db)=>{
|
||||
res.send({out:"good"});
|
||||
func.log(`admin added new color:${inp["color"]}`)
|
||||
})
|
||||
}else{
|
||||
res.send({out:"bad"});
|
||||
}
|
||||
})
|
||||
} catch (error) {
|
||||
func.log("backend object creating error - "+error);
|
||||
}
|
||||
}
|
||||
module.exports.del_color = (inp,cook,res)=>{
|
||||
try {
|
||||
db.dl("color_palette","id",inp["id"],(in_db)=>{
|
||||
res.send({out:"good"});
|
||||
func.log(`admin deleted color:${inp["color"]}`)
|
||||
},true);
|
||||
} catch (error) {
|
||||
func.log("backend object creating error - "+error);
|
||||
}
|
||||
}
|
||||
module.exports.load_colors = (inp,cook,res)=>{
|
||||
try {
|
||||
db.gav("color_palette","0",(in_db)=>{
|
||||
res.send({out:"good",body:in_db})
|
||||
})
|
||||
} catch (error) {
|
||||
func.log("backend object creating error - "+error);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.save = (inp,cook,res)=>{
|
||||
try {
|
||||
// let changed = [];
|
||||
|
@ -96,19 +132,21 @@ module.exports.save = (inp,cook,res)=>{
|
|||
fs.rm(`public/img/object/${db_data["name"]}`, { recursive: true }, () => {
|
||||
// fs.unlink(db_data["img"],()=>{});
|
||||
save_img(value,db_data["name"],(path)=>{
|
||||
// console.log(db_data["name"]);
|
||||
db.sv("objects",key,path,"id",inp["id"],()=>{
|
||||
chack_if_last(key)
|
||||
},true);
|
||||
})
|
||||
|
||||
|
||||
function save_img(data,name,callback) {
|
||||
let img = imageDataURI.decode(data);
|
||||
if (!fs.existsSync(`public/img/object/${name}`)){fs.mkdirSync(`public/img/object/${name}`);fs.mkdirSync(`public/img/object/${name}/colored`);}}
|
||||
if (!fs.existsSync(`public/img/object/${name}`)){fs.mkdirSync(`public/img/object/${name}`);}
|
||||
fs.writeFile(`public/img/object/${name}/main.${img.imageType.split("/").at(-1)}`, img.dataBuffer,()=>{
|
||||
if(callback)callback(`/img/object/${name}/main.${img.imageType.split("/").at(-1)}`);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
})
|
||||
})
|
||||
}
|
||||
else if (key != "name"){
|
||||
|
|
|
@ -71,6 +71,8 @@ module.exports.save = (inp,cook,res)=>{
|
|||
try {
|
||||
db.gv("users","uuid",`'${cook["uuid"]}'`, (udata)=>{ udata = udata[0]
|
||||
db.gv("projects","uid",udata["id"],(pdata)=>{
|
||||
var date = moment().format('YYYY-MM-DD');
|
||||
var time = moment().format('hh:mm:ss');
|
||||
let projin = null;
|
||||
// func.log(pdata);
|
||||
pdata.forEach(projt => {
|
||||
|
@ -82,14 +84,13 @@ module.exports.save = (inp,cook,res)=>{
|
|||
if(projin == null){
|
||||
// func.log("proj not in");
|
||||
// func.log(pname,udata["id"],proj);
|
||||
var date = moment().format('YYYY-MM-DD');
|
||||
var time = moment().format('hh:mm:ss');
|
||||
func.log(`good boy ${udata["uuid"]} created project ${inp["name"]} from ${cook["sid"]}`);
|
||||
db.nr("projects","`uid`,`name`,`body`,`img`,creation_date",`'${udata["id"]}','${inp["name"]}','${inp["proj"]}','${inp["img"]}','${date+"T"+time}'`);
|
||||
res.send({out:"good"});
|
||||
} else if (projin != null){
|
||||
db.sv("projects","body",inp["proj"],"id",projin["id"],()=>{});
|
||||
if(inp["img"] != "") db.sv("projects","img",inp["img"],"id",projin["id"],()=>{},"user");
|
||||
db.sv("projects","last_change_date",`${date+"T"+time}`,"id",projin["id"],()=>{});
|
||||
if(inp["img"] != "") db.sv("projects","img",inp["img"],"id",projin["id"],()=>{});
|
||||
func.log(`good boy ${udata["uuid"]} saved project ${projin["name"]} from ${cook["sid"]}`);
|
||||
// func.log("proj in");
|
||||
res.send({out:"good"});
|
||||
|
|
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 95 KiB |
After Width: | Height: | Size: 95 KiB |
After Width: | Height: | Size: 95 KiB |
After Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 164 KiB |
|
@ -99,6 +99,21 @@ function get_sid(){
|
|||
});
|
||||
}
|
||||
|
||||
function load_colors(callback){
|
||||
$.post( "/object/colors/get", {})
|
||||
.done(function( res ) {
|
||||
if(res["out"] == "good"){
|
||||
if(callback)callback(res["body"])
|
||||
}
|
||||
});
|
||||
}
|
||||
function clear_palette(){
|
||||
Object.values(document.getElementsByClassName("color_palette")).forEach(element => {
|
||||
element.style.border = "0px blue solid";
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function load_groups(callback,groups,admin = false){
|
||||
let select = document.getElementById("group");
|
||||
// let name = select.options[select.selectedIndex].text;
|
||||
|
|
|
@ -50,12 +50,14 @@ function create(clas,x,y,color = null,id,size){
|
|||
}
|
||||
}
|
||||
function make(img){
|
||||
// console.log(db_data);
|
||||
obj.src = img;
|
||||
obj.title = `${db_data["name"].replaceAll("$"," ").split("/g")[0]}\nцена:${db_data["cost"]}\nширина:${db_data["width"]}см высота:${db_data["height"]}см`;
|
||||
obj.title = `${db_data["name"].replaceAll("$"," ").split("~g")[0]}\nцена:${db_data["cost"]}\nширина:${db_data["width"]}см высота:${db_data["height"]}см`;
|
||||
obj.setAttribute("cost",db_data["cost"])
|
||||
obj.setAttribute("colors",Boolean(db_data["colors"]))
|
||||
obj.setAttribute("img",img)
|
||||
obj.setAttribute("gid",db_data["gid"])
|
||||
obj.setAttribute("pid",db_data["pid"])
|
||||
obj.setAttribute("color",color)
|
||||
// drag.transform = `translate(${drag.getAttribute("data-y")}px, ${drag.getAttribute("data-y")}px) scale(${db_data["width"] * cm_mod} ${db_data["height"] * cm_mod})`;
|
||||
if(size){
|
||||
|
@ -78,7 +80,13 @@ function obj_click(id){
|
|||
let obj = document.getElementById(id);
|
||||
cur_obj = id;
|
||||
if (obj.getAttribute("colors") == "true"){
|
||||
clear_palette();
|
||||
obj_colors_load(()=>{
|
||||
document.getElementById("obj_color_div").style.display = "flex";
|
||||
if( document.getElementById(`color_${obj.getAttribute("color")}`) != null){
|
||||
document.getElementById(`color_${obj.getAttribute("color")}`).style.border = "1px blue solid"
|
||||
}
|
||||
});
|
||||
}
|
||||
else{
|
||||
document.getElementById("obj_color_div").style.display = "none";
|
||||
|
@ -148,7 +156,7 @@ function calc_total(start = false){
|
|||
if(key != "height"&&key!="width"&key!="total"){
|
||||
// console.log(Object.keys(value).length);
|
||||
// console.log(objs_store[key]);
|
||||
if(objs_store[key] != null && objs_store[key]["cost"] > 0){
|
||||
if(objs_store[key] != null && objs_store[key]["cost"] > 0 && JSON.parse(document.getElementById(`group_drop-${objs_store[key]["pid"]}`).getAttribute("no-cost")) == false){
|
||||
// console.log(key,value);
|
||||
total += parseInt(parseInt(objs_store[key]["cost"]) * Object.keys(value).length);
|
||||
let obj_cost_div = document.createElement("li");
|
||||
|
@ -196,9 +204,6 @@ function load(objss){
|
|||
if (keys == "color"){
|
||||
document.getElementById("wall").style.backgroundColor = values;
|
||||
}
|
||||
if (keys == "grided"){
|
||||
document.getElementById("wall").style.backgroundColor = values;
|
||||
}
|
||||
if (keys == Object.keys(objs).at(-1)){
|
||||
loaded();
|
||||
proj_state = "loaded";
|
||||
|
@ -285,7 +290,7 @@ function load_objs(callback,group){
|
|||
if(res["out"] == "good"){
|
||||
// console.log(res["body"]);
|
||||
res["body"].forEach(element => {
|
||||
objs_store[`${element["name"]}`] = {height:element["height"],width:element["width"],id:element["id"],name:element["name"],cost:element["cost"],colors:element["colors"]}
|
||||
objs_store[`${element["name"]}`] = {height:element["height"],width:element["width"],id:element["id"],name:element["name"],cost:element["cost"],colors:element["colors"],gid:element["gid"],pid:element["pid"]}
|
||||
});
|
||||
callback(res["body"]);
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
<!-- <h1 style="text-align: center;">объект</h1> -->
|
||||
<%- include('../admin/objects/object_groups.ejs') %>
|
||||
<%- include('../admin/objects/object_creation.ejs') %>
|
||||
<%- include('../admin/objects/object_colors.ejs') %>
|
||||
<%- include('../admin/objects/object_edit.ejs') %>
|
||||
</section>
|
||||
|
||||
|
|
63
views/admin/objects/object_colors.ejs
Normal file
|
@ -0,0 +1,63 @@
|
|||
<div id="admin_colors" style="display: flex;justify-content: space-between;margin-top: 4vh;">
|
||||
<div id="obj_color_div" style="justify-content: space-between; width: 50vw;display: flex;">
|
||||
<label for="obj_colors" style="min-width: 10vw;float: left;">цвет объекта</label>
|
||||
<div id="obj_colors" style="display: flex; width: 30vw;overflow: auto;"></div>
|
||||
</div>
|
||||
<div id="inp">
|
||||
<input type="color" id="new_color" style="margin: auto;">
|
||||
<button onclick="new_color()" class="btn_blue">добавить цвет</button>
|
||||
<button onclick="del_color()" class="btn_blue">удалить цвет</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let cur_color = "";
|
||||
obj_colors_load();
|
||||
function obj_colors_load() {
|
||||
let div = document.getElementById("obj_colors");
|
||||
div.innerHTML = "";
|
||||
load_colors((colors)=>{
|
||||
Object.entries(colors).forEach(([key,value]) => {
|
||||
// console.log(value);
|
||||
let color_div = document.createElement("div");
|
||||
color_div.style = `background-color: #${value["color"]}; border-radius: 50%;height: 2vw;min-width: 2vw;margin-inline: 0.5vw;`;
|
||||
color_div.classList.add("color_palette");
|
||||
color_div.id=`color_${value["color"]}`;
|
||||
color_div.setAttribute("color_id",`${value["id"]}`)
|
||||
color_div.setAttribute("onclick",`clear_palette();document.getElementById('color_${value["color"]}').style.border = "1px blue solid";cur_color = 'color_${value["color"]}';`)
|
||||
color_div.title = `#${value["color"]}`;
|
||||
div.append(color_div);
|
||||
});
|
||||
})
|
||||
}
|
||||
function new_color(){
|
||||
let color = document.getElementById("new_color").value.replace("#","");
|
||||
let wait_msg = msg("добавление цвета",{type:"wait"})
|
||||
$.post( "/admin/colors/new", {color:color})
|
||||
.done(function( res ) {
|
||||
if(res["out"] == "good"){
|
||||
msg_del(wait_msg.id);
|
||||
msg("цвет добавлен");
|
||||
obj_colors_load();
|
||||
console.log(res["body"]);
|
||||
}
|
||||
else if (res["out"] == "bad"){
|
||||
msg_del(wait_msg.id);
|
||||
msg("цвет уже добавлен");
|
||||
}
|
||||
});
|
||||
}
|
||||
function del_color(){
|
||||
let color_id = document.getElementById(cur_color).getAttribute("color_id")
|
||||
let wait_msg = msg("удаление цвета",{type:"wait"})
|
||||
$.post( "/admin/colors/delete", {id:color_id})
|
||||
.done(function( res ) {
|
||||
if(res["out"] == "good"){
|
||||
msg_del(wait_msg.id);
|
||||
msg("цвет удалён");
|
||||
obj_colors_load();
|
||||
console.log(res["body"]);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
|
@ -48,10 +48,11 @@
|
|||
let color_check = document.getElementById("obj_color_check");
|
||||
let old_prev = document.getElementById("img_prev").src;
|
||||
if(color_check.checked == true){
|
||||
obj_colors_load();
|
||||
removeImageBackground(document.getElementById("img_prev").src).then((out)=>{
|
||||
document.getElementById("img_prev").src = out;
|
||||
})
|
||||
msg("при измении цвета все цвета кроме прозрачного изменятся",{type:"help",time:10});
|
||||
msg("помните что только hex:#c8c8c8 или rgb:200,200,200 цвета будут заменины при смене цвета ",{type:"help",time:10});
|
||||
}
|
||||
else{
|
||||
document.getElementById("img_prev").src = old_prev;
|
||||
|
@ -235,9 +236,7 @@
|
|||
}
|
||||
else if(res["out"] == "good"){
|
||||
msg("товар добавлен");
|
||||
setTimeout(()=>{
|
||||
edit_get_objs();
|
||||
},5000)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -43,15 +43,15 @@
|
|||
</div>
|
||||
</div>
|
||||
<section id="users_section">
|
||||
<div style="height: 430px;">
|
||||
<div style="height: 360px;">
|
||||
<li id="first_user"><div>Логин</div><div>Превилегии</div><div>Функции</div></li>
|
||||
<ul id="user_list"></ul>
|
||||
</div>
|
||||
<div style="display: flex;justify-content: space-between;margin: auto;">
|
||||
<div style="display: flex;"><h1>Всего: </h1> <h1 id="users_count">0</h1></div>
|
||||
<div style="display: flex;margin: auto 0px;">с <div id="users_from">0</div> по <div id="users_to">10</div></div>
|
||||
<div style="margin: auto 0px;"><button onclick="if(users_from-load_interval>=0){users_from-=load_interval;load_users_data(users_from);}" class="btn_gray">< 10 назад</button></div>
|
||||
<div style="margin: auto 0px;"><button onclick="users_from+=load_interval;load_users_data(users_from);" class="btn_gray">даллее ></button></div>
|
||||
<div style="margin: auto 0px;"><button id="back_btn" class="btn_gray">< 10 назад</button></div>
|
||||
<div style="margin: auto 0px;"><button id="forw_btn" class="btn_gray">даллее ></button></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
@ -59,10 +59,32 @@
|
|||
<script>
|
||||
let users_from = 0;
|
||||
let load_interval = 5;
|
||||
function user_count_check(){
|
||||
if(parseInt(document.getElementById("users_count").innerText) >= parseInt(document.getElementById("users_to").innerText)){
|
||||
document.getElementById("forw_btn").classList = "btn_blue";
|
||||
document.getElementById("forw_btn").setAttribute("onclick",`users_from+=load_interval;load_users_data(users_from);`);
|
||||
|
||||
}
|
||||
else{
|
||||
document.getElementById("forw_btn").setAttribute("onclick",``);
|
||||
document.getElementById("forw_btn").classList = "btn_gray";
|
||||
}
|
||||
|
||||
if(parseInt(document.getElementById("users_from").innerText) == 0){
|
||||
document.getElementById("back_btn").setAttribute("onclick",``);
|
||||
document.getElementById("back_btn").classList = "btn_gray";
|
||||
}
|
||||
else{
|
||||
document.getElementById("back_btn").setAttribute("onclick",`if(users_from-load_interval>=0){users_from-=load_interval;load_users_data(users_from);};`);
|
||||
document.getElementById("back_btn").classList = "btn_blue";
|
||||
}
|
||||
}
|
||||
load_users_data(users_from);
|
||||
function load_users_data(from,by_name=false){
|
||||
// if(to == "forward") {users_from+=load_interval;}
|
||||
// else if(to == "back") {users_from-=load_interval;}
|
||||
document.getElementById("back_btn").setAttribute("onclick",``);
|
||||
document.getElementById("forw_btn").setAttribute("onclick",``);
|
||||
document.getElementById("user_list").innerHTML = "";
|
||||
document.getElementById("users_from").innerText = from;
|
||||
document.getElementById("users_to").innerText = from+load_interval;
|
||||
|
@ -80,6 +102,7 @@
|
|||
|
||||
user_sec.append(user_pass);user_sec.append(user_name);user_sec.append(user_prevs);user_sec.append(user_buttons);
|
||||
document.getElementById("user_list").append(user_sec);
|
||||
user_count_check();
|
||||
});
|
||||
}
|
||||
else if (res["out"] == "bad"){
|
||||
|
@ -90,6 +113,7 @@
|
|||
else{
|
||||
let login = ask("имя");
|
||||
if (login != ""){
|
||||
form = 0;
|
||||
$.post( "/admin/users/find",{login:login,from:from,load_interval:load_interval})
|
||||
.done(function( res ) {
|
||||
if(res["out"] == "good"){
|
||||
|
@ -104,6 +128,10 @@
|
|||
document.getElementById("user_list").append(user_sec);
|
||||
});
|
||||
}
|
||||
else if(res["out"] == "bad"){
|
||||
msg("нет пользователя с таким иминем")
|
||||
load_users_data(users_from);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<input type="text" id="login" name="login" value="" placeholder="Логин" class="btn_white" style="text-align: center; padding-inline: 5vw;">
|
||||
<input type="submit" onclick='reg();' value="Зарегистрировать" class="btn_blue">
|
||||
<div>
|
||||
<label for="admin_check">Админ. привелегии</label>
|
||||
<label for="admin_check" style="margin: auto;">Админ. привелегии</label>
|
||||
<input type="checkbox" name="admin" value='false' id="admin_check" onchange="admin_ch()">
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -60,9 +60,9 @@
|
|||
}
|
||||
});
|
||||
}
|
||||
function new_proj(){
|
||||
function new_proj(objs = null){
|
||||
let name = ask("please enter project name");
|
||||
let objs = { height:"2",width:"4"};
|
||||
objs = (objs == null)? { height:"2",width:"4"}:objs;
|
||||
if(name != null && name!= "" && name!=" " && typeof name != "undefined" && name!="undefined"){
|
||||
$.post( "/save_proj", {proj:JSON.stringify(objs),name:name,img:"/img/proj_placeholder.webp"})
|
||||
.done(function( res ) {
|
||||
|
@ -84,7 +84,7 @@
|
|||
projs.forEach(proj => {
|
||||
console.log(proj);
|
||||
let div = document.getElementById("projs_div");
|
||||
div.innerHTML += `<button id='proj_${proj["name"]}' class='proj'>
|
||||
div.innerHTML += `<button id='proj_${proj["name"]}' proj_id='${proj["id"]}' class='proj'>
|
||||
<img src='${proj["img"]}' alt='${proj["name"]}' class="p_img" onclick="goto('/proj/load/${proj["name"]}')">
|
||||
<div class="p_props">
|
||||
<div class="p_left" style="text-align:left">
|
||||
|
@ -93,8 +93,8 @@
|
|||
</div>
|
||||
<div class="p_right">
|
||||
<img src="/img/icon/edit.svg" style="width:24px;height:24px" onclick="">
|
||||
<img src="/img/icon/copy.svg" style="width:24px;height:24px" onclick="">
|
||||
<img src="/img/icon/download.svg" style="width:24px;height:24px" onclick="download_proj('${proj["id"]}','${proj["name"]}')">
|
||||
<img src="/img/icon/copy.svg" style="width:24px;height:24px" onclick="copy_proj('${proj["name"]}')">
|
||||
<img src="/img/icon/download.svg" style="width:24px;height:24px" onclick="downloadImg('${proj["img"]}','${proj["name"]}');msg('скачивание');">
|
||||
<img src="/img/icon/trash.svg" style="width:24px;height:24px" onclick="del_proj('${proj["name"]}')">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -122,5 +122,14 @@
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
function copy_proj(proj){
|
||||
$.post( "/load_proj",{name:proj})
|
||||
.done(function( res ) {
|
||||
if(res["out"] == "good"){
|
||||
new_proj(JSON.parse(res["body"]))
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
<%- include('./static/end.ejs',{soc:true}) %>
|
|
@ -189,22 +189,9 @@
|
|||
|
||||
<div class="inputs" style="display: flex;justify-content: space-between;height: 5vh;">
|
||||
<div id="obj_color_div" style="justify-content: space-evenly; width: 50vw;display: none;transform: translateX(30%);">
|
||||
<label for="obj_color" style="width: 10vw;">цвет объекта</label>
|
||||
<label for="obj_colors" style="min-width: 10vw;">цвет объекта</label>
|
||||
<div id="obj_colors" style="display: flex; width: 30vw;overflow: auto;"></div>
|
||||
<!-- <input id="obj_color" type="color" onchange="obj_color_change(event)"> -->
|
||||
<div style="display: flex;justify-content: space-evenly; width: 30vw;">
|
||||
<div style="background-color: #43368D; border-radius: 50%;height: 2vw;width: 2vw;" color="#43368D" onclick="obj_color_change('43368D')"></div>
|
||||
<div style="background-color: #41AB34; border-radius: 50%;height: 2vw;width: 2vw;" color="#41AB34" onclick="obj_color_change('41AB34')"></div>
|
||||
<div style="background-color: #F7EA55; border-radius: 50%;height: 2vw;width: 2vw;" color="#F7EA55" onclick="obj_color_change('F7EA55')"></div>
|
||||
<div style="background-color: #E5231F; border-radius: 50%;height: 2vw;width: 2vw;" color="#E5231F" onclick="obj_color_change('E5231F')"></div>
|
||||
<div style="background-color: #F39223; border-radius: 50%;height: 2vw;width: 2vw;" color="#F39223" onclick="obj_color_change('F39223')"></div>
|
||||
<div style="background-color: #009FE3; border-radius: 50%;height: 2vw;width: 2vw;" color="#009FE3" onclick="obj_color_change('009FE3')"></div>
|
||||
<div style="background-color: #CEE8EA; border-radius: 50%;height: 2vw;width: 2vw;" color="#CEE8EA" onclick="obj_color_change('CEE8EA')"></div>
|
||||
<div style="background-color: #B9D585; border-radius: 50%;height: 2vw;width: 2vw;" color="#B9D585" onclick="obj_color_change('B9D585')"></div>
|
||||
<div style="background-color: #F4F2C7; border-radius: 50%;height: 2vw;width: 2vw;" color="#F4F2C7" onclick="obj_color_change('F4F2C7')"></div>
|
||||
<div style="background-color: #E699A7; border-radius: 50%;height: 2vw;width: 2vw;" color="#E699A7" onclick="obj_color_change('E699A7')"></div>
|
||||
<div style="background-color: #F9C771; border-radius: 50%;height: 2vw;width: 2vw;" color="#F9C771" onclick="obj_color_change('F9C771')"></div>
|
||||
<div style="background-color: #B7A3C7; border-radius: 50%;height: 2vw;width: 2vw;" color="#B7A3C7" onclick="obj_color_change('B7A3C7')"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="inputs" style="display: flex;justify-content: space-between;">
|
||||
|
@ -309,7 +296,7 @@
|
|||
}
|
||||
|
||||
function img_download(){
|
||||
msg("добавить на фото стоимость ?",{type:"ask",res:(out)=>{
|
||||
msg("добавить на фото стоимость?",{type:"ask",res:(out)=>{
|
||||
let wait_msg = msg("делаем фото",{type:"wait"})
|
||||
proj_img((src)=>{
|
||||
msg("изображение проекта готово",{time:3})
|
||||
|
@ -331,6 +318,7 @@
|
|||
}
|
||||
html2canvas(document.getElementById("drags"),{
|
||||
y:7,
|
||||
x:2,
|
||||
width:width,
|
||||
logging:false,
|
||||
scale:5
|
||||
|
@ -348,6 +336,27 @@
|
|||
});
|
||||
}
|
||||
|
||||
function obj_colors_load(callback) {
|
||||
let div = document.getElementById("obj_colors");
|
||||
div.innerHTML = "";
|
||||
load_colors((colors)=>{
|
||||
Object.entries(colors).forEach(([key,value]) => {
|
||||
// console.log(value);
|
||||
let color_div = document.createElement("div");
|
||||
color_div.style = `background-color: #${value["color"]}; border-radius: 50%;height: 2vw;min-width: 2vw;margin-inline: 0.5vw;`;
|
||||
color_div.classList.add("color_palette");
|
||||
color_div.id=`color_${value["color"]}`;
|
||||
color_div.setAttribute("color",`${value["color"]}`)
|
||||
color_div.setAttribute("onclick",`clear_palette();document.getElementById('color_${value["color"]}').style.border = "1px blue solid";obj_color_change('${value["color"]}')`)
|
||||
color_div.title = `#${value["color"]}`;
|
||||
div.append(color_div);
|
||||
if(key = Object.keys(colors).at(-1)){
|
||||
if(callback)callback();
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
function obj_color_change(color,in_obj = null){
|
||||
if(color != "null"){
|
||||
if (proj_state == "loaded"){objs_back.push(JSON.parse(JSON.stringify(objs)));}
|
||||
|
@ -355,6 +364,7 @@
|
|||
// console.log(color);
|
||||
color_change(color,obj.getAttribute("img"),(img)=>{
|
||||
obj.src = img;
|
||||
obj.setAttribute("color",color)
|
||||
objs[obj.classList[0]][obj.id]["color"] = color;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -88,7 +88,4 @@
|
|||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
let domen = "puzzle.nor.su";
|
||||
</script>
|
||||
|
||||
|
|