@dssp/project 0.0.30 → 0.0.32
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 +21 -16
- package/client/pages/project/component/project-update-header.ts +16 -13
- package/client/pages/project/project-detail.ts +74 -60
- package/client/pages/project/project-plan-management.ts +39 -29
- package/client/pages/project/project-schedule.ts +4 -3
- package/client/pages/project/project-setting-list.ts +9 -9
- package/client/pages/project/project-update.ts +53 -29
- package/dist-client/pages/lib/select2-component.js +21 -16
- package/dist-client/pages/lib/select2-component.js.map +1 -1
- package/dist-client/pages/project/component/project-update-header.js +16 -13
- package/dist-client/pages/project/component/project-update-header.js.map +1 -1
- package/dist-client/pages/project/project-detail.js +74 -60
- package/dist-client/pages/project/project-detail.js.map +1 -1
- package/dist-client/pages/project/project-plan-management.js +39 -29
- package/dist-client/pages/project/project-plan-management.js.map +1 -1
- package/dist-client/pages/project/project-schedule.js +4 -3
- package/dist-client/pages/project/project-schedule.js.map +1 -1
- package/dist-client/pages/project/project-setting-list.js +9 -9
- package/dist-client/pages/project/project-setting-list.js.map +1 -1
- package/dist-client/pages/project/project-update.js +53 -29
- package/dist-client/pages/project/project-update.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/{project-to-excel.js → export-tasks.js} +1 -1
- package/dist-server/controllers/export-tasks.js.map +1 -0
- package/dist-server/controllers/import-task.d.ts +1 -17
- package/dist-server/controllers/import-task.js +24 -14
- package/dist-server/controllers/import-task.js.map +1 -1
- package/dist-server/controllers/parse-excel.d.ts +4 -0
- package/dist-server/controllers/parse-excel.js +75 -0
- package/dist-server/controllers/parse-excel.js.map +1 -0
- package/dist-server/controllers/types.d.ts +18 -0
- package/dist-server/controllers/types.js +3 -0
- package/dist-server/controllers/types.js.map +1 -0
- package/dist-server/routes.js +2 -2
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/project/project-mutation.d.ts +2 -1
- package/dist-server/service/project/project-mutation.js +52 -24
- package/dist-server/service/project/project-mutation.js.map +1 -1
- package/dist-server/service/task/task.d.ts +1 -0
- package/dist-server/service/task/task.js +5 -0
- package/dist-server/service/task/task.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/server/controllers/import-task.ts +25 -31
- package/server/controllers/parse-excel.ts +86 -0
- package/server/controllers/types.ts +20 -0
- package/server/routes.ts +1 -1
- package/server/service/project/project-mutation.ts +40 -24
- package/server/service/task/task.ts +4 -0
- package/dist-server/controllers/project-to-excel.js.map +0 -1
- /package/dist-server/controllers/{project-to-excel.d.ts → export-tasks.d.ts} +0 -0
- /package/server/controllers/{project-to-excel.ts → export-tasks.ts} +0 -0
|
@@ -26,7 +26,7 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
|
|
|
26
26
|
|
|
27
27
|
width: 100%;
|
|
28
28
|
height: 100%;
|
|
29
|
-
background-color: var(--md-sys-color-background, #
|
|
29
|
+
background-color: var(--md-sys-color-background, #f6f6f6);
|
|
30
30
|
|
|
31
31
|
--grid-record-emphasized-background-color: red;
|
|
32
32
|
--grid-record-emphasized-color: yellow;
|
|
@@ -102,14 +102,14 @@ export class ProjectSettingList extends ScopedElementsMixin(PageView) {
|
|
|
102
102
|
padding: 13px 20px;
|
|
103
103
|
|
|
104
104
|
--md-elevated-button-container-color: #24be7b;
|
|
105
|
-
--md-elevated-button-label-text-color:
|
|
106
|
-
--md-elevated-button-hover-label-text-color:
|
|
107
|
-
--md-elevated-button-pressed-label-text-color:
|
|
108
|
-
--md-elevated-button-focus-label-text-color:
|
|
109
|
-
--md-elevated-button-icon-color:
|
|
110
|
-
--md-elevated-button-hover-icon-color:
|
|
111
|
-
--md-elevated-button-pressed-icon-color:
|
|
112
|
-
--md-elevated-button-focus-icon-color:
|
|
105
|
+
--md-elevated-button-label-text-color: var(--md-sys-color-on-primary);
|
|
106
|
+
--md-elevated-button-hover-label-text-color:var(--md-sys-color-on-primary);
|
|
107
|
+
--md-elevated-button-pressed-label-text-color:var(--md-sys-color-on-primary);
|
|
108
|
+
--md-elevated-button-focus-label-text-color:var(--md-sys-color-on-primary);
|
|
109
|
+
--md-elevated-button-icon-color:var(--md-sys-color-on-primary);
|
|
110
|
+
--md-elevated-button-hover-icon-color:var(--md-sys-color-on-primary);
|
|
111
|
+
--md-elevated-button-pressed-icon-color:var(--md-sys-color-on-primary);
|
|
112
|
+
--md-elevated-button-focus-icon-color:var(--md-sys-color-on-primary);
|
|
113
113
|
|
|
114
114
|
--md-elevated-button-container-shape: 7px;
|
|
115
115
|
}
|
|
@@ -20,11 +20,11 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
20
20
|
css`
|
|
21
21
|
:host {
|
|
22
22
|
display: grid;
|
|
23
|
-
grid-template-rows:
|
|
23
|
+
grid-template-rows: 55px auto;
|
|
24
24
|
color: #4e5055;
|
|
25
25
|
|
|
26
26
|
width: 100%;
|
|
27
|
-
background-color: #
|
|
27
|
+
background-color: var(--md-sys-color-background, #f6f6f6);
|
|
28
28
|
overflow-y: auto;
|
|
29
29
|
|
|
30
30
|
--grid-record-emphasized-background-color: red;
|
|
@@ -35,45 +35,59 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
35
35
|
width: 100%;
|
|
36
36
|
|
|
37
37
|
--md-outlined-text-field-container-shape: 5px;
|
|
38
|
+
--md-outlined-text-field-outline-color: rgba(51,51,51,.20);
|
|
39
|
+
--md-outlined-text-field-focus-outline-color: #1f7fd9;
|
|
40
|
+
--md-outlined-text-field-focus-outline-width: 1px;
|
|
38
41
|
--md-sys-color-primary: #586878;
|
|
39
42
|
--md-outlined-text-field-input-text-size: 14px;
|
|
40
|
-
--md-outlined-field-bottom-space:
|
|
41
|
-
--md-outlined-field-top-space:
|
|
43
|
+
--md-outlined-field-bottom-space: 3px;
|
|
44
|
+
--md-outlined-field-top-space: 3px;
|
|
45
|
+
--md-outlined-field-leading-space: var(--spacing-medium, 8px);
|
|
46
|
+
--md-outlined-field-trailing-space: var(--spacing-medium, 8px);
|
|
47
|
+
}
|
|
48
|
+
select2-component {
|
|
49
|
+
width:100%;
|
|
50
|
+
}
|
|
51
|
+
input[type="date"] {
|
|
52
|
+
border:1px solid rgba(51,51,51,.20);
|
|
53
|
+
padding:var(--spacing-small, 4px) var(--spacing-medium, 8px);
|
|
54
|
+
border-radius: 5px;
|
|
42
55
|
}
|
|
43
56
|
md-outlined-text-field[type='textarea'] {
|
|
44
57
|
width: 100%;
|
|
45
|
-
height:
|
|
58
|
+
height: 120px;
|
|
46
59
|
resize: none;
|
|
47
60
|
}
|
|
48
61
|
|
|
49
62
|
ox-input-image {
|
|
50
|
-
width:
|
|
51
|
-
height:
|
|
63
|
+
width: 120px;
|
|
64
|
+
height: 90px;
|
|
52
65
|
}
|
|
53
66
|
ox-input-file {
|
|
54
|
-
width:
|
|
55
|
-
height:
|
|
67
|
+
width: 120px;
|
|
68
|
+
height: 90px;
|
|
56
69
|
padding: 0;
|
|
57
70
|
}
|
|
58
71
|
|
|
59
72
|
div[body] {
|
|
60
73
|
display: flex;
|
|
61
|
-
margin:
|
|
62
|
-
|
|
74
|
+
margin: var(--spacing-large, 12px);
|
|
75
|
+
margin-top:0;
|
|
76
|
+
gap: var(--spacing-medium, 8px);
|
|
63
77
|
|
|
64
78
|
& > div {
|
|
65
79
|
display: flex;
|
|
66
80
|
height: fit-content;
|
|
67
81
|
flex-direction: column;
|
|
68
|
-
padding:
|
|
69
|
-
background-color:
|
|
82
|
+
padding: var(--spacing-large, 12px);
|
|
83
|
+
background-color: var(--md-sys-color-on-primary);
|
|
70
84
|
border: 1px solid #cccccc80;
|
|
71
85
|
border-radius: 5px;
|
|
72
|
-
gap:
|
|
86
|
+
gap: var(--spacing-medium, 8px);
|
|
73
87
|
|
|
74
88
|
h3 {
|
|
75
89
|
color: #2e79be;
|
|
76
|
-
font-size:
|
|
90
|
+
font-size: 16px;
|
|
77
91
|
margin: 0px;
|
|
78
92
|
}
|
|
79
93
|
|
|
@@ -84,13 +98,14 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
84
98
|
span:first-child {
|
|
85
99
|
flex: 0.3;
|
|
86
100
|
text-align: right;
|
|
101
|
+
font-size: 14px;
|
|
87
102
|
}
|
|
88
103
|
|
|
89
104
|
span:last-child {
|
|
90
105
|
flex: 0.7;
|
|
91
106
|
display: flex;
|
|
92
|
-
gap:
|
|
93
|
-
margin-left:
|
|
107
|
+
gap: var(--spacing-medium, 8px);
|
|
108
|
+
margin-left: var(--spacing-medium, 8px);
|
|
94
109
|
align-items: center;
|
|
95
110
|
|
|
96
111
|
&[align-end] {
|
|
@@ -114,11 +129,11 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
114
129
|
& > div {
|
|
115
130
|
display: flex;
|
|
116
131
|
flex-direction: column;
|
|
117
|
-
gap:
|
|
132
|
+
gap: var(--spacing-medium, 8px);
|
|
118
133
|
border: 1px solid #cccccc80;
|
|
119
134
|
border-radius: 5px;
|
|
120
|
-
padding:
|
|
121
|
-
background-color:
|
|
135
|
+
padding: var(--spacing-large, 12px);
|
|
136
|
+
background-color: var(--md-sys-color-on-primary);
|
|
122
137
|
|
|
123
138
|
md-outlined-text-field[type='text'] {
|
|
124
139
|
width: 60%;
|
|
@@ -126,19 +141,28 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
126
141
|
|
|
127
142
|
md-elevated-button {
|
|
128
143
|
--md-elevated-button-container-height: 30px;
|
|
129
|
-
--md-elevated-button-container-color:
|
|
144
|
+
--md-elevated-button-container-color: var(--md-sys-color-on-primary);
|
|
130
145
|
--md-elevated-button-label-text-size: 16px;
|
|
131
146
|
}
|
|
132
147
|
hr {
|
|
133
|
-
border: 1px
|
|
148
|
+
border: 1px rgba(51,51,51,.1) dashed;
|
|
134
149
|
width: 100%;
|
|
135
|
-
margin-bottom: 2px;
|
|
150
|
+
margin-bottom: var(--spacing-tiny, 2px);
|
|
136
151
|
}
|
|
137
152
|
div[warn] {
|
|
138
153
|
font-size: 12px;
|
|
139
154
|
color: red;
|
|
140
|
-
margin-left:
|
|
141
|
-
margin-bottom:
|
|
155
|
+
margin-left: var(--spacing-small, 4px);
|
|
156
|
+
margin-bottom: var(--spacing-small, 4px);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
md-outlined-button {
|
|
160
|
+
min-height: 30px;
|
|
161
|
+
padding: 0 var(--spacing-large, 12px);
|
|
162
|
+
box-shadow: 1px 1px 1px #0000001a;
|
|
163
|
+
--md-outlined-button-label-text-color: #586878;
|
|
164
|
+
--md-outlined-button-label-text-weight: bold;
|
|
165
|
+
--md-sys-color-outline: rgba(51,51,51,.20);
|
|
142
166
|
}
|
|
143
167
|
|
|
144
168
|
div[row] {
|
|
@@ -153,7 +177,7 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
153
177
|
div[separate-container] {
|
|
154
178
|
display: grid;
|
|
155
179
|
grid-template-columns: repeat(2, 1fr);
|
|
156
|
-
gap:
|
|
180
|
+
gap: var(--spacing-medium, 8px);
|
|
157
181
|
|
|
158
182
|
md-outlined-text-field {
|
|
159
183
|
width: 70px;
|
|
@@ -164,7 +188,7 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
164
188
|
|
|
165
189
|
span[floor-title] {
|
|
166
190
|
min-width: 33px;
|
|
167
|
-
margin-right:
|
|
191
|
+
margin-right: var(--spacing-small, 4px);
|
|
168
192
|
}
|
|
169
193
|
span:first-child {
|
|
170
194
|
flex: 0.4;
|
|
@@ -175,7 +199,7 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
175
199
|
flex: 0.6;
|
|
176
200
|
display: flex;
|
|
177
201
|
align-items: center;
|
|
178
|
-
padding-left:
|
|
202
|
+
padding-left: var(--spacing-medium, 8px);
|
|
179
203
|
}
|
|
180
204
|
}
|
|
181
205
|
}
|
|
@@ -505,7 +529,7 @@ export class ProjectUpdate extends ScopedElementsMixin(PageView) {
|
|
|
505
529
|
value=${this.project?.buildingComplex?.buildingCount?.toString() || ''}
|
|
506
530
|
@input=${this._onInputChange}
|
|
507
531
|
></md-outlined-text-field>
|
|
508
|
-
<md-
|
|
532
|
+
<md-outlined-button @click=${this._setBuilding}>적용</md-outlined-button>
|
|
509
533
|
</span>
|
|
510
534
|
</div>
|
|
511
535
|
<hr />
|
|
@@ -87,17 +87,19 @@ let Select2Component = class Select2Component extends LitElement {
|
|
|
87
87
|
Select2Component.styles = css `
|
|
88
88
|
div[select-container] {
|
|
89
89
|
position: relative;
|
|
90
|
-
|
|
91
|
-
border:
|
|
92
|
-
|
|
93
|
-
padding: 4px 16px;
|
|
90
|
+
border: 1px solid rgba(51,51,51,.20);
|
|
91
|
+
border-radius: 5px;
|
|
92
|
+
padding: var(--spacing-small, 4px) var(--spacing-medium, 8px);
|
|
94
93
|
font-size: 14px;
|
|
95
94
|
color: var(--md-sys-color-primary);
|
|
96
95
|
}
|
|
96
|
+
div[select-container]:focus {
|
|
97
|
+
border: 1px solid #1f7fd9;
|
|
98
|
+
}
|
|
97
99
|
|
|
98
100
|
div[dropdown] {
|
|
99
101
|
border: 1px solid #ccc;
|
|
100
|
-
padding:
|
|
102
|
+
padding: var(--spacing-small, 4px);
|
|
101
103
|
cursor: pointer;
|
|
102
104
|
}
|
|
103
105
|
|
|
@@ -105,9 +107,10 @@ Select2Component.styles = css `
|
|
|
105
107
|
position: absolute;
|
|
106
108
|
left: 0;
|
|
107
109
|
top: 30px;
|
|
108
|
-
width:
|
|
110
|
+
min-width: 50%;
|
|
109
111
|
border: 1px solid #ccc;
|
|
110
|
-
background-color:
|
|
112
|
+
background-color: var(--md-sys-color-surface-tint);
|
|
113
|
+
color:var(--md-sys-color-on-primary);
|
|
111
114
|
max-height: 150px;
|
|
112
115
|
overflow-y: auto;
|
|
113
116
|
display: block;
|
|
@@ -115,42 +118,44 @@ Select2Component.styles = css `
|
|
|
115
118
|
}
|
|
116
119
|
|
|
117
120
|
div[option] {
|
|
118
|
-
padding:
|
|
121
|
+
padding: var(--spacing-small, 4px) var(--spacing-medium, 8px);
|
|
119
122
|
cursor: pointer;
|
|
120
|
-
border-bottom: 1px solid
|
|
123
|
+
border-bottom: 1px solid rgba(0,0,0,.4);
|
|
121
124
|
}
|
|
122
125
|
div[option]:last-child {
|
|
123
126
|
border-bottom: none;
|
|
124
127
|
}
|
|
125
128
|
|
|
126
129
|
div[option]:hover {
|
|
127
|
-
background-color:
|
|
130
|
+
background-color: var(--md-sys-color-tertiary-container);
|
|
128
131
|
}
|
|
129
132
|
|
|
130
133
|
div[option][selected] {
|
|
131
|
-
background-color:
|
|
134
|
+
background-color: var(--md-sys-color-tertiary-container);
|
|
135
|
+
font-weight: bold;
|
|
136
|
+
color:var(--md-sys-color-on-primary);
|
|
132
137
|
}
|
|
133
138
|
|
|
134
139
|
div[selected-tags] {
|
|
135
140
|
display: flex;
|
|
136
141
|
flex-wrap: wrap;
|
|
137
|
-
gap:
|
|
138
|
-
margin-top:
|
|
142
|
+
gap: var(--spacing-small, 4px);
|
|
143
|
+
margin-top: var(--spacing-small, 4px);
|
|
139
144
|
}
|
|
140
145
|
|
|
141
146
|
div[tag] {
|
|
142
147
|
background-color: #2e79be;
|
|
143
148
|
color: white;
|
|
144
|
-
padding:
|
|
149
|
+
padding: var(--spacing-tiny, 2px) var(--spacing-medium, 8px);
|
|
145
150
|
border-radius: 20px;
|
|
146
|
-
font-size:
|
|
151
|
+
font-size: 12px;
|
|
147
152
|
display: inline-flex;
|
|
148
153
|
align-items: center;
|
|
149
154
|
cursor: pointer;
|
|
150
155
|
}
|
|
151
156
|
|
|
152
157
|
span[tag-close] {
|
|
153
|
-
margin-left:
|
|
158
|
+
margin-left: var(--spacing-small, 4px);
|
|
154
159
|
}
|
|
155
160
|
`;
|
|
156
161
|
__decorate([
|
|
@@ -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 border: 1px solid rgba(51,51,51,.20);\n border-radius: 5px;\n padding: var(--spacing-small, 4px) var(--spacing-medium, 8px);\n font-size: 14px;\n color: var(--md-sys-color-primary);\n }\n div[select-container]:focus {\n border: 1px solid #1f7fd9;\n }\n\n div[dropdown] {\n border: 1px solid #ccc;\n padding: var(--spacing-small, 4px);\n cursor: pointer;\n }\n\n div[options] {\n position: absolute;\n left: 0;\n top: 30px;\n min-width: 50%;\n border: 1px solid #ccc;\n background-color: var(--md-sys-color-surface-tint);\n color:var(--md-sys-color-on-primary);\n max-height: 150px;\n overflow-y: auto;\n display: block;\n z-index: 1;\n }\n\n div[option] {\n padding: var(--spacing-small, 4px) var(--spacing-medium, 8px);\n cursor: pointer;\n border-bottom: 1px solid rgba(0,0,0,.4);\n }\n div[option]:last-child {\n border-bottom: none;\n }\n\n div[option]:hover {\n background-color: var(--md-sys-color-tertiary-container);\n }\n\n div[option][selected] {\n background-color: var(--md-sys-color-tertiary-container);\n font-weight: bold;\n color:var(--md-sys-color-on-primary);\n }\n\n div[selected-tags] {\n display: flex;\n flex-wrap: wrap;\n gap: var(--spacing-small, 4px);\n margin-top: var(--spacing-small, 4px);\n }\n\n div[tag] {\n background-color: #2e79be;\n color: white;\n padding: var(--spacing-tiny, 2px) var(--spacing-medium, 8px);\n border-radius: 20px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n }\n\n span[tag-close] {\n margin-left: var(--spacing-small, 4px);\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"]}
|
|
@@ -44,11 +44,13 @@ ProjectUpdateHeader.styles = [
|
|
|
44
44
|
css `
|
|
45
45
|
div[header] {
|
|
46
46
|
display: flex;
|
|
47
|
-
margin: 0px
|
|
47
|
+
margin: 0px var(--spacing-large, 12px);
|
|
48
48
|
|
|
49
49
|
h2 {
|
|
50
|
-
flex:
|
|
50
|
+
flex: 1;
|
|
51
|
+
margin-bottom: var(--spacing-medium, 8px);
|
|
51
52
|
color: #3f71a0;
|
|
53
|
+
font-size:18px;
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
|
|
@@ -56,23 +58,24 @@ ProjectUpdateHeader.styles = [
|
|
|
56
58
|
display: flex;
|
|
57
59
|
align-items: center;
|
|
58
60
|
justify-content: end;
|
|
59
|
-
flex:
|
|
61
|
+
flex: 1;
|
|
62
|
+
padding-top: var(--spacing-medium, 8px);
|
|
60
63
|
|
|
61
64
|
md-elevated-button {
|
|
62
|
-
margin:
|
|
65
|
+
margin: 0 var(--spacing-small, 4px);
|
|
63
66
|
|
|
64
|
-
--md-elevated-button-container-height:
|
|
67
|
+
--md-elevated-button-container-height: 32px;
|
|
65
68
|
--md-elevated-button-label-text-size: 16px;
|
|
66
69
|
--md-elevated-button-container-color: #0595e5;
|
|
67
70
|
|
|
68
|
-
--md-elevated-button-label-text-color:
|
|
69
|
-
--md-elevated-button-hover-label-text-color:
|
|
70
|
-
--md-elevated-button-pressed-label-text-color:
|
|
71
|
-
--md-elevated-button-focus-label-text-color:
|
|
72
|
-
--md-elevated-button-icon-color:
|
|
73
|
-
--md-elevated-button-hover-icon-color:
|
|
74
|
-
--md-elevated-button-pressed-icon-color:
|
|
75
|
-
--md-elevated-button-focus-icon-color:
|
|
71
|
+
--md-elevated-button-label-text-color: var(--md-sys-color-on-primary);
|
|
72
|
+
--md-elevated-button-hover-label-text-color: var(--md-sys-color-on-primary);
|
|
73
|
+
--md-elevated-button-pressed-label-text-color: var(--md-sys-color-on-primary);
|
|
74
|
+
--md-elevated-button-focus-label-text-color: var(--md-sys-color-on-primary);
|
|
75
|
+
--md-elevated-button-icon-color: var(--md-sys-color-on-primary);
|
|
76
|
+
--md-elevated-button-hover-icon-color: var(--md-sys-color-on-primary);
|
|
77
|
+
--md-elevated-button-pressed-icon-color: var(--md-sys-color-on-primary);
|
|
78
|
+
--md-elevated-button-focus-icon-color: var(--md-sys-color-on-primary);
|
|
76
79
|
|
|
77
80
|
&[green] {
|
|
78
81
|
--md-elevated-button-container-color: #42b382;
|
|
@@ -1 +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;;
|
|
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;;QAgD8B,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;;AA/EM,0BAAM,GAAG;IACd,qBAAqB;IACrB,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyCF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sDAAuB;AAClD;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kDAAmB;AAjD1C,mBAAmB;IADxB,aAAa,CAAC,uBAAuB,CAAC;GACjC,mBAAmB,CAiFxB","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 var(--spacing-large, 12px);\n\n h2 {\n flex: 1;\n margin-bottom: var(--spacing-medium, 8px);\n color: #3f71a0;\n font-size:18px;\n }\n }\n\n div[button-container] {\n display: flex;\n align-items: center;\n justify-content: end;\n flex: 1;\n padding-top: var(--spacing-medium, 8px); \n\n md-elevated-button {\n margin: 0 var(--spacing-small, 4px);\n\n --md-elevated-button-container-height: 32px;\n --md-elevated-button-label-text-size: 16px;\n --md-elevated-button-container-color: #0595e5;\n\n --md-elevated-button-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-hover-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-pressed-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-focus-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-icon-color: var(--md-sys-color-on-primary);\n --md-elevated-button-hover-icon-color: var(--md-sys-color-on-primary);\n --md-elevated-button-pressed-icon-color: var(--md-sys-color-on-primary);\n --md-elevated-button-focus-icon-color: var(--md-sys-color-on-primary);\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"]}
|