Woolfich commited on
Commit
42bc60d
·
verified ·
1 Parent(s): 68844ee

Приложение полностью офлайн, гитхаб френдли ( всегда есть проблема с абсолютными и относительными путями). С возможностью установить как нативное приложение на телефон.Стэк- WASM Cargo Leptos

Browse files

.
Стиль Серо- сине - стальной, минималистичный, современный, приятный для глаз.
База данных 100мб+
1.Главный экран. Сверху слева инпут и кнопка Добавить ( добавляется в список фамилия) , справа две кнопки “Импорт”, “Экспорт”. Внизу кнопка " План" (ведёт в окно плана). Нижняя и верхняя панель зафиксированы. При вводе записи и нажатии кнопки в центре добавляется фамилия . Это вертикально скроллируемый список уходящий в невидимую область. Каждая фамилия на главной странице интерактивна и ведет в окно " Карточка сварщика" (КС) . На всех экранах кроме главного , фиксированная кнопка сверху “ На главную”.
2. План. 2.1 Нижняя фиксированная панель подписана Нормы. Слева двойной инпут для артикула и нормы времени /хт637/ 10ч/. При Вводе артикул с нормой отправляются в базу данных. В инпуте при начале ввода Норм происходит подсказка из баззы данных по совпадению. 2.2 Сверху двойной инпут и кнопка “Добавить” | хт637| 6 | . В инпоту тоже подсказка по совпадению из базы данных Норм. В инпут плана можно ввести только то, что есть в базе данных .Запись уходит в вертикальный список ( новая запись сверху) , выглядит так Хт637 6шт ……0 . С этого момента начинается отсчёт( текущий план для данного артикула) записанное количество этого артикула каждого сварщика в КС, суммируется в этот артикул. Например три сварщика выполнили хт637 по 2, в Плане артикул выглядит так Хт637 6шт……….. 6шт. Это значит план выполнен , строка подсвечивается зеленым контуром.
Если ввести в инпут количество 0, это бесконечное количество.
3. "Карточка сварщика" ( КС). Сверху фамилия сварщика, ниже строка ввода разделенная на 2 сектора для артикула и количества, например |хт637| 2 | “Добавить запись”. В этой же строке иконка календарь 📅 ( вызывает интерактивную модалку в виде календаря).
Клик по инпуту вызывает список подсказку из Плана ( текущий план), невозможно ввести артикул, которого нет в плане, или который закрыт ( план выполнен)

Добавленные артикулы формируются в центре экрана в вертикальный скроллируемый список; //последнее изменение в записи всегда сверху, допустим артикул уже в списке, он не на первом месте, но изменение (суммирование или редактирование) ставит его в верх списка, и так для всех артикулов//. Список разделен на блоки по месяцам, хт637 в августе и хт637 в сентябре не суммируются. Новый месячный блок всегда сверху, старый подписанный уходит вниз. Тап или клик по артикулу, который в списке, автоматически подставляет его в строку ввода ( если такой артикул есть в текущем плане), остается только добавить количество. Повторная запись того же артикула суммирует количество ( Например хт52 2шт , хт52 3шт в списке выглядит как хт52 5шт). Долгое нажатие в списке артикулов вызывает диалоговое окно, в котором две функции- функция редактировать артикул ( удалить артикул( корзина) или изменение количества, в соответствии с этим в текущем плане артикула автоматически происходит пересчет )и функция история изменения артикула, сколько раз он менялся и какого числа //например конечное количество хт637 8шт, в меню истории расписывается 08.08 0 -(стрелка) 2шт(добавленно 2шт), 15.08 2- 6 ( добавлено 4шт), 28.08 6- 8 ( добавленно 2шт)//. В модальных окнах история указывается только за текущий месяц, для старого артикула в старом месяце своя история.
. 5 Модалка Календарь. Там происходит распределение времени по ячейкам календаря. Лимит ячеек 8ч, время заливается в день добавления и дальше в будущее. Если в ячейке есть какое то время от прежнего ввода, настоящий ввод добавляет до 8ч и избыток распределяет дальше где есть место. Выходны пропускаются. Исключение - активированные ячейки ( долгий тап), это приоритетные ячейки наполняются временем первые, дальше по стандартной логике. Строго учесть активация не пропадает автоматически, только после повторного тапа. Конвертацию времени в количество делать не нужно, артикул и время вычитать в пропорциях. Например хт637 0,5 шт, = 50% и для количества и для времени. Перенос времени в следующий месяц= переносу такого че процента количества в новый месячный блок. Новый месячный блок формируется когда в него перетекает количество.

Files changed (4) hide show
  1. index.html +4 -4
  2. plan.html +81 -0
  3. welder-card.html +63 -0
  4. welders.html +140 -0
index.html CHANGED
@@ -56,11 +56,11 @@
56
  <i data-feather="compass" class="mr-2"></i>
57
  Begin Exploration
58
  </button>
59
- <a href="wasm.html" class="px-8 py-3 bg-gradient-to-r from-blue-400 to-blue-500 text-white rounded-full font-medium hover:from-blue-500 hover:to-blue-600 transition-all duration-300 flex items-center">
60
- <i data-feather="cpu" class="mr-2"></i>
61
- WASM Demo
62
  </a>
63
- </div>
64
  </div>
65
 
66
  <div class="mt-16 text-sm text-gray-500 flex items-center">
 
56
  <i data-feather="compass" class="mr-2"></i>
57
  Begin Exploration
58
  </button>
59
+ <a href="welders.html" class="px-8 py-3 bg-gradient-to-r from-blue-400 to-blue-500 text-white rounded-full font-medium hover:from-blue-500 hover:to-blue-600 transition-all duration-300 flex items-center">
60
+ <i data-feather="user" class="mr-2"></i>
61
+ Welder Tracking
62
  </a>
63
+ </div>
64
  </div>
65
 
66
  <div class="mt-16 text-sm text-gray-500 flex items-center">
plan.html ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Production Plan</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script src="https://unpkg.com/feather-icons"></script>
9
+ </head>
10
+ <body class="min-h-screen bg-gray-50">
11
+ <!-- Fixed Top Panel -->
12
+ <div class="fixed top-0 left-0 right-0 bg-white shadow-sm z-10 p-4 flex items-center">
13
+ <a href="welders.html" class="mr-4 text-gray-600 hover:text-gray-800">
14
+ <i data-feather="home"></i>
15
+ </a>
16
+ <h1 class="text-xl font-semibold">Production Plan</h1>
17
+ </div>
18
+
19
+ <!-- Input Section -->
20
+ <div class="mt-16 p-4">
21
+ <div class="bg-white rounded-lg shadow p-4">
22
+ <div class="flex mb-2">
23
+ <input type="text" placeholder="Article" class="flex-1 p-2 border rounded-l">
24
+ <input type="number" placeholder="Qty" class="w-20 p-2 border-t border-b">
25
+ <button class="bg-blue-500 text-white px-4 rounded-r flex items-center">
26
+ <i data-feather="plus" class="mr-2"></i>Add
27
+ </button>
28
+ </div>
29
+ </div>
30
+ </div>
31
+
32
+ <!-- Plan List -->
33
+ <div class="p-4 space-y-4 mb-24">
34
+ <!-- Plan Item (Completed) -->
35
+ <div class="bg-white rounded-lg shadow overflow-hidden completed-plan">
36
+ <div class="p-4">
37
+ <div class="flex items-center">
38
+ <div class="flex-1">
39
+ <div class="font-medium">HT637</div>
40
+ </div>
41
+ <div class="text-green-500 font-medium">6/6</div>
42
+ </div>
43
+ <div class="mt-2 text-sm text-gray-500">
44
+ <div>Johnson: 2, Smith: 2, Williams: 2</div>
45
+ </div>
46
+ </div>
47
+ </div>
48
+
49
+ <!-- Plan Item (In Progress) -->
50
+ <div class="bg-white rounded-lg shadow overflow-hidden">
51
+ <div class="p-4">
52
+ <div class="flex items-center">
53
+ <div class="flex-1">
54
+ <div class="font-medium">HT52</div>
55
+ </div>
56
+ <div class="text-gray-500">3/∞</div>
57
+ </div>
58
+ <div class="mt-2 text-sm text-gray-500">
59
+ <div>Johnson: 1, Williams: 2</div>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </div>
64
+
65
+ <!-- Fixed Bottom Panel -->
66
+ <div class="fixed bottom-0 left-0 right-0 bg-white shadow-md z-10 p-4">
67
+ <div class="font-medium mb-2 text-gray-700">Norms</div>
68
+ <div class="flex">
69
+ <input type="text" placeholder="Article" class="flex-1 p-2 border rounded-l">
70
+ <input type="text" placeholder="Time norm" class="w-24 p-2 border-t border-b">
71
+ <button class="bg-gray-600 text-white px-4 rounded-r flex items-center">
72
+ <i data-feather="plus" class="mr-2"></i>Add
73
+ </button>
74
+ </div>
75
+ </div>
76
+
77
+ <script>
78
+ feather.replace();
79
+ </script>
80
+ </body>
81
+ </html>
welder-card.html ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Welder Card</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script src="https://unpkg.com/feather-icons"></script>
9
+ </head>
10
+ <body class="min-h-screen bg-gray-50">
11
+ <!-- Fixed Top Panel -->
12
+ <div class="fixed top-0 left-0 right-0 bg-white shadow-sm z-10 p-4 flex items-center">
13
+ <a href="welders.html" class="mr-4 text-gray-600 hover:text-gray-800">
14
+ <i data-feather="home"></i>
15
+ </a>
16
+ <h1 class="text-xl font-semibold">Welder Name</h1>
17
+ </div>
18
+
19
+ <!-- Input Section -->
20
+ <div class="mt-16 p-4">
21
+ <div class="bg-white rounded-lg shadow p-4">
22
+ <div class="flex mb-2">
23
+ <input type="text" placeholder="Article" class="flex-1 p-2 border rounded-l">
24
+ <input type="number" placeholder="Qty" class="w-20 p-2 border-t border-b">
25
+ <button class="bg-blue-500 text-white px-4 rounded-r flex items-center">
26
+ <i data-feather="plus" class="mr-2"></i>Add
27
+ </button>
28
+ </div>
29
+ <button class="text-gray-500 mt-2 flex items-center">
30
+ <i data-feather="calendar" class="mr-2"></i>Calendar
31
+ </button>
32
+ </div>
33
+ </div>
34
+
35
+ <!-- Articles List -->
36
+ <div class="p-4 space-y-4 mb-20">
37
+ <!-- Month Divider -->
38
+ <div class="bg-gray-200 px-4 py-2 rounded font-medium">August 2023</div>
39
+
40
+ <!-- Article Items -->
41
+ <div class="bg-white rounded-lg shadow overflow-hidden">
42
+ <div class="p-4 border-b flex items-center">
43
+ <div class="flex-1">
44
+ <div class="font-medium">HT637</div>
45
+ <div class="text-sm text-gray-500">4 pieces</div>
46
+ </div>
47
+ <div class="text-green-500 font-medium">4/6</div>
48
+ </div>
49
+ <div class="p-4 flex items-center">
50
+ <div class="flex-1">
51
+ <div class="font-medium">HT52</div>
52
+ <div class="text-sm text-gray-500">3 pieces</div>
53
+ </div>
54
+ <div class="text-gray-500">3/∞</div>
55
+ </div>
56
+ </div>
57
+ </div>
58
+
59
+ <script>
60
+ feather.replace();
61
+ </script>
62
+ </body>
63
+ </html>
welders.html ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Welder Tracking System</title>
7
+ <link rel="manifest" href="/manifest.json">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://unpkg.com/feather-icons"></script>
10
+ <style>
11
+ :root {
12
+ --steel-blue: #4682B4;
13
+ --slate-gray: #708090;
14
+ --light-steel: #B0C4DE;
15
+ }
16
+ body {
17
+ font-family: 'Segoe UI', system-ui, sans-serif;
18
+ background-color: #f8fafc;
19
+ }
20
+ .panel {
21
+ background-color: white;
22
+ border: 1px solid #e2e8f0;
23
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
24
+ }
25
+ .input-field {
26
+ border: 1px solid #cbd5e1;
27
+ transition: border-color 0.2s;
28
+ }
29
+ .input-field:focus {
30
+ border-color: var(--steel-blue);
31
+ outline: none;
32
+ }
33
+ .btn-primary {
34
+ background-color: var(--steel-blue);
35
+ color: white;
36
+ transition: background-color 0.2s;
37
+ }
38
+ .btn-primary:hover {
39
+ background-color: #3a6d96;
40
+ }
41
+ .btn-secondary {
42
+ background-color: var(--slate-gray);
43
+ color: white;
44
+ transition: background-color 0.2s;
45
+ }
46
+ .btn-secondary:hover {
47
+ background-color: #5f6e7e;
48
+ }
49
+ .completed-plan {
50
+ border-left: 4px solid #10b981;
51
+ }
52
+ .month-divider {
53
+ background-color: var(--light-steel);
54
+ }
55
+ </style>
56
+ </head>
57
+ <body class="min-h-screen flex flex-col">
58
+ <!-- Fixed Top Panel -->
59
+ <div class="fixed top-0 left-0 right-0 bg-white shadow-sm z-10 p-4 flex items-center">
60
+ <a href="index.html" class="mr-4 text-gray-600 hover:text-gray-800">
61
+ <i data-feather="home"></i>
62
+ </a>
63
+ <input type="text" placeholder="Add welder's name" class="input-field flex-1 px-4 py-2 rounded-l">
64
+ <button class="btn-primary px-4 py-2 rounded-r">
65
+ <i data-feather="plus" class="mr-2"></i>Add
66
+ </button>
67
+ <div class="ml-auto flex space-x-2">
68
+ <button class="btn-secondary px-3 py-2 rounded">
69
+ <i data-feather="download" class="mr-2"></i>Import
70
+ </button>
71
+ <button class="btn-secondary px-3 py-2 rounded">
72
+ <i data-feather="upload" class="mr-2"></i>Export
73
+ </button>
74
+ </div>
75
+ </div>
76
+
77
+ <!-- Main Content -->
78
+ <main class="flex-1 mt-20 mb-24 p-4 overflow-y-auto">
79
+ <!-- Welder's List -->
80
+ <div id="welders-list" class="space-y-2">
81
+ <!-- Welder items will be added here dynamically -->
82
+ </div>
83
+ </main>
84
+
85
+ <!-- Fixed Bottom Panel -->
86
+ <div class="fixed bottom-0 left-0 right-0 bg-white shadow-md z-10 p-4">
87
+ <button id="plan-btn" class="btn-primary w-full py-3 rounded flex items-center justify-center">
88
+ <i data-feather="clipboard" class="mr-2"></i>Plan
89
+ </button>
90
+ </div>
91
+
92
+ <script>
93
+ // Initialize feather icons
94
+ feather.replace();
95
+
96
+ // Sample data for demonstration
97
+ const welders = [
98
+ { id: 1, name: "Smith" },
99
+ { id: 2, name: "Johnson" },
100
+ { id: 3, name: "Williams" }
101
+ ];
102
+
103
+ // Render welder's list
104
+ const weldersList = document.getElementById('welders-list');
105
+ welders.forEach(welder => {
106
+ const welderItem = document.createElement('div');
107
+ welderItem.className = 'panel p-4 rounded-lg cursor-pointer transition hover:bg-gray-50';
108
+ welderItem.innerHTML = `
109
+ <div class="flex items-center">
110
+ <i data-feather="user" class="text-gray-500 mr-3"></i>
111
+ <span class="font-medium">${welder.name}</span>
112
+ <i data-feather="chevron-right" class="ml-auto text-gray-400"></i>
113
+ </div>
114
+ `;
115
+ welderItem.addEventListener('click', () => {
116
+ window.location.href = `welder-card.html?id=${welder.id}`;
117
+ });
118
+ weldersList.appendChild(welderItem);
119
+ });
120
+
121
+ // Plan button click handler
122
+ document.getElementById('plan-btn').addEventListener('click', () => {
123
+ window.location.href = 'plan.html';
124
+ });
125
+
126
+ // Service worker registration for PWA
127
+ if ('serviceWorker' in navigator) {
128
+ window.addEventListener('load', () => {
129
+ navigator.serviceWorker.register('/sw.js')
130
+ .then(registration => {
131
+ console.log('ServiceWorker registration successful');
132
+ })
133
+ .catch(err => {
134
+ console.log('ServiceWorker registration failed: ', err);
135
+ });
136
+ });
137
+ }
138
+ </script>
139
+ </body>
140
+ </html>