@dssp/project 0.0.28 → 0.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/pages/project/project-list.ts +30 -29
- package/client/pages/project/project-setting-list.ts +46 -40
- package/dist-client/pages/project/project-list.js +30 -29
- package/dist-client/pages/project/project-list.js.map +1 -1
- package/dist-client/pages/project/project-setting-list.js +46 -40
- package/dist-client/pages/project/project-setting-list.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -139,7 +139,7 @@ export class ProjectListPage extends ScopedElementsMixin(PageView) {
|
|
|
139
139
|
|
|
140
140
|
width: 100%;
|
|
141
141
|
height: 100%;
|
|
142
|
-
background-color: #
|
|
142
|
+
background-color: var(--md-sys-color-background, #f6f6f6);
|
|
143
143
|
|
|
144
144
|
--grid-record-emphasized-background-color: red;
|
|
145
145
|
--grid-record-emphasized-color: yellow;
|
|
@@ -147,24 +147,24 @@ export class ProjectListPage extends ScopedElementsMixin(PageView) {
|
|
|
147
147
|
|
|
148
148
|
div[header] {
|
|
149
149
|
display: flex;
|
|
150
|
-
height: 100px;
|
|
151
150
|
align-items: center;
|
|
152
151
|
background-color: #2ea4df1a;
|
|
153
152
|
border: 1px solid #2ea4df33;
|
|
154
|
-
margin:
|
|
155
|
-
|
|
156
|
-
padding:
|
|
157
|
-
border-radius: 5px;
|
|
153
|
+
margin: var(--spacing-large, 12px);
|
|
154
|
+
margin-bottom:var(--spacing-small, 5px);
|
|
155
|
+
padding: var(--spacing-medium, 8px) var(--spacing-large, 12px);
|
|
156
|
+
border-radius: var(--md-sys-shape-corner-small, 5px);
|
|
158
157
|
|
|
159
158
|
md-filled-text-field[type='search'] {
|
|
160
|
-
margin-left: 5px;
|
|
161
|
-
margin-right: 26px;
|
|
162
|
-
|
|
163
159
|
--md-filled-text-field-container-shape: 0px;
|
|
164
|
-
--md-sys-color-primary: #
|
|
160
|
+
--md-sys-color-primary: #2e79be;
|
|
165
161
|
--md-sys-color-surface-container-highest: transparent;
|
|
166
162
|
--md-filled-text-field-label-text-color: #999999;
|
|
167
|
-
|
|
163
|
+
}
|
|
164
|
+
strong{
|
|
165
|
+
flex:1;
|
|
166
|
+
padding-right:var(--spacing-medium, 8px);
|
|
167
|
+
text-align:right
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
md-elevated-button[add-project] {
|
|
@@ -182,13 +182,15 @@ export class ProjectListPage extends ScopedElementsMixin(PageView) {
|
|
|
182
182
|
div[body] {
|
|
183
183
|
div[project-container] {
|
|
184
184
|
height: 140px;
|
|
185
|
-
margin:
|
|
186
|
-
background-color:
|
|
185
|
+
margin: var(--spacing-large, 12px);
|
|
186
|
+
background-color: var(--md-sys-color-on-primary);
|
|
187
187
|
border: 1px solid #cccccc80;
|
|
188
|
-
border-radius: 5px;
|
|
188
|
+
border-radius: var(--md-sys-shape-corner-small, 5px);
|
|
189
|
+
overflow:hidden;
|
|
189
190
|
|
|
190
191
|
& > a {
|
|
191
192
|
display: flex;
|
|
193
|
+
gap:0 var(--spacing-large, 12px);
|
|
192
194
|
width: 100%;
|
|
193
195
|
height: 100%;
|
|
194
196
|
text-decoration: none;
|
|
@@ -196,7 +198,7 @@ export class ProjectListPage extends ScopedElementsMixin(PageView) {
|
|
|
196
198
|
}
|
|
197
199
|
|
|
198
200
|
img[project-img] {
|
|
199
|
-
width:
|
|
201
|
+
width: 240px;
|
|
200
202
|
background-color: #cccccc80;
|
|
201
203
|
}
|
|
202
204
|
img[project-img][no-image] {
|
|
@@ -205,9 +207,9 @@ export class ProjectListPage extends ScopedElementsMixin(PageView) {
|
|
|
205
207
|
}
|
|
206
208
|
|
|
207
209
|
span[project-info] {
|
|
208
|
-
flex: 0.
|
|
209
|
-
padding:
|
|
210
|
-
font-size:
|
|
210
|
+
flex: 0.55;
|
|
211
|
+
padding: var(--spacing-small, 4px);
|
|
212
|
+
font-size: 14px;
|
|
211
213
|
|
|
212
214
|
white-space: nowrap;
|
|
213
215
|
overflow: hidden;
|
|
@@ -216,17 +218,17 @@ export class ProjectListPage extends ScopedElementsMixin(PageView) {
|
|
|
216
218
|
div[name] {
|
|
217
219
|
color: #2e79be;
|
|
218
220
|
font-weight: bold;
|
|
219
|
-
font-size:
|
|
220
|
-
margin
|
|
221
|
+
font-size: 18px;
|
|
222
|
+
margin: var(--spacing-small, 4px);
|
|
221
223
|
}
|
|
222
224
|
}
|
|
223
225
|
|
|
224
226
|
span[project-state] {
|
|
225
|
-
flex: 0.
|
|
226
|
-
padding:
|
|
227
|
+
flex: 0.45;
|
|
228
|
+
padding: var(--spacing-medium, 8px);
|
|
227
229
|
|
|
228
230
|
& > div {
|
|
229
|
-
margin
|
|
231
|
+
margin: var(--spacing-tiny, 2px);
|
|
230
232
|
}
|
|
231
233
|
|
|
232
234
|
div[progress] {
|
|
@@ -236,21 +238,21 @@ export class ProjectListPage extends ScopedElementsMixin(PageView) {
|
|
|
236
238
|
--md-linear-progress-track-height: 18px;
|
|
237
239
|
--md-linear-progress-active-indicator-height: 18px;
|
|
238
240
|
--md-linear-progress-track-shape: 5px;
|
|
239
|
-
--md-sys-color-primary: #
|
|
240
|
-
--md-sys-color-surface-container-highest: #
|
|
241
|
+
--md-sys-color-primary: #0595e526;
|
|
242
|
+
--md-sys-color-surface-container-highest: #0595e52a;
|
|
241
243
|
}
|
|
242
244
|
|
|
243
245
|
span {
|
|
244
246
|
position: absolute;
|
|
245
247
|
top: 0;
|
|
246
|
-
left: 12px;
|
|
248
|
+
left: var(--spacing-large, 12px);
|
|
247
249
|
font-size: 12px;
|
|
248
250
|
font-weight: bold;
|
|
249
251
|
color: #2e79be;
|
|
250
252
|
|
|
251
253
|
&:last-child {
|
|
252
254
|
left: unset;
|
|
253
|
-
right: 12px;
|
|
255
|
+
right: var(--spacing-large, 12px);
|
|
254
256
|
}
|
|
255
257
|
}
|
|
256
258
|
}
|
|
@@ -273,11 +275,10 @@ export class ProjectListPage extends ScopedElementsMixin(PageView) {
|
|
|
273
275
|
render() {
|
|
274
276
|
return html`
|
|
275
277
|
<div header>
|
|
276
|
-
<label>프로젝트 이름</label>
|
|
277
278
|
<md-filled-text-field
|
|
278
279
|
name="projectName"
|
|
279
280
|
type="search"
|
|
280
|
-
label="
|
|
281
|
+
label="프로젝트명"
|
|
281
282
|
.value=${this.projectName}
|
|
282
283
|
@input=${this._onInputChange}
|
|
283
284
|
@keypress=${this._onKeypress}
|
|
@@ -26,7 +26,7 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
|
|
|
26
26
|
|
|
27
27
|
width: 100%;
|
|
28
28
|
height: 100%;
|
|
29
|
-
background-color: #
|
|
29
|
+
background-color: var(--md-sys-color-background, #fcf8f8);
|
|
30
30
|
|
|
31
31
|
--grid-record-emphasized-background-color: red;
|
|
32
32
|
--grid-record-emphasized-color: yellow;
|
|
@@ -34,40 +34,42 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
|
|
|
34
34
|
|
|
35
35
|
div[management-header-container] {
|
|
36
36
|
display: flex;
|
|
37
|
-
margin:
|
|
38
|
-
|
|
37
|
+
margin: var(--spacing-large, 12px);
|
|
38
|
+
margin-bottom:0;
|
|
39
|
+
gap: var(--spacing-medium, 8px);
|
|
39
40
|
overflow-x: auto;
|
|
40
41
|
|
|
41
42
|
a {
|
|
42
|
-
|
|
43
|
+
flex:1;
|
|
43
44
|
text-align: center;
|
|
44
|
-
padding:
|
|
45
|
-
background-color:
|
|
46
|
-
color:
|
|
45
|
+
padding: var(--spacing-medium, 8px);
|
|
46
|
+
background-color: var(--md-sys-color-on-primary);
|
|
47
|
+
color: var(--md-sys-color-tertiary);
|
|
47
48
|
font-weight: 700;
|
|
48
|
-
border-radius:
|
|
49
|
+
border-radius: var(--md-sys-shape-corner-small, 5px);
|
|
49
50
|
display: flex;
|
|
50
51
|
flex-direction: column;
|
|
51
52
|
justify-content: center;
|
|
52
53
|
align-items: center;
|
|
53
|
-
gap:
|
|
54
|
+
gap: var(--spacing-small, 4px);
|
|
54
55
|
border: solid 1px #0000004d;
|
|
55
56
|
text-decoration: none;
|
|
56
57
|
cursor: pointer;
|
|
57
58
|
|
|
58
59
|
md-icon {
|
|
59
|
-
font-size:
|
|
60
|
+
font-size: 35px;
|
|
60
61
|
width: auto;
|
|
61
62
|
height: auto;
|
|
62
63
|
}
|
|
63
64
|
div[label] {
|
|
64
|
-
font-size:
|
|
65
|
+
font-size: 14px;
|
|
66
|
+
line-height:1.3;
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
69
|
|
|
68
70
|
a[green] {
|
|
69
71
|
background-color: #24be7b;
|
|
70
|
-
color:
|
|
72
|
+
color: var(--md-sys-color-on-primary);
|
|
71
73
|
}
|
|
72
74
|
}
|
|
73
75
|
|
|
@@ -77,20 +79,22 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
|
|
|
77
79
|
align-items: center;
|
|
78
80
|
background-color: #2ea4df1a;
|
|
79
81
|
border: 1px solid #2ea4df33;
|
|
80
|
-
margin:
|
|
81
|
-
|
|
82
|
-
padding:
|
|
83
|
-
border-radius: 5px;
|
|
82
|
+
margin: var(--spacing-large, 12px);
|
|
83
|
+
margin-bottom:var(--spacing-small, 5px);
|
|
84
|
+
padding: var(--spacing-medium, 8px) var(--spacing-large, 12px);
|
|
85
|
+
border-radius: var(--md-sys-shape-corner-small, 5px);
|
|
84
86
|
|
|
85
87
|
md-filled-text-field[type='search'] {
|
|
86
|
-
margin-left: 5px;
|
|
87
|
-
margin-right: 26px;
|
|
88
|
-
|
|
89
88
|
--md-filled-text-field-container-shape: 0px;
|
|
90
89
|
--md-filled-text-field-container-color: transparent;
|
|
91
90
|
--md-filled-text-field-label-text-color: #999999;
|
|
92
91
|
--md-filled-text-field-input-text-color: #4e5055;
|
|
93
92
|
}
|
|
93
|
+
strong{
|
|
94
|
+
flex:1;
|
|
95
|
+
padding-right:var(--spacing-medium, 8px);
|
|
96
|
+
text-align:right
|
|
97
|
+
}
|
|
94
98
|
|
|
95
99
|
md-elevated-button[add-project] {
|
|
96
100
|
font-weight: bold;
|
|
@@ -116,15 +120,18 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
|
|
|
116
120
|
div[project-container] {
|
|
117
121
|
display: flex;
|
|
118
122
|
flex-direction: row;
|
|
119
|
-
min-height:
|
|
120
|
-
margin:
|
|
121
|
-
background-color:
|
|
123
|
+
min-height: 130px;
|
|
124
|
+
margin: var(--spacing-large, 12px);
|
|
125
|
+
background-color: var(--md-sys-color-on-primary);
|
|
122
126
|
border: 1px solid #cccccc80;
|
|
123
|
-
border-radius: 5px;
|
|
127
|
+
border-radius: var(--md-sys-shape-corner-small, 5px);
|
|
124
128
|
align-items: center;
|
|
129
|
+
gap: var(--spacing-medium, 8px);
|
|
130
|
+
overflow:hidden;
|
|
125
131
|
|
|
126
132
|
img[project-img] {
|
|
127
|
-
width:
|
|
133
|
+
width: 240px;
|
|
134
|
+
height: 130px;
|
|
128
135
|
aspect-ratio: 2;
|
|
129
136
|
background-color: #cccccc80;
|
|
130
137
|
}
|
|
@@ -134,9 +141,9 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
|
|
|
134
141
|
}
|
|
135
142
|
|
|
136
143
|
span[project-info] {
|
|
137
|
-
flex: 0.
|
|
138
|
-
padding:
|
|
139
|
-
font-size:
|
|
144
|
+
flex: 0.5;
|
|
145
|
+
padding: var(--spacing-small, 4px);
|
|
146
|
+
font-size: 14px;
|
|
140
147
|
|
|
141
148
|
white-space: nowrap;
|
|
142
149
|
overflow: hidden;
|
|
@@ -145,42 +152,42 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
|
|
|
145
152
|
div[name] {
|
|
146
153
|
color: #2e79be;
|
|
147
154
|
font-weight: bold;
|
|
148
|
-
font-size:
|
|
149
|
-
margin-bottom: 2px;
|
|
155
|
+
font-size: 18px;
|
|
150
156
|
}
|
|
151
157
|
}
|
|
152
158
|
|
|
153
159
|
span[project-state] {
|
|
154
|
-
flex: 0.
|
|
155
|
-
padding:
|
|
156
|
-
min-width:
|
|
160
|
+
flex: 0.5;
|
|
161
|
+
padding: var(--spacing-medium, 8px);
|
|
162
|
+
min-width: 340px;
|
|
157
163
|
|
|
158
164
|
& > div {
|
|
159
|
-
margin-bottom:
|
|
165
|
+
margin-bottom: var(--spacing-small, 4px);
|
|
160
166
|
}
|
|
161
167
|
|
|
162
168
|
div[progress] {
|
|
163
169
|
position: relative;
|
|
164
170
|
|
|
165
171
|
md-linear-progress {
|
|
172
|
+
margin:var(--spacing-tiny, 2px) 0;
|
|
166
173
|
--md-linear-progress-track-height: 18px;
|
|
167
174
|
--md-linear-progress-active-indicator-height: 18px;
|
|
168
175
|
--md-linear-progress-track-shape: 5px;
|
|
169
|
-
--md-linear-progress-active-indicator-color: #
|
|
170
|
-
--md-linear-progress-track-color: #
|
|
176
|
+
--md-linear-progress-active-indicator-color: #0595e526;
|
|
177
|
+
--md-linear-progress-track-color: #0595e52a;
|
|
171
178
|
}
|
|
172
179
|
|
|
173
180
|
span {
|
|
174
181
|
position: absolute;
|
|
175
182
|
top: 0;
|
|
176
|
-
left: 12px;
|
|
183
|
+
left: var(--spacing-large, 12px);
|
|
177
184
|
font-size: 12px;
|
|
178
185
|
font-weight: bold;
|
|
179
186
|
color: #2e79be;
|
|
180
187
|
|
|
181
188
|
&:last-child {
|
|
182
189
|
left: unset;
|
|
183
|
-
right: 12px;
|
|
190
|
+
right: var(--spacing-large, 12px);
|
|
184
191
|
}
|
|
185
192
|
}
|
|
186
193
|
}
|
|
@@ -239,7 +246,7 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
|
|
|
239
246
|
</a>
|
|
240
247
|
<a href="inspection-drawing-type-management">
|
|
241
248
|
<md-icon slot="leading-icon">stacks</md-icon>
|
|
242
|
-
<div label
|
|
249
|
+
<div label>도면타입/검측부위<br/>관리</div>
|
|
243
250
|
</a>
|
|
244
251
|
<a href="checklist-type-management">
|
|
245
252
|
<md-icon slot="leading-icon">rule</md-icon>
|
|
@@ -247,13 +254,12 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
|
|
|
247
254
|
</a>
|
|
248
255
|
<a href="checklist-template-list">
|
|
249
256
|
<md-icon slot="leading-icon">fact_check</md-icon>
|
|
250
|
-
<div label>체크리스트
|
|
257
|
+
<div label>체크리스트 템플릿<br/>관리</div>
|
|
251
258
|
</a>
|
|
252
259
|
</div>
|
|
253
260
|
</div>
|
|
254
261
|
|
|
255
262
|
<div header>
|
|
256
|
-
<label>프로젝트 이름</label>
|
|
257
263
|
<md-filled-text-field
|
|
258
264
|
name="projectName"
|
|
259
265
|
type="search"
|
|
@@ -44,11 +44,10 @@ let ProjectListPage = class ProjectListPage extends ScopedElementsMixin(PageView
|
|
|
44
44
|
var _a;
|
|
45
45
|
return html `
|
|
46
46
|
<div header>
|
|
47
|
-
<label>프로젝트 이름</label>
|
|
48
47
|
<md-filled-text-field
|
|
49
48
|
name="projectName"
|
|
50
49
|
type="search"
|
|
51
|
-
label="
|
|
50
|
+
label="프로젝트명"
|
|
52
51
|
.value=${this.projectName}
|
|
53
52
|
@input=${this._onInputChange}
|
|
54
53
|
@keypress=${this._onKeypress}
|
|
@@ -192,7 +191,7 @@ ProjectListPage.styles = [
|
|
|
192
191
|
|
|
193
192
|
width: 100%;
|
|
194
193
|
height: 100%;
|
|
195
|
-
background-color: #
|
|
194
|
+
background-color: var(--md-sys-color-background, #f6f6f6);
|
|
196
195
|
|
|
197
196
|
--grid-record-emphasized-background-color: red;
|
|
198
197
|
--grid-record-emphasized-color: yellow;
|
|
@@ -200,24 +199,24 @@ ProjectListPage.styles = [
|
|
|
200
199
|
|
|
201
200
|
div[header] {
|
|
202
201
|
display: flex;
|
|
203
|
-
height: 100px;
|
|
204
202
|
align-items: center;
|
|
205
203
|
background-color: #2ea4df1a;
|
|
206
204
|
border: 1px solid #2ea4df33;
|
|
207
|
-
margin:
|
|
208
|
-
|
|
209
|
-
padding:
|
|
210
|
-
border-radius: 5px;
|
|
205
|
+
margin: var(--spacing-large, 12px);
|
|
206
|
+
margin-bottom:var(--spacing-small, 5px);
|
|
207
|
+
padding: var(--spacing-medium, 8px) var(--spacing-large, 12px);
|
|
208
|
+
border-radius: var(--md-sys-shape-corner-small, 5px);
|
|
211
209
|
|
|
212
210
|
md-filled-text-field[type='search'] {
|
|
213
|
-
margin-left: 5px;
|
|
214
|
-
margin-right: 26px;
|
|
215
|
-
|
|
216
211
|
--md-filled-text-field-container-shape: 0px;
|
|
217
|
-
--md-sys-color-primary: #
|
|
212
|
+
--md-sys-color-primary: #2e79be;
|
|
218
213
|
--md-sys-color-surface-container-highest: transparent;
|
|
219
214
|
--md-filled-text-field-label-text-color: #999999;
|
|
220
|
-
|
|
215
|
+
}
|
|
216
|
+
strong{
|
|
217
|
+
flex:1;
|
|
218
|
+
padding-right:var(--spacing-medium, 8px);
|
|
219
|
+
text-align:right
|
|
221
220
|
}
|
|
222
221
|
|
|
223
222
|
md-elevated-button[add-project] {
|
|
@@ -235,13 +234,15 @@ ProjectListPage.styles = [
|
|
|
235
234
|
div[body] {
|
|
236
235
|
div[project-container] {
|
|
237
236
|
height: 140px;
|
|
238
|
-
margin:
|
|
239
|
-
background-color:
|
|
237
|
+
margin: var(--spacing-large, 12px);
|
|
238
|
+
background-color: var(--md-sys-color-on-primary);
|
|
240
239
|
border: 1px solid #cccccc80;
|
|
241
|
-
border-radius: 5px;
|
|
240
|
+
border-radius: var(--md-sys-shape-corner-small, 5px);
|
|
241
|
+
overflow:hidden;
|
|
242
242
|
|
|
243
243
|
& > a {
|
|
244
244
|
display: flex;
|
|
245
|
+
gap:0 var(--spacing-large, 12px);
|
|
245
246
|
width: 100%;
|
|
246
247
|
height: 100%;
|
|
247
248
|
text-decoration: none;
|
|
@@ -249,7 +250,7 @@ ProjectListPage.styles = [
|
|
|
249
250
|
}
|
|
250
251
|
|
|
251
252
|
img[project-img] {
|
|
252
|
-
width:
|
|
253
|
+
width: 240px;
|
|
253
254
|
background-color: #cccccc80;
|
|
254
255
|
}
|
|
255
256
|
img[project-img][no-image] {
|
|
@@ -258,9 +259,9 @@ ProjectListPage.styles = [
|
|
|
258
259
|
}
|
|
259
260
|
|
|
260
261
|
span[project-info] {
|
|
261
|
-
flex: 0.
|
|
262
|
-
padding:
|
|
263
|
-
font-size:
|
|
262
|
+
flex: 0.55;
|
|
263
|
+
padding: var(--spacing-small, 4px);
|
|
264
|
+
font-size: 14px;
|
|
264
265
|
|
|
265
266
|
white-space: nowrap;
|
|
266
267
|
overflow: hidden;
|
|
@@ -269,17 +270,17 @@ ProjectListPage.styles = [
|
|
|
269
270
|
div[name] {
|
|
270
271
|
color: #2e79be;
|
|
271
272
|
font-weight: bold;
|
|
272
|
-
font-size:
|
|
273
|
-
margin
|
|
273
|
+
font-size: 18px;
|
|
274
|
+
margin: var(--spacing-small, 4px);
|
|
274
275
|
}
|
|
275
276
|
}
|
|
276
277
|
|
|
277
278
|
span[project-state] {
|
|
278
|
-
flex: 0.
|
|
279
|
-
padding:
|
|
279
|
+
flex: 0.45;
|
|
280
|
+
padding: var(--spacing-medium, 8px);
|
|
280
281
|
|
|
281
282
|
& > div {
|
|
282
|
-
margin
|
|
283
|
+
margin: var(--spacing-tiny, 2px);
|
|
283
284
|
}
|
|
284
285
|
|
|
285
286
|
div[progress] {
|
|
@@ -289,21 +290,21 @@ ProjectListPage.styles = [
|
|
|
289
290
|
--md-linear-progress-track-height: 18px;
|
|
290
291
|
--md-linear-progress-active-indicator-height: 18px;
|
|
291
292
|
--md-linear-progress-track-shape: 5px;
|
|
292
|
-
--md-sys-color-primary: #
|
|
293
|
-
--md-sys-color-surface-container-highest: #
|
|
293
|
+
--md-sys-color-primary: #0595e526;
|
|
294
|
+
--md-sys-color-surface-container-highest: #0595e52a;
|
|
294
295
|
}
|
|
295
296
|
|
|
296
297
|
span {
|
|
297
298
|
position: absolute;
|
|
298
299
|
top: 0;
|
|
299
|
-
left: 12px;
|
|
300
|
+
left: var(--spacing-large, 12px);
|
|
300
301
|
font-size: 12px;
|
|
301
302
|
font-weight: bold;
|
|
302
303
|
color: #2e79be;
|
|
303
304
|
|
|
304
305
|
&:last-child {
|
|
305
306
|
left: unset;
|
|
306
|
-
right: 12px;
|
|
307
|
+
right: var(--spacing-large, 12px);
|
|
307
308
|
}
|
|
308
309
|
}
|
|
309
310
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-list.js","sourceRoot":"","sources":["../../../client/pages/project/project-list.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport { PageView } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport gql from 'graphql-tag'\nimport { Attachment } from '@things-factory/attachment-base'\nimport type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\n\nexport enum ProjectState {\n 'ONGOING' = '10',\n 'COMPLETED' = '20'\n}\nexport enum BuildingInspectionStatus {\n WAIT = 'WAIT',\n OVERALL_WAIT = 'OVERALL_WAIT',\n REQUEST = 'REQUEST',\n OVERALL_REQUEST = 'OVERALL_REQUEST',\n PASS = 'PASS',\n FAIL = 'FAIL'\n}\nexport const BUILDING_INSPECTION_STATUS = {\n [BuildingInspectionStatus.WAIT]: '검측 대기',\n [BuildingInspectionStatus.OVERALL_WAIT]: '검측 대기',\n [BuildingInspectionStatus.REQUEST]: '검측 요청',\n [BuildingInspectionStatus.OVERALL_REQUEST]: '검측 요청',\n [BuildingInspectionStatus.PASS]: '합격',\n [BuildingInspectionStatus.FAIL]: '불합격'\n}\n\nexport interface Project {\n id?: string\n name: string\n startDate?: string\n endDate?: string\n mainPhoto?: Attachment\n mainPhotoUpload?: FileUpload\n totalProgress?: number\n weeklyProgress?: number\n kpi?: number\n inspPassRate?: number\n robotProgressRate?: number\n structuralSafetyRate?: number\n scheduleTable?: Attachment\n buildingComplex: BuildingComplex\n}\nexport interface BuildingComplex {\n id?: string\n address?: string\n latitude?: number\n longitude?: number\n area?: number\n constructionCompany?: string\n clientCompany?: string\n designCompany?: string\n supervisoryCompany?: string\n drawing?: Attachment\n drawingUpload?: FileUpload\n constructionType?: string\n constructionCost?: number\n etc?: string\n householdCount?: number\n buildingCount?: number\n notice?: string\n planXScale?: number\n planYScale?: number\n overallConstructorEmails?: string[]\n taskConstructorEmails?: string[]\n overallSupervisoryEmails?: string[]\n taskSupervisoryEmails?: string[]\n buildings?: Building[]\n}\nexport interface Building {\n id?: string\n name: string | undefined\n floorCount: number | undefined\n drawing?: Attachment\n drawingUpload?: FileUpload\n buildingLevels?: BuildingLevel[]\n}\n\nexport interface BuildingLevel {\n id?: string\n floor?: number\n mainDrawing?: Attachment\n mainDrawingImage?: string\n mainDrawingThumbnail?: string\n mainDrawingUpload?: FileUpload\n elevationDrawing?: Attachment\n elevationDrawingThumbnail?: string\n elevationDrawingUpload?: FileUpload\n rebarDistributionDrawing?: Attachment\n rebarDistributionDrawingThumbnail?: string\n rebarDistributionDrawingUpload?: FileUpload\n building?: Building\n buildingInspections?: BuildingInspection[]\n}\n\nexport interface BuildingInspection {\n id?: string\n attatchments?: Attachment[]\n // buildingInspectionAttachments?: BuildingInspectionAttachment[]\n status?: BuildingInspectionStatus\n requestDate?: Date\n buildingLevel?: BuildingLevel\n checklist?: Checklist\n createdAt?: Date\n updatedAt?: Date\n deletedAt?: Date\n}\n\nexport interface Checklist {\n id: string\n name?: string\n documentNo?: string\n constructionType?: string\n constructionDetailType?: string\n location?: string\n constructionInspectorDate?: Date\n supervisorInspectorDate?: Date\n overallConstructorSignature?: string\n taskConstructorSignature?: string\n overallSupervisorySignature?: string\n taskSupervisorySignature?: string\n inspectionParts?: string[]\n // checklistItems?: ChecklistItem[]\n}\n\n@customElement('project-list')\nexport class ProjectListPage extends ScopedElementsMixin(PageView) {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n\n width: 100%;\n height: 100%;\n background-color: #f7f7f7;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n\n div[header] {\n display: flex;\n height: 100px;\n align-items: center;\n background-color: #2ea4df1a;\n border: 1px solid #2ea4df33;\n margin: 15px 23px;\n font-size: 18px;\n padding: 7px;\n border-radius: 5px;\n\n md-filled-text-field[type='search'] {\n margin-left: 5px;\n margin-right: 26px;\n\n --md-filled-text-field-container-shape: 0px;\n --md-sys-color-primary: #006a6a;\n --md-sys-color-surface-container-highest: transparent;\n --md-filled-text-field-label-text-color: #999999;\n --md-filled-text-field-input-text-color: #4e5055;\n }\n\n md-elevated-button[add-project] {\n font-weight: bold;\n font-size: 16px;\n margin-left: 17px;\n padding: 13px 20px;\n\n --md-sys-color-surface-container-low: #24be7b;\n --md-sys-color-primary: #ffffff;\n --md-elevated-button-container-shape: 7px;\n }\n }\n\n div[body] {\n div[project-container] {\n height: 140px;\n margin: 17px 23px;\n background-color: #ffffff;\n border: 1px solid #cccccc80;\n border-radius: 5px;\n\n & > a {\n display: flex;\n width: 100%;\n height: 100%;\n text-decoration: none;\n color: #000;\n }\n\n img[project-img] {\n width: 285px;\n background-color: #cccccc80;\n }\n img[project-img][no-image] {\n object-fit: contain;\n opacity: 0.5;\n }\n\n span[project-info] {\n flex: 0.45;\n padding: 6px 15px;\n font-size: 16px;\n\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n div[name] {\n color: #2e79be;\n font-weight: bold;\n font-size: 19px;\n margin-bottom: 2px;\n }\n }\n\n span[project-state] {\n flex: 0.55;\n padding: 10px 20px;\n\n & > div {\n margin-bottom: 3px;\n }\n\n div[progress] {\n position: relative;\n\n md-linear-progress {\n --md-linear-progress-track-height: 18px;\n --md-linear-progress-active-indicator-height: 18px;\n --md-linear-progress-track-shape: 5px;\n --md-sys-color-primary: #0595e51a;\n --md-sys-color-surface-container-highest: #0595e533;\n }\n\n span {\n position: absolute;\n top: 0;\n left: 12px;\n font-size: 12px;\n font-weight: bold;\n color: #2e79be;\n\n &:last-child {\n left: unset;\n right: 12px;\n }\n }\n }\n }\n }\n }\n `\n ]\n\n get context() {\n return {\n title: '진행중 프로젝트'\n }\n }\n\n @state() private projectName: string = ''\n @state() private projectList: Project[] = []\n @state() private projectCount: number = 0\n\n render() {\n return html`\n <div header>\n <label>프로젝트 이름</label>\n <md-filled-text-field\n name=\"projectName\"\n type=\"search\"\n label=\"프로젝트 이름\"\n .value=${this.projectName}\n @input=${this._onInputChange}\n @keypress=${this._onKeypress}\n >\n <md-icon slot=\"leading-icon\">search</md-icon>\n </md-filled-text-field>\n\n <strong>총 ${this.projectCount}개</strong>\n </div>\n\n <div body>\n ${this.projectList?.map((project: Project) => {\n return html`\n <div project-container>\n <a href=${`project-detail/${project.id}`}>\n <img\n ?no-image=${!project.mainPhoto?.fullpath}\n project-img\n src=${project.mainPhoto?.fullpath || '/assets/images/no-image.png'}\n />\n\n <span project-info>\n <div name>${project.name}</div>\n <div content>${project.buildingComplex.address}</div>\n <div content>면적: ${project.buildingComplex?.area?.toLocaleString() || ''}㎡</div>\n <div content>착공~준공: ${project.startDate} ~ ${project.endDate}</div>\n <div content>발주처: <strong>${project.buildingComplex.clientCompany}</strong></div>\n </span>\n\n <span project-state>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.totalProgress || 0}> </md-linear-progress>\n <span>전체</span>\n <span>${project.totalProgress || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.weeklyProgress || 0}> </md-linear-progress>\n <span>주간</span>\n <span>${project.weeklyProgress || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.kpi || 0}> </md-linear-progress>\n <span>KPI</span>\n <span>${project.kpi || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.inspPassRate || 0}> </md-linear-progress>\n <span>Inspection Passing Rate</span>\n <span>${project.inspPassRate || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.robotProgressRate || 0}> </md-linear-progress>\n <span>Robot Progress</span>\n <span>${project.robotProgressRate || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.structuralSafetyRate || 0}> </md-linear-progress>\n <span>Structural safety</span>\n <span>${project.structuralSafetyRate || 0}%</span>\n </div>\n </span>\n </a>\n </div>\n `\n })}\n </div>\n `\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (this.active) {\n this.getProjectList()\n }\n }\n\n async getProjectList() {\n const response = await client.query({\n query: gql`\n query Projects($filters: [Filter!]) {\n projects(filters: $filters) {\n items {\n id\n name\n startDate\n endDate\n mainPhoto {\n fullpath\n }\n totalProgress\n weeklyProgress\n kpi\n inspPassRate\n robotProgressRate\n structuralSafetyRate\n buildingComplex {\n address\n area\n clientCompany\n }\n }\n total\n }\n }\n `,\n variables: {\n filters: [\n {\n name: 'name',\n operator: 'search',\n value: `%${this.projectName}%`\n },\n {\n name: 'state',\n operator: 'eq',\n value: ProjectState.ONGOING\n }\n ]\n }\n })\n\n this.projectList = response.data.projects?.items || []\n this.projectCount = response.data.projects?.total || 0\n }\n\n // Input 요소의 값이 변경될 때 호출되는 콜백 함수\n private _onInputChange(event: InputEvent) {\n const target = event.target as HTMLInputElement\n this[target.name] = target.value\n }\n\n // 검색창에서 엔터입력시 검색\n private _onKeypress(event: KeyboardEvent) {\n if (event.code === 'Enter') {\n this.getProjectList()\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"project-list.js","sourceRoot":"","sources":["../../../client/pages/project/project-list.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport { PageView } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport gql from 'graphql-tag'\nimport { Attachment } from '@things-factory/attachment-base'\nimport type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\n\nexport enum ProjectState {\n 'ONGOING' = '10',\n 'COMPLETED' = '20'\n}\nexport enum BuildingInspectionStatus {\n WAIT = 'WAIT',\n OVERALL_WAIT = 'OVERALL_WAIT',\n REQUEST = 'REQUEST',\n OVERALL_REQUEST = 'OVERALL_REQUEST',\n PASS = 'PASS',\n FAIL = 'FAIL'\n}\nexport const BUILDING_INSPECTION_STATUS = {\n [BuildingInspectionStatus.WAIT]: '검측 대기',\n [BuildingInspectionStatus.OVERALL_WAIT]: '검측 대기',\n [BuildingInspectionStatus.REQUEST]: '검측 요청',\n [BuildingInspectionStatus.OVERALL_REQUEST]: '검측 요청',\n [BuildingInspectionStatus.PASS]: '합격',\n [BuildingInspectionStatus.FAIL]: '불합격'\n}\n\nexport interface Project {\n id?: string\n name: string\n startDate?: string\n endDate?: string\n mainPhoto?: Attachment\n mainPhotoUpload?: FileUpload\n totalProgress?: number\n weeklyProgress?: number\n kpi?: number\n inspPassRate?: number\n robotProgressRate?: number\n structuralSafetyRate?: number\n scheduleTable?: Attachment\n buildingComplex: BuildingComplex\n}\nexport interface BuildingComplex {\n id?: string\n address?: string\n latitude?: number\n longitude?: number\n area?: number\n constructionCompany?: string\n clientCompany?: string\n designCompany?: string\n supervisoryCompany?: string\n drawing?: Attachment\n drawingUpload?: FileUpload\n constructionType?: string\n constructionCost?: number\n etc?: string\n householdCount?: number\n buildingCount?: number\n notice?: string\n planXScale?: number\n planYScale?: number\n overallConstructorEmails?: string[]\n taskConstructorEmails?: string[]\n overallSupervisoryEmails?: string[]\n taskSupervisoryEmails?: string[]\n buildings?: Building[]\n}\nexport interface Building {\n id?: string\n name: string | undefined\n floorCount: number | undefined\n drawing?: Attachment\n drawingUpload?: FileUpload\n buildingLevels?: BuildingLevel[]\n}\n\nexport interface BuildingLevel {\n id?: string\n floor?: number\n mainDrawing?: Attachment\n mainDrawingImage?: string\n mainDrawingThumbnail?: string\n mainDrawingUpload?: FileUpload\n elevationDrawing?: Attachment\n elevationDrawingThumbnail?: string\n elevationDrawingUpload?: FileUpload\n rebarDistributionDrawing?: Attachment\n rebarDistributionDrawingThumbnail?: string\n rebarDistributionDrawingUpload?: FileUpload\n building?: Building\n buildingInspections?: BuildingInspection[]\n}\n\nexport interface BuildingInspection {\n id?: string\n attatchments?: Attachment[]\n // buildingInspectionAttachments?: BuildingInspectionAttachment[]\n status?: BuildingInspectionStatus\n requestDate?: Date\n buildingLevel?: BuildingLevel\n checklist?: Checklist\n createdAt?: Date\n updatedAt?: Date\n deletedAt?: Date\n}\n\nexport interface Checklist {\n id: string\n name?: string\n documentNo?: string\n constructionType?: string\n constructionDetailType?: string\n location?: string\n constructionInspectorDate?: Date\n supervisorInspectorDate?: Date\n overallConstructorSignature?: string\n taskConstructorSignature?: string\n overallSupervisorySignature?: string\n taskSupervisorySignature?: string\n inspectionParts?: string[]\n // checklistItems?: ChecklistItem[]\n}\n\n@customElement('project-list')\nexport class ProjectListPage extends ScopedElementsMixin(PageView) {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n\n width: 100%;\n height: 100%;\n background-color: var(--md-sys-color-background, #f6f6f6);\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n\n div[header] {\n display: flex;\n align-items: center;\n background-color: #2ea4df1a;\n border: 1px solid #2ea4df33;\n margin: var(--spacing-large, 12px);\n margin-bottom:var(--spacing-small, 5px);\n padding: var(--spacing-medium, 8px) var(--spacing-large, 12px);\n border-radius: var(--md-sys-shape-corner-small, 5px);\n\n md-filled-text-field[type='search'] {\n --md-filled-text-field-container-shape: 0px;\n --md-sys-color-primary: #2e79be;\n --md-sys-color-surface-container-highest: transparent;\n --md-filled-text-field-label-text-color: #999999;\n }\n strong{\n flex:1;\n padding-right:var(--spacing-medium, 8px);\n text-align:right\n }\n\n md-elevated-button[add-project] {\n font-weight: bold;\n font-size: 16px;\n margin-left: 17px;\n padding: 13px 20px;\n\n --md-sys-color-surface-container-low: #24be7b;\n --md-sys-color-primary: #ffffff;\n --md-elevated-button-container-shape: 7px;\n }\n }\n\n div[body] {\n div[project-container] {\n height: 140px;\n margin: var(--spacing-large, 12px);\n background-color: var(--md-sys-color-on-primary);\n border: 1px solid #cccccc80;\n border-radius: var(--md-sys-shape-corner-small, 5px);\n overflow:hidden;\n\n & > a {\n display: flex;\n gap:0 var(--spacing-large, 12px);\n width: 100%;\n height: 100%;\n text-decoration: none;\n color: #000;\n }\n\n img[project-img] {\n width: 240px;\n background-color: #cccccc80;\n }\n img[project-img][no-image] {\n object-fit: contain;\n opacity: 0.5;\n }\n\n span[project-info] {\n flex: 0.55;\n padding: var(--spacing-small, 4px);\n font-size: 14px;\n\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n div[name] {\n color: #2e79be;\n font-weight: bold;\n font-size: 18px;\n margin: var(--spacing-small, 4px);\n }\n }\n\n span[project-state] {\n flex: 0.45;\n padding: var(--spacing-medium, 8px);\n\n & > div {\n margin: var(--spacing-tiny, 2px);\n }\n\n div[progress] {\n position: relative;\n\n md-linear-progress {\n --md-linear-progress-track-height: 18px;\n --md-linear-progress-active-indicator-height: 18px;\n --md-linear-progress-track-shape: 5px;\n --md-sys-color-primary: #0595e526;\n --md-sys-color-surface-container-highest: #0595e52a;\n }\n\n span {\n position: absolute;\n top: 0;\n left: var(--spacing-large, 12px);\n font-size: 12px;\n font-weight: bold;\n color: #2e79be;\n\n &:last-child {\n left: unset;\n right: var(--spacing-large, 12px);\n }\n }\n }\n }\n }\n }\n `\n ]\n\n get context() {\n return {\n title: '진행중 프로젝트'\n }\n }\n\n @state() private projectName: string = ''\n @state() private projectList: Project[] = []\n @state() private projectCount: number = 0\n\n render() {\n return html`\n <div header>\n <md-filled-text-field\n name=\"projectName\"\n type=\"search\"\n label=\"프로젝트명\"\n .value=${this.projectName}\n @input=${this._onInputChange}\n @keypress=${this._onKeypress}\n >\n <md-icon slot=\"leading-icon\">search</md-icon>\n </md-filled-text-field>\n\n <strong>총 ${this.projectCount}개</strong>\n </div>\n\n <div body>\n ${this.projectList?.map((project: Project) => {\n return html`\n <div project-container>\n <a href=${`project-detail/${project.id}`}>\n <img\n ?no-image=${!project.mainPhoto?.fullpath}\n project-img\n src=${project.mainPhoto?.fullpath || '/assets/images/no-image.png'}\n />\n\n <span project-info>\n <div name>${project.name}</div>\n <div content>${project.buildingComplex.address}</div>\n <div content>면적: ${project.buildingComplex?.area?.toLocaleString() || ''}㎡</div>\n <div content>착공~준공: ${project.startDate} ~ ${project.endDate}</div>\n <div content>발주처: <strong>${project.buildingComplex.clientCompany}</strong></div>\n </span>\n\n <span project-state>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.totalProgress || 0}> </md-linear-progress>\n <span>전체</span>\n <span>${project.totalProgress || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.weeklyProgress || 0}> </md-linear-progress>\n <span>주간</span>\n <span>${project.weeklyProgress || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.kpi || 0}> </md-linear-progress>\n <span>KPI</span>\n <span>${project.kpi || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.inspPassRate || 0}> </md-linear-progress>\n <span>Inspection Passing Rate</span>\n <span>${project.inspPassRate || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.robotProgressRate || 0}> </md-linear-progress>\n <span>Robot Progress</span>\n <span>${project.robotProgressRate || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.structuralSafetyRate || 0}> </md-linear-progress>\n <span>Structural safety</span>\n <span>${project.structuralSafetyRate || 0}%</span>\n </div>\n </span>\n </a>\n </div>\n `\n })}\n </div>\n `\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (this.active) {\n this.getProjectList()\n }\n }\n\n async getProjectList() {\n const response = await client.query({\n query: gql`\n query Projects($filters: [Filter!]) {\n projects(filters: $filters) {\n items {\n id\n name\n startDate\n endDate\n mainPhoto {\n fullpath\n }\n totalProgress\n weeklyProgress\n kpi\n inspPassRate\n robotProgressRate\n structuralSafetyRate\n buildingComplex {\n address\n area\n clientCompany\n }\n }\n total\n }\n }\n `,\n variables: {\n filters: [\n {\n name: 'name',\n operator: 'search',\n value: `%${this.projectName}%`\n },\n {\n name: 'state',\n operator: 'eq',\n value: ProjectState.ONGOING\n }\n ]\n }\n })\n\n this.projectList = response.data.projects?.items || []\n this.projectCount = response.data.projects?.total || 0\n }\n\n // Input 요소의 값이 변경될 때 호출되는 콜백 함수\n private _onInputChange(event: InputEvent) {\n const target = event.target as HTMLInputElement\n this[target.name] = target.value\n }\n\n // 검색창에서 엔터입력시 검색\n private _onKeypress(event: KeyboardEvent) {\n if (event.code === 'Enter') {\n this.getProjectList()\n }\n }\n}\n"]}
|