@dssp/project 0.0.27 → 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/lib/select2-component.ts +12 -1
- package/client/pages/project/component/project-update-header.ts +85 -0
- package/client/pages/project/popup/popup-schedule-upload.ts +102 -0
- package/client/pages/project/project-list.ts +31 -29
- package/client/pages/project/project-plan-management.ts +3 -54
- package/client/pages/project/project-schedule.ts +60 -13
- package/client/pages/project/project-setting-list.ts +46 -40
- package/client/pages/project/project-update.ts +4 -52
- package/dist-client/pages/lib/select2-component.js +12 -1
- package/dist-client/pages/lib/select2-component.js.map +1 -1
- package/dist-client/pages/project/component/project-update-header.d.ts +1 -0
- package/dist-client/pages/project/component/project-update-header.js +95 -0
- package/dist-client/pages/project/component/project-update-header.js.map +1 -0
- package/dist-client/pages/project/popup/popup-schedule-upload.d.ts +9 -0
- package/dist-client/pages/project/popup/popup-schedule-upload.js +105 -0
- package/dist-client/pages/project/popup/popup-schedule-upload.js.map +1 -0
- package/dist-client/pages/project/project-list.d.ts +1 -0
- 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-plan-management.d.ts +1 -0
- package/dist-client/pages/project/project-plan-management.js +3 -53
- package/dist-client/pages/project/project-plan-management.js.map +1 -1
- package/dist-client/pages/project/project-schedule.d.ts +4 -0
- package/dist-client/pages/project/project-schedule.js +55 -12
- package/dist-client/pages/project/project-schedule.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/pages/project/project-update.d.ts +1 -0
- package/dist-client/pages/project/project-update.js +4 -52
- package/dist-client/pages/project/project-update.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/project/project-mutation.d.ts +2 -1
- package/dist-server/service/project/project-mutation.js +16 -0
- package/dist-server/service/project/project-mutation.js.map +1 -1
- package/dist-server/service/project/project-query.d.ts +1 -0
- package/dist-server/service/project/project-query.js +17 -0
- package/dist-server/service/project/project-query.js.map +1 -1
- package/dist-server/service/project/project-type.d.ts +4 -0
- package/dist-server/service/project/project-type.js +15 -1
- package/dist-server/service/project/project-type.js.map +1 -1
- package/dist-server/service/project/project.d.ts +1 -0
- package/dist-server/service/project/project.js +4 -0
- package/dist-server/service/project/project.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/server/service/project/project-mutation.ts +16 -1
- package/server/service/project/project-query.ts +13 -0
- package/server/service/project/project-type.ts +9 -0
- package/server/service/project/project.ts +4 -0
|
@@ -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"
|
|
@@ -12,6 +12,7 @@ import { notify } from '@operato/layout'
|
|
|
12
12
|
import gql from 'graphql-tag'
|
|
13
13
|
import { Project } from './project-list'
|
|
14
14
|
import '../lib/select2-component'
|
|
15
|
+
import './component/project-update-header'
|
|
15
16
|
|
|
16
17
|
@customElement('project-update')
|
|
17
18
|
export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
@@ -55,44 +56,6 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
55
56
|
padding: 0;
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
div[header] {
|
|
59
|
-
display: flex;
|
|
60
|
-
margin: 0px 20px;
|
|
61
|
-
|
|
62
|
-
h2 {
|
|
63
|
-
flex: 0.5;
|
|
64
|
-
color: #3f71a0;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
div[button-container] {
|
|
68
|
-
display: flex;
|
|
69
|
-
align-items: center;
|
|
70
|
-
justify-content: end;
|
|
71
|
-
flex: 0.5;
|
|
72
|
-
|
|
73
|
-
md-elevated-button {
|
|
74
|
-
margin: 0px 3px;
|
|
75
|
-
|
|
76
|
-
--md-elevated-button-container-height: 35px;
|
|
77
|
-
--md-elevated-button-label-text-size: 16px;
|
|
78
|
-
--md-elevated-button-container-color: #0595e5;
|
|
79
|
-
|
|
80
|
-
--md-elevated-button-label-text-color: #fff;
|
|
81
|
-
--md-elevated-button-hover-label-text-color: #fff;
|
|
82
|
-
--md-elevated-button-pressed-label-text-color: #fff;
|
|
83
|
-
--md-elevated-button-focus-label-text-color: #fff;
|
|
84
|
-
--md-elevated-button-icon-color: #fff;
|
|
85
|
-
--md-elevated-button-hover-icon-color: #fff;
|
|
86
|
-
--md-elevated-button-pressed-icon-color: #fff;
|
|
87
|
-
--md-elevated-button-focus-icon-color: #fff;
|
|
88
|
-
|
|
89
|
-
&[green] {
|
|
90
|
-
--md-elevated-button-container-color: #42b382;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
59
|
div[body] {
|
|
97
60
|
display: flex;
|
|
98
61
|
margin: 0px 25px 25px 25px;
|
|
@@ -266,20 +229,9 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
266
229
|
|
|
267
230
|
render() {
|
|
268
231
|
return html`
|
|
269
|
-
<
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
<md-elevated-button green @click=${this._saveProject}>
|
|
273
|
-
<md-icon slot="icon">save</md-icon>정보 저장
|
|
274
|
-
</md-elevated-button>
|
|
275
|
-
<md-elevated-button href=${`project-plan-management/${this.project.id}`}>
|
|
276
|
-
<md-icon slot="icon">description</md-icon>도면 관리
|
|
277
|
-
</md-elevated-button>
|
|
278
|
-
<md-elevated-button href=${`project-task-update/${this.project.id}`}>
|
|
279
|
-
<md-icon slot="icon">event_note</md-icon>공정표 관리
|
|
280
|
-
</md-elevated-button>
|
|
281
|
-
</div>
|
|
282
|
-
</div>
|
|
232
|
+
<project-update-header .projectId=${this.project.id || ''} title="프로젝트 정보 관리" @custom-click=${this._saveProject}>
|
|
233
|
+
</project-update-header>
|
|
234
|
+
|
|
283
235
|
<div body>
|
|
284
236
|
<div project-info>
|
|
285
237
|
<h3>기본 정보</h3>
|
|
@@ -89,6 +89,10 @@ Select2Component.styles = css `
|
|
|
89
89
|
position: relative;
|
|
90
90
|
width: 300px;
|
|
91
91
|
border: 1px solid #000;
|
|
92
|
+
border-radius: 6px;
|
|
93
|
+
padding: 4px 16px;
|
|
94
|
+
font-size: 14px;
|
|
95
|
+
color: var(--md-sys-color-primary);
|
|
92
96
|
}
|
|
93
97
|
|
|
94
98
|
div[dropdown] {
|
|
@@ -99,6 +103,8 @@ Select2Component.styles = css `
|
|
|
99
103
|
|
|
100
104
|
div[options] {
|
|
101
105
|
position: absolute;
|
|
106
|
+
left: 0;
|
|
107
|
+
top: 30px;
|
|
102
108
|
width: 100%;
|
|
103
109
|
border: 1px solid #ccc;
|
|
104
110
|
background-color: white;
|
|
@@ -111,6 +117,10 @@ Select2Component.styles = css `
|
|
|
111
117
|
div[option] {
|
|
112
118
|
padding: 10px;
|
|
113
119
|
cursor: pointer;
|
|
120
|
+
border-bottom: 1px solid #ccc;
|
|
121
|
+
}
|
|
122
|
+
div[option]:last-child {
|
|
123
|
+
border-bottom: none;
|
|
114
124
|
}
|
|
115
125
|
|
|
116
126
|
div[option]:hover {
|
|
@@ -129,10 +139,11 @@ Select2Component.styles = css `
|
|
|
129
139
|
}
|
|
130
140
|
|
|
131
141
|
div[tag] {
|
|
132
|
-
background-color: #
|
|
142
|
+
background-color: #2e79be;
|
|
133
143
|
color: white;
|
|
134
144
|
padding: 5px 10px;
|
|
135
145
|
border-radius: 20px;
|
|
146
|
+
font-size: 13px;
|
|
136
147
|
display: inline-flex;
|
|
137
148
|
align-items: center;
|
|
138
149
|
cursor: pointer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select2-component.js","sourceRoot":"","sources":["../../../client/pages/lib/select2-component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG3D,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAAzC;;
|
|
1
|
+
{"version":3,"file":"select2-component.js","sourceRoot":"","sources":["../../../client/pages/lib/select2-component.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, css } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\n@customElement('select2-component')\nexport class Select2Component extends LitElement {\n static styles = css`\n div[select-container] {\n position: relative;\n width: 300px;\n border: 1px solid #000;\n border-radius: 6px;\n padding: 4px 16px;\n font-size: 14px;\n color: var(--md-sys-color-primary);\n }\n\n div[dropdown] {\n border: 1px solid #ccc;\n padding: 5px;\n cursor: pointer;\n }\n\n div[options] {\n position: absolute;\n left: 0;\n top: 30px;\n width: 100%;\n border: 1px solid #ccc;\n background-color: white;\n max-height: 150px;\n overflow-y: auto;\n display: block;\n z-index: 1;\n }\n\n div[option] {\n padding: 10px;\n cursor: pointer;\n border-bottom: 1px solid #ccc;\n }\n div[option]:last-child {\n border-bottom: none;\n }\n\n div[option]:hover {\n background-color: #f0f0f0;\n }\n\n div[option][selected] {\n background-color: #d3f9d8;\n }\n\n div[selected-tags] {\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n margin-top: 10px;\n }\n\n div[tag] {\n background-color: #2e79be;\n color: white;\n padding: 5px 10px;\n border-radius: 20px;\n font-size: 13px;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n }\n\n span[tag-close] {\n margin-left: 8px;\n }\n `\n\n @property({ type: String }) placeholder: string = ''\n @property({ type: Array }) options: Array<{ name: string; value: string }> = []\n @property({ type: Array }) selectedValues: string[] = []\n\n @state() showOptions: boolean = false\n\n get selectedItems() {\n return this.selectedValues.map(id => this.options.find(option => option.value === id)).filter(Boolean)\n }\n\n connectedCallback() {\n super.connectedCallback()\n document.addEventListener('click', this._handleOutsideClick)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n document.removeEventListener('click', this._handleOutsideClick)\n }\n\n private _handleOutsideClick = (event: MouseEvent) => {\n const path = event.composedPath()\n if (!path.includes(this)) {\n this.showOptions = false\n }\n }\n\n private _toggleOptions() {\n this.showOptions = !this.showOptions\n }\n\n private _handleSelect(optionValue: string) {\n if (this.selectedValues.includes(optionValue)) {\n // 이미 선택된 옵션을 선택한 경우 해제\n this.selectedValues = this.selectedValues.filter(value => value !== optionValue)\n } else {\n // 선택되지 않은 옵션 추가\n this.selectedValues = [...this.selectedValues, optionValue]\n }\n\n this.showOptions = false\n this._dispatchEvent(this.selectedValues)\n }\n\n private _handleRemove(tagValue: string) {\n this.selectedValues = this.selectedValues.filter(value => value !== tagValue)\n this._dispatchEvent(this.selectedValues)\n }\n\n private _dispatchEvent(selectedValues: string[]) {\n this.dispatchEvent(\n new CustomEvent('selection-changed', {\n detail: { selectedValues }, // ID 배열을 부모로 전달\n bubbles: true,\n composed: true\n })\n )\n }\n\n render() {\n return html`\n <div select-container>\n <div tags @click=\"${this._toggleOptions}\">${this.placeholder}</div>\n ${this.showOptions\n ? html`\n <div options>\n ${this.options.map(\n option => html`\n <div\n option\n ?selected=${this.selectedValues.includes(option.value)}\n @click=${() => this._handleSelect(option.value)}\n >\n ${option.name}\n </div>\n `\n )}\n </div>\n `\n : ''}\n </div>\n\n <div selected-tags>\n ${this.selectedItems.map(\n (tag: any) => html`\n <div tag @click=${() => this._handleRemove(tag.value)}>\n ${tag!.name}\n <span tag-close>×</span>\n </div>\n `\n )}\n </div>\n `\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@material/web/icon/icon.js';
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import '@material/web/icon/icon.js';
|
|
3
|
+
import { css, html, LitElement } from 'lit';
|
|
4
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
5
|
+
import { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles';
|
|
6
|
+
let ProjectUpdateHeader = class ProjectUpdateHeader extends LitElement {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.projectId = '';
|
|
10
|
+
this.title = '';
|
|
11
|
+
}
|
|
12
|
+
render() {
|
|
13
|
+
const path = window.location.pathname;
|
|
14
|
+
return html `
|
|
15
|
+
<div header>
|
|
16
|
+
<h2>${this.title}</h2>
|
|
17
|
+
<div button-container>
|
|
18
|
+
<md-elevated-button green @click=${this._dispatchEvent} ?disabled=${!this.projectId}>
|
|
19
|
+
<md-icon slot="icon">save</md-icon>정보 저장
|
|
20
|
+
</md-elevated-button>
|
|
21
|
+
<md-elevated-button
|
|
22
|
+
href=${`project-update/${this.projectId}`}
|
|
23
|
+
?disabled=${!this.projectId || path.includes('project-update/')}
|
|
24
|
+
>
|
|
25
|
+
<md-icon slot="icon">assignment</md-icon>프로젝트 정보 수정
|
|
26
|
+
</md-elevated-button>
|
|
27
|
+
<md-elevated-button
|
|
28
|
+
href=${`project-plan-management/${this.projectId}`}
|
|
29
|
+
?disabled=${!this.projectId || path.includes('project-plan-management/')}
|
|
30
|
+
>
|
|
31
|
+
<md-icon slot="icon">description</md-icon>도면 관리
|
|
32
|
+
</md-elevated-button>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
`;
|
|
36
|
+
}
|
|
37
|
+
_dispatchEvent() {
|
|
38
|
+
this.dispatchEvent(new CustomEvent('custom-click'));
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
ProjectUpdateHeader.styles = [
|
|
42
|
+
ButtonContainerStyles,
|
|
43
|
+
ScrollbarStyles,
|
|
44
|
+
css `
|
|
45
|
+
div[header] {
|
|
46
|
+
display: flex;
|
|
47
|
+
margin: 0px 20px;
|
|
48
|
+
|
|
49
|
+
h2 {
|
|
50
|
+
flex: 0.5;
|
|
51
|
+
color: #3f71a0;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
div[button-container] {
|
|
56
|
+
display: flex;
|
|
57
|
+
align-items: center;
|
|
58
|
+
justify-content: end;
|
|
59
|
+
flex: 0.5;
|
|
60
|
+
|
|
61
|
+
md-elevated-button {
|
|
62
|
+
margin: 0px 3px;
|
|
63
|
+
|
|
64
|
+
--md-elevated-button-container-height: 35px;
|
|
65
|
+
--md-elevated-button-label-text-size: 16px;
|
|
66
|
+
--md-elevated-button-container-color: #0595e5;
|
|
67
|
+
|
|
68
|
+
--md-elevated-button-label-text-color: #fff;
|
|
69
|
+
--md-elevated-button-hover-label-text-color: #fff;
|
|
70
|
+
--md-elevated-button-pressed-label-text-color: #fff;
|
|
71
|
+
--md-elevated-button-focus-label-text-color: #fff;
|
|
72
|
+
--md-elevated-button-icon-color: #fff;
|
|
73
|
+
--md-elevated-button-hover-icon-color: #fff;
|
|
74
|
+
--md-elevated-button-pressed-icon-color: #fff;
|
|
75
|
+
--md-elevated-button-focus-icon-color: #fff;
|
|
76
|
+
|
|
77
|
+
&[green] {
|
|
78
|
+
--md-elevated-button-container-color: #42b382;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
`
|
|
83
|
+
];
|
|
84
|
+
__decorate([
|
|
85
|
+
property({ type: String }),
|
|
86
|
+
__metadata("design:type", String)
|
|
87
|
+
], ProjectUpdateHeader.prototype, "projectId", void 0);
|
|
88
|
+
__decorate([
|
|
89
|
+
property({ type: String }),
|
|
90
|
+
__metadata("design:type", String)
|
|
91
|
+
], ProjectUpdateHeader.prototype, "title", void 0);
|
|
92
|
+
ProjectUpdateHeader = __decorate([
|
|
93
|
+
customElement('project-update-header')
|
|
94
|
+
], ProjectUpdateHeader);
|
|
95
|
+
//# sourceMappingURL=project-update-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-update-header.js","sourceRoot":"","sources":["../../../../client/pages/project/component/project-update-header.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGxE,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,UAAU;IAA5C;;QA6C8B,cAAS,GAAW,EAAE,CAAA;QACtB,UAAK,GAAW,EAAE,CAAA;IAgChD,CAAC;IA9BC,MAAM;QACJ,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAA;QAErC,OAAO,IAAI,CAAA;;cAED,IAAI,CAAC,KAAK;;6CAEqB,IAAI,CAAC,cAAc,cAAc,CAAC,IAAI,CAAC,SAAS;;;;mBAI1E,kBAAkB,IAAI,CAAC,SAAS,EAAE;wBAC7B,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;;;;;mBAKxD,2BAA2B,IAAI,CAAC,SAAS,EAAE;wBACtC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;;;;;;KAM/E,CAAA;IACH,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC,CAAA;IACrD,CAAC;;AA5EM,0BAAM,GAAG;IACd,qBAAqB;IACrB,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsCF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sDAAuB;AAClD;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kDAAmB;AA9C1C,mBAAmB;IADxB,aAAa,CAAC,uBAAuB,CAAC;GACjC,mBAAmB,CA8ExB","sourcesContent":["import '@material/web/icon/icon.js'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles'\n\n@customElement('project-update-header')\nclass ProjectUpdateHeader extends LitElement {\n static styles = [\n ButtonContainerStyles,\n ScrollbarStyles,\n css`\n div[header] {\n display: flex;\n margin: 0px 20px;\n\n h2 {\n flex: 0.5;\n color: #3f71a0;\n }\n }\n\n div[button-container] {\n display: flex;\n align-items: center;\n justify-content: end;\n flex: 0.5;\n\n md-elevated-button {\n margin: 0px 3px;\n\n --md-elevated-button-container-height: 35px;\n --md-elevated-button-label-text-size: 16px;\n --md-elevated-button-container-color: #0595e5;\n\n --md-elevated-button-label-text-color: #fff;\n --md-elevated-button-hover-label-text-color: #fff;\n --md-elevated-button-pressed-label-text-color: #fff;\n --md-elevated-button-focus-label-text-color: #fff;\n --md-elevated-button-icon-color: #fff;\n --md-elevated-button-hover-icon-color: #fff;\n --md-elevated-button-pressed-icon-color: #fff;\n --md-elevated-button-focus-icon-color: #fff;\n\n &[green] {\n --md-elevated-button-container-color: #42b382;\n }\n }\n }\n `\n ]\n\n @property({ type: String }) projectId: string = ''\n @property({ type: String }) title: string = ''\n\n render() {\n const path = window.location.pathname\n\n return html`\n <div header>\n <h2>${this.title}</h2>\n <div button-container>\n <md-elevated-button green @click=${this._dispatchEvent} ?disabled=${!this.projectId}>\n <md-icon slot=\"icon\">save</md-icon>정보 저장\n </md-elevated-button>\n <md-elevated-button\n href=${`project-update/${this.projectId}`}\n ?disabled=${!this.projectId || path.includes('project-update/')}\n >\n <md-icon slot=\"icon\">assignment</md-icon>프로젝트 정보 수정\n </md-elevated-button>\n <md-elevated-button\n href=${`project-plan-management/${this.projectId}`}\n ?disabled=${!this.projectId || path.includes('project-plan-management/')}\n >\n <md-icon slot=\"icon\">description</md-icon>도면 관리\n </md-elevated-button>\n </div>\n </div>\n `\n }\n\n private _dispatchEvent() {\n this.dispatchEvent(new CustomEvent('custom-click'))\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export declare class PopupScheduleUpload extends LitElement {
|
|
3
|
+
static styles: import("lit").CSSResult[];
|
|
4
|
+
private scheduleTable;
|
|
5
|
+
private projectId;
|
|
6
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
7
|
+
private _close;
|
|
8
|
+
_onChangeAttachment(e: CustomEvent): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { css, html, LitElement } from 'lit';
|
|
3
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
4
|
+
import { client } from '@operato/graphql';
|
|
5
|
+
import { notify } from '@operato/layout';
|
|
6
|
+
import gql from 'graphql-tag';
|
|
7
|
+
let PopupScheduleUpload = class PopupScheduleUpload extends LitElement {
|
|
8
|
+
render() {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
const icon = this.scheduleTable ? '' : 'upload';
|
|
11
|
+
const description = ((_a = this.scheduleTable) === null || _a === void 0 ? void 0 : _a.name) ? ' ' : '공정표 업로드';
|
|
12
|
+
return html `
|
|
13
|
+
<div body>
|
|
14
|
+
<div input-container>
|
|
15
|
+
<ox-input-file
|
|
16
|
+
icon=${icon}
|
|
17
|
+
label=${((_b = this.scheduleTable) === null || _b === void 0 ? void 0 : _b.name) || ''}
|
|
18
|
+
description=${description}
|
|
19
|
+
@change=${this._onChangeAttachment.bind(this)}
|
|
20
|
+
></ox-input-file>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div button-container>
|
|
24
|
+
<md-outlined-button @click=${this._close}><md-icon slot="icon">cancel</md-icon>취소</md-outlined-button>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
`;
|
|
28
|
+
}
|
|
29
|
+
_close() {
|
|
30
|
+
history.back();
|
|
31
|
+
}
|
|
32
|
+
// 공정표 업로드
|
|
33
|
+
async _onChangeAttachment(e) {
|
|
34
|
+
const file = e.detail[0] || null;
|
|
35
|
+
const response = await client.mutate({
|
|
36
|
+
mutation: gql `
|
|
37
|
+
mutation UploadProjectScheduleTable($param: UploadProjectScheduleTable!) {
|
|
38
|
+
uploadProjectScheduleTable(param: $param)
|
|
39
|
+
}
|
|
40
|
+
`,
|
|
41
|
+
variables: {
|
|
42
|
+
param: {
|
|
43
|
+
projectId: this.projectId,
|
|
44
|
+
scheduleTable: file
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
context: {
|
|
48
|
+
hasUpload: true
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
if (!response.errors) {
|
|
52
|
+
notify({ message: '공정표가 업로드 되었습니다.' });
|
|
53
|
+
this.dispatchEvent(new CustomEvent('uploaded'));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
PopupScheduleUpload.styles = [
|
|
58
|
+
css `
|
|
59
|
+
:host {
|
|
60
|
+
display: flex;
|
|
61
|
+
flex-direction: column;
|
|
62
|
+
background-color: #fff;
|
|
63
|
+
width: 100%;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
div[body] {
|
|
67
|
+
flex: 1;
|
|
68
|
+
|
|
69
|
+
div[input-container] {
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
justify-content: center;
|
|
73
|
+
gap: 25px;
|
|
74
|
+
background-color: #f7f7f7;
|
|
75
|
+
padding: 35px 27px 27px 27px;
|
|
76
|
+
|
|
77
|
+
ox-input-file {
|
|
78
|
+
height: 100px;
|
|
79
|
+
width: 120px;
|
|
80
|
+
line-height: 100%;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
div[button-container] {
|
|
85
|
+
display: flex;
|
|
86
|
+
align-items: center;
|
|
87
|
+
justify-content: center;
|
|
88
|
+
margin-top: 20px;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
`
|
|
92
|
+
];
|
|
93
|
+
__decorate([
|
|
94
|
+
property({ type: Object }),
|
|
95
|
+
__metadata("design:type", Object)
|
|
96
|
+
], PopupScheduleUpload.prototype, "scheduleTable", void 0);
|
|
97
|
+
__decorate([
|
|
98
|
+
property({ type: String }),
|
|
99
|
+
__metadata("design:type", Object)
|
|
100
|
+
], PopupScheduleUpload.prototype, "projectId", void 0);
|
|
101
|
+
PopupScheduleUpload = __decorate([
|
|
102
|
+
customElement('popup-schedule-upload')
|
|
103
|
+
], PopupScheduleUpload);
|
|
104
|
+
export { PopupScheduleUpload };
|
|
105
|
+
//# sourceMappingURL=popup-schedule-upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popup-schedule-upload.js","sourceRoot":"","sources":["../../../../client/pages/project/popup/popup-schedule-upload.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,GAAG,MAAM,aAAa,CAAA;AAItB,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,UAAU;IAyCjD,MAAM;;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;QAC/C,MAAM,WAAW,GAAG,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;QAE9D,OAAO,IAAI,CAAA;;;;mBAII,IAAI;oBACH,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,KAAI,EAAE;0BACxB,WAAW;sBACf,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;uCAKlB,IAAI,CAAC,MAAM;;;KAG7C,CAAA;IACH,CAAC;IAEO,MAAM;QACZ,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;IAED,UAAU;IACV,KAAK,CAAC,mBAAmB,CAAC,CAAc;QACtC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;QAEhC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE;gBACT,KAAK,EAAE;oBACL,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,aAAa,EAAE,IAAI;iBACpB;aACF;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACpB,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAA;YACtC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;SAChD;IACH,CAAC;;AA3FM,0BAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;0DAA8C;AACzE;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sDAAsC;AAvCtD,mBAAmB;IAD/B,aAAa,CAAC,uBAAuB,CAAC;GAC1B,mBAAmB,CA6F/B;SA7FY,mBAAmB","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\nimport { Attachment } from '@things-factory/attachment-base'\n\n@customElement('popup-schedule-upload')\nexport class PopupScheduleUpload extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n background-color: #fff;\n width: 100%;\n }\n\n div[body] {\n flex: 1;\n\n div[input-container] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 25px;\n background-color: #f7f7f7;\n padding: 35px 27px 27px 27px;\n\n ox-input-file {\n height: 100px;\n width: 120px;\n line-height: 100%;\n }\n }\n\n div[button-container] {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 20px;\n }\n }\n `\n ]\n\n @property({ type: Object }) private scheduleTable: Attachment | undefined\n @property({ type: String }) private projectId: string | undefined\n\n render() {\n const icon = this.scheduleTable ? '' : 'upload'\n const description = this.scheduleTable?.name ? ' ' : '공정표 업로드'\n\n return html`\n <div body>\n <div input-container>\n <ox-input-file\n icon=${icon}\n label=${this.scheduleTable?.name || ''}\n description=${description}\n @change=${this._onChangeAttachment.bind(this)}\n ></ox-input-file>\n </div>\n\n <div button-container>\n <md-outlined-button @click=${this._close}><md-icon slot=\"icon\">cancel</md-icon>취소</md-outlined-button>\n </div>\n </div>\n `\n }\n\n private _close() {\n history.back()\n }\n\n // 공정표 업로드\n async _onChangeAttachment(e: CustomEvent) {\n const file = e.detail[0] || null\n\n const response = await client.mutate({\n mutation: gql`\n mutation UploadProjectScheduleTable($param: UploadProjectScheduleTable!) {\n uploadProjectScheduleTable(param: $param)\n }\n `,\n variables: {\n param: {\n projectId: this.projectId,\n scheduleTable: file\n }\n },\n context: {\n hasUpload: true\n }\n })\n\n if (!response.errors) {\n notify({ message: '공정표가 업로드 되었습니다.' })\n this.dispatchEvent(new CustomEvent('uploaded'))\n }\n }\n}\n"]}
|