@dssp/supervision 1.0.1 → 1.0.6

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 (70) hide show
  1. package/dist-client/pages/action-plan/action-plan-list-page.d.ts +6 -3
  2. package/dist-client/pages/action-plan/action-plan-list-page.js +26 -16
  3. package/dist-client/pages/action-plan/action-plan-list-page.js.map +1 -1
  4. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.d.ts +3 -0
  5. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js +17 -5
  6. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js.map +1 -1
  7. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement_old_ai.js +1 -1
  8. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement_old_ai.js.map +1 -1
  9. package/dist-client/pages/building-inspection/building-inspection-detail-camera.d.ts +3 -0
  10. package/dist-client/pages/building-inspection/building-inspection-detail-camera.js +17 -1
  11. package/dist-client/pages/building-inspection/building-inspection-detail-camera.js.map +1 -1
  12. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +3 -0
  13. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +22 -6
  14. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -1
  15. package/dist-client/pages/building-inspection/building-inspection-list.d.ts +3 -0
  16. package/dist-client/pages/building-inspection/building-inspection-list.js +27 -11
  17. package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -1
  18. package/dist-client/pages/building-inspection/building-inspection-management.d.ts +3 -0
  19. package/dist-client/pages/building-inspection/building-inspection-management.js +19 -5
  20. package/dist-client/pages/building-inspection/building-inspection-management.js.map +1 -1
  21. package/dist-client/pages/building-inspection/component/field-document/field-document-popup.d.ts +3 -0
  22. package/dist-client/pages/building-inspection/component/field-document/field-document-popup.js +24 -5
  23. package/dist-client/pages/building-inspection/component/field-document/field-document-popup.js.map +1 -1
  24. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +3 -0
  25. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js +27 -11
  26. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js.map +1 -1
  27. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.js +17 -2
  28. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.js.map +1 -1
  29. package/dist-client/pages/checklist/attachment-list-popup.js +22 -8
  30. package/dist-client/pages/checklist/attachment-list-popup.js.map +1 -1
  31. package/dist-client/pages/checklist/comment-list-popup.js +22 -8
  32. package/dist-client/pages/checklist/comment-list-popup.js.map +1 -1
  33. package/dist-client/pages/checklist/inspection-info-popup.d.ts +3 -0
  34. package/dist-client/pages/checklist/inspection-info-popup.js +12 -1
  35. package/dist-client/pages/checklist/inspection-info-popup.js.map +1 -1
  36. package/dist-client/pages/checklist-template/checklist-template-item.js +23 -3
  37. package/dist-client/pages/checklist-template/checklist-template-item.js.map +1 -1
  38. package/dist-client/pages/checklist-template/checklist-template-list.d.ts +3 -0
  39. package/dist-client/pages/checklist-template/checklist-template-list.js +21 -4
  40. package/dist-client/pages/checklist-template/checklist-template-list.js.map +1 -1
  41. package/dist-client/pages/checklist-template/checklist-type-management.d.ts +3 -0
  42. package/dist-client/pages/checklist-template/checklist-type-management.js +21 -4
  43. package/dist-client/pages/checklist-template/checklist-type-management.js.map +1 -1
  44. package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.js +21 -3
  45. package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.js.map +1 -1
  46. package/dist-client/pages/checklist-template/construction-checklist-template-list.d.ts +3 -0
  47. package/dist-client/pages/checklist-template/construction-checklist-template-list.js +18 -4
  48. package/dist-client/pages/checklist-template/construction-checklist-template-list.js.map +1 -1
  49. package/dist-client/pages/issue/issue-list-page.d.ts +6 -3
  50. package/dist-client/pages/issue/issue-list-page.js +26 -16
  51. package/dist-client/pages/issue/issue-list-page.js.map +1 -1
  52. package/dist-client/pages/project-checklist/project-checklist-management.d.ts +3 -0
  53. package/dist-client/pages/project-checklist/project-checklist-management.js +31 -9
  54. package/dist-client/pages/project-checklist/project-checklist-management.js.map +1 -1
  55. package/dist-client/pages/project-report/project-report-list-page.d.ts +6 -3
  56. package/dist-client/pages/project-report/project-report-list-page.js +26 -16
  57. package/dist-client/pages/project-report/project-report-list-page.js.map +1 -1
  58. package/dist-client/pages/supervisor/supervisor-list-page.d.ts +6 -3
  59. package/dist-client/pages/supervisor/supervisor-list-page.js +26 -16
  60. package/dist-client/pages/supervisor/supervisor-list-page.js.map +1 -1
  61. package/dist-client/route.d.ts +1 -1
  62. package/dist-client/tsconfig.tsbuildinfo +1 -1
  63. package/dist-server/service/checklist-template-item/spec-matching-service.js +1 -1
  64. package/dist-server/service/checklist-template-item/spec-matching-service.js.map +1 -1
  65. package/dist-server/service/field-document/field-document-summary-service.js +1 -1
  66. package/dist-server/service/field-document/field-document-summary-service.js.map +1 -1
  67. package/dist-server/service/project-checklist/spec-matching-service.js +1 -1
  68. package/dist-server/service/project-checklist/spec-matching-service.js.map +1 -1
  69. package/dist-server/tsconfig.tsbuildinfo +1 -1
  70. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"field-document-popup.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/field-document/field-document-popup.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/filled-button.js'\nimport '@material/web/button/outlined-button.js'\nimport '@material/web/progress/circular-progress.js'\nimport './field-document-list-panel'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\n\nimport { Classification, FIELD_DOCUMENT_CLASSIFICATIONS, findClassificationPath } from './field-document-constants'\n\n@customElement('field-document-popup')\nexport class FieldDocumentPopup extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: auto 1fr auto;\n background-color: #fff;\n width: 100%;\n height: 80vh;\n overflow: hidden;\n position: relative;\n }\n\n div[header] {\n display: flex;\n align-items: center;\n padding: 12px 20px;\n border-bottom: 1px solid #e0e0e0;\n background: linear-gradient(135deg, #f8f9fa, #e8eef5);\n\n h2 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 16px;\n color: #3f71a0;\n\n md-icon {\n --md-icon-size: 22px;\n }\n }\n\n span[breadcrumb] {\n margin-left: auto;\n font-size: 12px;\n color: #888;\n }\n }\n\n div[content] {\n display: grid;\n grid-template-columns: 3.5fr 6.5fr;\n overflow: hidden;\n }\n\n div[classification-panel] {\n display: grid;\n grid-template-columns: 0.8fr 1fr 2fr;\n border-right: 1px solid #e0e0e0;\n overflow: hidden;\n }\n\n div[tooltip] {\n position: absolute;\n background: rgba(0, 0, 0, 0.85);\n color: #fff;\n font-size: 12px;\n padding: 4px 10px;\n border-radius: 4px;\n white-space: nowrap;\n z-index: 9999;\n pointer-events: none;\n }\n\n div[column] {\n display: flex;\n flex-direction: column;\n border-right: 1px solid #eee;\n overflow-y: auto;\n overflow-x: hidden;\n\n &:last-child {\n border-right: none;\n }\n\n div[column-header] {\n position: sticky;\n top: 0;\n background: #f5f5f5;\n padding: 8px 12px;\n font-size: 12px;\n font-weight: bold;\n color: #666;\n border-bottom: 1px solid #e0e0e0;\n z-index: 1;\n }\n\n div[item] {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n cursor: pointer;\n font-size: 13px;\n color: #333;\n border-bottom: 1px solid #f0f0f0;\n transition: background-color 0.15s;\n position: relative;\n\n &:hover {\n background-color: #e3f2fd;\n }\n\n span[code] {\n font-size: 11px;\n color: #999;\n margin-right: 6px;\n min-width: 32px;\n }\n\n span[name] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n span[count] {\n position: absolute;\n right: 3px;\n top: 50%;\n transform: translateY(-50%);\n font-size: 8px;\n color: #fff;\n background: #0595e5;\n border-radius: 7px;\n padding: 0 3px;\n min-width: 10px;\n text-align: center;\n line-height: 14px;\n }\n }\n\n div[item][selected] {\n background-color: #0595e5;\n color: #fff;\n\n span[code] {\n color: rgba(255, 255, 255, 0.7);\n }\n\n span[count] {\n background: rgba(255, 255, 255, 0.3);\n }\n }\n\n div[item][drag-over] {\n background-color: #bbdefb;\n outline: 2px dashed #1976d2;\n }\n }\n\n div[footer] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid #e0e0e0;\n background: #f8f8f8;\n\n md-filled-button {\n cursor: pointer;\n --md-filled-button-container-height: 36px;\n --md-filled-button-trailing-space: 16px;\n --md-filled-button-leading-space: 16px;\n --md-filled-button-container-color: #0595e5;\n --md-filled-button-label-text-color: var(--md-sys-color-on-primary);\n --md-filled-button-hover-label-text-color: var(--md-sys-color-on-primary);\n --md-filled-button-icon-color: var(--md-sys-color-on-primary);\n --md-filled-button-hover-icon-color: var(--md-sys-color-on-primary);\n }\n\n md-filled-button[share] {\n --md-filled-button-container-color: #3f71a0;\n }\n md-filled-button[upload] {\n --md-filled-button-container-color: #008000;\n }\n md-filled-button[delete] {\n --md-filled-button-container-color: #e15757;\n }\n }\n\n ox-input-file {\n display: none;\n }\n\n div[uploading-overlay] {\n position: absolute;\n inset: 0;\n z-index: 100;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n background: rgba(255, 255, 255, 0.75);\n\n span {\n font-size: 13px;\n font-weight: bold;\n color: #3f71a0;\n }\n\n span[file] {\n font-weight: normal;\n color: #888;\n font-size: 12px;\n }\n }\n `\n ]\n\n @property({ type: String }) projectId: string = ''\n\n @state() private selectedMajor: Classification | null = null\n @state() private selectedMiddle: Classification | null = null\n @state() private selectedMinor: Classification | null = null\n @state() private documents: any[] = []\n @state() private selectedDocIds: Set<string> = new Set()\n @state() private codeCounts: Map<string, number> = new Map()\n @state() private dragOverItem: string = ''\n @state() private uploading: boolean = false\n @state() private uploadingFile: string = ''\n @state() private _tooltipText: string = ''\n @state() private _tooltipX: number = 0\n @state() private _tooltipY: number = 0\n\n render() {\n const majors = FIELD_DOCUMENT_CLASSIFICATIONS\n const middles = this.selectedMajor?.children || []\n const minors = this.selectedMiddle?.children || []\n\n return html`\n ${this._tooltipText\n ? html`<div tooltip style=\"left:${this._tooltipX + 12}px;top:${this._tooltipY + 12}px\">${this._tooltipText}</div>`\n : ''}\n ${this.uploading\n ? html`\n <div uploading-overlay>\n <md-circular-progress indeterminate></md-circular-progress>\n <span>업로드 및 AI 브리핑 생성 중...</span>\n <span file>${this.uploadingFile}</span>\n </div>\n `\n : ''}\n\n <div header>\n <h2>\n <md-icon>folder_open</md-icon>\n 현장 문서 확인\n </h2>\n <span breadcrumb>\n ${this.selectedMajor ? this.selectedMajor.name : ''} ${this.selectedMiddle ? ` > ${this.selectedMiddle.name}` : ''}\n ${this.selectedMinor ? ` > ${this.selectedMinor.name}` : ''}\n </span>\n </div>\n\n <div content>\n <div classification-panel>\n <div column>\n <div column-header>대분류</div>\n ${majors.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMajor?.code === item.code}\n @click=${() => this._selectMajor(item)}\n @mousemove=${(e: MouseEvent) => this._showTooltip(e, item.name)}\n @mouseleave=${() => (this._tooltipText = '')}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span name>${item.name}</span>\n ${this._getMajorCount(item.code) > 0 ? html`<span count>${this._getMajorCount(item.code)}</span>` : ''}\n </div>\n `\n )}\n </div>\n\n <div column>\n <div column-header>중분류</div>\n ${middles.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMiddle?.code === item.code}\n @click=${() => this._selectMiddle(item)}\n @mousemove=${(e: MouseEvent) => this._showTooltip(e, item.name)}\n @mouseleave=${() => (this._tooltipText = '')}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span name>${item.name}</span>\n ${this._getMiddleCount(item.code) > 0 ? html`<span count>${this._getMiddleCount(item.code)}</span>` : ''}\n </div>\n `\n )}\n </div>\n\n <div column>\n <div column-header>소분류</div>\n ${minors.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMinor?.code === item.code}\n @click=${() => this._selectMinor(item)}\n @mousemove=${(e: MouseEvent) => this._showTooltip(e, item.name)}\n @mouseleave=${() => (this._tooltipText = '')}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span code>${item.code}</span>\n <span name>${item.name}</span>\n ${(this.codeCounts.get(item.code) || 0) > 0 ? html`<span count>${this.codeCounts.get(item.code)}</span>` : ''}\n </div>\n `\n )}\n </div>\n </div>\n\n <field-document-list-panel\n .projectId=${this.projectId}\n .code=${this.selectedMinor?.code || ''}\n .folderName=${this.selectedMinor?.name || ''}\n .documents=${this.documents}\n @document-selected=${(e: CustomEvent) => (this.selectedDocIds = e.detail)}\n @documents-changed=${(e: CustomEvent) => this._onDocumentsChanged(e)}\n ></field-document-list-panel>\n </div>\n\n <div footer>\n <md-filled-button share @click=${this._shareDocuments}> <md-icon slot=\"icon\">share</md-icon>공유 </md-filled-button>\n <md-filled-button favorite @click=${this._toggleFavorites}>\n <md-icon slot=\"icon\">star</md-icon>즐겨찾기\n </md-filled-button>\n <md-filled-button upload @click=${this._triggerUpload}> <md-icon slot=\"icon\">upload</md-icon>업로드 </md-filled-button>\n <md-filled-button delete @click=${this._deleteDocuments}> <md-icon slot=\"icon\">delete</md-icon>삭제 </md-filled-button>\n\n <input\n type=\"file\"\n id=\"native-file-input\"\n multiple\n accept=\"*/*\"\n style=\"display:none\"\n @change=${this._onNativeFileSelected}\n />\n </div>\n `\n }\n\n async firstUpdated() {\n await this._loadCounts()\n // 첫 번째 대분류 자동 선택\n if (FIELD_DOCUMENT_CLASSIFICATIONS.length > 0) {\n this._selectMajor(FIELD_DOCUMENT_CLASSIFICATIONS[0])\n }\n }\n\n private _selectMajor(item: Classification) {\n this.selectedMajor = item\n this.selectedMiddle = null\n this.selectedMinor = null\n this.documents = []\n this.selectedDocIds = new Set()\n\n if (item.children?.length) {\n this._selectMiddle(item.children[0])\n }\n }\n\n private _selectMiddle(item: Classification) {\n this.selectedMiddle = item\n this.selectedMinor = null\n this.documents = []\n this.selectedDocIds = new Set()\n\n if (item.children?.length) {\n this._selectMinor(item.children[0])\n }\n }\n\n private async _selectMinor(item: Classification) {\n this.selectedMinor = item\n this.selectedDocIds = new Set()\n await this._loadDocuments()\n }\n\n private async _loadDocuments() {\n if (!this.selectedMinor?.code || !this.projectId) {\n this.documents = []\n return\n }\n\n const response = await client.query({\n query: gql`\n query FieldDocumentsByCode($projectId: String!, $code: String!) {\n fieldDocumentsByCode(projectId: $projectId, code: $code) {\n items {\n id\n name\n code\n isFavorite\n aiSummary\n aiSummaryStatus\n sourceType\n fullpath\n fileSize\n createdAt\n creator {\n id\n name\n }\n }\n total\n }\n }\n `,\n variables: { projectId: this.projectId, code: this.selectedMinor.code }\n })\n\n this.documents = response.data?.fieldDocumentsByCode?.items || []\n }\n\n private async _loadCounts() {\n if (!this.projectId) return\n\n const response = await client.query({\n query: gql`\n query FieldDocumentCountsByProject($projectId: String!) {\n fieldDocumentCountsByProject(projectId: $projectId) {\n code\n count\n }\n }\n `,\n variables: { projectId: this.projectId }\n })\n\n const counts = response.data?.fieldDocumentCountsByProject || []\n this.codeCounts = new Map(counts.map((c: any) => [c.code, c.count]))\n }\n\n private _getMajorCount(majorCode: string): number {\n let total = 0\n for (const [code, count] of this.codeCounts) {\n if (code.startsWith(majorCode)) total += count\n }\n return total\n }\n\n private _getMiddleCount(middleCode: string): number {\n let total = 0\n for (const [code, count] of this.codeCounts) {\n if (code.startsWith(middleCode)) total += count\n }\n return total\n }\n\n private async _shareDocuments() {\n const selected = this.documents.filter(d => this.selectedDocIds.has(d.id))\n if (!selected.length) {\n notify({ message: '공유할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n if (navigator.share) {\n try {\n await navigator.share({\n title: '현장 문서',\n text: selected.map(d => d.name).join(', '),\n url: window.location.href\n })\n } catch {\n // 사용자 취소\n }\n } else {\n const links = selected.map(d => d.fullpath || d.name).join('\\n')\n await navigator.clipboard.writeText(links)\n notify({ message: '링크가 복사되었습니다.' })\n }\n }\n\n private async _toggleFavorites() {\n if (!this.selectedDocIds.size) {\n notify({ message: '즐겨찾기할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n for (const id of this.selectedDocIds) {\n await client.mutate({\n mutation: gql`\n mutation ToggleFieldDocumentFavorite($id: String!) {\n toggleFieldDocumentFavorite(id: $id) {\n id\n isFavorite\n }\n }\n `,\n variables: { id }\n })\n }\n\n await this._loadDocuments()\n notify({ message: '즐겨찾기가 변경되었습니다.' })\n }\n\n private _triggerUpload() {\n if (!this.selectedMinor?.code) {\n notify({ message: '파일을 업로드할 소분류 폴더를 먼저 선택해주세요.', level: 'info' })\n return\n }\n\n const fileInput = this.renderRoot.querySelector('#native-file-input') as HTMLInputElement\n if (fileInput) {\n fileInput.value = ''\n fileInput.click()\n }\n }\n\n private async _onNativeFileSelected(e: Event) {\n const input = e.target as HTMLInputElement\n const files = Array.from(input.files || [])\n if (!files.length || !this.selectedMinor?.code) return\n\n await this._uploadFiles(files, this.selectedMinor.code)\n }\n\n private async _uploadFiles(files: File[], code: string) {\n // AI 브리핑 힌트용 분류 문자열 (대 · 중 · 소분류)\n const path = findClassificationPath(code)\n const category = [path.major?.name, path.middle?.name, path.minor?.name].filter(Boolean).join(' · ')\n\n this.uploading = true\n let done = 0\n\n try {\n for (const file of files) {\n this.uploadingFile = files.length > 1 ? `${file.name} (${++done}/${files.length})` : file.name\n console.log('[field-document] upload request:', file.name, 'code:', code, 'category:', category)\n const response = await client.mutate({\n mutation: gql`\n mutation CreateFieldDocument($patch: NewFieldDocument!) {\n createFieldDocument(patch: $patch) {\n id\n aiSummary\n aiSummaryStatus\n }\n }\n `,\n variables: {\n patch: {\n projectId: this.projectId,\n code,\n name: file.name,\n category,\n file\n }\n },\n context: { hasUpload: true }\n })\n console.log('[field-document] upload response:', JSON.stringify(response.data?.createFieldDocument))\n }\n\n await this._loadDocuments()\n await this._loadCounts()\n notify({ message: `${files.length}개 파일이 업로드되었습니다.` })\n } finally {\n this.uploading = false\n this.uploadingFile = ''\n }\n }\n\n private async _deleteDocuments() {\n if (!this.selectedDocIds.size) {\n notify({ message: '삭제할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n if (!confirm('선택한 문서를 삭제하시겠습니까?')) return\n\n const ids = Array.from(this.selectedDocIds)\n\n const response = await client.mutate({\n mutation: gql`\n mutation DeleteFieldDocuments($ids: [String!]!) {\n deleteFieldDocuments(ids: $ids)\n }\n `,\n variables: { ids }\n })\n\n if (!response.errors) {\n this.selectedDocIds = new Set()\n await this._loadDocuments()\n await this._loadCounts()\n notify({ message: '삭제되었습니다.' })\n }\n }\n\n private _onFolderDragOver(e: DragEvent, code: string) {\n const types = e.dataTransfer?.types || []\n if (types.includes('application/x-field-document-ids')) {\n e.preventDefault()\n this.dragOverItem = code\n\n // 대분류/중분류 위에 hover 시 자동 확장\n if (code.length === 2) {\n const major = FIELD_DOCUMENT_CLASSIFICATIONS.find(m => m.code === code)\n if (major && this.selectedMajor?.code !== code) {\n clearTimeout(this._expandTimeout)\n this._expandTimeout = setTimeout(() => this._selectMajor(major), 500)\n }\n } else if (code.length === 4) {\n const middles = this.selectedMajor?.children || []\n const middle = middles.find(m => m.code === code)\n if (middle && this.selectedMiddle?.code !== code) {\n clearTimeout(this._expandTimeout)\n this._expandTimeout = setTimeout(() => {\n this.selectedMiddle = middle\n this.selectedMinor = null\n }, 500)\n }\n }\n }\n }\n\n private _expandTimeout: any\n\n private async _onFolderDrop(e: DragEvent, code: string) {\n e.preventDefault()\n this.dragOverItem = ''\n clearTimeout(this._expandTimeout)\n\n const idsJson = e.dataTransfer?.getData('application/x-field-document-ids')\n if (!idsJson) return\n\n const ids: string[] = JSON.parse(idsJson)\n\n // 소분류 코드에만 이동 가능\n if (code.length !== 6) {\n notify({ message: '소분류 폴더에만 이동할 수 있습니다.', level: 'info' })\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation MoveFieldDocuments($ids: [String!]!, $targetCode: String!) {\n moveFieldDocuments(ids: $ids, targetCode: $targetCode)\n }\n `,\n variables: { ids, targetCode: code }\n })\n\n if (!response.errors) {\n const path = findClassificationPath(code)\n notify({ message: `${ids.length}개 문서가 \"${path.minor?.name || code}\" 폴더로 이동되었습니다.` })\n await this._loadDocuments()\n await this._loadCounts()\n }\n }\n\n private async _onDocumentsChanged(e: CustomEvent) {\n const files = e.detail?.files as File[]\n console.log(\n '[field-document] drop received:',\n files?.map(f => f.name),\n 'code:',\n this.selectedMinor?.code\n )\n if (files?.length && this.selectedMinor?.code) {\n await this._uploadFiles(files, this.selectedMinor.code)\n } else {\n await this._loadDocuments()\n }\n }\n\n private _showTooltip(e: MouseEvent, text: string) {\n this._tooltipText = text\n const rect = this.getBoundingClientRect()\n this._tooltipX = e.clientX - rect.left\n this._tooltipY = e.clientY - rect.top\n }\n}\n"]}
1
+ {"version":3,"file":"field-document-popup.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/field-document/field-document-popup.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/filled-button.js'\nimport '@material/web/button/outlined-button.js'\nimport '@material/web/progress/circular-progress.js'\nimport './field-document-list-panel'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\nimport { canDcspMutate } from '@dssp/building-complex/dist-client/utils/privilege'\n\nimport { Classification, FIELD_DOCUMENT_CLASSIFICATIONS, findClassificationPath } from './field-document-constants'\n\n@customElement('field-document-popup')\nexport class FieldDocumentPopup extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: auto 1fr auto;\n background-color: #fff;\n width: 100%;\n height: 80vh;\n overflow: hidden;\n position: relative;\n }\n\n div[header] {\n display: flex;\n align-items: center;\n padding: 12px 20px;\n border-bottom: 1px solid #e0e0e0;\n background: linear-gradient(135deg, #f8f9fa, #e8eef5);\n\n h2 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0;\n font-size: 16px;\n color: #3f71a0;\n\n md-icon {\n --md-icon-size: 22px;\n }\n }\n\n span[breadcrumb] {\n margin-left: auto;\n font-size: 12px;\n color: #888;\n }\n }\n\n div[content] {\n display: grid;\n grid-template-columns: 3.5fr 6.5fr;\n overflow: hidden;\n }\n\n div[classification-panel] {\n display: grid;\n grid-template-columns: 0.8fr 1fr 2fr;\n border-right: 1px solid #e0e0e0;\n overflow: hidden;\n }\n\n div[tooltip] {\n position: absolute;\n background: rgba(0, 0, 0, 0.85);\n color: #fff;\n font-size: 12px;\n padding: 4px 10px;\n border-radius: 4px;\n white-space: nowrap;\n z-index: 9999;\n pointer-events: none;\n }\n\n div[column] {\n display: flex;\n flex-direction: column;\n border-right: 1px solid #eee;\n overflow-y: auto;\n overflow-x: hidden;\n\n &:last-child {\n border-right: none;\n }\n\n div[column-header] {\n position: sticky;\n top: 0;\n background: #f5f5f5;\n padding: 8px 12px;\n font-size: 12px;\n font-weight: bold;\n color: #666;\n border-bottom: 1px solid #e0e0e0;\n z-index: 1;\n }\n\n div[item] {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n cursor: pointer;\n font-size: 13px;\n color: #333;\n border-bottom: 1px solid #f0f0f0;\n transition: background-color 0.15s;\n position: relative;\n\n &:hover {\n background-color: #e3f2fd;\n }\n\n span[code] {\n font-size: 11px;\n color: #999;\n margin-right: 6px;\n min-width: 32px;\n }\n\n span[name] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n span[count] {\n position: absolute;\n right: 3px;\n top: 50%;\n transform: translateY(-50%);\n font-size: 8px;\n color: #fff;\n background: #0595e5;\n border-radius: 7px;\n padding: 0 3px;\n min-width: 10px;\n text-align: center;\n line-height: 14px;\n }\n }\n\n div[item][selected] {\n background-color: #0595e5;\n color: #fff;\n\n span[code] {\n color: rgba(255, 255, 255, 0.7);\n }\n\n span[count] {\n background: rgba(255, 255, 255, 0.3);\n }\n }\n\n div[item][drag-over] {\n background-color: #bbdefb;\n outline: 2px dashed #1976d2;\n }\n }\n\n div[footer] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid #e0e0e0;\n background: #f8f8f8;\n\n md-filled-button {\n cursor: pointer;\n --md-filled-button-container-height: 36px;\n --md-filled-button-trailing-space: 16px;\n --md-filled-button-leading-space: 16px;\n --md-filled-button-container-color: #0595e5;\n --md-filled-button-label-text-color: var(--md-sys-color-on-primary);\n --md-filled-button-hover-label-text-color: var(--md-sys-color-on-primary);\n --md-filled-button-icon-color: var(--md-sys-color-on-primary);\n --md-filled-button-hover-icon-color: var(--md-sys-color-on-primary);\n }\n\n md-filled-button[share] {\n --md-filled-button-container-color: #3f71a0;\n }\n md-filled-button[upload] {\n --md-filled-button-container-color: #008000;\n }\n md-filled-button[delete] {\n --md-filled-button-container-color: #e15757;\n }\n }\n\n ox-input-file {\n display: none;\n }\n\n div[uploading-overlay] {\n position: absolute;\n inset: 0;\n z-index: 100;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n background: rgba(255, 255, 255, 0.75);\n\n span {\n font-size: 13px;\n font-weight: bold;\n color: #3f71a0;\n }\n\n span[file] {\n font-weight: normal;\n color: #888;\n font-size: 12px;\n }\n }\n `\n ]\n\n @property({ type: String }) projectId: string = ''\n\n @state() private selectedMajor: Classification | null = null\n @state() private selectedMiddle: Classification | null = null\n @state() private selectedMinor: Classification | null = null\n @state() private documents: any[] = []\n @state() private selectedDocIds: Set<string> = new Set()\n @state() private codeCounts: Map<string, number> = new Map()\n @state() private dragOverItem: string = ''\n @state() private uploading: boolean = false\n @state() private uploadingFile: string = ''\n @state() private _tooltipText: string = ''\n @state() private _tooltipX: number = 0\n @state() private _tooltipY: number = 0\n /** 뮤테이션 가능 여부('dcsp guest' 권한 보유 시 false) — 게스트에게는 생성/수정/삭제 버튼을 숨긴다 */\n @state() private canMutate = false\n\n async connectedCallback() {\n super.connectedCallback()\n this.canMutate = await canDcspMutate()\n }\n\n render() {\n const majors = FIELD_DOCUMENT_CLASSIFICATIONS\n const middles = this.selectedMajor?.children || []\n const minors = this.selectedMiddle?.children || []\n\n return html`\n ${this._tooltipText\n ? html`<div tooltip style=\"left:${this._tooltipX + 12}px;top:${this._tooltipY + 12}px\">${this._tooltipText}</div>`\n : ''}\n ${this.uploading\n ? html`\n <div uploading-overlay>\n <md-circular-progress indeterminate></md-circular-progress>\n <span>업로드 및 AI 브리핑 생성 중...</span>\n <span file>${this.uploadingFile}</span>\n </div>\n `\n : ''}\n\n <div header>\n <h2>\n <md-icon>folder_open</md-icon>\n 현장 문서 확인\n </h2>\n <span breadcrumb>\n ${this.selectedMajor ? this.selectedMajor.name : ''} ${this.selectedMiddle ? ` > ${this.selectedMiddle.name}` : ''}\n ${this.selectedMinor ? ` > ${this.selectedMinor.name}` : ''}\n </span>\n </div>\n\n <div content>\n <div classification-panel>\n <div column>\n <div column-header>대분류</div>\n ${majors.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMajor?.code === item.code}\n @click=${() => this._selectMajor(item)}\n @mousemove=${(e: MouseEvent) => this._showTooltip(e, item.name)}\n @mouseleave=${() => (this._tooltipText = '')}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span name>${item.name}</span>\n ${this._getMajorCount(item.code) > 0 ? html`<span count>${this._getMajorCount(item.code)}</span>` : ''}\n </div>\n `\n )}\n </div>\n\n <div column>\n <div column-header>중분류</div>\n ${middles.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMiddle?.code === item.code}\n @click=${() => this._selectMiddle(item)}\n @mousemove=${(e: MouseEvent) => this._showTooltip(e, item.name)}\n @mouseleave=${() => (this._tooltipText = '')}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span name>${item.name}</span>\n ${this._getMiddleCount(item.code) > 0 ? html`<span count>${this._getMiddleCount(item.code)}</span>` : ''}\n </div>\n `\n )}\n </div>\n\n <div column>\n <div column-header>소분류</div>\n ${minors.map(\n item => html`\n <div\n item\n ?selected=${this.selectedMinor?.code === item.code}\n @click=${() => this._selectMinor(item)}\n @mousemove=${(e: MouseEvent) => this._showTooltip(e, item.name)}\n @mouseleave=${() => (this._tooltipText = '')}\n @dragover=${(e: DragEvent) => this._onFolderDragOver(e, item.code)}\n @dragleave=${() => (this.dragOverItem = '')}\n @drop=${(e: DragEvent) => this._onFolderDrop(e, item.code)}\n ?drag-over=${this.dragOverItem === item.code}\n >\n <span code>${item.code}</span>\n <span name>${item.name}</span>\n ${(this.codeCounts.get(item.code) || 0) > 0 ? html`<span count>${this.codeCounts.get(item.code)}</span>` : ''}\n </div>\n `\n )}\n </div>\n </div>\n\n <field-document-list-panel\n .projectId=${this.projectId}\n .code=${this.selectedMinor?.code || ''}\n .folderName=${this.selectedMinor?.name || ''}\n .documents=${this.documents}\n @document-selected=${(e: CustomEvent) => (this.selectedDocIds = e.detail)}\n @documents-changed=${(e: CustomEvent) => this._onDocumentsChanged(e)}\n ></field-document-list-panel>\n </div>\n\n <div footer>\n <md-filled-button share @click=${this._shareDocuments}> <md-icon slot=\"icon\">share</md-icon>공유 </md-filled-button>\n ${this.canMutate\n ? html`\n <md-filled-button favorite @click=${this._toggleFavorites}>\n <md-icon slot=\"icon\">star</md-icon>즐겨찾기\n </md-filled-button>\n <md-filled-button upload @click=${this._triggerUpload}>\n <md-icon slot=\"icon\">upload</md-icon>업로드\n </md-filled-button>\n <md-filled-button delete @click=${this._deleteDocuments}>\n <md-icon slot=\"icon\">delete</md-icon>삭제\n </md-filled-button>\n `\n : ''}\n\n <input\n type=\"file\"\n id=\"native-file-input\"\n multiple\n accept=\"*/*\"\n style=\"display:none\"\n @change=${this._onNativeFileSelected}\n />\n </div>\n `\n }\n\n async firstUpdated() {\n await this._loadCounts()\n // 첫 번째 대분류 자동 선택\n if (FIELD_DOCUMENT_CLASSIFICATIONS.length > 0) {\n this._selectMajor(FIELD_DOCUMENT_CLASSIFICATIONS[0])\n }\n }\n\n private _selectMajor(item: Classification) {\n this.selectedMajor = item\n this.selectedMiddle = null\n this.selectedMinor = null\n this.documents = []\n this.selectedDocIds = new Set()\n\n if (item.children?.length) {\n this._selectMiddle(item.children[0])\n }\n }\n\n private _selectMiddle(item: Classification) {\n this.selectedMiddle = item\n this.selectedMinor = null\n this.documents = []\n this.selectedDocIds = new Set()\n\n if (item.children?.length) {\n this._selectMinor(item.children[0])\n }\n }\n\n private async _selectMinor(item: Classification) {\n this.selectedMinor = item\n this.selectedDocIds = new Set()\n await this._loadDocuments()\n }\n\n private async _loadDocuments() {\n if (!this.selectedMinor?.code || !this.projectId) {\n this.documents = []\n return\n }\n\n const response = await client.query({\n query: gql`\n query FieldDocumentsByCode($projectId: String!, $code: String!) {\n fieldDocumentsByCode(projectId: $projectId, code: $code) {\n items {\n id\n name\n code\n isFavorite\n aiSummary\n aiSummaryStatus\n sourceType\n fullpath\n fileSize\n createdAt\n creator {\n id\n name\n }\n }\n total\n }\n }\n `,\n variables: { projectId: this.projectId, code: this.selectedMinor.code }\n })\n\n this.documents = response.data?.fieldDocumentsByCode?.items || []\n }\n\n private async _loadCounts() {\n if (!this.projectId) return\n\n const response = await client.query({\n query: gql`\n query FieldDocumentCountsByProject($projectId: String!) {\n fieldDocumentCountsByProject(projectId: $projectId) {\n code\n count\n }\n }\n `,\n variables: { projectId: this.projectId }\n })\n\n const counts = response.data?.fieldDocumentCountsByProject || []\n this.codeCounts = new Map(counts.map((c: any) => [c.code, c.count]))\n }\n\n private _getMajorCount(majorCode: string): number {\n let total = 0\n for (const [code, count] of this.codeCounts) {\n if (code.startsWith(majorCode)) total += count\n }\n return total\n }\n\n private _getMiddleCount(middleCode: string): number {\n let total = 0\n for (const [code, count] of this.codeCounts) {\n if (code.startsWith(middleCode)) total += count\n }\n return total\n }\n\n private async _shareDocuments() {\n const selected = this.documents.filter(d => this.selectedDocIds.has(d.id))\n if (!selected.length) {\n notify({ message: '공유할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n if (navigator.share) {\n try {\n await navigator.share({\n title: '현장 문서',\n text: selected.map(d => d.name).join(', '),\n url: window.location.href\n })\n } catch {\n // 사용자 취소\n }\n } else {\n const links = selected.map(d => d.fullpath || d.name).join('\\n')\n await navigator.clipboard.writeText(links)\n notify({ message: '링크가 복사되었습니다.' })\n }\n }\n\n private async _toggleFavorites() {\n if (!this.selectedDocIds.size) {\n notify({ message: '즐겨찾기할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n for (const id of this.selectedDocIds) {\n await client.mutate({\n mutation: gql`\n mutation ToggleFieldDocumentFavorite($id: String!) {\n toggleFieldDocumentFavorite(id: $id) {\n id\n isFavorite\n }\n }\n `,\n variables: { id }\n })\n }\n\n await this._loadDocuments()\n notify({ message: '즐겨찾기가 변경되었습니다.' })\n }\n\n private _triggerUpload() {\n if (!this.selectedMinor?.code) {\n notify({ message: '파일을 업로드할 소분류 폴더를 먼저 선택해주세요.', level: 'info' })\n return\n }\n\n const fileInput = this.renderRoot.querySelector('#native-file-input') as HTMLInputElement\n if (fileInput) {\n fileInput.value = ''\n fileInput.click()\n }\n }\n\n private async _onNativeFileSelected(e: Event) {\n const input = e.target as HTMLInputElement\n const files = Array.from(input.files || [])\n if (!files.length || !this.selectedMinor?.code) return\n\n await this._uploadFiles(files, this.selectedMinor.code)\n }\n\n private async _uploadFiles(files: File[], code: string) {\n // AI 브리핑 힌트용 분류 문자열 (대 · 중 · 소분류)\n const path = findClassificationPath(code)\n const category = [path.major?.name, path.middle?.name, path.minor?.name].filter(Boolean).join(' · ')\n\n this.uploading = true\n let done = 0\n\n try {\n for (const file of files) {\n this.uploadingFile = files.length > 1 ? `${file.name} (${++done}/${files.length})` : file.name\n console.log('[field-document] upload request:', file.name, 'code:', code, 'category:', category)\n const response = await client.mutate({\n mutation: gql`\n mutation CreateFieldDocument($patch: NewFieldDocument!) {\n createFieldDocument(patch: $patch) {\n id\n aiSummary\n aiSummaryStatus\n }\n }\n `,\n variables: {\n patch: {\n projectId: this.projectId,\n code,\n name: file.name,\n category,\n file\n }\n },\n context: { hasUpload: true }\n })\n console.log('[field-document] upload response:', JSON.stringify(response.data?.createFieldDocument))\n }\n\n await this._loadDocuments()\n await this._loadCounts()\n notify({ message: `${files.length}개 파일이 업로드되었습니다.` })\n } finally {\n this.uploading = false\n this.uploadingFile = ''\n }\n }\n\n private async _deleteDocuments() {\n if (!this.selectedDocIds.size) {\n notify({ message: '삭제할 문서를 선택해주세요.', level: 'info' })\n return\n }\n\n if (!confirm('선택한 문서를 삭제하시겠습니까?')) return\n\n const ids = Array.from(this.selectedDocIds)\n\n const response = await client.mutate({\n mutation: gql`\n mutation DeleteFieldDocuments($ids: [String!]!) {\n deleteFieldDocuments(ids: $ids)\n }\n `,\n variables: { ids }\n })\n\n if (!response.errors) {\n this.selectedDocIds = new Set()\n await this._loadDocuments()\n await this._loadCounts()\n notify({ message: '삭제되었습니다.' })\n }\n }\n\n private _onFolderDragOver(e: DragEvent, code: string) {\n const types = e.dataTransfer?.types || []\n if (types.includes('application/x-field-document-ids')) {\n e.preventDefault()\n this.dragOverItem = code\n\n // 대분류/중분류 위에 hover 시 자동 확장\n if (code.length === 2) {\n const major = FIELD_DOCUMENT_CLASSIFICATIONS.find(m => m.code === code)\n if (major && this.selectedMajor?.code !== code) {\n clearTimeout(this._expandTimeout)\n this._expandTimeout = setTimeout(() => this._selectMajor(major), 500)\n }\n } else if (code.length === 4) {\n const middles = this.selectedMajor?.children || []\n const middle = middles.find(m => m.code === code)\n if (middle && this.selectedMiddle?.code !== code) {\n clearTimeout(this._expandTimeout)\n this._expandTimeout = setTimeout(() => {\n this.selectedMiddle = middle\n this.selectedMinor = null\n }, 500)\n }\n }\n }\n }\n\n private _expandTimeout: any\n\n private async _onFolderDrop(e: DragEvent, code: string) {\n e.preventDefault()\n this.dragOverItem = ''\n clearTimeout(this._expandTimeout)\n\n const idsJson = e.dataTransfer?.getData('application/x-field-document-ids')\n if (!idsJson) return\n\n const ids: string[] = JSON.parse(idsJson)\n\n // 소분류 코드에만 이동 가능\n if (code.length !== 6) {\n notify({ message: '소분류 폴더에만 이동할 수 있습니다.', level: 'info' })\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation MoveFieldDocuments($ids: [String!]!, $targetCode: String!) {\n moveFieldDocuments(ids: $ids, targetCode: $targetCode)\n }\n `,\n variables: { ids, targetCode: code }\n })\n\n if (!response.errors) {\n const path = findClassificationPath(code)\n notify({ message: `${ids.length}개 문서가 \"${path.minor?.name || code}\" 폴더로 이동되었습니다.` })\n await this._loadDocuments()\n await this._loadCounts()\n }\n }\n\n private async _onDocumentsChanged(e: CustomEvent) {\n const files = e.detail?.files as File[]\n console.log(\n '[field-document] drop received:',\n files?.map(f => f.name),\n 'code:',\n this.selectedMinor?.code\n )\n if (files?.length && this.selectedMinor?.code) {\n await this._uploadFiles(files, this.selectedMinor.code)\n } else {\n await this._loadDocuments()\n }\n }\n\n private _showTooltip(e: MouseEvent, text: string) {\n this._tooltipText = text\n const rect = this.getBoundingClientRect()\n this._tooltipX = e.clientX - rect.left\n this._tooltipY = e.clientY - rect.top\n }\n}\n"]}
@@ -30,6 +30,9 @@ export declare class BuildingInspectionGridDetail extends BuildingInspectionGrid
30
30
  cell: string;
31
31
  items: any[];
32
32
  };
33
+ /** 뮤테이션 가능 여부('dcsp guest' 권한 보유 시 false) — 게스트에게는 생성/수정/삭제 버튼을 숨긴다 */
34
+ private canMutate;
35
+ connectedCallback(): Promise<void>;
33
36
  htmlSelectBuilding: any;
34
37
  htmlSelectLevel: any;
35
38
  drawingContainer: HTMLDivElement;
@@ -15,6 +15,7 @@ import './component/grid-inspection-create-popup';
15
15
  import { BUILDING_INSPECTION_STATUS_DISPLAY, BUILDING_INSPECTION_RE_STATUS_DISPLAY, BuildingInspectionStatus } from '../building-inspection/building-inspection-list';
16
16
  import '../checklist/inspection-tab-popup';
17
17
  import { verifyBiometric } from '@things-factory/auth-base/dist-client';
18
+ import { canDcspMutate } from '@dssp/building-complex/dist-client/utils/privilege';
18
19
  import { OxPrompt } from '@operato/popup';
19
20
  import './component/plan-preview-popup';
20
21
  import './component/grid-inspection-list-layer';
@@ -37,12 +38,19 @@ let BuildingInspectionGridDetail = class BuildingInspectionGridDetail extends Sc
37
38
  this.selectedInspection = {};
38
39
  this.cell = '';
39
40
  this.listLayer = { open: false, cell: '', items: [] };
41
+ /** 뮤테이션 가능 여부('dcsp guest' 권한 보유 시 false) — 게스트에게는 생성/수정/삭제 버튼을 숨긴다 */
42
+ this.canMutate = false;
40
43
  }
41
44
  get context() {
42
45
  return {
43
46
  title: '층별 시공검측 상세 정보'
44
47
  };
45
48
  }
49
+ async connectedCallback() {
50
+ super.connectedCallback();
51
+ this.canMutate = await canDcspMutate();
52
+ this.updateContext();
53
+ }
46
54
  render() {
47
55
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
48
56
  // 그리드 가로, 세로 길이 배열 생성
@@ -232,7 +240,7 @@ let BuildingInspectionGridDetail = class BuildingInspectionGridDetail extends Sc
232
240
  </div>
233
241
 
234
242
  <!-- 전층 동일 적용 버튼 -->
235
- ${this.selectedInspection.status
243
+ ${this.canMutate && this.selectedInspection.status
236
244
  ? html `<md-filled-button apply-to-all @click=${() => this._onClickApplyToAll()}>전층 동일 적용</md-filled-button>`
237
245
  : html ``}
238
246
 
@@ -240,19 +248,23 @@ let BuildingInspectionGridDetail = class BuildingInspectionGridDetail extends Sc
240
248
  ${!this.cell
241
249
  ? html ``
242
250
  : !this.selectedInspection.status
243
- ? html `<md-outlined-button @click=${() => this._onClickCreateInspection()}>검측 정보 등록 </md-outlined-button>`
251
+ ? this.canMutate
252
+ ? html `<md-outlined-button @click=${() => this._onClickCreateInspection()}>검측 정보 등록 </md-outlined-button>`
253
+ : html ``
244
254
  : this.selectedInspection.status == BuildingInspectionStatus.PASS
245
255
  ? html `<md-filled-button @click=${() => this._onClickUpdateInspection()}>검측 정보 보기 </md-filled-button> `
246
- : html `
247
- <md-filled-button update @click=${() => this._onClickUpdateInspection()}>
248
- 검측 정보 수정
249
- </md-filled-button>
250
- ${this.selectedInspection.status == BuildingInspectionStatus.WAIT
251
- ? html `<md-filled-button delete @click=${() => this._onClickDeleteInspection()}>
252
- 삭제
253
- </md-filled-button>`
256
+ : this.canMutate
257
+ ? html `
258
+ <md-filled-button update @click=${() => this._onClickUpdateInspection()}>
259
+ 검측 정보 수정
260
+ </md-filled-button>
261
+ ${this.selectedInspection.status == BuildingInspectionStatus.WAIT
262
+ ? html `<md-filled-button delete @click=${() => this._onClickDeleteInspection()}>
263
+ 삭제
264
+ </md-filled-button>`
265
+ : html ``}
266
+ `
254
267
  : html ``}
255
- `}
256
268
  `}
257
269
  </div>
258
270
  </div>
@@ -1116,6 +1128,10 @@ __decorate([
1116
1128
  state(),
1117
1129
  __metadata("design:type", Object)
1118
1130
  ], BuildingInspectionGridDetail.prototype, "listLayer", void 0);
1131
+ __decorate([
1132
+ state(),
1133
+ __metadata("design:type", Object)
1134
+ ], BuildingInspectionGridDetail.prototype, "canMutate", void 0);
1119
1135
  __decorate([
1120
1136
  query('md-filled-select[building]'),
1121
1137
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"building-inspection-grid-detail.js","sourceRoot":"","sources":["../../../client/pages/building-inspection-grid/building-inspection-grid-detail.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,yCAAyC,CAAA;AAChD,OAAO,gDAAgD,CAAA;AACvD,OAAO,yCAAyC,CAAA;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,kCAAkC,CAAA;AACzC,OAAO,0CAA0C,CAAA;AACjD,OAAO,EACL,kCAAkC,EAClC,qCAAqC,EACrC,wBAAwB,EACzB,MAAM,iDAAiD,CAAA;AACxD,OAAO,mCAAmC,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,gCAAgC,CAAA;AACvC,OAAO,wCAAwC,CAAA;AAGxC,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,mBAAmB,CAAC,QAAQ,CAAC;IAAxE;;QA6XG,mBAAc,GAAG;YACvB,IAAI,EAAE,EAAE;YACR,eAAe,EAAE;gBACf,SAAS,EAAE,EAAE;aACd;SACF,CAAA;QACQ,YAAO,qBAAa,IAAI,CAAC,cAAc,EAAE;QACzC,wBAAmB,GAAQ,EAAE,CAAA;QAC7B,sBAAiB,GAA0B,EAAE,CAAA;QAC7C,uCAAkC,GAAQ,EAAE,CAAA;QAC5C,6CAAwC,GAAQ,EAAE,CAAA;QAClD,qBAAgB,GAAQ,EAAE,CAAA;QAC1B,kBAAa,GAAQ,EAAE,CAAA;QACvB,uBAAkB,GAAQ,EAAE,CAAA;QAC5B,SAAI,GAAW,EAAE,CAAA;QAEjB,cAAS,GAId,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAqsB1C,CAAC;IA/tBC,IAAI,OAAO;QACT,OAAO;YACL,KAAK,EAAE,eAAe;SACvB,CAAA;IACH,CAAC;IA4BD,MAAM;;QACJ,sBAAsB;QACtB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,eAAe,0CAAE,UAAU,KAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QACtG,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,eAAe,0CAAE,UAAU,KAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAEtG,OAAO,IAAI,CAAA;;;6CAG8B,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;YACrD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,MAAA,IAAI,CAAC,gBAAgB,0CAAE,IAAI,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,gBAAgB;;;qCAG/D,kBAAkB,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;;;qCAGnC,2BAA2B,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;;;uCAG1C,IAAI,CAAC,qBAAqB;;;;;;;;;;mDAUd,IAAI,CAAC,iBAAiB;kBACvD,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,eAAe,0CAAE,SAAS,0CAAE,GAAG,CAAC,QAAQ,CAAC,EAAE;;YACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,MAAK,MAAA,IAAI,CAAC,gBAAgB,0CAAE,EAAE,CAAA,CAAA;YAE1D,OAAO,IAAI,CAAA,gCAAgC,QAAQ,WAAW,QAAQ,CAAC,EAAE;2CAChD,QAAQ,CAAC,IAAI;sCAClB,CAAA;QACtB,CAAC,CAAC;;;gDAG8B,IAAI,CAAC,sBAAsB;kBACzD,MAAA,MAAA,IAAI,CAAC,gBAAgB,0CAAE,cAAc,0CAAE,GAAG,CAAC,KAAK,CAAC,EAAE;YACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,EAAE,CAAA;YAEnD,OAAO,IAAI,CAAA,+BAA+B,QAAQ,WAAW,KAAK,CAAC,EAAE;2CAC5C,KAAK,CAAC,KAAK;sCAChB,CAAA;QACtB,CAAC,CAAC;;;;;;;6BAOW,IAAI,CAAC,kCAAkC,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;;;6BAIpF,IAAI,CAAC,kCAAkC,CAAC,wBAAwB,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;;;;6BAIvF,IAAI,CAAC,kCAAkC,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;;;6BAIpF,IAAI,CAAC,kCAAkC,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;;;;;uBAM1F,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,gBAAgB,KAAI,wCAAwC;;;gBAGvF,UAAU,CAAC,GAAG,CACd,CAAC,CAAC,EAAE,CACF,IAAI,CAAA,aAAa,CAAC;sBACd,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACpB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAA;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YACzD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAA;YAChC,IAAI,UAAU,GAAG,EAAE,CAAA;YACnB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,wBAAwB,CAAC,IAAI,CAAC,CAAA;gBAClF,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,wBAAwB,CAAC,IAAI,CAAC,CAAA;gBACjF,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAA;YAC5D,CAAC;YAED,OAAO,IAAI,CAAA,eAAe,EAAE,SAAS,OAAO,WAAW,IAAI,CAAC,YAAY;0BACpE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA,2BAA2B,UAAU,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE;6BAC1E,CAAA;QACT,CAAC,CAAC;yBACG,CACV;;cAED,IAAI,CAAC,SAAS,CAAC,IAAI;YACnB,CAAC,CAAC,IAAI,CAAA;2BACO,IAAI,CAAC,SAAS,CAAC,KAAK;8BACjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;iCACtC,IAAI,CAAC,gBAAgB;4BAC1B,IAAI,CAAC,iBAAiB;2BACvB,IAAI,CAAC,eAAe;+CACA;YACjC,CAAC,CAAC,EAAE;;;;;;;;;;kBAUA,IAAI,CAAC,wCAAwC,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;;;kBAI1F,IAAI,CAAC,wCAAwC,CAAC,wBAAwB,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;;;;kBAI7F,IAAI,CAAC,wCAAwC,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;;;kBAI1F,IAAI,CAAC,wCAAwC,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;;;;;;yCAOnE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;0BAC7C,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,WAAW,KAAI,CAAC;;;;cAIhD,IAAI,CAAA;;;oBAGE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;;sBAEvD,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,CAAC;YACtC,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,kCAAkC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;;;;;mCAKxD,CAAA,MAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,SAAS,0CAAE,gBAAgB,KAAI,EAAE;;;;;;sCAMvD,CAAA,MAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,SAAS,0CAAE,sBAAsB,KAAI,EAAE;;;;;;oCAMlE,IAAI,CAAC,kBAAkB,CAAC,WAAW;;;;;;0BAM7C,MAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,OAAO,0CAAE,IAAI;oBAC5C,MAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,OAAO,0CAAE,KAAK;;;;;kBAKzC,IAAI,CAAC,kBAAkB,CAAC,IAAI;YAC5B,CAAC,CAAC,IAAI,CAAA;;yCAEiB,IAAI,CAAC,kBAAkB,CAAC,IAAI;;;qBAGhD;YACH,CAAC,CAAC,IAAI,CAAA,EAAE;kBACR,CAAA,MAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,0CAAE,MAAM,IAAG,CAAC;YAC/C,CAAC,CAAC,IAAI,CAAA;;+DAEuC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,MAAM;qDACpD,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;;;;;qBAKtE;YACH,CAAC,CAAC,IAAI,CAAA,EAAE;;;;gBAIV,IAAI,CAAC,kBAAkB,CAAC,MAAM;YAC9B,CAAC,CAAC,IAAI,CAAA,yCAAyC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,8BAA8B;YAC5G,CAAC,CAAC,IAAI,CAAA,EAAE;;;gBAGR,CAAC,IAAI,CAAC,IAAI;YACV,CAAC,CAAC,IAAI,CAAA,EAAE;YACR,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM;gBAC/B,CAAC,CAAC,IAAI,CAAA,8BAA8B,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,iCAAiC;gBAC1G,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,wBAAwB,CAAC,IAAI;oBAC/D,CAAC,CAAC,IAAI,CAAA,4BAA4B,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,gCAAgC;oBACvG,CAAC,CAAC,IAAI,CAAA;0DACgC,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE;;;0BAGrE,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,wBAAwB,CAAC,IAAI;wBAC/D,CAAC,CAAC,IAAI,CAAA,mCAAmC,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE;;gDAExD;wBACtB,CAAC,CAAC,IAAI,CAAA,EAAE;uBACX;aACV;;;;KAIR,CAAA;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAwB,IAAG,CAAC;IAElD,KAAK,CAAC,WAAW,CAAC,OAAY,EAAE,SAAwB;QACtD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,MAAM,GAAQ,SAAS,CAAC,MAAM,CAAA;YACpC,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACjF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,YAAoB,EAAE,EAAE,aAAqB,EAAE,EAAE,UAAkB,EAAE;;QACrF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4DT;YACD,SAAS,EAAE;gBACT,EAAE,EAAE,SAAS;gBACb,SAAS,EAAE,SAAS;gBACpB,eAAe,EAAE,OAAO;gBACxB,MAAM,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE;aACrC;SACF,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,MAAM;YAAE,OAAM;QAE3B,IAAI,CAAC,OAAO,GAAG,MAAA,QAAQ,CAAC,IAAI,0CAAE,OAAO,CAAA;QACrC,IAAI,CAAC,mBAAmB,GAAG,MAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,kCAAkC,0CAAE,KAAK,CAAA;QACnF,IAAI,CAAC,uBAAuB,EAAE,CAAA;QAC9B,IAAI,CAAC,kCAAkC,GAAG,MAAA,QAAQ,CAAC,IAAI,0CAAE,kCAAkC,CAAA;QAC3F,IAAI,CAAC,wCAAwC,GAAG,MAAA,QAAQ,CAAC,IAAI,0CAAE,wCAAwC,CAAA;QAEvG,6CAA6C;QAC7C,IAAI,CAAC,gBAAgB,GAAG,UAAU;YAChC,CAAC,CAAC,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,eAAe,0CAAE,SAAS,0CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC,CAAC;YAC/E,CAAC,CAAC,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,eAAe,0CAAE,SAAS,0CAAG,CAAC,CAAC,CAAA;QAEjD,oBAAoB;QACpB,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;QAEzE,wCAAwC;QACxC,IAAI,CAAC,aAAa,GAAG,OAAO;YAC1B,CAAC,CAAC,MAAA,MAAA,IAAI,CAAC,gBAAgB,0CAAE,cAAc,0CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;YACzE,CAAC,CAAC,MAAA,MAAA,IAAI,CAAC,gBAAgB,0CAAE,cAAc,0CAAG,CAAC,CAAC,CAAA;QAE9C,uCAAuC;QACvC,IAAI,CAAC,gBAAgB,GAAG,wBAAW,IAAI,CAAC,gBAAgB,CAAE,CAAA;QAE1D,iBAAiB;QACjB,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;QAC9D,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,aAAqB,EAAE;;QACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;OAmBT;YACD,SAAS,EAAE;gBACT,EAAE,EAAE,UAAU;aACf;SACF,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,MAAM;YAAE,OAAM;QAE3B,OAAO,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,QAAQ,KAAI,EAAE,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,uBAA+B,EAAE;;QAC5D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiDT;YACD,SAAS,EAAE;gBACT,EAAE,EAAE,oBAAoB;aACzB;SACF,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,MAAM;YAAE,OAAM;QAE3B,OAAO,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,kBAAkB,KAAI,EAAE,CAAA;IAChD,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,CAAC;;QAC/B,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAA;QACjC,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;QAC3D,IAAI,CAAC,aAAa,qBAAQ,MAAA,MAAA,IAAI,CAAC,gBAAgB,0CAAE,cAAc,0CAAG,CAAC,CAAC,CAAE,CAAA;QAEtE,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAEO,sBAAsB,CAAC,CAAC;;QAC9B,yCAAyC;QACzC,MAAM,eAAe,GAAG,CAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,0CAAE,KAAK,KAAI,CAAC,CAAC,MAAM,CAAC,eAAe,CAAA;QACpE,IAAI,CAAC,aAAa,qBACb,CAAC,CAAA,MAAA,MAAA,IAAI,CAAC,gBAAgB,0CAAE,cAAc,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,eAAe,CAAC,KAAI,EAAE,CAAC,CACrF,CAAA;QAED,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,CAAC;;QAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,aAA4B,CAAA;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAExC,qCAAqC;QACrC,MAAA,IAAI,CAAC,UAAU,0CAAE,gBAAgB,CAAC,mBAAmB,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAErC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;QAEtD,+BAA+B;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,EAAE,CAAA;YACtB,IAAI,CAAC,kBAAkB,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;YAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACtB,OAAM;QACR,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/C,CAAC;IAEO,kBAAkB;;QACxB,SAAS,CACP,IAAI,CAAA;2BACiB,IAAI,CAAC,aAAa,CAAC,EAAE;iBAC/B,GAAG,MAAA,IAAI,CAAC,gBAAgB,0CAAE,IAAI,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,QAAQ;0BAC1D,CAAC,CAAc,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAA,CAAC,cAAc;YACjD,CAAC;iBAAM,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAA,CAAC,cAAc;YACjD,CAAC;YAED,IAAI,CAAC,aAAa,EAAE,CAAA;QACtB,CAAC;+BACsB,EACzB,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CACrD,CAAA;IACH,CAAC;IAED,wBAAwB;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;YACjC,OAAM;QACR,CAAC;QAED,SAAS,CACP,IAAI,CAAA;;uBAEa,IAAI,CAAC,OAAO,CAAC,EAAE;gCACN,IAAI,CAAC,gBAAgB,CAAC,EAAE;qCACnB,IAAI,CAAC,aAAa,CAAC,EAAE;kBACxC,IAAI,CAAC,IAAI;4BACC,KAAK,EAAE,CAAc,EAAE,EAAE;YACzC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;QACnD,CAAC;;OAEJ,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CACtD,CAAA;IACH,CAAC;IAED,wBAAwB,CAAC,aAAqB,CAAC;QAC7C,SAAS,CACP,IAAI,CAAA;;gCAEsB,IAAI,CAAC,kBAAkB;qBAClC,IAAI,CAAC,OAAO;wBACT,UAAU;8BACJ,CAAC,CAAc,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;4BAChE,KAAK,EAAE,CAAc,EAAE,EAAE;YACzC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;QACnD,CAAC;;OAEJ,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CACtD,CAAA;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,uBAA+B,EAAE;QAC7C,iBAAiB;QACjB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;QACxF,eAAe;QACf,IAAI,CAAC,kBAAkB,GAAG,oBAAoB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/G,CAAC;IAED,oBAAoB,CAAC,MAAc;QACjC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAA;QAEtB,IAAI,MAAM,IAAI,wBAAwB,CAAC,IAAI,IAAI,MAAM,IAAI,wBAAwB,CAAC,YAAY,EAAE,CAAC;YAC/F,OAAO,IAAI,CAAA,sDAAsD,CAAA;QACnE,CAAC;QAED,IAAI,MAAM,IAAI,wBAAwB,CAAC,OAAO,IAAI,MAAM,IAAI,wBAAwB,CAAC,eAAe,EAAE,CAAC;YACrG,OAAO,IAAI,CAAA,oDAAoD,CAAA;QACjE,CAAC;QAED,IAAI,MAAM,IAAI,wBAAwB,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAA,2CAA2C,CAAA;QACxD,CAAC;QAED,OAAO,IAAI,CAAA,2CAA2C,CAAA;IACxD,CAAC;IAEO,uBAAuB;QAC7B,MAAM,GAAG,GAA0B,EAAE,CAAA;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,mBAAmB,IAAI,EAAE,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;YACzC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;YAC5B,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAA;IAC9B,CAAC;IAEO,cAAc,CAAC,QAAqB,EAAE,KAAY,EAAE,IAAY;QACtE,IAAI,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAC9C,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;YAAE,OAAM;QAChC,IAAI,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IACvD,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,CAAc;;QAC5C,MAAM,EAAE,GAAG,MAAA,CAAC,CAAC,MAAM,0CAAE,EAAE,CAAA;QACvB,IAAI,CAAC,EAAE;YAAE,OAAM;QACf,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAA;QACpC,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAEO,eAAe,CAAC,IAAY;;QAClC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QACtB,OAAO,MAAA,IAAI,CAAC,UAAU,0CAAE,aAAa,CAAC,aAAa,IAAI,IAAI,CAAgB,CAAA;IAC7E,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,SAAc;;QAC5C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAA;YACtC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;YAC3E,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC5D,OAAM;YACR,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,EAAE,OAAO,EAAE,sCAAsC,GAAG,KAAK,EAAE,CAAC,CAAA;YACnE,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE;gBACT,kBAAkB,EAAE;oBAClB,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE;oBAC9B,SAAS,EAAE;wBACT,EAAE,EAAE,SAAS,CAAC,EAAE;wBAChB,2BAA2B,EAAE,SAAS,CAAC,2BAA2B;wBAClE,wBAAwB,EAAE,SAAS,CAAC,wBAAwB;wBAC5D,2BAA2B,EAAE,SAAS,CAAC,2BAA2B;wBAClE,wBAAwB,EAAE,SAAS,CAAC,wBAAwB;qBAC7D;oBACD,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACnD,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;wBACzD,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;qBACxD,CAAC,CAAC;iBACJ;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAA;YACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;YACxC,OAAO,CAAC,IAAI,EAAE,CAAA;QAChB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA,MAAA,MAAA,QAAQ,CAAC,MAAM,0CAAG,CAAC,CAAC,0CAAE,OAAO,KAAI,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;QAC7F,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;;QACtB,IACE,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,4BAA4B;YAClC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YAC7B,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SAC7B,CAAC,CAAC,KAAK,KAAK,EACb,CAAC;YACD,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE;gBACT,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE;aACjD;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;YAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA,MAAA,MAAA,QAAQ,CAAC,MAAM,0CAAG,CAAC,CAAC,0CAAE,OAAO,KAAI,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;IAED,qBAAqB;QACnB,SAAS,CAAC,IAAI,CAAA,wCAAwC,IAAI,CAAC,aAAa,CAAC,EAAE,wBAAwB,EAAE;YACnG,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,UAAU;SAClB,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,wBAAwB;;QACpC,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,EAAE,CAAA,EAAE,CAAC;YACjC,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YACrD,OAAM;QACR,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;YACpC,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,mCAAmC;YACzC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YAC7B,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SAC7B,CAAC,CAAA;QAEF,IAAI,SAAS,KAAK,KAAK;YAAE,OAAM;QAE/B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE;gBACT,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;aAClC;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAA;YAC/B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;YAC5B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA,MAAA,MAAA,QAAQ,CAAC,MAAM,0CAAG,CAAC,CAAC,0CAAE,OAAO,KAAI,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;QACtF,CAAC;IACH,CAAC;;AAplCM,mCAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkXF;CACF,AApXY,CAoXZ;AAcQ;IAAR,KAAK,EAAE;;6DAA0C;AACzC;IAAR,KAAK,EAAE;;yEAA8B;AAC7B;IAAR,KAAK,EAAE;;uEAA8C;AAC7C;IAAR,KAAK,EAAE;;wFAA6C;AAC5C;IAAR,KAAK,EAAE;;8FAAmD;AAClD;IAAR,KAAK,EAAE;;sEAA2B;AAC1B;IAAR,KAAK,EAAE;;mEAAwB;AACvB;IAAR,KAAK,EAAE;;wEAA6B;AAC5B;IAAR,KAAK,EAAE;;0DAAkB;AAEjB;IAAR,KAAK,EAAE;;+DAIgC;AAEH;IAApC,KAAK,CAAC,4BAA4B,CAAC;;wEAAmB;AACrB;IAAjC,KAAK,CAAC,yBAAyB,CAAC;;qEAAgB;AAC1B;IAAtB,KAAK,CAAC,cAAc,CAAC;8BAAoB,cAAc;sEAAA;AArZ7C,4BAA4B;IADxC,aAAa,CAAC,iCAAiC,CAAC;GACpC,4BAA4B,CAslCxC","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/elevated-button.js'\nimport '@material/web/textfield/outlined-text-field.js'\nimport '@material/web/button/outlined-button.js'\n\nimport { PageView } from '@operato/shell'\nimport { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view'\nimport { css, html } from 'lit'\nimport { customElement, state, query } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport gql from 'graphql-tag'\nimport { notify, openPopup } from '@operato/layout'\nimport './component/notice-comment-popup'\nimport './component/grid-inspection-create-popup'\nimport {\n BUILDING_INSPECTION_STATUS_DISPLAY,\n BUILDING_INSPECTION_RE_STATUS_DISPLAY,\n BuildingInspectionStatus\n} from '../building-inspection/building-inspection-list'\nimport '../checklist/inspection-tab-popup'\nimport { verifyBiometric } from '@things-factory/auth-base/dist-client'\nimport { OxPrompt } from '@operato/popup'\nimport './component/plan-preview-popup'\nimport './component/grid-inspection-list-layer'\n\n@customElement('building-inspection-grid-detail')\nexport class BuildingInspectionGridDetail extends ScopedElementsMixin(PageView) {\n static styles = [\n css`\n :host {\n display: grid;\n grid-template-rows: 75px auto;\n color: #4e5055;\n\n width: 100%;\n background-color: #f7f7f7;\n overflow-y: auto;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n\n md-filled-button {\n --md-filled-button-container-color: #0595e5;\n --md-filled-button-container-height: 30px;\n --md-filled-button-trailing-space: 15px;\n --md-filled-button-leading-space: 15px;\n }\n md-filled-button[update] {\n --md-filled-button-container-color: #42b382;\n }\n md-filled-button[apply-to-all] {\n --md-filled-button-container-color: #aaa;\n }\n md-filled-button[delete] {\n --md-filled-button-container-color: #ff4444;\n }\n md-outlined-button {\n color: #586878;\n font-weight: bold;\n --md-outlined-button-label-text-size: 13px;\n --md-outlined-button-container-height: 30px;\n --md-outlined-button-trailing-space: 15px;\n --md-outlined-button-leading-space: 15px;\n }\n md-filled-select {\n width: auto;\n min-width: 150px;\n --md-filled-select-text-field-container-color: transparent;\n --md-filled-select-text-field-active-indicator-color: #999;\n --md-filled-select-text-field-input-text-size: 14px;\n --md-filled-select-text-field-input-text-weight: bold;\n --md-filled-select-text-field-input-text-line-height: 6px;\n }\n md-filled-select[level] {\n min-width: 110px;\n margin-left: 20px;\n }\n\n md-icon[request],\n md-icon[pass],\n md-icon[fail] {\n width: 20px;\n height: 20px;\n margin-right: 4px;\n border-radius: 5px;\n font-size: 21px;\n font-weight: 700;\n color: #fff;\n }\n md-icon[request] {\n background-color: #4e5055;\n }\n md-icon[pass] {\n background-color: #4bbb4a;\n }\n md-icon[fail] {\n background-color: #ff4444;\n }\n\n *[bold] {\n font-weight: bold;\n }\n\n div[header] {\n display: flex;\n margin: 0px 20px;\n\n h2 {\n display: flex;\n gap: 7px;\n flex: 0.5;\n color: #3f71a0;\n font-size: 18px;\n\n md-icon[back] {\n background: linear-gradient(135deg, #3f71a0 0%, #5a8cc7 100%);\n color: white;\n padding: 8px;\n border-radius: 50%;\n cursor: pointer;\n box-shadow: 0 2px 8px rgba(63, 113, 160, 0.3);\n width: 14px;\n height: 14px;\n --md-icon-size: 20px;\n }\n\n md-icon[back]:hover {\n background: linear-gradient(135deg, #2e5c89 0%, #4a7bb0 100%);\n box-shadow: 0 4px 12px rgba(63, 113, 160, 0.4);\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 }\n }\n\n div[body] {\n display: grid;\n grid-template-columns: 1fr 200px;\n margin: 0px 25px 25px 25px;\n gap: 10px;\n min-height: fit-content;\n\n h3 {\n color: #2e79be;\n font-size: 18px;\n margin: 0px;\n }\n\n & > div {\n display: flex;\n gap: 10px;\n border-radius: 5px;\n }\n\n div[left] {\n flex-direction: column;\n\n div[select] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n background-color: #2ea4df1a;\n border: 1px solid #2ea4df33;\n font-size: 18px;\n padding: 7px 10px;\n border-radius: 5px;\n gap: 12px;\n\n & > div[state] {\n display: flex;\n font-size: 15px;\n margin-right: 12px;\n gap: 10px;\n\n & > span {\n display: flex;\n align-items: center;\n margin-left: 15px;\n gap: 2px;\n }\n }\n }\n\n div[drawing] {\n width: 100%;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border-radius: 5px;\n position: relative;\n }\n\n img {\n width: 100%;\n background-size: contain;\n }\n\n div[grid] {\n display: flex;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n border: 1px #ccc solid;\n justify-content: space-between;\n\n & > div[row] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n flex: 1;\n\n & > div[column] {\n flex: 1;\n border: dashed 1px #2ea4df99;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n }\n }\n\n div[row='1'] div[column] {\n border-left: none !important;\n }\n div[row]:last-of-type div[column] {\n border-right: none !important;\n }\n div[column='1'] {\n border-top: none !important;\n }\n div[column]:last-of-type {\n border-bottom: none !important;\n }\n\n div[cell] {\n &[status='WAIT'],\n &[status='REQUEST'],\n &[status='OVERALL_WAIT'],\n &[status='OVERALL_REQUEST'],\n &[status='PASS'],\n &[status='FAIL'] {\n background-color: #2ea4df1a;\n }\n\n &[active] {\n background-color: #2ea4df99;\n }\n }\n }\n }\n\n div[right] {\n flex-direction: column;\n gap: 15px;\n\n & > div {\n background-color: #ffffff;\n border: 1px solid #cccccc80;\n padding: 11px 12px 15px 12px;\n border-radius: 5px;\n }\n\n div[top] {\n div[content] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 5px;\n align-items: center;\n margin-top: 8px;\n justify-content: space-between;\n\n span {\n display: flex;\n align-items: center;\n min-width: 55px;\n }\n }\n }\n\n div[bottom] {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 10px;\n\n & > div {\n display: flex;\n flex-direction: column;\n gap: 9px;\n\n hr {\n border: 1px #cccccc dashed;\n width: 100%;\n margin: 0;\n }\n }\n\n div[view] {\n flex: 1;\n\n div[status] {\n display: flex;\n align-items: center;\n margin-bottom: 7px;\n }\n\n div[date],\n div[manager] {\n font-size: 14px;\n }\n }\n\n div[edit] {\n flex: 1;\n }\n\n md-elevated-button {\n --md-elevated-button-container-color: #fafafa;\n\n --md-elevated-button-label-text-color: #586878;\n --md-elevated-button-hover-label-text-color: #586878;\n --md-elevated-button-pressed-label-text-color: #586878;\n --md-elevated-button-focus-label-text-color: #586878;\n --md-elevated-button-icon-color: #586878;\n --md-elevated-button-hover-icon-color: #586878;\n --md-elevated-button-pressed-icon-color: #586878;\n --md-elevated-button-focus-icon-color: #586878;\n }\n }\n }\n }\n\n .attachment-info {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n gap: 5px;\n flex-direction: column;\n align-items: flex-start;\n }\n\n .attachment-count {\n font-size: 14px;\n color: #586878;\n }\n .cell-count {\n display: flex;\n align-items: center;\n justify-content: center;\n justify-self: anchor-center;\n align-self: anchor-center;\n width: 22px;\n height: 22px;\n background: #ffffff;\n border: 2px solid #cccccc;\n border-radius: 50%;\n font-weight: 700;\n font-size: 13px;\n line-height: 1;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25);\n }\n .cell-count.green {\n color: #2e7d32;\n border-color: #4bbb4a;\n }\n .cell-count.red {\n color: #b71c1c;\n border-color: #ff4444;\n }\n .cell-count.black {\n color: #333333;\n border-color: #4e5055;\n }\n `\n ]\n\n get context() {\n return {\n title: '층별 시공검측 상세 정보'\n }\n }\n\n private defaultProject = {\n name: '',\n buildingComplex: {\n buildings: []\n }\n }\n @state() project: any = { ...this.defaultProject }\n @state() buildingInspections: any = []\n @state() cellToInspections: Record<string, any[]> = {}\n @state() buildingInspectionSummaryOfProject: any = {}\n @state() buildingInspectionSummaryOfBuildingLevel: any = {}\n @state() selectedBuilding: any = {}\n @state() selectedLevel: any = {}\n @state() selectedInspection: any = {}\n @state() cell: string = ''\n\n @state() listLayer: {\n open: boolean\n cell: string\n items: any[]\n } = { open: false, cell: '', items: [] }\n\n @query('md-filled-select[building]') htmlSelectBuilding\n @query('md-filled-select[level]') htmlSelectLevel\n @query('div[drawing]') drawingContainer!: HTMLDivElement\n\n render() {\n // 그리드 가로, 세로 길이 배열 생성\n const planXScale = Array.from({ length: this.project?.buildingComplex?.planXScale || 0 }, (_, i) => i)\n const planYScale = Array.from({ length: this.project?.buildingComplex?.planYScale || 0 }, (_, i) => i)\n\n return html`\n <div header>\n <h2>\n <md-icon slot=\"icon\" back @click=${() => history.back()}>arrow_back</md-icon>\n ${this.project.name} ${this.selectedBuilding?.name} ${this.selectedLevel?.floorDisplayName}층\n </h2>\n <div button-container>\n <md-elevated-button href=${`project-update/${this.project.id}`}>\n <md-icon slot=\"icon\">assignment</md-icon>프로젝트 정보 수정\n </md-elevated-button>\n <md-elevated-button href=${`project-plan-management/${this.project.id}`}>\n <md-icon slot=\"icon\">description</md-icon>도면 관리\n </md-elevated-button>\n <md-elevated-button @click=${this._openPlanPreviewPopup}>\n <md-icon slot=\"icon\">folder_eye</md-icon>추가 도면 보기\n </md-elevated-button>\n </div>\n </div>\n\n <div body>\n <div left>\n <div select>\n <div>\n <md-filled-select building @change=${this._onSelectBuilding}>\n ${this.project?.buildingComplex?.buildings?.map(building => {\n const selected = building.id === this.selectedBuilding?.id\n\n return html` <md-select-option ?selected=${selected} .value=${building.id}>\n <div slot=\"headline\">${building.name}</div>\n </md-select-option>`\n })}\n </md-filled-select>\n\n <md-filled-select level @change=${this._onSelectBuildingLevel}>\n ${this.selectedBuilding?.buildingLevels?.map(level => {\n const selected = level.id === this.selectedLevel.id\n\n return html`<md-select-option ?selected=${selected} .value=${level.id}>\n <div slot=\"headline\">${level.floor}</div>\n </md-select-option>`\n })}\n </md-filled-select>\n </div>\n\n <div state>\n <span>\n <md-icon request slot=\"icon\">frame_inspect</md-icon> 검측대기\n <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.WAIT.toLowerCase()]}</span>\n </span>\n <span>\n <md-icon request slot=\"icon\">exclamation</md-icon> 검측요청\n <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.REQUEST.toLowerCase()]}</span>\n </span>\n <span>\n <md-icon pass slot=\"icon\">check</md-icon> 합격\n <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.PASS.toLowerCase()]}</span>\n </span>\n <span>\n <md-icon fail slot=\"icon\">close</md-icon> 불합격\n <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.FAIL.toLowerCase()]}</span>\n </span>\n </div>\n </div>\n\n <div drawing>\n <img src=${this.selectedLevel?.mainDrawingImage || '/assets/images/img-drawing-default.png'} />\n\n <div grid>\n ${planXScale.map(\n v =>\n html` <div row=${v}>\n ${planYScale.map(vv => {\n const cellKey = `${v},${vv}`\n const inspections = this.cellToInspections[cellKey] || []\n const count = inspections.length\n let countClass = ''\n if (count > 0) {\n const allPass = inspections.every(i => i.status === BuildingInspectionStatus.PASS)\n const anyFail = inspections.some(i => i.status === BuildingInspectionStatus.FAIL)\n countClass = allPass ? 'green' : anyFail ? 'red' : 'black'\n }\n\n return html`<div column=${vv} cell=${cellKey} @click=${this._onClickGrid}>\n ${count > 0 ? html`<span class=\"cell-count ${countClass}\">${count}</span>` : ''}\n </div>`\n })}\n </div>`\n )}\n </div>\n ${this.listLayer.open\n ? html`<grid-inspection-list-layer\n .items=${this.listLayer.items}\n .anchorEl=${this._getCellElement(this.listLayer.cell)}\n .containerEl=${this.drawingContainer}\n @select=${this._onSelectListItem}\n @close=${this._closeListLayer}\n ></grid-inspection-list-layer>`\n : ''}\n </div>\n </div>\n\n <div right>\n <div top bold>\n <div>신규 등록 현황</div>\n <div content>\n <span>\n <md-icon request slot=\"icon\">frame_inspect</md-icon>\n ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.WAIT.toLowerCase()]}\n </span>\n <span>\n <md-icon request slot=\"icon\">exclamation</md-icon>\n ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.REQUEST.toLowerCase()]}\n </span>\n <span>\n <md-icon pass slot=\"icon\">check</md-icon>\n ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.PASS.toLowerCase()]}\n </span>\n <span>\n <md-icon fail slot=\"icon\">close</md-icon>\n ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.FAIL.toLowerCase()]}\n </span>\n </div>\n </div>\n\n <div bottom>\n <div name bold>층별 공지사항</div>\n <md-elevated-button @click=${e => this._onClicPopupNotice()}>\n 공지사항 확인하기(${this.selectedLevel?.noticeCount || 0})\n </md-elevated-button>\n\n <div name bold>시공검측 세부사항</div>\n ${html`\n <div view>\n <div status>\n ${this._getIconHtmlByStatus(this.selectedInspection.status)}\n <span bold>\n ${(this.selectedInspection.failCount > 0\n ? BUILDING_INSPECTION_RE_STATUS_DISPLAY\n : BUILDING_INSPECTION_STATUS_DISPLAY)[this.selectedInspection.status]}</span\n >\n </div>\n\n <div>\n <div date>공종 : ${this.selectedInspection?.checklist?.constructionType || ''}</div>\n </div>\n\n <hr />\n\n <div>\n <div date>세부 공종 : ${this.selectedInspection?.checklist?.constructionDetailType || ''}</div>\n </div>\n\n <hr />\n\n <div>\n <div date>검측일 : ${this.selectedInspection.requestDate}</div>\n </div>\n\n <hr />\n\n <div manager>\n 담당자 : ${this.selectedInspection?.manager?.name} <br />\n ${this.selectedInspection?.manager?.phone}\n </div>\n\n <hr />\n\n ${this.selectedInspection.memo\n ? html`\n <div>\n <div date>메모 : ${this.selectedInspection.memo}</div>\n </div>\n <hr />\n `\n : html``}\n ${this.selectedInspection.attachments?.length > 0\n ? html`\n <div class=\"attachment-info\">\n <span class=\"attachment-count\">첨부파일: ${this.selectedInspection.attachments.length}개</span>\n <md-elevated-button @click=${() => this._onClickUpdateInspection(1)}>\n <md-icon slot=\"icon\">attach_file</md-icon>첨부파일 보기\n </md-elevated-button>\n </div>\n <hr />\n `\n : html``}\n </div>\n\n <!-- 전층 동일 적용 버튼 -->\n ${this.selectedInspection.status\n ? html`<md-filled-button apply-to-all @click=${() => this._onClickApplyToAll()}>전층 동일 적용</md-filled-button>`\n : html``}\n\n <!-- 검측 정보 등록, 수정 버튼 -->\n ${!this.cell\n ? html``\n : !this.selectedInspection.status\n ? html`<md-outlined-button @click=${() => this._onClickCreateInspection()}>검측 정보 등록 </md-outlined-button>`\n : this.selectedInspection.status == BuildingInspectionStatus.PASS\n ? html`<md-filled-button @click=${() => this._onClickUpdateInspection()}>검측 정보 보기 </md-filled-button> `\n : html`\n <md-filled-button update @click=${() => this._onClickUpdateInspection()}>\n 검측 정보 수정\n </md-filled-button>\n ${this.selectedInspection.status == BuildingInspectionStatus.WAIT\n ? html`<md-filled-button delete @click=${() => this._onClickDeleteInspection()}>\n 삭제\n </md-filled-button>`\n : html``}\n `}\n `}\n </div>\n </div>\n </div>\n `\n }\n\n async pageInitialized(lifecycle: PageLifecycle) {}\n\n async pageUpdated(changes: any, lifecycle: PageLifecycle) {\n if (this.active) {\n const params: any = lifecycle.params\n await this.initProject(lifecycle.resourceId, params.buildingId, params.levelId)\n }\n }\n\n async initProject(projectId: string = '', buildingId: string = '', levelId: string = '') {\n const response = await client.query({\n query: gql`\n query Project(\n $id: String!\n $projectId: String!\n $buildingLevelId: String!\n $params: BuildingInspectionsOfBuildingLevel!\n ) {\n project(id: $id) {\n id\n name\n projectType\n buildingComplex {\n id\n planXScale\n planYScale\n overallConstructorEmails\n taskConstructorEmails\n overallSupervisoryEmails\n taskSupervisoryEmails\n\n buildings {\n id\n name\n }\n }\n }\n\n buildingInspectionSummaryOfProject(projectId: $projectId) {\n wait\n request\n pass\n fail\n }\n\n buildingInspectionSummaryOfBuildingLevel(buildingLevelId: $buildingLevelId) {\n wait\n request\n pass\n fail\n }\n\n buildingInspectionsOfBuildingLevel(params: $params) {\n items {\n id\n cellX\n cellY\n status\n failCount\n requestDate\n checklist {\n constructionType\n constructionDetailType\n }\n creator {\n id\n name\n }\n }\n }\n }\n `,\n variables: {\n id: projectId,\n projectId: projectId,\n buildingLevelId: levelId,\n params: { buildingLevelId: levelId }\n }\n })\n\n if (response.errors) return\n\n this.project = response.data?.project\n this.buildingInspections = response.data?.buildingInspectionsOfBuildingLevel?.items\n this._groupInspectionsByCell()\n this.buildingInspectionSummaryOfProject = response.data?.buildingInspectionSummaryOfProject\n this.buildingInspectionSummaryOfBuildingLevel = response.data?.buildingInspectionSummaryOfBuildingLevel\n\n // buildingId 파라미터가 있으면 선택된 빌딩, 없으면 첫번째 빌딩 선택\n this.selectedBuilding = buildingId\n ? this.project?.buildingComplex?.buildings?.filter(v => v.id === buildingId)[0]\n : this.project?.buildingComplex?.buildings?.[0]\n\n // 선택된 동의 층 리스트 가져오기\n this.selectedBuilding = await this._getBuilding(this.selectedBuilding.id)\n\n // levelId 파라미터가 있으면 선택된 층, 없으면 첫번째 층 선택\n this.selectedLevel = levelId\n ? this.selectedBuilding?.buildingLevels?.filter(v => v.id === levelId)[0]\n : this.selectedBuilding?.buildingLevels?.[0]\n\n // 동, 층이 랜더링 된 후에 select를 위해 이 시점에서 랜더링\n this.selectedBuilding = await { ...this.selectedBuilding }\n\n // 기본 값 셋팅 select\n await this.htmlSelectBuilding.select(this.selectedBuilding.id)\n await this.htmlSelectLevel.select(this.selectedLevel.id)\n }\n\n async _getBuilding(buildingId: string = '') {\n const response = await client.query({\n query: gql`\n query Building($id: String!) {\n building(id: $id) {\n id\n name\n buildingLevels {\n id\n floor\n floorDisplayName\n noticeCount\n mainDrawing {\n id\n name\n fullpath\n }\n mainDrawingImage\n }\n }\n }\n `,\n variables: {\n id: buildingId\n }\n })\n\n if (response.errors) return\n\n return response.data?.building || {}\n }\n\n async _getBuildingInspection(buildingInspectionId: string = '') {\n const response = await client.query({\n query: gql`\n query BuildingInspection($id: String!) {\n buildingInspection(id: $id) {\n id\n cellX\n cellY\n status\n failCount\n requestDate\n memo\n attachments {\n id\n }\n\n checklist {\n id\n name\n constructionType\n constructionDetailType\n location\n inspectionParts\n documentNo\n constructionInspectionDate\n supervisorInspectionDate\n overallConstructorSignature\n taskConstructorSignature\n overallSupervisorySignature\n taskSupervisorySignature\n\n checklistItems {\n id\n name\n sequence\n mainType\n detailType\n inspctionCriteria\n constructionConfirmStatus\n supervisoryConfirmStatus\n checklistItemCommentCount\n checklistItemAttachmentCount\n }\n }\n\n manager {\n userId\n name\n }\n }\n }\n `,\n variables: {\n id: buildingInspectionId\n }\n })\n\n if (response.errors) return\n\n return response.data?.buildingInspection || {}\n }\n\n private async _onSelectBuilding(e) {\n const buildingId = e.target.value\n this.selectedBuilding = await this._getBuilding(buildingId)\n this.selectedLevel = { ...this.selectedBuilding?.buildingLevels?.[0] }\n\n this.refresh()\n }\n\n private _onSelectBuildingLevel(e) {\n // SELECT event는 target, 팝업 Close는 detail\n const buildingLevelId = e?.target?.value || e.detail.buildingLevelId\n this.selectedLevel = {\n ...(this.selectedBuilding?.buildingLevels?.find(v => v.id == buildingLevelId) || {})\n }\n\n this.refresh()\n }\n\n private async _onClickGrid(e) {\n const target = e.currentTarget as HTMLElement\n const cell = target.getAttribute('cell')\n\n // active 속성 모두 제거후 클릭한 셀만 active로 변경\n this.shadowRoot?.querySelectorAll('div[cell][active]').forEach(el => el.removeAttribute('active'))\n target.setAttribute('active', 'true')\n\n const [cellX, cellY] = (cell || '').split(',')\n const items = this.cellToInspections[cell || ''] || []\n\n // 검측이 없으면 기존처럼 등록 가능하도록 선택만 처리\n if (items.length === 0) {\n this._closeListLayer()\n this.selectedInspection = { cellX, cellY }\n this.cell = cell || ''\n return\n }\n\n // 검측이 있으면 레이어 오픈\n this.cell = cell || ''\n this._openListLayer(target, items, this.cell)\n }\n\n private _onClicPopupNotice() {\n openPopup(\n html`<notice-comment-popup\n .buildingLevelId=${this.selectedLevel.id}\n .title=${`${this.selectedBuilding?.name} ${this.selectedLevel?.floor}층 공지사항`}\n @change-comment=${(e: CustomEvent) => {\n if (e.detail.type === 'create') {\n this.selectedLevel.noticeCount++ // 코멘트 카운트 + 1\n } else if (e.detail.type === 'delete') {\n this.selectedLevel.noticeCount-- // 코멘트 카운트 - 1\n }\n\n this.requestUpdate()\n }}\n ></notice-comment-popup>`,\n { backdrop: true, size: 'medium', title: '층별 공지사항' }\n )\n }\n\n _onClickCreateInspection() {\n if (!this.cell) {\n notify({ message: '셀을 선택해주세요.' })\n return\n }\n\n openPopup(\n html`\n <grid-inspection-create-popup\n .projectId=${this.project.id}\n .selectedBuildingId=${this.selectedBuilding.id}\n .selectedBuildingLevelId=${this.selectedLevel.id}\n .cell=${this.cell}\n @requestRefresh=${async (e: CustomEvent) => {\n await this.refresh(e.detail.buildingInspectionId)\n }}\n ></grid-inspection-create-popup>\n `,\n { backdrop: true, size: 'large', title: '검측 요청서 등록' }\n )\n }\n\n _onClickUpdateInspection(initialTab: number = 0) {\n openPopup(\n html`\n <inspection-tab-popup\n .selectedInspection=${this.selectedInspection}\n .project=${this.project}\n .initialTab=${initialTab}\n @modify-checklist=${(e: CustomEvent) => this.validateChecklist(e.detail.checklist)}\n @requestRefresh=${async (e: CustomEvent) => {\n await this.refresh(e.detail.buildingInspectionId)\n }}\n ></inspection-tab-popup>\n `,\n { backdrop: true, size: 'large', title: '검측 요청서 수정' }\n )\n }\n\n async refresh(buildingInspectionId: string = '') {\n // 그리드, 서머리 정보 갱신\n await this.initProject(this.project.id, this.selectedBuilding.id, this.selectedLevel.id)\n // 선택된 검측 정보 갱신\n this.selectedInspection = buildingInspectionId ? await this._getBuildingInspection(buildingInspectionId) : {}\n }\n\n _getIconHtmlByStatus(status: string) {\n if (!status) return ''\n\n if (status == BuildingInspectionStatus.WAIT || status == BuildingInspectionStatus.OVERALL_WAIT) {\n return html`<md-icon request slot=\"icon\">frame_inspect</md-icon>`\n }\n\n if (status == BuildingInspectionStatus.REQUEST || status == BuildingInspectionStatus.OVERALL_REQUEST) {\n return html`<md-icon request slot=\"icon\">exclamation</md-icon>`\n }\n\n if (status == BuildingInspectionStatus.PASS) {\n return html`<md-icon pass slot=\"icon\">check</md-icon>`\n }\n\n return html`<md-icon fail slot=\"icon\">close</md-icon>`\n }\n\n private _groupInspectionsByCell() {\n const map: Record<string, any[]> = {}\n for (const item of this.buildingInspections || []) {\n const key = `${item.cellX},${item.cellY}`\n if (!map[key]) map[key] = []\n map[key].push(item)\n }\n this.cellToInspections = map\n }\n\n private _openListLayer(anchorEl: HTMLElement, items: any[], cell: string) {\n this.listLayer = { open: true, cell, items }\n }\n\n private _closeListLayer() {\n if (!this.listLayer.open) return\n this.listLayer = { open: false, cell: '', items: [] }\n }\n\n private async _onSelectListItem(e: CustomEvent) {\n const id = e.detail?.id\n if (!id) return\n const inspection = await this._getBuildingInspection(id)\n this.selectedInspection = inspection\n this._closeListLayer()\n }\n\n private _getCellElement(cell: string): HTMLElement | null {\n if (!cell) return null\n return this.shadowRoot?.querySelector(`div[cell='${cell}']`) as HTMLElement\n }\n\n private async validateChecklist(checklist: any) {\n try {\n const result = await verifyBiometric()\n if (result.verified) {\n console.log('Verification successful. Proceeding with sensitive action.')\n } else {\n notify({ message: 'Verification failed:' + result.message })\n return\n }\n } catch (error) {\n notify({ message: 'Error during biometric verification:' + error })\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateBuildingInspectionChecklist($buildingInspection: UpdateBuildingInspectionSubmitType!) {\n updateBuildingInspectionChecklist(buildingInspection: $buildingInspection)\n }\n `,\n variables: {\n buildingInspection: {\n id: this.selectedInspection.id,\n checklist: {\n id: checklist.id,\n overallConstructorSignature: checklist.overallConstructorSignature,\n taskConstructorSignature: checklist.taskConstructorSignature,\n overallSupervisorySignature: checklist.overallSupervisorySignature,\n taskSupervisorySignature: checklist.taskSupervisorySignature\n },\n checklistItem: checklist.checklistItems.map(item => ({\n id: item.id,\n constructionConfirmStatus: item.constructionConfirmStatus,\n supervisoryConfirmStatus: item.supervisoryConfirmStatus\n }))\n }\n }\n })\n\n if (!response.errors) {\n notify({ message: '검측 요청서를 등록하였습니다.' })\n this.refresh(this.selectedInspection.id)\n history.back()\n } else {\n notify({ message: response.errors?.[0]?.message || '검측 요청서 등록에 실패하였습니다.', level: 'error' })\n }\n }\n\n async _onClickApplyToAll() {\n if (\n (await OxPrompt.open({\n title: '전층 동일 적용',\n text: '해당 검측을 전층에 동일하게 적용 하시겠습니까?',\n confirmButton: { text: '확인' },\n cancelButton: { text: '취소' }\n })) === false\n ) {\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ApplyToAllBuildingInspection($buildingInspectionId: String!) {\n applyToAllBuildingInspection(buildingInspectionId: $buildingInspectionId)\n }\n `,\n variables: {\n buildingInspectionId: this.selectedInspection.id\n }\n })\n\n if (!response.errors) {\n notify({ message: '전층 동일 적용 완료' })\n this.refresh(this.selectedInspection.id)\n } else {\n notify({ message: response.errors?.[0]?.message || '전층 동일 적용에 실패하였습니다.', level: 'error' })\n }\n }\n\n _openPlanPreviewPopup() {\n openPopup(html`<plan-preview-popup .buildingLevelId=${this.selectedLevel.id}></plan-preview-popup>`, {\n backdrop: true,\n size: 'large',\n title: '추가 도면 보기'\n })\n }\n\n private async _onClickDeleteInspection() {\n if (!this.selectedInspection?.id) {\n notify({ message: '삭제할 검측을 선택해주세요.', level: 'info' })\n return\n }\n\n const confirmed = await OxPrompt.open({\n title: '검측 삭제',\n text: '해당 검측을 삭제하시겠습니까? 삭제 후 되돌릴 수 없습니다.',\n confirmButton: { text: '삭제' },\n cancelButton: { text: '취소' }\n })\n\n if (confirmed === false) return\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n deleteBuildingInspections(ids: $ids)\n }\n `,\n variables: {\n ids: [this.selectedInspection.id]\n }\n })\n\n if (!response.errors) {\n notify({ message: '삭제되었습니다.' })\n this.selectedInspection = {}\n await this.refresh()\n } else {\n notify({ message: response.errors?.[0]?.message || '삭제에 실패하였습니다.', level: 'error' })\n }\n }\n}\n"]}
1
+ {"version":3,"file":"building-inspection-grid-detail.js","sourceRoot":"","sources":["../../../client/pages/building-inspection-grid/building-inspection-grid-detail.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/elevated-button.js'\nimport '@material/web/textfield/outlined-text-field.js'\nimport '@material/web/button/outlined-button.js'\n\nimport { PageView } from '@operato/shell'\nimport { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view'\nimport { css, html } from 'lit'\nimport { customElement, state, query } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport gql from 'graphql-tag'\nimport { notify, openPopup } from '@operato/layout'\nimport './component/notice-comment-popup'\nimport './component/grid-inspection-create-popup'\nimport {\n BUILDING_INSPECTION_STATUS_DISPLAY,\n BUILDING_INSPECTION_RE_STATUS_DISPLAY,\n BuildingInspectionStatus\n} from '../building-inspection/building-inspection-list'\nimport '../checklist/inspection-tab-popup'\nimport { verifyBiometric } from '@things-factory/auth-base/dist-client'\nimport { canDcspMutate } from '@dssp/building-complex/dist-client/utils/privilege'\nimport { OxPrompt } from '@operato/popup'\nimport './component/plan-preview-popup'\nimport './component/grid-inspection-list-layer'\n\n@customElement('building-inspection-grid-detail')\nexport class BuildingInspectionGridDetail extends ScopedElementsMixin(PageView) {\n static styles = [\n css`\n :host {\n display: grid;\n grid-template-rows: 75px auto;\n color: #4e5055;\n\n width: 100%;\n background-color: #f7f7f7;\n overflow-y: auto;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n\n md-filled-button {\n --md-filled-button-container-color: #0595e5;\n --md-filled-button-container-height: 30px;\n --md-filled-button-trailing-space: 15px;\n --md-filled-button-leading-space: 15px;\n }\n md-filled-button[update] {\n --md-filled-button-container-color: #42b382;\n }\n md-filled-button[apply-to-all] {\n --md-filled-button-container-color: #aaa;\n }\n md-filled-button[delete] {\n --md-filled-button-container-color: #ff4444;\n }\n md-outlined-button {\n color: #586878;\n font-weight: bold;\n --md-outlined-button-label-text-size: 13px;\n --md-outlined-button-container-height: 30px;\n --md-outlined-button-trailing-space: 15px;\n --md-outlined-button-leading-space: 15px;\n }\n md-filled-select {\n width: auto;\n min-width: 150px;\n --md-filled-select-text-field-container-color: transparent;\n --md-filled-select-text-field-active-indicator-color: #999;\n --md-filled-select-text-field-input-text-size: 14px;\n --md-filled-select-text-field-input-text-weight: bold;\n --md-filled-select-text-field-input-text-line-height: 6px;\n }\n md-filled-select[level] {\n min-width: 110px;\n margin-left: 20px;\n }\n\n md-icon[request],\n md-icon[pass],\n md-icon[fail] {\n width: 20px;\n height: 20px;\n margin-right: 4px;\n border-radius: 5px;\n font-size: 21px;\n font-weight: 700;\n color: #fff;\n }\n md-icon[request] {\n background-color: #4e5055;\n }\n md-icon[pass] {\n background-color: #4bbb4a;\n }\n md-icon[fail] {\n background-color: #ff4444;\n }\n\n *[bold] {\n font-weight: bold;\n }\n\n div[header] {\n display: flex;\n margin: 0px 20px;\n\n h2 {\n display: flex;\n gap: 7px;\n flex: 0.5;\n color: #3f71a0;\n font-size: 18px;\n\n md-icon[back] {\n background: linear-gradient(135deg, #3f71a0 0%, #5a8cc7 100%);\n color: white;\n padding: 8px;\n border-radius: 50%;\n cursor: pointer;\n box-shadow: 0 2px 8px rgba(63, 113, 160, 0.3);\n width: 14px;\n height: 14px;\n --md-icon-size: 20px;\n }\n\n md-icon[back]:hover {\n background: linear-gradient(135deg, #2e5c89 0%, #4a7bb0 100%);\n box-shadow: 0 4px 12px rgba(63, 113, 160, 0.4);\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 }\n }\n\n div[body] {\n display: grid;\n grid-template-columns: 1fr 200px;\n margin: 0px 25px 25px 25px;\n gap: 10px;\n min-height: fit-content;\n\n h3 {\n color: #2e79be;\n font-size: 18px;\n margin: 0px;\n }\n\n & > div {\n display: flex;\n gap: 10px;\n border-radius: 5px;\n }\n\n div[left] {\n flex-direction: column;\n\n div[select] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n background-color: #2ea4df1a;\n border: 1px solid #2ea4df33;\n font-size: 18px;\n padding: 7px 10px;\n border-radius: 5px;\n gap: 12px;\n\n & > div[state] {\n display: flex;\n font-size: 15px;\n margin-right: 12px;\n gap: 10px;\n\n & > span {\n display: flex;\n align-items: center;\n margin-left: 15px;\n gap: 2px;\n }\n }\n }\n\n div[drawing] {\n width: 100%;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border-radius: 5px;\n position: relative;\n }\n\n img {\n width: 100%;\n background-size: contain;\n }\n\n div[grid] {\n display: flex;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n border: 1px #ccc solid;\n justify-content: space-between;\n\n & > div[row] {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n flex: 1;\n\n & > div[column] {\n flex: 1;\n border: dashed 1px #2ea4df99;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n }\n }\n\n div[row='1'] div[column] {\n border-left: none !important;\n }\n div[row]:last-of-type div[column] {\n border-right: none !important;\n }\n div[column='1'] {\n border-top: none !important;\n }\n div[column]:last-of-type {\n border-bottom: none !important;\n }\n\n div[cell] {\n &[status='WAIT'],\n &[status='REQUEST'],\n &[status='OVERALL_WAIT'],\n &[status='OVERALL_REQUEST'],\n &[status='PASS'],\n &[status='FAIL'] {\n background-color: #2ea4df1a;\n }\n\n &[active] {\n background-color: #2ea4df99;\n }\n }\n }\n }\n\n div[right] {\n flex-direction: column;\n gap: 15px;\n\n & > div {\n background-color: #ffffff;\n border: 1px solid #cccccc80;\n padding: 11px 12px 15px 12px;\n border-radius: 5px;\n }\n\n div[top] {\n div[content] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 5px;\n align-items: center;\n margin-top: 8px;\n justify-content: space-between;\n\n span {\n display: flex;\n align-items: center;\n min-width: 55px;\n }\n }\n }\n\n div[bottom] {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 10px;\n\n & > div {\n display: flex;\n flex-direction: column;\n gap: 9px;\n\n hr {\n border: 1px #cccccc dashed;\n width: 100%;\n margin: 0;\n }\n }\n\n div[view] {\n flex: 1;\n\n div[status] {\n display: flex;\n align-items: center;\n margin-bottom: 7px;\n }\n\n div[date],\n div[manager] {\n font-size: 14px;\n }\n }\n\n div[edit] {\n flex: 1;\n }\n\n md-elevated-button {\n --md-elevated-button-container-color: #fafafa;\n\n --md-elevated-button-label-text-color: #586878;\n --md-elevated-button-hover-label-text-color: #586878;\n --md-elevated-button-pressed-label-text-color: #586878;\n --md-elevated-button-focus-label-text-color: #586878;\n --md-elevated-button-icon-color: #586878;\n --md-elevated-button-hover-icon-color: #586878;\n --md-elevated-button-pressed-icon-color: #586878;\n --md-elevated-button-focus-icon-color: #586878;\n }\n }\n }\n }\n\n .attachment-info {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n gap: 5px;\n flex-direction: column;\n align-items: flex-start;\n }\n\n .attachment-count {\n font-size: 14px;\n color: #586878;\n }\n .cell-count {\n display: flex;\n align-items: center;\n justify-content: center;\n justify-self: anchor-center;\n align-self: anchor-center;\n width: 22px;\n height: 22px;\n background: #ffffff;\n border: 2px solid #cccccc;\n border-radius: 50%;\n font-weight: 700;\n font-size: 13px;\n line-height: 1;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25);\n }\n .cell-count.green {\n color: #2e7d32;\n border-color: #4bbb4a;\n }\n .cell-count.red {\n color: #b71c1c;\n border-color: #ff4444;\n }\n .cell-count.black {\n color: #333333;\n border-color: #4e5055;\n }\n `\n ]\n\n get context() {\n return {\n title: '층별 시공검측 상세 정보'\n }\n }\n\n private defaultProject = {\n name: '',\n buildingComplex: {\n buildings: []\n }\n }\n @state() project: any = { ...this.defaultProject }\n @state() buildingInspections: any = []\n @state() cellToInspections: Record<string, any[]> = {}\n @state() buildingInspectionSummaryOfProject: any = {}\n @state() buildingInspectionSummaryOfBuildingLevel: any = {}\n @state() selectedBuilding: any = {}\n @state() selectedLevel: any = {}\n @state() selectedInspection: any = {}\n @state() cell: string = ''\n\n @state() listLayer: {\n open: boolean\n cell: string\n items: any[]\n } = { open: false, cell: '', items: [] }\n\n /** 뮤테이션 가능 여부('dcsp guest' 권한 보유 시 false) — 게스트에게는 생성/수정/삭제 버튼을 숨긴다 */\n @state() private canMutate = false\n\n async connectedCallback() {\n super.connectedCallback()\n this.canMutate = await canDcspMutate()\n this.updateContext()\n }\n\n @query('md-filled-select[building]') htmlSelectBuilding\n @query('md-filled-select[level]') htmlSelectLevel\n @query('div[drawing]') drawingContainer!: HTMLDivElement\n\n render() {\n // 그리드 가로, 세로 길이 배열 생성\n const planXScale = Array.from({ length: this.project?.buildingComplex?.planXScale || 0 }, (_, i) => i)\n const planYScale = Array.from({ length: this.project?.buildingComplex?.planYScale || 0 }, (_, i) => i)\n\n return html`\n <div header>\n <h2>\n <md-icon slot=\"icon\" back @click=${() => history.back()}>arrow_back</md-icon>\n ${this.project.name} ${this.selectedBuilding?.name} ${this.selectedLevel?.floorDisplayName}층\n </h2>\n <div button-container>\n <md-elevated-button href=${`project-update/${this.project.id}`}>\n <md-icon slot=\"icon\">assignment</md-icon>프로젝트 정보 수정\n </md-elevated-button>\n <md-elevated-button href=${`project-plan-management/${this.project.id}`}>\n <md-icon slot=\"icon\">description</md-icon>도면 관리\n </md-elevated-button>\n <md-elevated-button @click=${this._openPlanPreviewPopup}>\n <md-icon slot=\"icon\">folder_eye</md-icon>추가 도면 보기\n </md-elevated-button>\n </div>\n </div>\n\n <div body>\n <div left>\n <div select>\n <div>\n <md-filled-select building @change=${this._onSelectBuilding}>\n ${this.project?.buildingComplex?.buildings?.map(building => {\n const selected = building.id === this.selectedBuilding?.id\n\n return html` <md-select-option ?selected=${selected} .value=${building.id}>\n <div slot=\"headline\">${building.name}</div>\n </md-select-option>`\n })}\n </md-filled-select>\n\n <md-filled-select level @change=${this._onSelectBuildingLevel}>\n ${this.selectedBuilding?.buildingLevels?.map(level => {\n const selected = level.id === this.selectedLevel.id\n\n return html`<md-select-option ?selected=${selected} .value=${level.id}>\n <div slot=\"headline\">${level.floor}</div>\n </md-select-option>`\n })}\n </md-filled-select>\n </div>\n\n <div state>\n <span>\n <md-icon request slot=\"icon\">frame_inspect</md-icon> 검측대기\n <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.WAIT.toLowerCase()]}</span>\n </span>\n <span>\n <md-icon request slot=\"icon\">exclamation</md-icon> 검측요청\n <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.REQUEST.toLowerCase()]}</span>\n </span>\n <span>\n <md-icon pass slot=\"icon\">check</md-icon> 합격\n <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.PASS.toLowerCase()]}</span>\n </span>\n <span>\n <md-icon fail slot=\"icon\">close</md-icon> 불합격\n <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.FAIL.toLowerCase()]}</span>\n </span>\n </div>\n </div>\n\n <div drawing>\n <img src=${this.selectedLevel?.mainDrawingImage || '/assets/images/img-drawing-default.png'} />\n\n <div grid>\n ${planXScale.map(\n v =>\n html` <div row=${v}>\n ${planYScale.map(vv => {\n const cellKey = `${v},${vv}`\n const inspections = this.cellToInspections[cellKey] || []\n const count = inspections.length\n let countClass = ''\n if (count > 0) {\n const allPass = inspections.every(i => i.status === BuildingInspectionStatus.PASS)\n const anyFail = inspections.some(i => i.status === BuildingInspectionStatus.FAIL)\n countClass = allPass ? 'green' : anyFail ? 'red' : 'black'\n }\n\n return html`<div column=${vv} cell=${cellKey} @click=${this._onClickGrid}>\n ${count > 0 ? html`<span class=\"cell-count ${countClass}\">${count}</span>` : ''}\n </div>`\n })}\n </div>`\n )}\n </div>\n ${this.listLayer.open\n ? html`<grid-inspection-list-layer\n .items=${this.listLayer.items}\n .anchorEl=${this._getCellElement(this.listLayer.cell)}\n .containerEl=${this.drawingContainer}\n @select=${this._onSelectListItem}\n @close=${this._closeListLayer}\n ></grid-inspection-list-layer>`\n : ''}\n </div>\n </div>\n\n <div right>\n <div top bold>\n <div>신규 등록 현황</div>\n <div content>\n <span>\n <md-icon request slot=\"icon\">frame_inspect</md-icon>\n ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.WAIT.toLowerCase()]}\n </span>\n <span>\n <md-icon request slot=\"icon\">exclamation</md-icon>\n ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.REQUEST.toLowerCase()]}\n </span>\n <span>\n <md-icon pass slot=\"icon\">check</md-icon>\n ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.PASS.toLowerCase()]}\n </span>\n <span>\n <md-icon fail slot=\"icon\">close</md-icon>\n ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.FAIL.toLowerCase()]}\n </span>\n </div>\n </div>\n\n <div bottom>\n <div name bold>층별 공지사항</div>\n <md-elevated-button @click=${e => this._onClicPopupNotice()}>\n 공지사항 확인하기(${this.selectedLevel?.noticeCount || 0})\n </md-elevated-button>\n\n <div name bold>시공검측 세부사항</div>\n ${html`\n <div view>\n <div status>\n ${this._getIconHtmlByStatus(this.selectedInspection.status)}\n <span bold>\n ${(this.selectedInspection.failCount > 0\n ? BUILDING_INSPECTION_RE_STATUS_DISPLAY\n : BUILDING_INSPECTION_STATUS_DISPLAY)[this.selectedInspection.status]}</span\n >\n </div>\n\n <div>\n <div date>공종 : ${this.selectedInspection?.checklist?.constructionType || ''}</div>\n </div>\n\n <hr />\n\n <div>\n <div date>세부 공종 : ${this.selectedInspection?.checklist?.constructionDetailType || ''}</div>\n </div>\n\n <hr />\n\n <div>\n <div date>검측일 : ${this.selectedInspection.requestDate}</div>\n </div>\n\n <hr />\n\n <div manager>\n 담당자 : ${this.selectedInspection?.manager?.name} <br />\n ${this.selectedInspection?.manager?.phone}\n </div>\n\n <hr />\n\n ${this.selectedInspection.memo\n ? html`\n <div>\n <div date>메모 : ${this.selectedInspection.memo}</div>\n </div>\n <hr />\n `\n : html``}\n ${this.selectedInspection.attachments?.length > 0\n ? html`\n <div class=\"attachment-info\">\n <span class=\"attachment-count\">첨부파일: ${this.selectedInspection.attachments.length}개</span>\n <md-elevated-button @click=${() => this._onClickUpdateInspection(1)}>\n <md-icon slot=\"icon\">attach_file</md-icon>첨부파일 보기\n </md-elevated-button>\n </div>\n <hr />\n `\n : html``}\n </div>\n\n <!-- 전층 동일 적용 버튼 -->\n ${this.canMutate && this.selectedInspection.status\n ? html`<md-filled-button apply-to-all @click=${() => this._onClickApplyToAll()}>전층 동일 적용</md-filled-button>`\n : html``}\n\n <!-- 검측 정보 등록, 수정 버튼 -->\n ${!this.cell\n ? html``\n : !this.selectedInspection.status\n ? this.canMutate\n ? html`<md-outlined-button @click=${() => this._onClickCreateInspection()}>검측 정보 등록 </md-outlined-button>`\n : html``\n : this.selectedInspection.status == BuildingInspectionStatus.PASS\n ? html`<md-filled-button @click=${() => this._onClickUpdateInspection()}>검측 정보 보기 </md-filled-button> `\n : this.canMutate\n ? html`\n <md-filled-button update @click=${() => this._onClickUpdateInspection()}>\n 검측 정보 수정\n </md-filled-button>\n ${this.selectedInspection.status == BuildingInspectionStatus.WAIT\n ? html`<md-filled-button delete @click=${() => this._onClickDeleteInspection()}>\n 삭제\n </md-filled-button>`\n : html``}\n `\n : html``}\n `}\n </div>\n </div>\n </div>\n `\n }\n\n async pageInitialized(lifecycle: PageLifecycle) {}\n\n async pageUpdated(changes: any, lifecycle: PageLifecycle) {\n if (this.active) {\n const params: any = lifecycle.params\n await this.initProject(lifecycle.resourceId, params.buildingId, params.levelId)\n }\n }\n\n async initProject(projectId: string = '', buildingId: string = '', levelId: string = '') {\n const response = await client.query({\n query: gql`\n query Project(\n $id: String!\n $projectId: String!\n $buildingLevelId: String!\n $params: BuildingInspectionsOfBuildingLevel!\n ) {\n project(id: $id) {\n id\n name\n projectType\n buildingComplex {\n id\n planXScale\n planYScale\n overallConstructorEmails\n taskConstructorEmails\n overallSupervisoryEmails\n taskSupervisoryEmails\n\n buildings {\n id\n name\n }\n }\n }\n\n buildingInspectionSummaryOfProject(projectId: $projectId) {\n wait\n request\n pass\n fail\n }\n\n buildingInspectionSummaryOfBuildingLevel(buildingLevelId: $buildingLevelId) {\n wait\n request\n pass\n fail\n }\n\n buildingInspectionsOfBuildingLevel(params: $params) {\n items {\n id\n cellX\n cellY\n status\n failCount\n requestDate\n checklist {\n constructionType\n constructionDetailType\n }\n creator {\n id\n name\n }\n }\n }\n }\n `,\n variables: {\n id: projectId,\n projectId: projectId,\n buildingLevelId: levelId,\n params: { buildingLevelId: levelId }\n }\n })\n\n if (response.errors) return\n\n this.project = response.data?.project\n this.buildingInspections = response.data?.buildingInspectionsOfBuildingLevel?.items\n this._groupInspectionsByCell()\n this.buildingInspectionSummaryOfProject = response.data?.buildingInspectionSummaryOfProject\n this.buildingInspectionSummaryOfBuildingLevel = response.data?.buildingInspectionSummaryOfBuildingLevel\n\n // buildingId 파라미터가 있으면 선택된 빌딩, 없으면 첫번째 빌딩 선택\n this.selectedBuilding = buildingId\n ? this.project?.buildingComplex?.buildings?.filter(v => v.id === buildingId)[0]\n : this.project?.buildingComplex?.buildings?.[0]\n\n // 선택된 동의 층 리스트 가져오기\n this.selectedBuilding = await this._getBuilding(this.selectedBuilding.id)\n\n // levelId 파라미터가 있으면 선택된 층, 없으면 첫번째 층 선택\n this.selectedLevel = levelId\n ? this.selectedBuilding?.buildingLevels?.filter(v => v.id === levelId)[0]\n : this.selectedBuilding?.buildingLevels?.[0]\n\n // 동, 층이 랜더링 된 후에 select를 위해 이 시점에서 랜더링\n this.selectedBuilding = await { ...this.selectedBuilding }\n\n // 기본 값 셋팅 select\n await this.htmlSelectBuilding.select(this.selectedBuilding.id)\n await this.htmlSelectLevel.select(this.selectedLevel.id)\n }\n\n async _getBuilding(buildingId: string = '') {\n const response = await client.query({\n query: gql`\n query Building($id: String!) {\n building(id: $id) {\n id\n name\n buildingLevels {\n id\n floor\n floorDisplayName\n noticeCount\n mainDrawing {\n id\n name\n fullpath\n }\n mainDrawingImage\n }\n }\n }\n `,\n variables: {\n id: buildingId\n }\n })\n\n if (response.errors) return\n\n return response.data?.building || {}\n }\n\n async _getBuildingInspection(buildingInspectionId: string = '') {\n const response = await client.query({\n query: gql`\n query BuildingInspection($id: String!) {\n buildingInspection(id: $id) {\n id\n cellX\n cellY\n status\n failCount\n requestDate\n memo\n attachments {\n id\n }\n\n checklist {\n id\n name\n constructionType\n constructionDetailType\n location\n inspectionParts\n documentNo\n constructionInspectionDate\n supervisorInspectionDate\n overallConstructorSignature\n taskConstructorSignature\n overallSupervisorySignature\n taskSupervisorySignature\n\n checklistItems {\n id\n name\n sequence\n mainType\n detailType\n inspctionCriteria\n constructionConfirmStatus\n supervisoryConfirmStatus\n checklistItemCommentCount\n checklistItemAttachmentCount\n }\n }\n\n manager {\n userId\n name\n }\n }\n }\n `,\n variables: {\n id: buildingInspectionId\n }\n })\n\n if (response.errors) return\n\n return response.data?.buildingInspection || {}\n }\n\n private async _onSelectBuilding(e) {\n const buildingId = e.target.value\n this.selectedBuilding = await this._getBuilding(buildingId)\n this.selectedLevel = { ...this.selectedBuilding?.buildingLevels?.[0] }\n\n this.refresh()\n }\n\n private _onSelectBuildingLevel(e) {\n // SELECT event는 target, 팝업 Close는 detail\n const buildingLevelId = e?.target?.value || e.detail.buildingLevelId\n this.selectedLevel = {\n ...(this.selectedBuilding?.buildingLevels?.find(v => v.id == buildingLevelId) || {})\n }\n\n this.refresh()\n }\n\n private async _onClickGrid(e) {\n const target = e.currentTarget as HTMLElement\n const cell = target.getAttribute('cell')\n\n // active 속성 모두 제거후 클릭한 셀만 active로 변경\n this.shadowRoot?.querySelectorAll('div[cell][active]').forEach(el => el.removeAttribute('active'))\n target.setAttribute('active', 'true')\n\n const [cellX, cellY] = (cell || '').split(',')\n const items = this.cellToInspections[cell || ''] || []\n\n // 검측이 없으면 기존처럼 등록 가능하도록 선택만 처리\n if (items.length === 0) {\n this._closeListLayer()\n this.selectedInspection = { cellX, cellY }\n this.cell = cell || ''\n return\n }\n\n // 검측이 있으면 레이어 오픈\n this.cell = cell || ''\n this._openListLayer(target, items, this.cell)\n }\n\n private _onClicPopupNotice() {\n openPopup(\n html`<notice-comment-popup\n .buildingLevelId=${this.selectedLevel.id}\n .title=${`${this.selectedBuilding?.name} ${this.selectedLevel?.floor}층 공지사항`}\n @change-comment=${(e: CustomEvent) => {\n if (e.detail.type === 'create') {\n this.selectedLevel.noticeCount++ // 코멘트 카운트 + 1\n } else if (e.detail.type === 'delete') {\n this.selectedLevel.noticeCount-- // 코멘트 카운트 - 1\n }\n\n this.requestUpdate()\n }}\n ></notice-comment-popup>`,\n { backdrop: true, size: 'medium', title: '층별 공지사항' }\n )\n }\n\n _onClickCreateInspection() {\n if (!this.cell) {\n notify({ message: '셀을 선택해주세요.' })\n return\n }\n\n openPopup(\n html`\n <grid-inspection-create-popup\n .projectId=${this.project.id}\n .selectedBuildingId=${this.selectedBuilding.id}\n .selectedBuildingLevelId=${this.selectedLevel.id}\n .cell=${this.cell}\n @requestRefresh=${async (e: CustomEvent) => {\n await this.refresh(e.detail.buildingInspectionId)\n }}\n ></grid-inspection-create-popup>\n `,\n { backdrop: true, size: 'large', title: '검측 요청서 등록' }\n )\n }\n\n _onClickUpdateInspection(initialTab: number = 0) {\n openPopup(\n html`\n <inspection-tab-popup\n .selectedInspection=${this.selectedInspection}\n .project=${this.project}\n .initialTab=${initialTab}\n @modify-checklist=${(e: CustomEvent) => this.validateChecklist(e.detail.checklist)}\n @requestRefresh=${async (e: CustomEvent) => {\n await this.refresh(e.detail.buildingInspectionId)\n }}\n ></inspection-tab-popup>\n `,\n { backdrop: true, size: 'large', title: '검측 요청서 수정' }\n )\n }\n\n async refresh(buildingInspectionId: string = '') {\n // 그리드, 서머리 정보 갱신\n await this.initProject(this.project.id, this.selectedBuilding.id, this.selectedLevel.id)\n // 선택된 검측 정보 갱신\n this.selectedInspection = buildingInspectionId ? await this._getBuildingInspection(buildingInspectionId) : {}\n }\n\n _getIconHtmlByStatus(status: string) {\n if (!status) return ''\n\n if (status == BuildingInspectionStatus.WAIT || status == BuildingInspectionStatus.OVERALL_WAIT) {\n return html`<md-icon request slot=\"icon\">frame_inspect</md-icon>`\n }\n\n if (status == BuildingInspectionStatus.REQUEST || status == BuildingInspectionStatus.OVERALL_REQUEST) {\n return html`<md-icon request slot=\"icon\">exclamation</md-icon>`\n }\n\n if (status == BuildingInspectionStatus.PASS) {\n return html`<md-icon pass slot=\"icon\">check</md-icon>`\n }\n\n return html`<md-icon fail slot=\"icon\">close</md-icon>`\n }\n\n private _groupInspectionsByCell() {\n const map: Record<string, any[]> = {}\n for (const item of this.buildingInspections || []) {\n const key = `${item.cellX},${item.cellY}`\n if (!map[key]) map[key] = []\n map[key].push(item)\n }\n this.cellToInspections = map\n }\n\n private _openListLayer(anchorEl: HTMLElement, items: any[], cell: string) {\n this.listLayer = { open: true, cell, items }\n }\n\n private _closeListLayer() {\n if (!this.listLayer.open) return\n this.listLayer = { open: false, cell: '', items: [] }\n }\n\n private async _onSelectListItem(e: CustomEvent) {\n const id = e.detail?.id\n if (!id) return\n const inspection = await this._getBuildingInspection(id)\n this.selectedInspection = inspection\n this._closeListLayer()\n }\n\n private _getCellElement(cell: string): HTMLElement | null {\n if (!cell) return null\n return this.shadowRoot?.querySelector(`div[cell='${cell}']`) as HTMLElement\n }\n\n private async validateChecklist(checklist: any) {\n try {\n const result = await verifyBiometric()\n if (result.verified) {\n console.log('Verification successful. Proceeding with sensitive action.')\n } else {\n notify({ message: 'Verification failed:' + result.message })\n return\n }\n } catch (error) {\n notify({ message: 'Error during biometric verification:' + error })\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateBuildingInspectionChecklist($buildingInspection: UpdateBuildingInspectionSubmitType!) {\n updateBuildingInspectionChecklist(buildingInspection: $buildingInspection)\n }\n `,\n variables: {\n buildingInspection: {\n id: this.selectedInspection.id,\n checklist: {\n id: checklist.id,\n overallConstructorSignature: checklist.overallConstructorSignature,\n taskConstructorSignature: checklist.taskConstructorSignature,\n overallSupervisorySignature: checklist.overallSupervisorySignature,\n taskSupervisorySignature: checklist.taskSupervisorySignature\n },\n checklistItem: checklist.checklistItems.map(item => ({\n id: item.id,\n constructionConfirmStatus: item.constructionConfirmStatus,\n supervisoryConfirmStatus: item.supervisoryConfirmStatus\n }))\n }\n }\n })\n\n if (!response.errors) {\n notify({ message: '검측 요청서를 등록하였습니다.' })\n this.refresh(this.selectedInspection.id)\n history.back()\n } else {\n notify({ message: response.errors?.[0]?.message || '검측 요청서 등록에 실패하였습니다.', level: 'error' })\n }\n }\n\n async _onClickApplyToAll() {\n if (\n (await OxPrompt.open({\n title: '전층 동일 적용',\n text: '해당 검측을 전층에 동일하게 적용 하시겠습니까?',\n confirmButton: { text: '확인' },\n cancelButton: { text: '취소' }\n })) === false\n ) {\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ApplyToAllBuildingInspection($buildingInspectionId: String!) {\n applyToAllBuildingInspection(buildingInspectionId: $buildingInspectionId)\n }\n `,\n variables: {\n buildingInspectionId: this.selectedInspection.id\n }\n })\n\n if (!response.errors) {\n notify({ message: '전층 동일 적용 완료' })\n this.refresh(this.selectedInspection.id)\n } else {\n notify({ message: response.errors?.[0]?.message || '전층 동일 적용에 실패하였습니다.', level: 'error' })\n }\n }\n\n _openPlanPreviewPopup() {\n openPopup(html`<plan-preview-popup .buildingLevelId=${this.selectedLevel.id}></plan-preview-popup>`, {\n backdrop: true,\n size: 'large',\n title: '추가 도면 보기'\n })\n }\n\n private async _onClickDeleteInspection() {\n if (!this.selectedInspection?.id) {\n notify({ message: '삭제할 검측을 선택해주세요.', level: 'info' })\n return\n }\n\n const confirmed = await OxPrompt.open({\n title: '검측 삭제',\n text: '해당 검측을 삭제하시겠습니까? 삭제 후 되돌릴 수 없습니다.',\n confirmButton: { text: '삭제' },\n cancelButton: { text: '취소' }\n })\n\n if (confirmed === false) return\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n deleteBuildingInspections(ids: $ids)\n }\n `,\n variables: {\n ids: [this.selectedInspection.id]\n }\n })\n\n if (!response.errors) {\n notify({ message: '삭제되었습니다.' })\n this.selectedInspection = {}\n await this.refresh()\n } else {\n notify({ message: response.errors?.[0]?.message || '삭제에 실패하였습니다.', level: 'error' })\n }\n }\n}\n"]}
@@ -8,6 +8,7 @@ import { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles';
8
8
  import { notify } from '@operato/layout';
9
9
  import { store, User } from '@operato/shell';
10
10
  import { OxPrompt } from '@operato/popup/ox-prompt.js';
11
+ import { canDcspMutate } from '@dssp/building-complex/dist-client/utils/privilege';
11
12
  let NoticeCommentPopup = class NoticeCommentPopup extends LitElement {
12
13
  constructor() {
13
14
  super(...arguments);
@@ -17,6 +18,12 @@ let NoticeCommentPopup = class NoticeCommentPopup extends LitElement {
17
18
  this.noticeComments = [];
18
19
  this.comment = '';
19
20
  this.user = {};
21
+ /** 뮤테이션 가능 여부('dcsp guest' 권한 보유 시 false) — 게스트에게는 생성/수정/삭제 버튼을 숨긴다 */
22
+ this.canMutate = false;
23
+ }
24
+ async connectedCallback() {
25
+ super.connectedCallback();
26
+ this.canMutate = await canDcspMutate();
20
27
  }
21
28
  render() {
22
29
  return html `
@@ -31,7 +38,7 @@ let NoticeCommentPopup = class NoticeCommentPopup extends LitElement {
31
38
  <span creator><md-icon slot="icon">account_circle</md-icon> ${comment.creator.name}</span>
32
39
  <span createdAt>
33
40
  <md-icon slot="icon">schedule</md-icon> ${this._formatDate(comment.createdAt)}
34
- ${comment.creator.email === this.user.email
41
+ ${this.canMutate && comment.creator.email === this.user.email
35
42
  ? html ` <md-icon delete slot="icon" @click=${() => this._deleteComment(comment.id)}>delete</md-icon>`
36
43
  : ''}
37
44
  </span>
@@ -45,7 +52,11 @@ let NoticeCommentPopup = class NoticeCommentPopup extends LitElement {
45
52
  <textarea .value=${this.comment || ''} @input=${this._onInputChange}></textarea>
46
53
 
47
54
  <div button-container>
48
- <md-elevated-button blue @click=${this._createComment}> <md-icon slot="icon">task</md-icon>저장 </md-elevated-button>
55
+ ${this.canMutate
56
+ ? html `<md-elevated-button blue @click=${this._createComment}>
57
+ <md-icon slot="icon">task</md-icon>저장
58
+ </md-elevated-button>`
59
+ : ''}
49
60
  <md-elevated-button @click=${this._close}> <md-icon slot="icon">cancel</md-icon>취소 </md-elevated-button>
50
61
  </div>
51
62
  </div>
@@ -294,6 +305,10 @@ __decorate([
294
305
  state(),
295
306
  __metadata("design:type", User)
296
307
  ], NoticeCommentPopup.prototype, "user", void 0);
308
+ __decorate([
309
+ state(),
310
+ __metadata("design:type", Object)
311
+ ], NoticeCommentPopup.prototype, "canMutate", void 0);
297
312
  __decorate([
298
313
  query('div[comments-container]'),
299
314
  __metadata("design:type", HTMLDivElement)