@dssp/project 1.0.0-alpha.7 → 1.0.0-alpha.76

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.
Files changed (149) hide show
  1. package/dist-client/index.d.ts +1 -0
  2. package/dist-client/index.js +1 -1
  3. package/dist-client/index.js.map +1 -1
  4. package/dist-client/pages/lib/chatbot-widget.d.ts +53 -0
  5. package/dist-client/pages/lib/chatbot-widget.js +631 -0
  6. package/dist-client/pages/lib/chatbot-widget.js.map +1 -0
  7. package/dist-client/pages/lib/select2-component.d.ts +1 -1
  8. package/dist-client/pages/lib/select2-component.js +35 -35
  9. package/dist-client/pages/lib/select2-component.js.map +1 -1
  10. package/dist-client/pages/project/component/pagenation.d.ts +18 -0
  11. package/dist-client/pages/project/component/pagenation.js +142 -0
  12. package/dist-client/pages/project/component/pagenation.js.map +1 -0
  13. package/dist-client/pages/project/component/project-update-header.js +26 -3
  14. package/dist-client/pages/project/component/project-update-header.js.map +1 -1
  15. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.d.ts +1 -0
  16. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js +308 -0
  17. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js.map +1 -0
  18. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.d.ts +1 -0
  19. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js +356 -0
  20. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js.map +1 -0
  21. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.d.ts +1 -0
  22. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js +681 -0
  23. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js.map +1 -0
  24. package/dist-client/pages/project/popup/checklist/task-checklist-view.d.ts +32 -0
  25. package/dist-client/pages/project/popup/checklist/task-checklist-view.js +620 -0
  26. package/dist-client/pages/project/popup/checklist/task-checklist-view.js.map +1 -0
  27. package/dist-client/pages/project/popup/popup-plan-export.js +8 -2
  28. package/dist-client/pages/project/popup/popup-plan-export.js.map +1 -1
  29. package/dist-client/pages/project/popup/{popup-schedule-upload.d.ts → popup-task-upload.d.ts} +1 -1
  30. package/dist-client/pages/project/popup/{popup-schedule-upload.js → popup-task-upload.js} +9 -9
  31. package/dist-client/pages/project/popup/popup-task-upload.js.map +1 -0
  32. package/dist-client/pages/project/project-completed-list.d.ts +5 -0
  33. package/dist-client/pages/project/project-completed-list.js +32 -3
  34. package/dist-client/pages/project/project-completed-list.js.map +1 -1
  35. package/dist-client/pages/project/project-detail.d.ts +6 -0
  36. package/dist-client/pages/project/project-detail.js +366 -159
  37. package/dist-client/pages/project/project-detail.js.map +1 -1
  38. package/dist-client/pages/project/project-list.d.ts +57 -0
  39. package/dist-client/pages/project/project-list.js +80 -9
  40. package/dist-client/pages/project/project-list.js.map +1 -1
  41. package/dist-client/pages/project/project-plan-management.js +3 -1
  42. package/dist-client/pages/project/project-plan-management.js.map +1 -1
  43. package/dist-client/pages/project/project-setting-list.d.ts +7 -0
  44. package/dist-client/pages/project/project-setting-list.js +61 -7
  45. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  46. package/dist-client/pages/project/{project-schedule-list.d.ts → project-task-list.d.ts} +2 -2
  47. package/dist-client/pages/project/{project-schedule-list.js → project-task-list.js} +11 -11
  48. package/dist-client/pages/project/project-task-list.js.map +1 -0
  49. package/dist-client/pages/project/{project-schedule.d.ts → project-task.d.ts} +17 -4
  50. package/dist-client/pages/project/project-task.js +686 -0
  51. package/dist-client/pages/project/project-task.js.map +1 -0
  52. package/dist-client/pages/project/project-update.d.ts +8 -0
  53. package/dist-client/pages/project/project-update.js +336 -33
  54. package/dist-client/pages/project/project-update.js.map +1 -1
  55. package/dist-client/pages/resource/construction-type-management.js +14 -0
  56. package/dist-client/pages/resource/construction-type-management.js.map +1 -1
  57. package/dist-client/pages/resource/resource-list-page.d.ts +1 -2
  58. package/dist-client/pages/resource/resource-list-page.js +1 -2
  59. package/dist-client/pages/resource/resource-list-page.js.map +1 -1
  60. package/dist-client/pages/task/task-list-page.d.ts +1 -2
  61. package/dist-client/pages/task/task-list-page.js +1 -2
  62. package/dist-client/pages/task/task-list-page.js.map +1 -1
  63. package/dist-client/pages/task-resource/task-resource-list-page.d.ts +1 -2
  64. package/dist-client/pages/task-resource/task-resource-list-page.js +1 -2
  65. package/dist-client/pages/task-resource/task-resource-list-page.js.map +1 -1
  66. package/dist-client/route.d.ts +1 -1
  67. package/dist-client/route.js +4 -4
  68. package/dist-client/route.js.map +1 -1
  69. package/dist-client/tsconfig.tsbuildinfo +1 -1
  70. package/dist-server/controllers/parse-excel.js.map +1 -1
  71. package/dist-server/migrations/1723861466414-seed-codes.js +1 -1
  72. package/dist-server/migrations/1723861466414-seed-codes.js.map +1 -1
  73. package/dist-server/service/construction-type/construction-type-query.d.ts +2 -2
  74. package/dist-server/service/construction-type/construction-type-query.js +5 -10
  75. package/dist-server/service/construction-type/construction-type-query.js.map +1 -1
  76. package/dist-server/service/construction-type/construction-type-type.d.ts +1 -0
  77. package/dist-server/service/construction-type/construction-type-type.js +4 -0
  78. package/dist-server/service/construction-type/construction-type-type.js.map +1 -1
  79. package/dist-server/service/construction-type/construction-type.d.ts +1 -0
  80. package/dist-server/service/construction-type/construction-type.js +5 -0
  81. package/dist-server/service/construction-type/construction-type.js.map +1 -1
  82. package/dist-server/service/index.d.ts +2 -2
  83. package/dist-server/service/index.js +5 -2
  84. package/dist-server/service/index.js.map +1 -1
  85. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.d.ts +2 -2
  86. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js +5 -10
  87. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js.map +1 -1
  88. package/dist-server/service/manager/manager-query.d.ts +1 -1
  89. package/dist-server/service/manager/manager-query.js +2 -6
  90. package/dist-server/service/manager/manager-query.js.map +1 -1
  91. package/dist-server/service/project/issue-project-code.d.ts +7 -0
  92. package/dist-server/service/project/issue-project-code.js +27 -0
  93. package/dist-server/service/project/issue-project-code.js.map +1 -0
  94. package/dist-server/service/project/project-mutation.d.ts +2 -0
  95. package/dist-server/service/project/project-mutation.js +96 -9
  96. package/dist-server/service/project/project-mutation.js.map +1 -1
  97. package/dist-server/service/project/project-query.d.ts +13 -2
  98. package/dist-server/service/project/project-query.js +138 -13
  99. package/dist-server/service/project/project-query.js.map +1 -1
  100. package/dist-server/service/project/project-type.d.ts +8 -1
  101. package/dist-server/service/project/project-type.js +27 -1
  102. package/dist-server/service/project/project-type.js.map +1 -1
  103. package/dist-server/service/project/project.d.ts +22 -0
  104. package/dist-server/service/project/project.js +80 -2
  105. package/dist-server/service/project/project.js.map +1 -1
  106. package/dist-server/service/resource/resource-mutation.js +5 -6
  107. package/dist-server/service/resource/resource-mutation.js.map +1 -1
  108. package/dist-server/service/resource/resource-query.d.ts +2 -2
  109. package/dist-server/service/resource/resource-query.js +5 -10
  110. package/dist-server/service/resource/resource-query.js.map +1 -1
  111. package/dist-server/service/task/task-query.d.ts +2 -0
  112. package/dist-server/service/task/task-query.js +11 -0
  113. package/dist-server/service/task/task-query.js.map +1 -1
  114. package/dist-server/service/task/task.d.ts +2 -0
  115. package/dist-server/service/task/task.js +6 -0
  116. package/dist-server/service/task/task.js.map +1 -1
  117. package/dist-server/service/task-checklist-binding/index.d.ts +5 -0
  118. package/dist-server/service/task-checklist-binding/index.js +9 -0
  119. package/dist-server/service/task-checklist-binding/index.js.map +1 -0
  120. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.d.ts +5 -0
  121. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js +186 -0
  122. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js.map +1 -0
  123. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.d.ts +8 -0
  124. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js +61 -0
  125. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js.map +1 -0
  126. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.d.ts +15 -0
  127. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js +57 -0
  128. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js.map +1 -0
  129. package/dist-server/service/task-checklist-binding/task-checklist-binding.d.ts +22 -0
  130. package/dist-server/service/task-checklist-binding/task-checklist-binding.js +106 -0
  131. package/dist-server/service/task-checklist-binding/task-checklist-binding.js.map +1 -0
  132. package/dist-server/service/task-resource/task-resource-query.d.ts +2 -2
  133. package/dist-server/service/task-resource/task-resource-query.js +4 -9
  134. package/dist-server/service/task-resource/task-resource-query.js.map +1 -1
  135. package/dist-server/service/worker-type/worker-type-query.d.ts +2 -2
  136. package/dist-server/service/worker-type/worker-type-query.js +5 -10
  137. package/dist-server/service/worker-type/worker-type-query.js.map +1 -1
  138. package/dist-server/tsconfig.tsbuildinfo +1 -1
  139. package/package.json +15 -13
  140. package/things-factory.config.js +3 -3
  141. package/translations/en.json +10 -9
  142. package/translations/ja.json +15 -1
  143. package/translations/ko.json +3 -0
  144. package/translations/ms.json +15 -1
  145. package/translations/zh.json +15 -1
  146. package/dist-client/pages/project/popup/popup-schedule-upload.js.map +0 -1
  147. package/dist-client/pages/project/project-schedule-list.js.map +0 -1
  148. package/dist-client/pages/project/project-schedule.js +0 -407
  149. package/dist-client/pages/project/project-schedule.js.map +0 -1
@@ -9,6 +9,7 @@ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
9
9
  import { client } from '@operato/graphql';
10
10
  import { notify } from '@operato/layout';
11
11
  import gql from 'graphql-tag';
12
+ import { SITE_TYPE_DISPLAY } from './project-list';
12
13
  import '../lib/select2-component';
13
14
  import './component/project-update-header';
14
15
  let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
@@ -16,6 +17,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
16
17
  super(...arguments);
17
18
  this.defaultProject = {
18
19
  name: '',
20
+ documentNaming: '',
19
21
  buildingComplex: {
20
22
  address: '',
21
23
  area: 0,
@@ -36,12 +38,13 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
36
38
  this.overallSupervisoryList = [];
37
39
  }
38
40
  get context() {
41
+ var _a, _b;
39
42
  return {
40
- title: '프로젝트 정보 관리'
43
+ title: ((_a = this.project) === null || _a === void 0 ? void 0 : _a.name) ? `프로젝트 정보 관리 - ${(_b = this.project) === null || _b === void 0 ? void 0 : _b.name}` : '프로젝트 정보 관리'
41
44
  };
42
45
  }
43
46
  render() {
44
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31;
47
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50;
45
48
  return html `
46
49
  <project-update-header .projectId=${this.project.id || ''} title="프로젝트 정보 관리" @custom-click=${this._saveProject}>
47
50
  </project-update-header>
@@ -61,6 +64,25 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
61
64
  ></md-outlined-text-field>
62
65
  </span>
63
66
  </div>
67
+ <div row>
68
+ <span>프로젝트 문서 네이밍</span>
69
+ <span>
70
+ <md-outlined-text-field
71
+ type="text"
72
+ name="documentNaming"
73
+ project
74
+ .value=${this.project.documentNaming || ''}
75
+ @input=${this._onInputChange}
76
+ placeholder="프로젝트 문서 네이밍"
77
+ ></md-outlined-text-field>
78
+ </span>
79
+ </div>
80
+ <div row>
81
+ <span></span>
82
+ <span>
83
+ <div document-preview>📄 문서 생성 예시: <br />${this.project.documentNaming} 검측 제01-00001호</div>
84
+ </span>
85
+ </div>
64
86
  <div row>
65
87
  <span>프로젝트 주소</span>
66
88
  <span>
@@ -100,7 +122,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
100
122
  </span>
101
123
  </div>
102
124
  <div row>
103
- <span>면적</span>
125
+ <span>연 면적</span>
104
126
  <span align-end
105
127
  ><md-outlined-text-field
106
128
  type="text"
@@ -109,10 +131,56 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
109
131
  building-complex
110
132
  .value=${((_l = (_k = (_j = this.project) === null || _j === void 0 ? void 0 : _j.buildingComplex) === null || _k === void 0 ? void 0 : _k.area) === null || _l === void 0 ? void 0 : _l.toString()) || ''}
111
133
  @input=${this._onInputChange}
134
+ suffix-text="㎡"
112
135
  ></md-outlined-text-field>
113
- ㎡</span
114
- >
136
+ </span>
137
+ </div>
138
+
139
+ <div row>
140
+ <span>건폐율</span>
141
+ <span align-end>
142
+ <md-outlined-text-field
143
+ type="text"
144
+ name="coverageRatio"
145
+ numeric
146
+ building-complex
147
+ .value=${((_p = (_o = (_m = this.project) === null || _m === void 0 ? void 0 : _m.buildingComplex) === null || _o === void 0 ? void 0 : _o.coverageRatio) === null || _p === void 0 ? void 0 : _p.toString()) || ''}
148
+ @input=${this._onInputChange}
149
+ suffix-text="%"
150
+ ></md-outlined-text-field>
151
+ </span>
152
+ </div>
153
+ <div row>
154
+ <span>용적률</span>
155
+ <span align-end>
156
+ <md-outlined-text-field
157
+ type="text"
158
+ name="floorAreaRatio"
159
+ numeric
160
+ building-complex
161
+ .value=${((_s = (_r = (_q = this.project) === null || _q === void 0 ? void 0 : _q.buildingComplex) === null || _r === void 0 ? void 0 : _r.floorAreaRatio) === null || _s === void 0 ? void 0 : _s.toString()) || ''}
162
+ @input=${this._onInputChange}
163
+ suffix-text="%"
164
+ ></md-outlined-text-field>
165
+ </span>
166
+ </div>
167
+
168
+ <div row>
169
+ <span>현장유형</span>
170
+ <span
171
+ ><md-filled-select name="siteType" building-complex @change=${this._onInputChange}>
172
+ ${Object.entries(SITE_TYPE_DISPLAY).map(([key, display]) => {
173
+ var _a, _b;
174
+ return html `
175
+ <md-select-option ?selected=${((_b = (_a = this.project) === null || _a === void 0 ? void 0 : _a.buildingComplex) === null || _b === void 0 ? void 0 : _b.siteType) === key} .value=${key}>
176
+ <div slot="headline">${display}</div>
177
+ </md-select-option>
178
+ `;
179
+ })}
180
+ </md-filled-select>
181
+ </span>
115
182
  </div>
183
+
116
184
  <div row>
117
185
  <span>착공일정 ~ 준공일정</span>
118
186
  <span
@@ -142,7 +210,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
142
210
  type="text"
143
211
  name="clientCompany"
144
212
  building-complex
145
- .value=${((_o = (_m = this.project) === null || _m === void 0 ? void 0 : _m.buildingComplex) === null || _o === void 0 ? void 0 : _o.clientCompany) || ''}
213
+ .value=${((_u = (_t = this.project) === null || _t === void 0 ? void 0 : _t.buildingComplex) === null || _u === void 0 ? void 0 : _u.clientCompany) || ''}
146
214
  @input=${this._onInputChange}
147
215
  ></md-outlined-text-field>
148
216
  </span>
@@ -154,7 +222,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
154
222
  type="text"
155
223
  name="constructionCompany"
156
224
  building-complex
157
- .value=${((_q = (_p = this.project) === null || _p === void 0 ? void 0 : _p.buildingComplex) === null || _q === void 0 ? void 0 : _q.constructionCompany) || ''}
225
+ .value=${((_w = (_v = this.project) === null || _v === void 0 ? void 0 : _v.buildingComplex) === null || _w === void 0 ? void 0 : _w.constructionCompany) || ''}
158
226
  @input=${this._onInputChange}
159
227
  ></md-outlined-text-field>
160
228
  </span>
@@ -166,7 +234,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
166
234
  type="text"
167
235
  name="designCompany"
168
236
  building-complex
169
- .value=${((_s = (_r = this.project) === null || _r === void 0 ? void 0 : _r.buildingComplex) === null || _s === void 0 ? void 0 : _s.designCompany) || ''}
237
+ .value=${((_y = (_x = this.project) === null || _x === void 0 ? void 0 : _x.buildingComplex) === null || _y === void 0 ? void 0 : _y.designCompany) || ''}
170
238
  @input=${this._onInputChange}
171
239
  ></md-outlined-text-field>
172
240
  </span>
@@ -178,7 +246,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
178
246
  type="text"
179
247
  name="supervisoryCompany"
180
248
  building-complex
181
- .value=${((_u = (_t = this.project) === null || _t === void 0 ? void 0 : _t.buildingComplex) === null || _u === void 0 ? void 0 : _u.supervisoryCompany) || ''}
249
+ .value=${((_0 = (_z = this.project) === null || _z === void 0 ? void 0 : _z.buildingComplex) === null || _0 === void 0 ? void 0 : _0.supervisoryCompany) || ''}
182
250
  @input=${this._onInputChange}
183
251
  ></md-outlined-text-field>
184
252
  </span>
@@ -190,17 +258,30 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
190
258
  type="text"
191
259
  name="constructionType"
192
260
  building-complex
193
- .value=${((_w = (_v = this.project) === null || _v === void 0 ? void 0 : _v.buildingComplex) === null || _w === void 0 ? void 0 : _w.constructionType) || ''}
261
+ .value=${((_2 = (_1 = this.project) === null || _1 === void 0 ? void 0 : _1.buildingComplex) === null || _2 === void 0 ? void 0 : _2.constructionType) || ''}
194
262
  @input=${this._onInputChange}
195
263
  ></md-outlined-text-field>
196
264
  </span>
197
265
  </div>
266
+ <div row>
267
+ <span>구조 유형</span>
268
+ <span
269
+ ><md-outlined-text-field
270
+ type="text"
271
+ name="structureType"
272
+ building-complex
273
+ .value=${((_4 = (_3 = this.project) === null || _3 === void 0 ? void 0 : _3.buildingComplex) === null || _4 === void 0 ? void 0 : _4.structureType) || ''}
274
+ @input=${this._onInputChange}
275
+ ></md-outlined-text-field>
276
+ </span>
277
+ </div>
278
+
198
279
  <div row>
199
280
  <span>대표사진 업로드</span>
200
281
  <span>
201
282
  <ox-input-image
202
283
  name="mainPhoto"
203
- value=${((_y = (_x = this.project) === null || _x === void 0 ? void 0 : _x.mainPhoto) === null || _y === void 0 ? void 0 : _y.fullpath) || ''}
284
+ value=${((_6 = (_5 = this.project) === null || _5 === void 0 ? void 0 : _5.mainPhoto) === null || _6 === void 0 ? void 0 : _6.fullpath) || ''}
204
285
  @change=${this.onCreateAttachment.bind(this)}
205
286
  ></ox-input-image>
206
287
  </span>
@@ -212,7 +293,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
212
293
  name="drawing"
213
294
  label=" "
214
295
  description="IFC 업로드"
215
- .value=${((_0 = (_z = this.project) === null || _z === void 0 ? void 0 : _z.buildingComplex) === null || _0 === void 0 ? void 0 : _0.drawing) || ''}
296
+ .value=${((_8 = (_7 = this.project) === null || _7 === void 0 ? void 0 : _7.buildingComplex) === null || _8 === void 0 ? void 0 : _8.drawing) || ''}
216
297
  @change=${this.onCreateAttachment.bind(this)}
217
298
  ></ox-input-file>
218
299
  </span>
@@ -225,8 +306,23 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
225
306
  name="constructionCost"
226
307
  numeric
227
308
  building-complex
228
- .value=${((_3 = (_2 = (_1 = this.project) === null || _1 === void 0 ? void 0 : _1.buildingComplex) === null || _2 === void 0 ? void 0 : _2.constructionCost) === null || _3 === void 0 ? void 0 : _3.toString()) || ''}
309
+ .value=${((_11 = (_10 = (_9 = this.project) === null || _9 === void 0 ? void 0 : _9.buildingComplex) === null || _10 === void 0 ? void 0 : _10.constructionCost) === null || _11 === void 0 ? void 0 : _11.toString()) || ''}
310
+ @input=${this._onInputChange}
311
+ suffix-text="억원"
312
+ ></md-outlined-text-field>
313
+ </span>
314
+ </div>
315
+ <div row>
316
+ <span>투입 인력</span>
317
+ <span
318
+ ><md-outlined-text-field
319
+ type="text"
320
+ name="workerCount"
321
+ numeric
322
+ building-complex
323
+ .value=${((_14 = (_13 = (_12 = this.project) === null || _12 === void 0 ? void 0 : _12.buildingComplex) === null || _13 === void 0 ? void 0 : _13.workerCount) === null || _14 === void 0 ? void 0 : _14.toString()) || ''}
229
324
  @input=${this._onInputChange}
325
+ suffix-text="명"
230
326
  ></md-outlined-text-field>
231
327
  </span>
232
328
  </div>
@@ -237,7 +333,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
237
333
  type="textarea"
238
334
  name="etc"
239
335
  building-complex
240
- .value=${((_5 = (_4 = this.project) === null || _4 === void 0 ? void 0 : _4.buildingComplex) === null || _5 === void 0 ? void 0 : _5.etc) || ''}
336
+ .value=${((_16 = (_15 = this.project) === null || _15 === void 0 ? void 0 : _15.buildingComplex) === null || _16 === void 0 ? void 0 : _16.etc) || ''}
241
337
  @input=${this._onInputChange}
242
338
  ></md-outlined-text-field>
243
339
  </span>
@@ -249,7 +345,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
249
345
  placeholder="총괄 시공 관리자 리스트"
250
346
  name="overallConstructorEmails"
251
347
  .options=${this.overallConstructorList}
252
- .selectedValues=${((_7 = (_6 = this.project) === null || _6 === void 0 ? void 0 : _6.buildingComplex) === null || _7 === void 0 ? void 0 : _7.overallConstructorEmails) || []}
348
+ .selectedValues=${((_18 = (_17 = this.project) === null || _17 === void 0 ? void 0 : _17.buildingComplex) === null || _18 === void 0 ? void 0 : _18.overallConstructorEmails) || []}
253
349
  @selection-changed=${this._handleSelectionChange}
254
350
  ></select2-component>
255
351
  </span>
@@ -261,7 +357,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
261
357
  placeholder="공종별 시공 관리자 리스트"
262
358
  name="taskConstructorEmails"
263
359
  .options=${this.taskConstructorList}
264
- .selectedValues=${((_9 = (_8 = this.project) === null || _8 === void 0 ? void 0 : _8.buildingComplex) === null || _9 === void 0 ? void 0 : _9.taskConstructorEmails) || []}
360
+ .selectedValues=${((_20 = (_19 = this.project) === null || _19 === void 0 ? void 0 : _19.buildingComplex) === null || _20 === void 0 ? void 0 : _20.taskConstructorEmails) || []}
265
361
  @selection-changed=${this._handleSelectionChange}
266
362
  ></select2-component>
267
363
  </span>
@@ -273,7 +369,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
273
369
  placeholder="총괄 감리 책임자 리스트"
274
370
  name="overallSupervisoryEmails"
275
371
  .options=${this.overallSupervisoryList}
276
- .selectedValues=${((_11 = (_10 = this.project) === null || _10 === void 0 ? void 0 : _10.buildingComplex) === null || _11 === void 0 ? void 0 : _11.overallSupervisoryEmails) || []}
372
+ .selectedValues=${((_22 = (_21 = this.project) === null || _21 === void 0 ? void 0 : _21.buildingComplex) === null || _22 === void 0 ? void 0 : _22.overallSupervisoryEmails) || []}
277
373
  @selection-changed=${this._handleSelectionChange}
278
374
  ></select2-component>
279
375
  </span>
@@ -285,7 +381,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
285
381
  placeholder="공종별 감리 책임자 리스트"
286
382
  name="taskSupervisoryEmails"
287
383
  .options=${this.taskSupervisoryList}
288
- .selectedValues=${((_13 = (_12 = this.project) === null || _12 === void 0 ? void 0 : _12.buildingComplex) === null || _13 === void 0 ? void 0 : _13.taskSupervisoryEmails) || []}
384
+ .selectedValues=${((_24 = (_23 = this.project) === null || _23 === void 0 ? void 0 : _23.buildingComplex) === null || _24 === void 0 ? void 0 : _24.taskSupervisoryEmails) || []}
289
385
  @selection-changed=${this._handleSelectionChange}
290
386
  ></select2-component
291
387
  ></span>
@@ -293,6 +389,44 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
293
389
  </div>
294
390
 
295
391
  <div detail-info>
392
+ <div>
393
+ <h3>테넌트 관리</h3>
394
+ <div row>
395
+ <span>관리번호</span>
396
+ <span>
397
+ ${this.project.tenantDomain
398
+ ? html `<a href=${`/project/${this.project.code}/`} target="_blank" title="테넌트로 이동"
399
+ >${this.project.code} <md-icon style="font-size:14px;vertical-align:middle">open_in_new</md-icon></a
400
+ >`
401
+ : this.project.code
402
+ ? html `${this.project.code}`
403
+ : html `<span style="color:#999">미발번 (승격 시 자동 부여)</span>`}
404
+ </span>
405
+ </div>
406
+ <div row>
407
+ <span>현재 상태</span>
408
+ <span>
409
+ ${this.project.tenantDomain
410
+ ? html `<b style="color:#42b382">활성 테넌트</b>`
411
+ : this.project.code
412
+ ? html `<b style="color:#aa6633">강등됨</b> (재승격 시 ${this.project.code} 재사용)`
413
+ : html `<b style="color:#999">미승격</b>`}
414
+ </span>
415
+ </div>
416
+ <div row>
417
+ <span></span>
418
+ <span tenant-actions>
419
+ ${this.project.tenantDomain
420
+ ? html `<md-elevated-button @click=${this._demoteTenant} ?disabled=${!this.project.id}>
421
+ <md-icon slot="icon">link_off</md-icon>테넌트 강등
422
+ </md-elevated-button>`
423
+ : html `<md-elevated-button green @click=${this._promoteTenant} ?disabled=${!this.project.id}>
424
+ <md-icon slot="icon">verified</md-icon>테넌트 승격
425
+ </md-elevated-button>`}
426
+ </span>
427
+ </div>
428
+ </div>
429
+
296
430
  <div>
297
431
  <h3>건설구분 상세 정보</h3>
298
432
  <div row>
@@ -303,7 +437,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
303
437
  numeric
304
438
  building-complex
305
439
  name="householdCount"
306
- .value=${((_16 = (_15 = (_14 = this.project) === null || _14 === void 0 ? void 0 : _14.buildingComplex) === null || _15 === void 0 ? void 0 : _15.householdCount) === null || _16 === void 0 ? void 0 : _16.toString()) || ''}
440
+ .value=${((_27 = (_26 = (_25 = this.project) === null || _25 === void 0 ? void 0 : _25.buildingComplex) === null || _26 === void 0 ? void 0 : _26.householdCount) === null || _27 === void 0 ? void 0 : _27.toString()) || ''}
307
441
  @input=${this._onInputChange}
308
442
  ></md-outlined-text-field>
309
443
  </span>
@@ -316,7 +450,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
316
450
  numeric
317
451
  building-complex
318
452
  name="buildingCount"
319
- value=${((_19 = (_18 = (_17 = this.project) === null || _17 === void 0 ? void 0 : _17.buildingComplex) === null || _18 === void 0 ? void 0 : _18.buildingCount) === null || _19 === void 0 ? void 0 : _19.toString()) || ''}
453
+ value=${((_30 = (_29 = (_28 = this.project) === null || _28 === void 0 ? void 0 : _28.buildingComplex) === null || _29 === void 0 ? void 0 : _29.buildingCount) === null || _30 === void 0 ? void 0 : _30.toString()) || ''}
320
454
  @input=${this._onInputChange}
321
455
  ></md-outlined-text-field>
322
456
  <md-outlined-button @click=${this._setBuilding}>적용</md-outlined-button>
@@ -325,7 +459,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
325
459
  <hr />
326
460
  <div warn>* 동/층의 정보를 수정하면 기존의 동/층 정보는 모두 제거됩니다.</div>
327
461
  <div separate-container>
328
- ${(_22 = (_21 = (_20 = this.project) === null || _20 === void 0 ? void 0 : _20.buildingComplex) === null || _21 === void 0 ? void 0 : _21.buildings) === null || _22 === void 0 ? void 0 : _22.map((building, idx) => {
462
+ ${(_33 = (_32 = (_31 = this.project) === null || _31 === void 0 ? void 0 : _31.buildingComplex) === null || _32 === void 0 ? void 0 : _32.buildings) === null || _33 === void 0 ? void 0 : _33.map((building, idx) => {
329
463
  var _a, _b;
330
464
  return html `
331
465
  <div>
@@ -393,7 +527,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
393
527
  numeric
394
528
  project
395
529
  name="totalProgress"
396
- .value=${((_23 = this.project.totalProgress) === null || _23 === void 0 ? void 0 : _23.toString()) || ''}
530
+ .value=${((_34 = this.project.totalProgress) === null || _34 === void 0 ? void 0 : _34.toString()) || ''}
397
531
  @input=${this._onInputChange}
398
532
  suffix-text="%"
399
533
  ></md-outlined-text-field>
@@ -407,7 +541,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
407
541
  numeric
408
542
  project
409
543
  name="inspPassRate"
410
- .value=${((_24 = this.project.inspPassRate) === null || _24 === void 0 ? void 0 : _24.toString()) || ''}
544
+ .value=${((_35 = this.project.inspPassRate) === null || _35 === void 0 ? void 0 : _35.toString()) || ''}
411
545
  @input=${this._onInputChange}
412
546
  suffix-text="%"
413
547
  ></md-outlined-text-field>
@@ -423,7 +557,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
423
557
  numeric
424
558
  project
425
559
  name="weeklyProgress"
426
- .value=${((_25 = this.project.weeklyProgress) === null || _25 === void 0 ? void 0 : _25.toString()) || ''}
560
+ .value=${((_36 = this.project.weeklyProgress) === null || _36 === void 0 ? void 0 : _36.toString()) || ''}
427
561
  @input=${this._onInputChange}
428
562
  suffix-text="%"
429
563
  ></md-outlined-text-field>
@@ -437,7 +571,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
437
571
  numeric
438
572
  project
439
573
  name="robotProgressRate"
440
- .value=${((_26 = this.project.robotProgressRate) === null || _26 === void 0 ? void 0 : _26.toString()) || ''}
574
+ .value=${((_37 = this.project.robotProgressRate) === null || _37 === void 0 ? void 0 : _37.toString()) || ''}
441
575
  @input=${this._onInputChange}
442
576
  suffix-text="%"
443
577
  ></md-outlined-text-field>
@@ -453,7 +587,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
453
587
  numeric
454
588
  project
455
589
  name="kpi"
456
- .value=${((_27 = this.project.kpi) === null || _27 === void 0 ? void 0 : _27.toString()) || ''}
590
+ .value=${((_38 = this.project.kpi) === null || _38 === void 0 ? void 0 : _38.toString()) || ''}
457
591
  @input=${this._onInputChange}
458
592
  suffix-text="%"
459
593
  ></md-outlined-text-field>
@@ -467,7 +601,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
467
601
  numeric
468
602
  project
469
603
  name="structuralSafetyRate"
470
- .value=${((_28 = this.project.structuralSafetyRate) === null || _28 === void 0 ? void 0 : _28.toString()) || ''}
604
+ .value=${((_39 = this.project.structuralSafetyRate) === null || _39 === void 0 ? void 0 : _39.toString()) || ''}
471
605
  @input=${this._onInputChange}
472
606
  suffix-text="%"
473
607
  ></md-outlined-text-field>
@@ -484,11 +618,60 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
484
618
  numeric
485
619
  project
486
620
  name="robotCount"
487
- .value=${((_29 = this.project.robotCount) === null || _29 === void 0 ? void 0 : _29.toString()) || ''}
621
+ .value=${((_40 = this.project.robotCount) === null || _40 === void 0 ? void 0 : _40.toString()) || ''}
622
+ @input=${this._onInputChange}
623
+ ></md-outlined-text-field>
624
+ </span>
625
+ </div>
626
+ </div>
627
+
628
+ <hr />
629
+
630
+ <div row separate-container>
631
+ <div>
632
+ <span>설계 변경 횟수</span>
633
+ <span
634
+ ><md-outlined-text-field
635
+ type="text"
636
+ numeric
637
+ building-complex
638
+ name="designChangeCount"
639
+ .value=${((_42 = (_41 = this.project.buildingComplex) === null || _41 === void 0 ? void 0 : _41.designChangeCount) === null || _42 === void 0 ? void 0 : _42.toString()) || ''}
488
640
  @input=${this._onInputChange}
489
641
  ></md-outlined-text-field>
490
642
  </span>
491
643
  </div>
644
+ <div>
645
+ <span>계획 공정률</span>
646
+ <span
647
+ ><md-outlined-text-field
648
+ type="text"
649
+ numeric
650
+ building-complex
651
+ name="plannedProgress"
652
+ .value=${((_44 = (_43 = this.project.buildingComplex) === null || _43 === void 0 ? void 0 : _43.plannedProgress) === null || _44 === void 0 ? void 0 : _44.toString()) || ''}
653
+ @input=${this._onInputChange}
654
+ suffix-text="%"
655
+ ></md-outlined-text-field>
656
+ </span>
657
+ </div>
658
+ </div>
659
+
660
+ <div row separate-container>
661
+ <div>
662
+ <span>실제 공정률</span>
663
+ <span
664
+ ><md-outlined-text-field
665
+ type="text"
666
+ numeric
667
+ building-complex
668
+ name="actualProgress"
669
+ .value=${((_46 = (_45 = this.project.buildingComplex) === null || _45 === void 0 ? void 0 : _45.actualProgress) === null || _46 === void 0 ? void 0 : _46.toString()) || ''}
670
+ @input=${this._onInputChange}
671
+ suffix-text="%"
672
+ ></md-outlined-text-field>
673
+ </span>
674
+ </div>
492
675
  </div>
493
676
  </div>
494
677
 
@@ -501,7 +684,23 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
501
684
  type="textarea"
502
685
  name="notice"
503
686
  building-complex
504
- .value=${((_31 = (_30 = this.project) === null || _30 === void 0 ? void 0 : _30.buildingComplex) === null || _31 === void 0 ? void 0 : _31.notice) || ''}
687
+ .value=${((_48 = (_47 = this.project) === null || _47 === void 0 ? void 0 : _47.buildingComplex) === null || _48 === void 0 ? void 0 : _48.notice) || ''}
688
+ @input=${this._onInputChange}
689
+ ></md-outlined-text-field>
690
+ </span>
691
+ </div>
692
+ </div>
693
+
694
+ <div>
695
+ <h3>Virtual Tour Link</h3>
696
+ <div>
697
+ <span></span>
698
+ <span>
699
+ <md-outlined-text-field
700
+ type="text"
701
+ name="virtualTourLink"
702
+ building-complex
703
+ .value=${((_50 = (_49 = this.project) === null || _49 === void 0 ? void 0 : _49.buildingComplex) === null || _50 === void 0 ? void 0 : _50.virtualTourLink) || ''}
505
704
  @input=${this._onInputChange}
506
705
  ></md-outlined-text-field>
507
706
  </span>
@@ -513,10 +712,30 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
513
712
  }
514
713
  async pageInitialized(lifecycle) { }
515
714
  async pageUpdated(changes, lifecycle) {
516
- if (this.active) {
517
- this.projectId = lifecycle.resourceId || '';
518
- await this.initProject(this.projectId);
715
+ if (!this.active)
716
+ return;
717
+ this.projectId = await this._resolveProjectId(lifecycle.resourceId || '');
718
+ await this.initProject(this.projectId);
719
+ }
720
+ /**
721
+ * resourceId 를 정상 Project.id (UUID) 로 변환한다.
722
+ * - UUID 형식이면 그대로 사용
723
+ * - 그 외 (code 또는 비어있음) 에는 현재 테넌트 컨텍스트의 프로젝트 조회
724
+ */
725
+ async _resolveProjectId(resourceId) {
726
+ var _a, _b;
727
+ if (resourceId && resourceId.length === 36)
728
+ return resourceId;
729
+ const response = await client.query({
730
+ query: gql `
731
+ query CurrentProject {
732
+ currentProject {
733
+ id
734
+ }
519
735
  }
736
+ `
737
+ });
738
+ return ((_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.currentProject) === null || _b === void 0 ? void 0 : _b.id) || '';
520
739
  }
521
740
  async initProject(projectId = '') {
522
741
  var _a, _b, _c;
@@ -525,7 +744,14 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
525
744
  query Project($id: String!, $filters: [Filter!]) {
526
745
  project(id: $id) {
527
746
  id
747
+ code
748
+ tenantDomain {
749
+ id
750
+ subdomain
751
+ name
752
+ }
528
753
  name
754
+ documentNaming
529
755
  startDate
530
756
  endDate
531
757
  mainPhoto {
@@ -541,9 +767,17 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
541
767
  buildingComplex {
542
768
  id
543
769
  address
770
+ siteType
544
771
  latitude
545
772
  longitude
546
773
  area
774
+ coverageRatio
775
+ floorAreaRatio
776
+ structureType
777
+ workerCount
778
+ designChangeCount
779
+ plannedProgress
780
+ actualProgress
547
781
  clientCompany
548
782
  constructionCompany
549
783
  supervisoryCompany
@@ -562,6 +796,7 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
562
796
  taskConstructorEmails
563
797
  overallSupervisoryEmails
564
798
  taskSupervisoryEmails
799
+ virtualTourLink
565
800
  buildings {
566
801
  id
567
802
  name
@@ -603,12 +838,13 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
603
838
  ]
604
839
  }
605
840
  });
606
- this.project = (_a = response.data) === null || _a === void 0 ? void 0 : _a.project;
841
+ this.project = ((_a = response.data) === null || _a === void 0 ? void 0 : _a.project) || Object.assign({}, this.defaultProject);
607
842
  const items = ((_c = (_b = response.data) === null || _b === void 0 ? void 0 : _b.employees) === null || _c === void 0 ? void 0 : _c.items) || [];
608
843
  this.overallConstructorList = this._filterUserByPermission(items, 'OVERALL_CONSTRUCTOR');
609
844
  this.taskConstructorList = this._filterUserByPermission(items, 'TASK_CONSTRUCTOR');
610
845
  this.overallSupervisoryList = this._filterUserByPermission(items, 'OVERALL_SUPERVISORY');
611
846
  this.taskSupervisoryList = this._filterUserByPermission(items, 'TASK_SUPERVISORY');
847
+ this.updateContext();
612
848
  }
613
849
  _filterUserByPermission(userList, permission) {
614
850
  return userList
@@ -619,6 +855,9 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
619
855
  // 첨부 파일 필드 제거 (첨부 파일은 {filename}Upload 로 전송)
620
856
  delete this.project.mainPhoto;
621
857
  delete this.project.buildingComplex.drawing;
858
+ // ProjectPatch 입력 타입에 없는 표시 전용 필드 제거 (테넌트 승격 UI 표시용)
859
+ delete this.project.code;
860
+ delete this.project.tenantDomain;
622
861
  const response = await client.mutate({
623
862
  mutation: gql `
624
863
  mutation UpdateProject($project: ProjectPatch!) {
@@ -638,6 +877,47 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
638
877
  notify({ message: '저장에 성공하였습니다.' });
639
878
  }
640
879
  }
880
+ async _promoteTenant() {
881
+ if (!this.project.id)
882
+ return;
883
+ if (!confirm('이 프로젝트를 테넌트로 승격하시겠습니까?\n승격 시 관리번호(YYYY-NNNNN)가 자동 발번되며 변경할 수 없습니다.')) {
884
+ return;
885
+ }
886
+ const response = await client.mutate({
887
+ mutation: gql `
888
+ mutation PromoteProjectToTenant($projectId: String!) {
889
+ promoteProjectToTenant(projectId: $projectId) {
890
+ id
891
+ code
892
+ }
893
+ }
894
+ `,
895
+ variables: { projectId: this.project.id }
896
+ });
897
+ if (!response.errors) {
898
+ notify({ message: `테넌트로 승격되었습니다. 관리번호: ${response.data.promoteProjectToTenant.code}` });
899
+ await this.initProject(this.projectId);
900
+ }
901
+ }
902
+ async _demoteTenant() {
903
+ if (!this.project.id)
904
+ return;
905
+ if (!confirm('이 프로젝트의 테넌트를 강등하시겠습니까?\n관리번호는 보존되며 재승격 시 같은 번호가 재사용됩니다.')) {
906
+ return;
907
+ }
908
+ const response = await client.mutate({
909
+ mutation: gql `
910
+ mutation DemoteProjectTenant($projectId: String!) {
911
+ demoteProjectTenant(projectId: $projectId)
912
+ }
913
+ `,
914
+ variables: { projectId: this.project.id }
915
+ });
916
+ if (!response.errors) {
917
+ notify({ message: '테넌트가 강등되었습니다.' });
918
+ await this.initProject(this.projectId);
919
+ }
920
+ }
641
921
  // 동 적용 버튼을 누르면 입력한 수 만큼 해당 단지에 동 데이터 생성
642
922
  _setBuilding() {
643
923
  var _a, _b, _c, _d, _e;
@@ -670,6 +950,10 @@ let ProjectUpdate = class ProjectUpdate extends ScopedElementsMixin(PageView) {
670
950
  }
671
951
  if (target.hasAttribute('project')) {
672
952
  this.project[target.name] = inputVal;
953
+ // documentNaming 필드가 변경되면 실시간으로 미리보기 업데이트
954
+ if (target.name === 'documentNaming') {
955
+ this.requestUpdate();
956
+ }
673
957
  }
674
958
  else if (target.hasAttribute('building-complex')) {
675
959
  this.project.buildingComplex[target.name] = inputVal;
@@ -737,6 +1021,13 @@ ProjectUpdate.styles = [
737
1021
  select2-component {
738
1022
  width: 100%;
739
1023
  }
1024
+ md-filled-select {
1025
+ width: 100%;
1026
+ --md-filled-select-text-field-container-color: transparent;
1027
+ --md-filled-select-text-field-active-indicator-color: #999;
1028
+ --md-filled-select-text-field-input-text-size: 14px;
1029
+ --md-filled-select-text-field-input-text-line-height: 6px;
1030
+ }
740
1031
  input[type='date'] {
741
1032
  border: 1px solid rgba(51, 51, 51, 0.2);
742
1033
  padding: var(--spacing-small, 4px) var(--spacing-medium, 8px);
@@ -808,6 +1099,18 @@ ProjectUpdate.styles = [
808
1099
  flex: 0.55;
809
1100
  }
810
1101
 
1102
+ div[document-preview] {
1103
+ width: 100%;
1104
+ font-size: 12px;
1105
+ color: #2e79be;
1106
+ font-weight: 500;
1107
+ background-color: #f8f9fa;
1108
+ padding: 8px 12px;
1109
+ border-radius: 4px;
1110
+ border-left: 3px solid #2e79be;
1111
+ margin-top: 4px;
1112
+ }
1113
+
811
1114
  div[detail-info] {
812
1115
  flex: 0.45;
813
1116
  padding: 0px;