@dssp/supervision 1.0.0-alpha.66 → 1.0.0-alpha.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.js +1 -0
- package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.js.map +1 -1
- package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js +1 -0
- package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js.map +1 -1
- package/dist-client/pages/building-inspection/building-inspection-detail-camera.js +1 -0
- package/dist-client/pages/building-inspection/building-inspection-detail-camera.js.map +1 -1
- package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +2 -0
- package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +16 -0
- package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -1
- package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js +1 -0
- package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js.map +1 -1
- package/dist-client/pages/building-inspection/building-inspection-management.d.ts +72 -0
- package/dist-client/pages/building-inspection/building-inspection-management.js +1256 -0
- package/dist-client/pages/building-inspection/building-inspection-management.js.map +1 -0
- package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js +8 -3
- package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js.map +1 -1
- package/dist-client/pages/building-inspection/component/image-preview-popup.js +0 -3
- package/dist-client/pages/building-inspection/component/image-preview-popup.js.map +1 -1
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +5 -0
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js +62 -3
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js.map +1 -1
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +1 -0
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js +8 -2
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js.map +1 -1
- package/dist-client/pages/building-inspection/component/inspection-event-provider.js +3 -1
- package/dist-client/pages/building-inspection/component/inspection-event-provider.js.map +1 -1
- package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.d.ts +3 -0
- package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.js +791 -0
- package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.js.map +1 -0
- package/dist-client/pages/checklist/checklist-view.js +76 -5
- package/dist-client/pages/checklist/checklist-view.js.map +1 -1
- package/dist-client/pages/checklist-database/checklist-database.d.ts +35 -0
- package/dist-client/pages/checklist-database/checklist-database.js +539 -0
- package/dist-client/pages/checklist-database/checklist-database.js.map +1 -0
- package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.d.ts +2 -0
- package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.js +242 -0
- package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.js.map +1 -0
- package/dist-client/pages/checklist-template/construction-checklist-template-list.d.ts +55 -0
- package/dist-client/pages/checklist-template/construction-checklist-template-list.js +409 -0
- package/dist-client/pages/checklist-template/construction-checklist-template-list.js.map +1 -0
- package/dist-client/pages/project-checklist/project-checklist-management.d.ts +50 -0
- package/dist-client/pages/project-checklist/project-checklist-management.js +910 -0
- package/dist-client/pages/project-checklist/project-checklist-management.js.map +1 -0
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +12 -0
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/action-plan/action-plan-mutation.js +5 -6
- package/dist-server/service/action-plan/action-plan-mutation.js.map +1 -1
- package/dist-server/service/action-plan/action-plan-query.d.ts +2 -2
- package/dist-server/service/action-plan/action-plan-query.js +5 -11
- package/dist-server/service/action-plan/action-plan-query.js.map +1 -1
- package/dist-server/service/building-inspection/building-inspection-mutation.js +3 -3
- package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -1
- package/dist-server/service/building-inspection/building-inspection-query.d.ts +2 -2
- package/dist-server/service/building-inspection/building-inspection-query.js +19 -22
- package/dist-server/service/building-inspection/building-inspection-query.js.map +1 -1
- package/dist-server/service/building-inspection/building-inspection-type.d.ts +1 -0
- package/dist-server/service/building-inspection/building-inspection-type.js +4 -0
- package/dist-server/service/building-inspection/building-inspection-type.js.map +1 -1
- package/dist-server/service/building-inspection/building-inspection.js +14 -1
- package/dist-server/service/building-inspection/building-inspection.js.map +1 -1
- package/dist-server/service/checklist-template/checklist-template-query.d.ts +1 -1
- package/dist-server/service/checklist-template/checklist-template-query.js +2 -5
- package/dist-server/service/checklist-template/checklist-template-query.js.map +1 -1
- package/dist-server/service/checklist-type/checklist-type-query.d.ts +1 -1
- package/dist-server/service/checklist-type/checklist-type-query.js +2 -5
- package/dist-server/service/checklist-type/checklist-type-query.js.map +1 -1
- package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.d.ts +7 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.js +107 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.js.map +1 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template-query.d.ts +10 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template-query.js +62 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template-query.js.map +1 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template-type.d.ts +11 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template-type.js +43 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template-type.js.map +1 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template.d.ts +18 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template.js +80 -0
- package/dist-server/service/construction-checklist-template/construction-checklist-template.js.map +1 -0
- package/dist-server/service/construction-checklist-template/index.d.ts +5 -0
- package/dist-server/service/construction-checklist-template/index.js +9 -0
- package/dist-server/service/construction-checklist-template/index.js.map +1 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.d.ts +6 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.js +60 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.js.map +1 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.d.ts +9 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.js +53 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.js.map +1 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.d.ts +17 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.js +67 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.js.map +1 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.d.ts +24 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.js +113 -0
- package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.js.map +1 -0
- package/dist-server/service/construction-checklist-template-item/index.d.ts +5 -0
- package/dist-server/service/construction-checklist-template-item/index.js +9 -0
- package/dist-server/service/construction-checklist-template-item/index.js.map +1 -0
- package/dist-server/service/construction-checklist-template-item/spec-matching-service.d.ts +2 -0
- package/dist-server/service/construction-checklist-template-item/spec-matching-service.js +50 -0
- package/dist-server/service/construction-checklist-template-item/spec-matching-service.js.map +1 -0
- package/dist-server/service/index.d.ts +5 -1
- package/dist-server/service/index.js +16 -0
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/issue/issue-mutation.js +5 -6
- package/dist-server/service/issue/issue-mutation.js.map +1 -1
- package/dist-server/service/issue/issue-query.d.ts +2 -2
- package/dist-server/service/issue/issue-query.js +5 -11
- package/dist-server/service/issue/issue-query.js.map +1 -1
- package/dist-server/service/project-checklist/index.d.ts +5 -0
- package/dist-server/service/project-checklist/index.js +9 -0
- package/dist-server/service/project-checklist/index.js.map +1 -0
- package/dist-server/service/project-checklist/project-checklist-mutation.d.ts +7 -0
- package/dist-server/service/project-checklist/project-checklist-mutation.js +109 -0
- package/dist-server/service/project-checklist/project-checklist-mutation.js.map +1 -0
- package/dist-server/service/project-checklist/project-checklist-query.d.ts +12 -0
- package/dist-server/service/project-checklist/project-checklist-query.js +76 -0
- package/dist-server/service/project-checklist/project-checklist-query.js.map +1 -0
- package/dist-server/service/project-checklist/project-checklist-type.d.ts +18 -0
- package/dist-server/service/project-checklist/project-checklist-type.js +69 -0
- package/dist-server/service/project-checklist/project-checklist-type.js.map +1 -0
- package/dist-server/service/project-checklist/project-checklist.d.ts +20 -0
- package/dist-server/service/project-checklist/project-checklist.js +90 -0
- package/dist-server/service/project-checklist/project-checklist.js.map +1 -0
- package/dist-server/service/project-checklist-item/index.d.ts +4 -0
- package/dist-server/service/project-checklist-item/index.js +9 -0
- package/dist-server/service/project-checklist-item/index.js.map +1 -0
- package/dist-server/service/project-checklist-item/project-checklist-item-mutation.d.ts +2 -0
- package/dist-server/service/project-checklist-item/project-checklist-item-mutation.js +13 -0
- package/dist-server/service/project-checklist-item/project-checklist-item-mutation.js.map +1 -0
- package/dist-server/service/project-checklist-item/project-checklist-item-query.d.ts +5 -0
- package/dist-server/service/project-checklist-item/project-checklist-item-query.js +34 -0
- package/dist-server/service/project-checklist-item/project-checklist-item-query.js.map +1 -0
- package/dist-server/service/project-checklist-item/project-checklist-item-type.d.ts +5 -0
- package/dist-server/service/project-checklist-item/project-checklist-item-type.js +21 -0
- package/dist-server/service/project-checklist-item/project-checklist-item-type.js.map +1 -0
- package/dist-server/service/project-checklist-item/project-checklist-item.d.ts +17 -0
- package/dist-server/service/project-checklist-item/project-checklist-item.js +82 -0
- package/dist-server/service/project-checklist-item/project-checklist-item.js.map +1 -0
- package/dist-server/service/project-report/project-report-mutation.js +5 -6
- package/dist-server/service/project-report/project-report-mutation.js.map +1 -1
- package/dist-server/service/project-report/project-report-query.d.ts +2 -2
- package/dist-server/service/project-report/project-report-query.js +5 -11
- package/dist-server/service/project-report/project-report-query.js.map +1 -1
- package/dist-server/service/supervisor/supervisor-mutation.js +5 -6
- package/dist-server/service/supervisor/supervisor-mutation.js.map +1 -1
- package/dist-server/service/supervisor/supervisor-query.d.ts +2 -2
- package/dist-server/service/supervisor/supervisor-query.js +5 -11
- package/dist-server/service/supervisor/supervisor-query.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/things-factory.config.js +7 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"building-inspection-management.js","sourceRoot":"","sources":["../../../client/pages/building-inspection/building-inspection-management.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/elevated-button.js'\nimport '@material/web/button/filled-button.js'\nimport '@material/web/button/outlined-button.js'\nimport '@operato/image-marker/ox-image-marker-view.js'\nimport '@operato/input/ox-select-floor.js'\nimport '@operato/data-grist'\nimport '@operato/event-view/ox-event-view.js'\nimport './inspection-create-popup'\nimport './inspection-with-checklist-create-popup'\nimport './component/daily-worklog-popup'\nimport './component/inspection-document/photo-album-popup'\nimport './component/inspection-document/inspection-request-document'\nimport './component/inspection-document/inspection-result-notification'\nimport './component/image-preview-popup'\n\nimport { CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView, navigate } from '@operato/shell'\nimport { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view'\nimport { css, html } from 'lit'\nimport { customElement, query, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { DataGrist, FetchOption } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { notify, openPopup } from '@operato/layout'\nimport gql from 'graphql-tag'\nimport moment from 'moment-timezone'\n\nimport {\n BuildingInspectionStatus,\n BUILDING_INSPECTION_STATUS_DISPLAY,\n BUILDING_INSPECTION_RE_STATUS_DISPLAY\n} from './building-inspection-list'\nimport { InspectionEventProvider } from './component/inspection-event-provider'\nimport { EventProvider } from '@operato/event-view'\nimport { DailyWorklogMode } from './component/daily-worklog-popup'\nimport '../checklist/checklist-view'\nimport { ChecklistMode } from '../checklist/checklist-view'\nimport { getBuildingInspectionForChecklist } from '../../graphql/building-inspection'\nimport { InspectionMode } from './component/inspection-document/inspection-request-document'\nimport { DrawingImageProvider } from '@dssp/drawing/dist-client/drawing-management/drawing-image-provider.js'\n\n@customElement('building-inspection-management')\nexport class BuildingInspectionManagement extends ScopedElementsMixin(PageView) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: 55px 1fr;\n color: #4e5055;\n\n width: 100%;\n height: 100%;\n background-color: var(--md-sys-color-background, #f6f6f6);\n overflow: hidden;\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\n md-filled-button[green] {\n --md-filled-button-container-color: #008000;\n }\n\n md-outlined-button {\n --md-outlined-button-container-height: 30px;\n --md-outlined-button-trailing-space: var(--spacing-medium, 8px);\n --md-outlined-button-leading-space: var(--spacing-medium, 8px);\n --md-sys-color-outline: rgba(51, 51, 51, 0.2);\n }\n\n *[bold] {\n font-weight: bold;\n }\n\n div[header] {\n display: flex;\n margin: 0px var(--spacing-large, 12px);\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\n div[header] div[button-container] {\n display: flex;\n align-items: center;\n justify-content: end;\n flex: 0.5;\n }\n\n div[body] {\n display: grid;\n grid-template-columns: 4fr 6fr;\n margin: var(--spacing-large, 12px);\n margin-top: 0;\n gap: var(--spacing-medium, 8px);\n overflow: hidden;\n }\n\n h3 {\n color: #2e79be;\n font-size: 16px;\n margin: 0px;\n }\n\n div[body] > div {\n display: flex;\n gap: var(--spacing-medium, 8px);\n padding: var(--spacing-large, 12px);\n border-radius: 5px;\n }\n\n div[left] {\n flex-direction: column;\n background-color: var(--md-sys-color-on-primary);\n border: 1px solid #cccccc80;\n overflow-y: auto;\n }\n\n div[subject] {\n margin-bottom: var(--spacing-small, 4px);\n }\n\n div[building-container] {\n display: block;\n\n & > * {\n margin-right: var(--spacing-medium, 8px);\n margin-bottom: var(--spacing-medium, 8px);\n }\n }\n\n div[right] {\n height: auto;\n overflow-x: hidden;\n overflow-y: auto;\n flex-direction: column;\n position: relative;\n }\n\n ox-select-floor {\n width: 100%;\n align-content: flex-end;\n\n --ox-select-floor-rotate-x: 60deg;\n --ox-select-floor-rotate-x-active: 30deg;\n --ox-select-floor-perspective: 1200px;\n\n user-select: none;\n overflow-y: auto;\n flex: 1;\n }\n\n div[status] {\n display: flex;\n position: absolute;\n right: 0px;\n bottom: 0px;\n align-items: center;\n z-index: 2;\n right: 3%;\n }\n\n div[status] > div[content] {\n display: flex;\n background-color: #4e5055;\n color: #fff;\n padding: var(--spacing-small, 4px) var(--spacing-medium, 8px);\n border-radius: 5px;\n gap: var(--spacing-medium, 8px);\n font-size: 14px;\n }\n\n div[status] span {\n display: flex;\n align-items: center;\n width: 40px;\n font-weight: bold;\n }\n\n div[status] md-icon {\n width: 16px;\n height: 16px;\n margin-right: var(--spacing-small, 4px);\n border-radius: 5px;\n font-size: 16px;\n font-weight: 700;\n }\n div[status] md-icon[wait] {\n background-color: #f7f7f7;\n color: #4e5055;\n }\n div[status] md-icon[request] {\n background-color: #f7f7f7;\n color: #4e5055;\n }\n div[status] md-icon[pass] {\n background-color: #4bbb4a;\n }\n div[status] md-icon[fail] {\n background-color: #ff4444;\n }\n\n span[name] {\n color: #4e5055;\n margin-left: var(--spacing-small, 4px);\n padding: var(--spacing-tiny, 2px) var(--spacing-small, 4px);\n }\n\n span[name][active] {\n color: var(--md-sys-color-on-error);\n background-color: var(--md-sys-color-error);\n border-radius: 5px;\n opacity: 0.7;\n }\n\n /* 오른쪽 패널 */\n div[right-panel] {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n div[inspection-container] {\n gap: var(--spacing-medium, 8px);\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n\n div[inspection] {\n display: grid;\n grid-template-columns: 90px 1fr 1fr 1fr 1fr 1fr;\n background: #ebc8321a;\n border-radius: 5px;\n padding: var(--spacing-medium, 8px) var(--spacing-large, 12px);\n\n & > div {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n span::before {\n display: inline-block;\n position: relative;\n content: '';\n width: 10px;\n height: 10px;\n border-radius: 6px;\n top: -1px;\n margin-right: 2px;\n }\n\n span[status='wait']::before {\n background-color: #4e5055;\n }\n span[status='request']::before {\n background-color: #2e79be;\n }\n span[status='pass']::before {\n background-color: #1bb401;\n }\n span[status='fail']::before {\n background-color: #ff4444;\n }\n span[status='re-wait']::before {\n background-color: #e89c0e;\n }\n }\n & > div[name] {\n flex-direction: row;\n text-align: right;\n gap: var(--spacing-small, 4px);\n padding-right: var(--spacing-large, 12px);\n border-right: 2px dotted #ccc;\n max-width: 100%;\n line-height: 1.3;\n\n md-icon {\n width: 40px;\n height: 40px;\n border-radius: 5px;\n color: #fff;\n background: #f16154;\n }\n }\n }\n }\n\n div[view-toggle] {\n display: flex;\n justify-content: flex-end;\n gap: var(--spacing-small, 4px);\n\n md-icon {\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n font-size: 24px;\n }\n\n md-icon[active] {\n background-color: #0595e5;\n color: white;\n }\n }\n\n ox-event-view {\n flex: 1;\n overflow-y: auto;\n --calendar-monthly-date-min-height: 50px;\n height: 100%;\n }\n\n div[calendar-wrapper] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n }\n\n div[list-wrapper] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n }\n\n div[action-buttons] {\n flex-shrink: 0;\n }\n\n div[list-view] {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-medium, 8px);\n overflow-y: auto;\n flex: 1;\n }\n\n div[list-section] {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-small, 4px);\n\n h3[section-title] {\n color: #e15757;\n font-size: 14px;\n margin: 0;\n }\n\n h3[section-title][blue] {\n color: #3395f1;\n }\n\n h3[section-title][green] {\n color: #1bb401;\n }\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n min-height: 150px;\n }\n\n div[action-buttons] {\n display: flex;\n justify-content: center;\n gap: var(--spacing-medium, 8px);\n padding: var(--spacing-medium, 8px) 0;\n\n md-filled-button {\n --md-filled-button-container-height: 40px;\n --md-filled-button-trailing-space: 20px;\n --md-filled-button-leading-space: 20px;\n }\n\n md-filled-button[green] {\n --md-filled-button-container-color: #008000;\n }\n\n md-filled-button[red] {\n --md-filled-button-container-color: #e15757;\n }\n\n md-filled-button[navy] {\n --md-filled-button-container-color: #3f71a0;\n }\n\n md-filled-button[navy-light] {\n --md-filled-button-container-color: #2e8b8b;\n }\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\n @state() projectId: string = ''\n @state() project: any = { ...this.defaultProject }\n @state() selectedBuilding: any = {}\n @state() building: any = {}\n @state() currentFloor: number = -1\n\n @state() buildingLevelId: string = ''\n @state() buildingInspectionSummary: any = {}\n @state() calendarData?: EventProvider\n @state() selectedYearMonth: string = moment().tz('Asia/Seoul').format('YYYY-MM')\n @state() selectedDate?: string = moment().tz('Asia/Seoul').format('YYYY-MM-DD')\n @state() dailyWorklog: any = {}\n\n @state() viewMode: 'calendar' | 'list' = 'calendar'\n @state() gristConfig: any\n\n @query('div[left]') private leftPanel!: HTMLElement\n @query('ox-grist[section=\"wait-fail\"]') private gristWaitFail!: DataGrist\n @query('ox-grist[section=\"request\"]') private gristRequest!: DataGrist\n @query('ox-grist[section=\"pass\"]') private gristPass!: DataGrist\n @query('ox-event-view') private eventView!: HTMLElement\n\n render() {\n const cards =\n this.building?.buildingLevels?.map(({ mainDrawingImage, floor }) => {\n return {\n image: mainDrawingImage || '/assets/images/img-drawing-default.png',\n name: floor\n }\n }) || []\n\n return html`\n <div header>\n <h2>\n <md-icon slot=\"icon\" back @click=${() => history.back()}>arrow_back</md-icon>\n 업무 대시보드\n </h2>\n </div>\n\n <div body>\n <div left>\n <div>\n <div subject bold>개별 단지 상세정보 바로가기</div>\n <div building-container>\n ${this.project.buildingComplex?.buildings?.map(building => {\n return this.selectedBuilding.id === building.id\n ? html`\n <md-filled-button @click=${() => this._onClickBuilding(building)}> ${building.name} </md-filled-button>\n `\n : html`\n <md-outlined-button @click=${() => this._onClickBuilding(building)}> ${building.name} </md-outlined-button>\n `\n })}\n </div>\n </div>\n\n <ox-select-floor\n .cards=${cards}\n .bottomLimit=${70}\n .interval=${50}\n @change=${(e: CustomEvent) => {\n this.currentFloor = e.detail\n }}\n >\n ${this.building?.buildingLevels?.map(({ id, floor, floorDisplayName, inspectionSummary }, idx) => {\n return html`\n <div slot=\"template-${idx}\" @click=${() => this._onSelectFloor(id)} style=\"cursor: pointer;\">\n <div status>\n <div content>\n <span><md-icon wait slot=\"icon\">frame_inspect</md-icon>${inspectionSummary.wait}</span>\n <span><md-icon request slot=\"icon\">exclamation</md-icon>${inspectionSummary.request}</span>\n <span><md-icon pass slot=\"icon\">check</md-icon>${inspectionSummary.pass}</span>\n <span><md-icon fail slot=\"icon\">close</md-icon>${inspectionSummary.fail}</span>\n </div>\n <span name ?active=${this.currentFloor == floor}>${floorDisplayName}층</span>\n </div>\n </div>\n `\n })}\n </ox-select-floor>\n </div>\n\n <div right-panel>\n ${this.buildingLevelId\n ? html`\n <div inspection-container>\n <div inspection>\n <div name bold>\n <md-icon slot=\"icon\">fact_check</md-icon>\n 검측 현황\n </div>\n\n <div>\n <label>${BUILDING_INSPECTION_STATUS_DISPLAY[BuildingInspectionStatus.WAIT]}</label>\n <span bold status=\"wait\"> ${this.buildingInspectionSummary.wait}</span>\n </div>\n <div>\n <label>${BUILDING_INSPECTION_STATUS_DISPLAY[BuildingInspectionStatus.REQUEST]}</label>\n <span bold status=\"request\"> ${this.buildingInspectionSummary.request}</span>\n </div>\n <div>\n <label>${BUILDING_INSPECTION_STATUS_DISPLAY[BuildingInspectionStatus.FAIL]}</label>\n <span bold status=\"fail\"> ${this.buildingInspectionSummary.fail}</span>\n </div>\n <div>\n <label>재검측 대기</label>\n <span bold status=\"re-wait\"> ${this.buildingInspectionSummary.reWait}</span>\n </div>\n <div>\n <label>${BUILDING_INSPECTION_STATUS_DISPLAY[BuildingInspectionStatus.PASS]}</label>\n <span bold status=\"pass\"> ${this.buildingInspectionSummary.pass}</span>\n </div>\n </div>\n\n <div view-toggle>\n <md-icon ?active=${this.viewMode === 'calendar'} @click=${() => this._setViewMode('calendar')}>\n calendar_month\n </md-icon>\n <md-icon ?active=${this.viewMode === 'list'} @click=${() => this._setViewMode('list')}> view_list </md-icon>\n </div>\n\n <div calendar-wrapper style=\"display:${this.viewMode === 'calendar' ? 'block' : 'none'}\">\n <ox-event-view\n .mode=${'monthly'}\n .eventProvider=${this.calendarData}\n @select-date=${(e: CustomEvent) => {\n this.selectedDate = moment(e.detail[0]).format('YYYY-MM-DD')\n this._fetchDailyWorklog(this.selectedDate)\n }}\n @change-month=${(e: CustomEvent) => {\n const year = e.detail.year\n const month = e.detail?.month?.toString()?.padStart(2, '0')\n this.selectedYearMonth = `${year}-${month}`\n this._refreshListGrists()\n }}\n ></ox-event-view>\n </div>\n <div list-wrapper style=\"display:${this.viewMode === 'list' ? 'block' : 'none'}\">\n <div list-view>\n <div list-section>\n <h3 section-title>작업 완료 / 조치 필요</h3>\n <ox-grist\n section=\"wait-fail\"\n .mode=${'GRID'}\n .config=${this.gristConfig}\n .fetchHandler=${this._fetchWaitFail.bind(this)}\n ></ox-grist>\n </div>\n <div list-section>\n <h3 section-title blue>감리 / 재검측 대기</h3>\n <ox-grist\n section=\"request\"\n .mode=${'GRID'}\n .config=${this.gristConfig}\n .fetchHandler=${this._fetchRequest.bind(this)}\n ></ox-grist>\n </div>\n <div list-section>\n <h3 section-title green>검측 완료</h3>\n <ox-grist\n section=\"pass\"\n .mode=${'GRID'}\n .config=${this.gristConfig}\n .fetchHandler=${this._fetchPass.bind(this)}\n ></ox-grist>\n </div>\n </div>\n </div>\n </div>\n\n <div action-buttons>\n <md-filled-button navy @click=${this._openFieldDocuments}>\n <md-icon slot=\"icon\">search</md-icon>현장 문서 확인\n </md-filled-button>\n <div style=\"flex:1\"></div>\n ${this.viewMode === 'calendar'\n ? this.dailyWorklog.id\n ? html`<md-filled-button green @click=${this._openDailyWorklogPopup}>\n <md-icon slot=\"icon\">edit</md-icon>일일 업무일지 수정\n </md-filled-button>`\n : html`<md-filled-button @click=${this._openDailyWorklogPopup}>\n <md-icon slot=\"icon\">note_add</md-icon>일일 업무일지 작성\n </md-filled-button>`\n : ''}\n ${this.viewMode === 'list'\n ? html`<md-filled-button red @click=${this._deleteInspections}>\n <md-icon slot=\"icon\">delete</md-icon>검측 삭제\n </md-filled-button>`\n : ''}\n <md-filled-button navy-light @click=${this._openCreateInspection}>\n <md-icon slot=\"icon\">check_circle</md-icon>검측 등록\n </md-filled-button>\n </div>\n `\n : html`\n <div style=\"display:flex;align-items:center;justify-content:center;flex:1;color:#999;\">\n 층을 선택하면 작업 현황이 표시됩니다.\n </div>\n `}\n </div>\n </div>\n `\n }\n\n async pageUpdated(changes: any, lifecycle: PageLifecycle) {\n if (this.active) {\n this.projectId = lifecycle.resourceId || ''\n await this._initProject(this.projectId)\n }\n }\n\n async pageInitialized(lifecycle: any) {\n this.gristConfig = {\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'open_in_new',\n header: '상세보기',\n width: 60,\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n navigate(`building-inspection-detail-drawing/${record.id}`)\n }\n }\n },\n {\n type: 'string',\n name: 'id',\n hidden: true\n },\n {\n type: 'string',\n name: 'statusDisplay',\n header: '검측 상태',\n record: { align: 'center' },\n width: 100\n },\n {\n type: 'string',\n name: 'location',\n header: '위치',\n width: 130\n },\n {\n type: 'string',\n name: 'constructionType',\n header: '공종',\n width: 120\n },\n {\n type: 'string',\n name: 'inspectionParts',\n header: '검측 부위',\n record: {\n renderer: value => value?.join(', ') || ''\n },\n width: 200\n },\n {\n type: 'string',\n name: 'requestDate',\n header: '검측 요청일시',\n width: 150\n },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'fact_check',\n header: '도면',\n width: 50,\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this._openDrawingPopup(record)\n }\n }\n },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'edit_square',\n header: '요청서/결과통보',\n width: 100,\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this._openInspectionRequestDocument(record.id)\n }\n }\n },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'task',\n header: '체크리스트',\n width: 70,\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this._openChecklistPopup(record.id)\n }\n }\n },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'photo_camera',\n header: '사진대지',\n width: 60,\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this._openPhotoAlbumPopup(record.checklistId)\n }\n }\n },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'engineering',\n header: '실명부',\n width: 50,\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this._showNameListPreview(record)\n }\n }\n }\n ],\n rows: {\n selectable: {\n multiple: true\n },\n appendable: false\n },\n sorters: [{ name: 'requestDate' }]\n }\n }\n\n private async _initProject(projectId: string = '') {\n const response = await client.query({\n query: gql`\n query Project($id: String!) {\n project(id: $id) {\n id\n name\n projectType\n mainPhoto {\n fullpath\n }\n buildingComplex {\n id\n drawing {\n id\n name\n fullpath\n }\n buildings {\n id\n name\n drawing {\n id\n name\n fullpath\n }\n }\n }\n }\n }\n `,\n variables: {\n id: projectId\n }\n })\n\n if (response.errors) return\n\n this.project = response.data?.project\n\n // 첫번째 빌딩 선택\n this.selectedBuilding = this.project?.buildingComplex?.buildings[0]\n\n if (this.selectedBuilding) {\n await this._getBuilding(this.selectedBuilding.id)\n }\n }\n\n private 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 buildingLevels {\n id\n floor\n floorDisplayName\n mainDrawing {\n id\n name\n fullpath\n }\n mainDrawingImage\n inspectionSummary {\n wait\n request\n pass\n fail\n }\n }\n }\n }\n `,\n variables: {\n id: buildingId\n }\n })\n\n if (response.errors) return\n\n this.building = response.data?.building\n\n // 왼쪽 패널 스크롤을 맨 아래로\n await this.updateComplete\n if (this.leftPanel) {\n this.leftPanel.scrollTop = this.leftPanel.scrollHeight\n }\n }\n\n private async _onClickBuilding(building) {\n this.selectedBuilding = { ...building }\n this.buildingLevelId = ''\n this.buildingInspectionSummary = {}\n await this._getBuilding(this.selectedBuilding.id)\n }\n\n private async _onSelectFloor(levelId: string) {\n this.buildingLevelId = levelId\n await this._initBuildingLevel(levelId)\n }\n\n private async _initBuildingLevel(buildingLevelId: string) {\n const response = await client.query({\n query: gql`\n query BuildingInspectionSummaryOfBuildingLevel($buildingLevelId: String!) {\n buildingInspectionSummaryOfBuildingLevel(buildingLevelId: $buildingLevelId) {\n wait\n request\n pass\n fail\n reWait\n }\n }\n `,\n variables: {\n buildingLevelId\n }\n })\n\n if (response.errors) return\n\n this.buildingInspectionSummary = response.data?.buildingInspectionSummaryOfBuildingLevel\n\n // 달력 데이터 생성\n this.calendarData = new InspectionEventProvider(buildingLevelId, this.project.id)\n\n // 달력 최소 높이 속성 수정\n await this.updateComplete\n\n // 일일 업무일지 조회\n await this._fetchDailyWorklog(this.selectedDate)\n\n // 목록 모드일 경우 그리스트 갱신\n this._refreshListGrists()\n }\n\n private async _fetchInspectionsByStatus(\n statuses: string[],\n { page = 1, limit = 100 }: FetchOption,\n extraFilter?: (item: any) => boolean\n ) {\n if (!this.buildingLevelId) return { total: 0, records: [] }\n\n const response = await client.query({\n query: gql`\n query BuildingInspectionsOfBuildingLevel($params: BuildingInspectionsOfBuildingLevel!) {\n buildingInspectionsOfBuildingLevel(params: $params) {\n items {\n id\n status\n failCount\n requestDate\n\n checklist {\n checklistId: id\n name\n constructionType\n constructionDetailType\n location\n inspectionParts\n inspectionDrawingType\n\n nameListAttachment {\n id\n name\n fullpath\n }\n }\n drawingMarker\n }\n total\n }\n }\n `,\n variables: {\n params: {\n buildingLevelId: this.buildingLevelId,\n limit: 0\n }\n }\n })\n\n let items = response.data?.buildingInspectionsOfBuildingLevel?.items || []\n\n // 상태별 필터링\n items = items.filter(item => statuses.includes(item.status))\n\n if (extraFilter) {\n items = items.filter(extraFilter)\n }\n\n items = items.map(item => ({\n ...item,\n ...item.checklist,\n statusDisplay: (item.failCount > 0 ? BUILDING_INSPECTION_RE_STATUS_DISPLAY : BUILDING_INSPECTION_STATUS_DISPLAY)[\n item.status\n ],\n requestDate: this._formatDateTime(item.requestDate)\n }))\n\n return {\n total: items.length,\n records: items\n }\n }\n\n private async _fetchWaitFail(options: FetchOption) {\n return this._fetchInspectionsByStatus(\n [BuildingInspectionStatus.WAIT, BuildingInspectionStatus.OVERALL_WAIT, BuildingInspectionStatus.FAIL],\n options,\n // 재검측 대기(failCount > 0인 WAIT) 제외\n item =>\n !(\n (item.status === BuildingInspectionStatus.WAIT || item.status === BuildingInspectionStatus.OVERALL_WAIT) &&\n (item.failCount || 0) > 0\n )\n )\n }\n\n private async _fetchRequest(options: FetchOption) {\n return this._fetchInspectionsByStatus(\n [\n BuildingInspectionStatus.REQUEST,\n BuildingInspectionStatus.OVERALL_REQUEST,\n BuildingInspectionStatus.WAIT,\n BuildingInspectionStatus.OVERALL_WAIT\n ],\n options,\n // REQUEST/OVERALL_REQUEST 전체 + 재검측 대기(failCount > 0인 WAIT)만\n item =>\n item.status === BuildingInspectionStatus.REQUEST ||\n item.status === BuildingInspectionStatus.OVERALL_REQUEST ||\n ((item.status === BuildingInspectionStatus.WAIT || item.status === BuildingInspectionStatus.OVERALL_WAIT) &&\n (item.failCount || 0) > 0)\n )\n }\n\n private async _fetchPass(options: FetchOption) {\n return this._fetchInspectionsByStatus([BuildingInspectionStatus.PASS], options)\n }\n\n private _setViewMode(mode: 'calendar' | 'list') {\n this.viewMode = mode\n\n if (mode === 'list') {\n this.updateComplete.then(() => this._refreshListGrists())\n }\n }\n\n private _refreshListGrists() {\n if (this.viewMode === 'list') {\n this.updateComplete.then(() => {\n this.gristWaitFail?.fetch()\n this.gristRequest?.fetch()\n this.gristPass?.fetch()\n })\n }\n }\n\n private _formatDateTime(date: Date | string | number | undefined) {\n if (!date) return ''\n try {\n const parsed = typeof date === 'string' && /^\\d+$/.test(date) ? new Date(Number(date)) : new Date(date)\n return new Intl.DateTimeFormat('ko-KR', {\n timeZone: 'Asia/Seoul',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false\n }).format(parsed)\n } catch {\n return ''\n }\n }\n\n private _openDailyWorklogPopup() {\n const date = this.selectedDate\n\n openPopup(\n html`<daily-worklog-popup\n .project=${this.project}\n .date=${date}\n .dailyWorklog=${this.dailyWorklog}\n .mode=${this.dailyWorklog.id ? DailyWorklogMode.EDIT : DailyWorklogMode.CREATE}\n @createdDailyWorklog=${this._refreshCalendar.bind(this)}\n @updatedDailyWorklog=${() => this._fetchDailyWorklog(this.selectedDate)}\n ></daily-worklog-popup>`,\n {\n backdrop: true,\n size: 'large',\n title: '일일 업무일지 작성'\n }\n )\n }\n\n private async _deleteInspections() {\n const allSelected = [\n ...(this.gristWaitFail?.selected || []),\n ...(this.gristRequest?.selected || []),\n ...(this.gristPass?.selected || [])\n ]\n const ids = allSelected.map(record => record.id)\n\n if (!ids.length) {\n notify({ message: '삭제할 항목을 선택해주세요.', level: 'info' })\n return\n }\n\n if (confirm('삭제하시겠습니까?')) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n deleteBuildingInspections(ids: $ids)\n }\n `,\n variables: { ids }\n })\n\n if (!response.errors) {\n this._refreshListGrists()\n this._initBuildingLevel(this.buildingLevelId)\n notify({ message: '삭제되었습니다.' })\n }\n }\n }\n\n private _openCreateInspection() {\n openPopup(\n html`\n <inspection-with-checklist-create-popup\n .projectId=${this.project.id}\n .selectedBuildingId=${this.selectedBuilding.id}\n .selectedBuildingLevelId=${this.buildingLevelId}\n @requestRefresh=\"${() => {\n this._initBuildingLevel(this.buildingLevelId)\n this._getBuilding(this.selectedBuilding.id)\n }}\"\n ></inspection-with-checklist-create-popup>\n `,\n { backdrop: true, size: 'large', title: '검측 등록' }\n )\n }\n\n // TODO: 현장 문서 확인 기능 구현\n private _openFieldDocuments() {\n notify({ message: '현장 문서 확인 기능은 준비 중입니다.', level: 'info' })\n }\n\n private async _openDrawingPopup(buildingInspection: any) {\n const drawingImageProvider: DrawingImageProvider = new DrawingImageProvider()\n const inspectionDrawingType = buildingInspection.inspectionDrawingType\n\n const drawingShapes = JSON.parse(buildingInspection?.drawingMarker || null) || []\n const markers = await drawingImageProvider.getMarkers(inspectionDrawingType)\n\n const imageUrl = String(inspectionDrawingType).normalize('NFC')\n const shapes = [...drawingShapes, ...markers]\n\n openPopup(\n html`<ox-image-marker-view\n style=\"pointer-events: none;\"\n id=\"image-marker\"\n .imageUrl=${imageUrl}\n .shapes=${shapes}\n .imageProvider=${drawingImageProvider}\n ></ox-image-marker-view>`,\n { backdrop: true, size: 'large', title: '검측 도면' }\n )\n }\n\n private async _openInspectionRequestDocument(buildingInspectionId: string) {\n const buildingInspection = await getBuildingInspectionForChecklist(buildingInspectionId)\n\n if (!buildingInspection.checklist.inspectionRequestUpdatedAt) {\n notify({ message: '검측 요청서가 없습니다.', level: 'info' })\n return\n }\n\n openPopup(\n html`\n <div style=\"overflow-y: auto;\">\n <inspection-request-document\n .checklist=${buildingInspection.checklist}\n .buildingInspection=${buildingInspection}\n .mode=${InspectionMode.VIEW}\n ></inspection-request-document>\n\n ${buildingInspection.checklist.inspectionResultUpdatedAt\n ? html`\n <hr />\n <inspection-result-notification\n .checklist=${buildingInspection.checklist}\n .buildingInspection=${buildingInspection}\n .mode=${InspectionMode.VIEW}\n ></inspection-result-notification>\n `\n : ''}\n </div>\n `,\n { backdrop: true, size: 'large', title: '검측요청결과 통보내용' }\n )\n }\n\n private async _openChecklistPopup(buildingInspectionId: string) {\n const buildingInspection = await getBuildingInspectionForChecklist(buildingInspectionId)\n\n openPopup(\n html`\n <div style=\"overflow-y: auto;\">\n <checklist-view\n .mode=${ChecklistMode.VIEWER}\n .checklist=${buildingInspection?.checklist}\n .buildingComplex=${buildingInspection?.buildingLevel?.building?.buildingComplex || {}}\n .status=${buildingInspection?.status}\n .failCount=${buildingInspection?.failCount || 0}\n .projectType=${this.project.projectType}\n ></checklist-view>\n </div>\n `,\n { backdrop: true, size: 'large', title: '체크 리스트 미리보기' }\n )\n }\n\n private _openPhotoAlbumPopup(checklistId: string) {\n openPopup(html`<photo-album-popup .checklistId=${checklistId}></photo-album-popup>`, {\n backdrop: true,\n size: 'large',\n title: '사진대지'\n })\n }\n\n private _showNameListPreview(record: any) {\n const nameListAttachment = record.nameListAttachment\n\n if (!nameListAttachment) {\n notify({ message: '실명부 파일이 없습니다.', level: 'info' })\n return\n }\n\n openPopup(\n html`\n <image-preview-popup\n .images=${[{ fullpath: nameListAttachment.fullpath, name: nameListAttachment.name }]}\n .currentIndex=${0}\n ></image-preview-popup>\n `,\n { backdrop: true, size: 'large', title: '실명부' }\n )\n }\n\n private async _refreshCalendar() {\n this.calendarData = new InspectionEventProvider(this.buildingLevelId, this.project.id)\n await this._fetchDailyWorklog(this.selectedDate)\n }\n\n private async _fetchDailyWorklog(date: string = '') {\n if (!date || !this.project.id) return\n\n const response = await client.query({\n query: gql`\n query ($projectId: String!, $date: String!) {\n buildingInspectionDailyWorklogByProjectIdAndDate(projectId: $projectId, date: $date) {\n id\n date\n documentNo\n worklogs\n memo\n directiveMemo\n taskSupervisorySignature\n overallSupervisorySignature\n\n taskSupervisory {\n id\n name\n }\n overallSupervisory {\n id\n name\n }\n\n buildingInspections {\n id\n\n checklist {\n overallSupervisorySignature\n taskSupervisorySignature\n taskSupervisory {\n id\n name\n }\n overallSupervisory {\n id\n name\n }\n }\n }\n }\n }\n `,\n variables: { projectId: this.project.id, date }\n })\n\n this.dailyWorklog = response.data?.buildingInspectionDailyWorklogByProjectIdAndDate || {}\n }\n}\n"]}
|
package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js
CHANGED
|
@@ -15,6 +15,7 @@ let BuildingInspectionDetailHeader = class BuildingInspectionDetailHeader extend
|
|
|
15
15
|
this.projectName = '';
|
|
16
16
|
this.buildingName = '';
|
|
17
17
|
this.buildingLevelFloor = '';
|
|
18
|
+
this.projectId = '';
|
|
18
19
|
this.isPhotoMenuOpen = false;
|
|
19
20
|
}
|
|
20
21
|
render() {
|
|
@@ -27,10 +28,10 @@ let BuildingInspectionDetailHeader = class BuildingInspectionDetailHeader extend
|
|
|
27
28
|
</h2>
|
|
28
29
|
<div button-container>
|
|
29
30
|
<md-elevated-button
|
|
30
|
-
?disabled=${path.includes('building-inspection-
|
|
31
|
-
href=${`building-inspection-
|
|
31
|
+
?disabled=${path.includes('building-inspection-management/')}
|
|
32
|
+
href=${`building-inspection-management/${this.projectId}`}
|
|
32
33
|
>
|
|
33
|
-
<md-icon slot="icon">
|
|
34
|
+
<md-icon slot="icon">dashboard</md-icon>업무 대시보드
|
|
34
35
|
</md-elevated-button>
|
|
35
36
|
<md-elevated-button
|
|
36
37
|
?disabled=${path.includes('building-inspection-detail-drawing/')}
|
|
@@ -223,6 +224,10 @@ __decorate([
|
|
|
223
224
|
property({ type: String }),
|
|
224
225
|
__metadata("design:type", String)
|
|
225
226
|
], BuildingInspectionDetailHeader.prototype, "buildingLevelFloor", void 0);
|
|
227
|
+
__decorate([
|
|
228
|
+
property({ type: String }),
|
|
229
|
+
__metadata("design:type", String)
|
|
230
|
+
], BuildingInspectionDetailHeader.prototype, "projectId", void 0);
|
|
226
231
|
__decorate([
|
|
227
232
|
state(),
|
|
228
233
|
__metadata("design:type", Object)
|
package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"building-inspection-detail-header.js","sourceRoot":"","sources":["../../../../client/pages/building-inspection/component/building-inspection-detail-header.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/menu/menu.js'\nimport '@material/web/menu/menu-item.js'\nimport '@material/web/divider/divider.js'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles'\nimport { navigate } from '@operato/shell'\n\n@customElement('building-inspection-detail-header')\nclass BuildingInspectionDetailHeader extends LitElement {\n static styles = [\n ButtonContainerStyles,\n ScrollbarStyles,\n css`\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-outlined-button {\n --md-outlined-button-container-height: 30px;\n --md-outlined-button-trailing-space: 15px;\n --md-outlined-button-leading-space: 15px;\n }\n\n *[bold] {\n font-weight: bold;\n }\n\n div[header] {\n display: flex;\n margin: 0px var(--spacing-large, 12px);\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\n div[button-container] {\n display: flex;\n align-items: center;\n justify-content: end;\n flex: 0.5;\n }\n\n md-elevated-button {\n margin-left: var(--spacing-small, 4px);\n letter-spacing: -1px;\n\n --md-elevated-button-container-height: 32px;\n --md-elevated-button-label-text-size: 16px;\n --md-elevated-button-container-color: #0595e5;\n\n --md-elevated-button-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-hover-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-pressed-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-focus-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-icon-color: var(--md-sys-color-on-primary);\n --md-elevated-button-hover-icon-color: var(--md-sys-color-on-primary);\n --md-elevated-button-pressed-icon-color: var(--md-sys-color-on-primary);\n --md-elevated-button-focus-icon-color: var(--md-sys-color-on-primary);\n --_leading-space: var(--spacing-tiny, 2px);\n\n --_with-leading-icon-leading-space: var(--spacing-medium, 8px);\n --_with-leading-icon-trailing-space: var(--spacing-medium, 8px);\n\n md-icon {\n margin-right: -2px;\n }\n }\n\n /* 드롭다운 메뉴 컨테이너 */\n .photo-menu-container {\n position: relative;\n display: inline-block;\n }\n\n md-menu {\n --md-menu-container-color: #fff;\n --md-menu-container-elevation: 2;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 150px;\n }\n\n md-menu-item {\n --md-menu-item-container-height: 20px;\n --md-menu-item-one-line-container-height: 30px;\n --md-menu-item-label-text-size: 15px;\n --md-menu-item-label-text-color: #333;\n --md-menu-item-hover-state-layer-color: #f5f5f5;\n --md-menu-item-top-space: 0px;\n --md-menu-item-bottom-space: 0px;\n\n cursor: pointer;\n padding: 2px 4px !important;\n min-height: 18px !important;\n }\n\n md-menu-item md-icon {\n margin-right: 2px;\n color: #666;\n --md-icon-size: 14px;\n }\n\n md-divider {\n margin: 1px 0;\n --md-divider-thickness: 1px;\n }\n `\n ]\n\n @property({ type: String }) buildingInspectionId: string = ''\n @property({ type: String }) buildingLevelId: string = ''\n @property({ type: String }) projectName: string = ''\n @property({ type: String }) buildingName: string = ''\n @property({ type: String }) buildingLevelFloor: string = ''\n\n @state() private isPhotoMenuOpen = false\n\n render() {\n const path = window.location.pathname\n\n return html`\n <div header>\n <h2>\n <md-icon slot=\"icon\" back @click=${() => history.back()}>arrow_back</md-icon>\n ${this.projectName || ''} ${this.buildingName || ''} ${this.buildingLevelFloor || ''}층\n </h2>\n <div button-container>\n <md-elevated-button\n ?disabled=${path.includes('building-inspection-list/')}\n href=${`building-inspection-list/${this.buildingLevelId}`}\n >\n <md-icon slot=\"icon\">list_alt</md-icon>검측 리스트\n </md-elevated-button>\n <md-elevated-button\n ?disabled=${path.includes('building-inspection-detail-drawing/')}\n href=${`building-inspection-detail-drawing/${this.buildingInspectionId}`}\n >\n <md-icon slot=\"icon\">fact_check</md-icon>검측도면\n </md-elevated-button>\n <md-elevated-button\n ?disabled=${path.includes('building-inspection-detail-checklist/')}\n href=${`building-inspection-detail-checklist/${this.buildingInspectionId}`}\n >\n <md-icon slot=\"icon\">task</md-icon>검측 체크리스트\n </md-elevated-button>\n <div class=\"photo-menu-container\">\n <md-elevated-button @click=${this.togglePhotoMenu} id=\"photo-menu-anchor\">\n <md-icon slot=\"icon\">arrow_drop_down</md-icon>사진촬영\n </md-elevated-button>\n <md-menu .open=${this.isPhotoMenuOpen} anchor=\"photo-menu-anchor\" @closed=${() => (this.isPhotoMenuOpen = false)}>\n <md-menu-item @click=${() => navigate(`building-inspection-detail-camera/${this.buildingInspectionId}`)}>\n <md-icon slot=\"start\">photo_camera</md-icon>\n 사진 촬영\n </md-menu-item>\n <md-divider></md-divider>\n <md-menu-item @click=${() => navigate(`building-inspection-detail-ai-measurement/${this.buildingInspectionId}`)}>\n <md-icon slot=\"start\">straighten</md-icon>\n AI 길이 측정\n </md-menu-item>\n <md-divider></md-divider>\n <md-menu-item @click=${() => navigate(`building-inspection-detail-ai-defect/${this.buildingInspectionId}`)}>\n <md-icon slot=\"start\">manga</md-icon>\n AI 하자 분석\n </md-menu-item>\n </md-menu>\n </div>\n <md-elevated-button\n ?disabled=${path.includes('building-inspection-detail-history/')}\n href=${`building-inspection-detail-history/${this.buildingInspectionId}`}\n disabled\n >\n <md-icon slot=\"icon\">pending_actions</md-icon>감리이력\n </md-elevated-button>\n </div>\n </div>\n `\n }\n\n private togglePhotoMenu() {\n this.isPhotoMenuOpen = !this.isPhotoMenuOpen\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"building-inspection-detail-header.js","sourceRoot":"","sources":["../../../../client/pages/building-inspection/component/building-inspection-detail-header.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/menu/menu.js'\nimport '@material/web/menu/menu-item.js'\nimport '@material/web/divider/divider.js'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles'\nimport { navigate } from '@operato/shell'\n\n@customElement('building-inspection-detail-header')\nclass BuildingInspectionDetailHeader extends LitElement {\n static styles = [\n ButtonContainerStyles,\n ScrollbarStyles,\n css`\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-outlined-button {\n --md-outlined-button-container-height: 30px;\n --md-outlined-button-trailing-space: 15px;\n --md-outlined-button-leading-space: 15px;\n }\n\n *[bold] {\n font-weight: bold;\n }\n\n div[header] {\n display: flex;\n margin: 0px var(--spacing-large, 12px);\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\n div[button-container] {\n display: flex;\n align-items: center;\n justify-content: end;\n flex: 0.5;\n }\n\n md-elevated-button {\n margin-left: var(--spacing-small, 4px);\n letter-spacing: -1px;\n\n --md-elevated-button-container-height: 32px;\n --md-elevated-button-label-text-size: 16px;\n --md-elevated-button-container-color: #0595e5;\n\n --md-elevated-button-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-hover-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-pressed-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-focus-label-text-color: var(--md-sys-color-on-primary);\n --md-elevated-button-icon-color: var(--md-sys-color-on-primary);\n --md-elevated-button-hover-icon-color: var(--md-sys-color-on-primary);\n --md-elevated-button-pressed-icon-color: var(--md-sys-color-on-primary);\n --md-elevated-button-focus-icon-color: var(--md-sys-color-on-primary);\n --_leading-space: var(--spacing-tiny, 2px);\n\n --_with-leading-icon-leading-space: var(--spacing-medium, 8px);\n --_with-leading-icon-trailing-space: var(--spacing-medium, 8px);\n\n md-icon {\n margin-right: -2px;\n }\n }\n\n /* 드롭다운 메뉴 컨테이너 */\n .photo-menu-container {\n position: relative;\n display: inline-block;\n }\n\n md-menu {\n --md-menu-container-color: #fff;\n --md-menu-container-elevation: 2;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 150px;\n }\n\n md-menu-item {\n --md-menu-item-container-height: 20px;\n --md-menu-item-one-line-container-height: 30px;\n --md-menu-item-label-text-size: 15px;\n --md-menu-item-label-text-color: #333;\n --md-menu-item-hover-state-layer-color: #f5f5f5;\n --md-menu-item-top-space: 0px;\n --md-menu-item-bottom-space: 0px;\n\n cursor: pointer;\n padding: 2px 4px !important;\n min-height: 18px !important;\n }\n\n md-menu-item md-icon {\n margin-right: 2px;\n color: #666;\n --md-icon-size: 14px;\n }\n\n md-divider {\n margin: 1px 0;\n --md-divider-thickness: 1px;\n }\n `\n ]\n\n @property({ type: String }) buildingInspectionId: string = ''\n @property({ type: String }) buildingLevelId: string = ''\n @property({ type: String }) projectName: string = ''\n @property({ type: String }) buildingName: string = ''\n @property({ type: String }) buildingLevelFloor: string = ''\n @property({ type: String }) projectId: string = ''\n\n @state() private isPhotoMenuOpen = false\n\n render() {\n const path = window.location.pathname\n\n return html`\n <div header>\n <h2>\n <md-icon slot=\"icon\" back @click=${() => history.back()}>arrow_back</md-icon>\n ${this.projectName || ''} ${this.buildingName || ''} ${this.buildingLevelFloor || ''}층\n </h2>\n <div button-container>\n <md-elevated-button\n ?disabled=${path.includes('building-inspection-management/')}\n href=${`building-inspection-management/${this.projectId}`}\n >\n <md-icon slot=\"icon\">dashboard</md-icon>업무 대시보드\n </md-elevated-button>\n <md-elevated-button\n ?disabled=${path.includes('building-inspection-detail-drawing/')}\n href=${`building-inspection-detail-drawing/${this.buildingInspectionId}`}\n >\n <md-icon slot=\"icon\">fact_check</md-icon>검측도면\n </md-elevated-button>\n <md-elevated-button\n ?disabled=${path.includes('building-inspection-detail-checklist/')}\n href=${`building-inspection-detail-checklist/${this.buildingInspectionId}`}\n >\n <md-icon slot=\"icon\">task</md-icon>검측 체크리스트\n </md-elevated-button>\n <div class=\"photo-menu-container\">\n <md-elevated-button @click=${this.togglePhotoMenu} id=\"photo-menu-anchor\">\n <md-icon slot=\"icon\">arrow_drop_down</md-icon>사진촬영\n </md-elevated-button>\n <md-menu .open=${this.isPhotoMenuOpen} anchor=\"photo-menu-anchor\" @closed=${() => (this.isPhotoMenuOpen = false)}>\n <md-menu-item @click=${() => navigate(`building-inspection-detail-camera/${this.buildingInspectionId}`)}>\n <md-icon slot=\"start\">photo_camera</md-icon>\n 사진 촬영\n </md-menu-item>\n <md-divider></md-divider>\n <md-menu-item @click=${() => navigate(`building-inspection-detail-ai-measurement/${this.buildingInspectionId}`)}>\n <md-icon slot=\"start\">straighten</md-icon>\n AI 길이 측정\n </md-menu-item>\n <md-divider></md-divider>\n <md-menu-item @click=${() => navigate(`building-inspection-detail-ai-defect/${this.buildingInspectionId}`)}>\n <md-icon slot=\"start\">manga</md-icon>\n AI 하자 분석\n </md-menu-item>\n </md-menu>\n </div>\n <md-elevated-button\n ?disabled=${path.includes('building-inspection-detail-history/')}\n href=${`building-inspection-detail-history/${this.buildingInspectionId}`}\n disabled\n >\n <md-icon slot=\"icon\">pending_actions</md-icon>감리이력\n </md-elevated-button>\n </div>\n </div>\n `\n }\n\n private togglePhotoMenu() {\n this.isPhotoMenuOpen = !this.isPhotoMenuOpen\n }\n}\n"]}
|
|
@@ -196,9 +196,6 @@ let ImagePreviewPopup = class ImagePreviewPopup extends LitElement {
|
|
|
196
196
|
else if (event.key === 'ArrowRight') {
|
|
197
197
|
this._nextImage();
|
|
198
198
|
}
|
|
199
|
-
else if (event.key === 'Escape') {
|
|
200
|
-
this._close();
|
|
201
|
-
}
|
|
202
199
|
};
|
|
203
200
|
document.addEventListener('keydown', handleKeyPress);
|
|
204
201
|
// 컴포넌트가 제거될 때 이벤트 리스너 정리
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-preview-popup.js","sourceRoot":"","sources":["../../../../client/pages/building-inspection/component/image-preview-popup.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@material/web/icon/icon.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n@customElement('image-preview-popup')\nexport class ImagePreviewPopup extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n background-color: #fff;\n width: 100%;\n height: 100%;\n }\n\n .inspection-header {\n background-color: #f8f9fa;\n color: #495057;\n padding: 12px 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n border-bottom: 1px solid #dee2e6;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n\n .inspection-name {\n font-size: 16px;\n font-weight: 700;\n color: #212529;\n }\n\n div[body] {\n flex: 1;\n overflow: hidden;\n position: relative;\n touch-action: none;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .navigation-button {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n z-index: 10;\n background-color: rgba(0, 0, 0, 0.7);\n color: white;\n border: none;\n border-radius: 50%;\n width: 50px;\n height: 50px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n\n .navigation-button:hover {\n background-color: rgba(0, 0, 0, 0.9);\n }\n\n .navigation-button:disabled {\n background-color: rgba(0, 0, 0, 0.3);\n cursor: not-allowed;\n }\n\n .navigation-button.prev {\n left: 20px;\n }\n\n .navigation-button.next {\n right: 20px;\n }\n\n .image-container {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n }\n\n .zoomable-image {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n transform-origin: center center;\n transition: transform 0.1s ease-out;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .image-info {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n background-color: rgba(0, 0, 0, 0.5);\n color: white;\n padding: 10px 20px;\n border-radius: 20px;\n font-size: 14px;\n z-index: 5;\n }\n\n .error-message {\n padding: 40px;\n text-align: center;\n color: #666;\n font-size: 16px;\n }\n\n .button-container {\n display: flex;\n justify-content: center;\n padding: 15px;\n border-top: 1px solid #ddd;\n background-color: #f9f9f9;\n }\n `\n ]\n\n @property({ type: Array }) images: any[] = []\n @property({ type: Number }) currentIndex: number = 0\n\n render() {\n const currentImage = this.images[this.currentIndex]\n const hasMultipleImages = this.images.length > 1\n\n return html`\n ${currentImage?.previewTitle\n ? html`\n <div class=\"inspection-header\">\n <div class=\"inspection-name\">${currentImage.previewTitle}</div>\n </div>\n `\n : ''}\n\n <div body>\n ${hasMultipleImages\n ? html`\n <button class=\"navigation-button prev\" @click=${this._previousImage} ?disabled=${this.currentIndex === 0}>\n <md-icon>chevron_left</md-icon>\n </button>\n <button\n class=\"navigation-button next\"\n @click=${this._nextImage}\n ?disabled=${this.currentIndex === this.images.length - 1}\n >\n <md-icon>chevron_right</md-icon>\n </button>\n `\n : ''}\n\n <div class=\"image-container\">\n ${currentImage\n ? html`\n <img\n class=\"zoomable-image\"\n src=\"${ifDefined(currentImage.fullpath)}\"\n alt=\"${ifDefined(currentImage.name)}\"\n @load=${this._initImageZoom}\n @error=${this._onImageError}\n />\n <div class=\"image-info\">\n ${currentImage.name || currentImage.checklistItem?.name || ''}\n ${hasMultipleImages ? html` (${this.currentIndex + 1}/${this.images.length})` : ''}\n </div>\n `\n : html`<div class=\"error-message\">표시할 이미지가 없습니다.</div>`}\n </div>\n </div>\n\n <div class=\"button-container\">\n <md-elevated-button @click=${this._close}> <md-icon slot=\"icon\">close</md-icon>닫기 </md-elevated-button>\n </div>\n `\n }\n\n private _previousImage() {\n if (this.currentIndex > 0) {\n this.currentIndex--\n this.requestUpdate()\n }\n }\n\n private _nextImage() {\n if (this.currentIndex < this.images.length - 1) {\n this.currentIndex++\n this.requestUpdate()\n }\n }\n\n private _close() {\n history.back()\n }\n\n private _onImageError(e: Event) {\n const target = e.target as HTMLImageElement\n target.style.display = 'none'\n const container = target.parentElement!\n container.innerHTML += '<div class=\"error-message\">이미지를 불러올 수 없습니다.</div>'\n }\n\n private _initImageZoom(e: Event) {\n const img = e.target as HTMLImageElement\n let scale = 1\n let translateX = 0\n let translateY = 0\n let isDragging = false\n let lastTouchDistance = 0\n let lastTouchX = 0\n let lastTouchY = 0\n\n const updateTransform = () => {\n img.style.transform = `scale(${scale}) translate(${translateX}px, ${translateY}px)`\n }\n\n const resetTransform = () => {\n scale = 1\n translateX = 0\n translateY = 0\n updateTransform()\n }\n\n // 터치 시작\n img.addEventListener('touchstart', event => {\n event.preventDefault()\n\n if (event.touches.length === 1) {\n // 단일 터치 - 드래그 시작\n isDragging = true\n lastTouchX = event.touches[0].clientX\n lastTouchY = event.touches[0].clientY\n } else if (event.touches.length === 2) {\n // 멀티 터치 - 핀치 줌 시작\n isDragging = false\n const touch1 = event.touches[0]\n const touch2 = event.touches[1]\n lastTouchDistance = Math.sqrt(Math.pow(touch2.clientX - touch1.clientX, 2) + Math.pow(touch2.clientY - touch1.clientY, 2))\n }\n })\n\n // 터치 이동\n img.addEventListener('touchmove', event => {\n event.preventDefault()\n\n if (event.touches.length === 1 && isDragging && scale > 1) {\n // 드래그\n const currentX = event.touches[0].clientX\n const currentY = event.touches[0].clientY\n const deltaX = currentX - lastTouchX\n const deltaY = currentY - lastTouchY\n\n translateX += deltaX / scale\n translateY += deltaY / scale\n\n lastTouchX = currentX\n lastTouchY = currentY\n updateTransform()\n } else if (event.touches.length === 2) {\n // 핀치 줌\n const touch1 = event.touches[0]\n const touch2 = event.touches[1]\n const currentDistance = Math.sqrt(\n Math.pow(touch2.clientX - touch1.clientX, 2) + Math.pow(touch2.clientY - touch1.clientY, 2)\n )\n\n if (lastTouchDistance > 0) {\n const scaleChange = currentDistance / lastTouchDistance\n const newScale = scale * scaleChange\n\n // 최소/최대 배율 제한\n if (newScale >= 0.5 && newScale <= 5) {\n scale = newScale\n updateTransform()\n }\n }\n\n lastTouchDistance = currentDistance\n }\n })\n\n // 터치 끝\n img.addEventListener('touchend', event => {\n event.preventDefault()\n isDragging = false\n\n if (event.touches.length === 0) {\n // 모든 터치가 끝났을 때 - 경계 체크 및 보정\n if (scale < 1) {\n resetTransform()\n }\n }\n })\n\n // 더블 탭으로 줌 토글\n let lastTapTime = 0\n img.addEventListener('touchend', event => {\n const currentTime = new Date().getTime()\n const tapLength = currentTime - lastTapTime\n\n if (tapLength < 500 && tapLength > 0 && event.touches.length === 0) {\n if (scale === 1) {\n scale = 2\n updateTransform()\n } else {\n resetTransform()\n }\n }\n\n lastTapTime = currentTime\n })\n\n // 마우스 휠 지원 (데스크톱)\n img.addEventListener('wheel', event => {\n event.preventDefault()\n const delta = event.deltaY > 0 ? 0.9 : 1.1\n const newScale = scale * delta\n\n if (newScale >= 0.5 && newScale <= 5) {\n scale = newScale\n updateTransform()\n }\n })\n\n // 키보드 네비게이션 지원\n const handleKeyPress = (event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') {\n this._previousImage()\n } else if (event.key === 'ArrowRight') {\n this._nextImage()\n } else if (event.key === 'Escape') {\n this._close()\n }\n }\n\n document.addEventListener('keydown', handleKeyPress)\n\n // 컴포넌트가 제거될 때 이벤트 리스너 정리\n const cleanup = () => {\n document.removeEventListener('keydown', handleKeyPress)\n }\n\n // 나중에 정리할 수 있도록 참조 저장\n ;(this as any)._cleanup = cleanup\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n if ((this as any)._cleanup) {\n ;(this as any)._cleanup()\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"image-preview-popup.js","sourceRoot":"","sources":["../../../../client/pages/building-inspection/component/image-preview-popup.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@material/web/icon/icon.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n@customElement('image-preview-popup')\nexport class ImagePreviewPopup extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n background-color: #fff;\n width: 100%;\n height: 100%;\n }\n\n .inspection-header {\n background-color: #f8f9fa;\n color: #495057;\n padding: 12px 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n border-bottom: 1px solid #dee2e6;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n\n .inspection-name {\n font-size: 16px;\n font-weight: 700;\n color: #212529;\n }\n\n div[body] {\n flex: 1;\n overflow: hidden;\n position: relative;\n touch-action: none;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .navigation-button {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n z-index: 10;\n background-color: rgba(0, 0, 0, 0.7);\n color: white;\n border: none;\n border-radius: 50%;\n width: 50px;\n height: 50px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n\n .navigation-button:hover {\n background-color: rgba(0, 0, 0, 0.9);\n }\n\n .navigation-button:disabled {\n background-color: rgba(0, 0, 0, 0.3);\n cursor: not-allowed;\n }\n\n .navigation-button.prev {\n left: 20px;\n }\n\n .navigation-button.next {\n right: 20px;\n }\n\n .image-container {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n }\n\n .zoomable-image {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n transform-origin: center center;\n transition: transform 0.1s ease-out;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .image-info {\n position: absolute;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n background-color: rgba(0, 0, 0, 0.5);\n color: white;\n padding: 10px 20px;\n border-radius: 20px;\n font-size: 14px;\n z-index: 5;\n }\n\n .error-message {\n padding: 40px;\n text-align: center;\n color: #666;\n font-size: 16px;\n }\n\n .button-container {\n display: flex;\n justify-content: center;\n padding: 15px;\n border-top: 1px solid #ddd;\n background-color: #f9f9f9;\n }\n `\n ]\n\n @property({ type: Array }) images: any[] = []\n @property({ type: Number }) currentIndex: number = 0\n\n render() {\n const currentImage = this.images[this.currentIndex]\n const hasMultipleImages = this.images.length > 1\n\n return html`\n ${currentImage?.previewTitle\n ? html`\n <div class=\"inspection-header\">\n <div class=\"inspection-name\">${currentImage.previewTitle}</div>\n </div>\n `\n : ''}\n\n <div body>\n ${hasMultipleImages\n ? html`\n <button class=\"navigation-button prev\" @click=${this._previousImage} ?disabled=${this.currentIndex === 0}>\n <md-icon>chevron_left</md-icon>\n </button>\n <button\n class=\"navigation-button next\"\n @click=${this._nextImage}\n ?disabled=${this.currentIndex === this.images.length - 1}\n >\n <md-icon>chevron_right</md-icon>\n </button>\n `\n : ''}\n\n <div class=\"image-container\">\n ${currentImage\n ? html`\n <img\n class=\"zoomable-image\"\n src=\"${ifDefined(currentImage.fullpath)}\"\n alt=\"${ifDefined(currentImage.name)}\"\n @load=${this._initImageZoom}\n @error=${this._onImageError}\n />\n <div class=\"image-info\">\n ${currentImage.name || currentImage.checklistItem?.name || ''}\n ${hasMultipleImages ? html` (${this.currentIndex + 1}/${this.images.length})` : ''}\n </div>\n `\n : html`<div class=\"error-message\">표시할 이미지가 없습니다.</div>`}\n </div>\n </div>\n\n <div class=\"button-container\">\n <md-elevated-button @click=${this._close}> <md-icon slot=\"icon\">close</md-icon>닫기 </md-elevated-button>\n </div>\n `\n }\n\n private _previousImage() {\n if (this.currentIndex > 0) {\n this.currentIndex--\n this.requestUpdate()\n }\n }\n\n private _nextImage() {\n if (this.currentIndex < this.images.length - 1) {\n this.currentIndex++\n this.requestUpdate()\n }\n }\n\n private _close() {\n history.back()\n }\n\n private _onImageError(e: Event) {\n const target = e.target as HTMLImageElement\n target.style.display = 'none'\n const container = target.parentElement!\n container.innerHTML += '<div class=\"error-message\">이미지를 불러올 수 없습니다.</div>'\n }\n\n private _initImageZoom(e: Event) {\n const img = e.target as HTMLImageElement\n let scale = 1\n let translateX = 0\n let translateY = 0\n let isDragging = false\n let lastTouchDistance = 0\n let lastTouchX = 0\n let lastTouchY = 0\n\n const updateTransform = () => {\n img.style.transform = `scale(${scale}) translate(${translateX}px, ${translateY}px)`\n }\n\n const resetTransform = () => {\n scale = 1\n translateX = 0\n translateY = 0\n updateTransform()\n }\n\n // 터치 시작\n img.addEventListener('touchstart', event => {\n event.preventDefault()\n\n if (event.touches.length === 1) {\n // 단일 터치 - 드래그 시작\n isDragging = true\n lastTouchX = event.touches[0].clientX\n lastTouchY = event.touches[0].clientY\n } else if (event.touches.length === 2) {\n // 멀티 터치 - 핀치 줌 시작\n isDragging = false\n const touch1 = event.touches[0]\n const touch2 = event.touches[1]\n lastTouchDistance = Math.sqrt(Math.pow(touch2.clientX - touch1.clientX, 2) + Math.pow(touch2.clientY - touch1.clientY, 2))\n }\n })\n\n // 터치 이동\n img.addEventListener('touchmove', event => {\n event.preventDefault()\n\n if (event.touches.length === 1 && isDragging && scale > 1) {\n // 드래그\n const currentX = event.touches[0].clientX\n const currentY = event.touches[0].clientY\n const deltaX = currentX - lastTouchX\n const deltaY = currentY - lastTouchY\n\n translateX += deltaX / scale\n translateY += deltaY / scale\n\n lastTouchX = currentX\n lastTouchY = currentY\n updateTransform()\n } else if (event.touches.length === 2) {\n // 핀치 줌\n const touch1 = event.touches[0]\n const touch2 = event.touches[1]\n const currentDistance = Math.sqrt(\n Math.pow(touch2.clientX - touch1.clientX, 2) + Math.pow(touch2.clientY - touch1.clientY, 2)\n )\n\n if (lastTouchDistance > 0) {\n const scaleChange = currentDistance / lastTouchDistance\n const newScale = scale * scaleChange\n\n // 최소/최대 배율 제한\n if (newScale >= 0.5 && newScale <= 5) {\n scale = newScale\n updateTransform()\n }\n }\n\n lastTouchDistance = currentDistance\n }\n })\n\n // 터치 끝\n img.addEventListener('touchend', event => {\n event.preventDefault()\n isDragging = false\n\n if (event.touches.length === 0) {\n // 모든 터치가 끝났을 때 - 경계 체크 및 보정\n if (scale < 1) {\n resetTransform()\n }\n }\n })\n\n // 더블 탭으로 줌 토글\n let lastTapTime = 0\n img.addEventListener('touchend', event => {\n const currentTime = new Date().getTime()\n const tapLength = currentTime - lastTapTime\n\n if (tapLength < 500 && tapLength > 0 && event.touches.length === 0) {\n if (scale === 1) {\n scale = 2\n updateTransform()\n } else {\n resetTransform()\n }\n }\n\n lastTapTime = currentTime\n })\n\n // 마우스 휠 지원 (데스크톱)\n img.addEventListener('wheel', event => {\n event.preventDefault()\n const delta = event.deltaY > 0 ? 0.9 : 1.1\n const newScale = scale * delta\n\n if (newScale >= 0.5 && newScale <= 5) {\n scale = newScale\n updateTransform()\n }\n })\n\n // 키보드 네비게이션 지원\n const handleKeyPress = (event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') {\n this._previousImage()\n } else if (event.key === 'ArrowRight') {\n this._nextImage()\n }\n }\n\n document.addEventListener('keydown', handleKeyPress)\n\n // 컴포넌트가 제거될 때 이벤트 리스너 정리\n const cleanup = () => {\n document.removeEventListener('keydown', handleKeyPress)\n }\n\n // 나중에 정리할 수 있도록 참조 저장\n ;(this as any)._cleanup = cleanup\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n if ((this as any)._cleanup) {\n ;(this as any)._cleanup()\n }\n }\n}\n"]}
|
|
@@ -13,7 +13,12 @@ export declare class InspectionRequestDocument extends LitElement {
|
|
|
13
13
|
buildingInspection: any;
|
|
14
14
|
mode: InspectionMode;
|
|
15
15
|
render(): import("lit-html").TemplateResult<1>;
|
|
16
|
+
private _parseDate;
|
|
16
17
|
private _formatDate;
|
|
18
|
+
private _formatDateTime;
|
|
19
|
+
private _formatDateTimeForInput;
|
|
20
|
+
private _onRequestDateChange;
|
|
21
|
+
private _onDateInputClick;
|
|
17
22
|
private _onInspectionMemoChange;
|
|
18
23
|
private _onNameListUpload;
|
|
19
24
|
private _onConfirm;
|
|
@@ -20,8 +20,8 @@ let InspectionRequestDocument = class InspectionRequestDocument extends LitEleme
|
|
|
20
20
|
}
|
|
21
21
|
render() {
|
|
22
22
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
|
|
23
|
-
const headerDate = this._formatDate(
|
|
24
|
-
const requestDate = this.
|
|
23
|
+
const headerDate = this._formatDate(this._parseDate((_a = this.checklist) === null || _a === void 0 ? void 0 : _a.inspectionRequestUpdatedAt));
|
|
24
|
+
const requestDate = this._formatDateTime(this._parseDate(this.buildingInspection.requestDate));
|
|
25
25
|
const attachmentCount = (_d = (_c = (_b = this.buildingInspection) === null || _b === void 0 ? void 0 : _b.checklist) === null || _c === void 0 ? void 0 : _c.checklistItems) === null || _d === void 0 ? void 0 : _d.reduce((acc, item) => {
|
|
26
26
|
return acc + item.checklistItemAttachmentCount;
|
|
27
27
|
}, 0);
|
|
@@ -59,7 +59,19 @@ let InspectionRequestDocument = class InspectionRequestDocument extends LitEleme
|
|
|
59
59
|
</tr>
|
|
60
60
|
<tr>
|
|
61
61
|
<th>검측 요구일시</th>
|
|
62
|
-
<td
|
|
62
|
+
<td>
|
|
63
|
+
${this.mode === InspectionMode.EDIT
|
|
64
|
+
? html `
|
|
65
|
+
<input
|
|
66
|
+
type="datetime-local"
|
|
67
|
+
class="inspection-date-input"
|
|
68
|
+
.value=${this._formatDateTimeForInput(this.buildingInspection.requestDate)}
|
|
69
|
+
@change=${this._onRequestDateChange}
|
|
70
|
+
@click=${this._onDateInputClick}
|
|
71
|
+
/>
|
|
72
|
+
`
|
|
73
|
+
: requestDate}
|
|
74
|
+
</td>
|
|
63
75
|
</tr>
|
|
64
76
|
<tr>
|
|
65
77
|
<th>검측 사항</th>
|
|
@@ -132,9 +144,44 @@ let InspectionRequestDocument = class InspectionRequestDocument extends LitEleme
|
|
|
132
144
|
: ''}
|
|
133
145
|
`;
|
|
134
146
|
}
|
|
147
|
+
_parseDate(value) {
|
|
148
|
+
if (!value)
|
|
149
|
+
return new Date();
|
|
150
|
+
const d = typeof value === 'string' && /^\d+$/.test(value) ? new Date(Number(value)) : new Date(value);
|
|
151
|
+
return isNaN(d.getTime()) ? new Date() : d;
|
|
152
|
+
}
|
|
135
153
|
_formatDate(date) {
|
|
136
154
|
return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}.`;
|
|
137
155
|
}
|
|
156
|
+
_formatDateTime(date) {
|
|
157
|
+
const hours = String(date.getHours()).padStart(2, '0');
|
|
158
|
+
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
159
|
+
return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}. ${hours}:${minutes}`;
|
|
160
|
+
}
|
|
161
|
+
_formatDateTimeForInput(date) {
|
|
162
|
+
let d = date ? new Date(date) : new Date();
|
|
163
|
+
if (isNaN(d.getTime()))
|
|
164
|
+
d = new Date();
|
|
165
|
+
const year = d.getFullYear();
|
|
166
|
+
const month = String(d.getMonth() + 1).padStart(2, '0');
|
|
167
|
+
const day = String(d.getDate()).padStart(2, '0');
|
|
168
|
+
const hours = String(d.getHours()).padStart(2, '0');
|
|
169
|
+
const minutes = String(d.getMinutes()).padStart(2, '0');
|
|
170
|
+
return `${year}-${month}-${day}T${hours}:${minutes}`;
|
|
171
|
+
}
|
|
172
|
+
_onRequestDateChange(e) {
|
|
173
|
+
const target = e.target;
|
|
174
|
+
this.buildingInspection = Object.assign(Object.assign({}, this.buildingInspection), { requestDate: target.value });
|
|
175
|
+
this.dispatchEvent(new CustomEvent('request-date-change', {
|
|
176
|
+
detail: { requestDate: target.value },
|
|
177
|
+
bubbles: true
|
|
178
|
+
}));
|
|
179
|
+
}
|
|
180
|
+
_onDateInputClick(e) {
|
|
181
|
+
var _a;
|
|
182
|
+
const target = e.target;
|
|
183
|
+
(_a = target.showPicker) === null || _a === void 0 ? void 0 : _a.call(target);
|
|
184
|
+
}
|
|
138
185
|
_onInspectionMemoChange(e) {
|
|
139
186
|
const target = e.target;
|
|
140
187
|
this.checklist = Object.assign(Object.assign({}, this.checklist), { inspectionRequestMemo: target.value });
|
|
@@ -370,6 +417,18 @@ InspectionRequestDocument.styles = [
|
|
|
370
417
|
margin-right: 18px;
|
|
371
418
|
}
|
|
372
419
|
|
|
420
|
+
.inspection-date-input {
|
|
421
|
+
width: 100%;
|
|
422
|
+
max-width: -webkit-fill-available;
|
|
423
|
+
height: 20px;
|
|
424
|
+
border: 1px solid #ddd;
|
|
425
|
+
padding: 10px;
|
|
426
|
+
font-size: 15px;
|
|
427
|
+
border-radius: 5px;
|
|
428
|
+
cursor: pointer;
|
|
429
|
+
font-family: inherit;
|
|
430
|
+
}
|
|
431
|
+
|
|
373
432
|
.inspection-memo-input {
|
|
374
433
|
width: 100%;
|
|
375
434
|
max-width: -webkit-fill-available;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspection-request-document.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/inspection-document/inspection-request-document.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@material/web/icon/icon.js'\nimport '@material/web/button/outlined-button.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ScrollbarStyles } from '@operato/styles'\nimport './photo-album-popup'\n\nexport enum InspectionMode {\n EDIT = 'EDIT',\n VIEW = 'VIEW'\n}\n\n@customElement('inspection-request-document')\nexport class InspectionRequestDocument extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: block;\n padding: 20px;\n font-family: 'Noto Sans KR', sans-serif;\n line-height: 1.4;\n overflow-y: auto;\n }\n\n .document-container {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 2px solid #333;\n }\n\n .document-header {\n text-align: center;\n padding: 15px;\n border-bottom: 1px solid #333;\n }\n\n .document-title {\n font-size: 18px;\n font-weight: bold;\n margin-bottom: 10px;\n }\n\n .document-body {\n padding: 20px;\n }\n\n .request-info {\n margin-bottom: 20px;\n }\n\n .request-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 20px;\n }\n\n .request-table th,\n .request-table td {\n border: 1px solid #333;\n padding: 8px;\n text-align: left;\n }\n\n .request-table th {\n background-color: #f5f5f5;\n font-weight: bold;\n width: 120px;\n }\n\n .inspection-items {\n margin: 20px 0;\n }\n\n .inspection-items textarea {\n width: 100%;\n min-height: 100px;\n border: 1px solid #ddd;\n padding: 10px;\n font-family: inherit;\n resize: vertical;\n }\n\n .signature-section {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 15px;\n }\n\n .signature-box {\n display: flex;\n align-items: center;\n gap: 15px;\n text-align: right;\n }\n\n .signature-title {\n font-size: 14px;\n font-weight: bold;\n color: #333;\n min-width: 120px;\n }\n\n .signature-name {\n font-size: 14px;\n color: #333;\n }\n\n .signature-container {\n position: relative;\n min-width: 100px;\n min-height: 60px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .signature-container::after {\n content: '(인)';\n position: absolute;\n bottom: 5px;\n right: 5px;\n font-size: 12px;\n color: #333;\n font-weight: bold;\n z-index: 2;\n }\n\n .signature-image {\n max-width: 140px;\n max-height: 60px;\n width: auto;\n height: auto;\n }\n\n .attachment-section {\n margin-top: 30px;\n margin-bottom: 30px;\n }\n\n .attachment-title {\n font-weight: bold;\n font-size: 14px;\n color: #333;\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .attachment-list {\n margin-left: 30px;\n }\n\n .attachment-item {\n margin-bottom: 5px;\n color: #2196f3;\n font-size: 14px;\n line-height: 1.5;\n }\n\n .attachment-item.upload {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .attachment-item.upload md-outlined-button {\n --md-outlined-button-container-height: 24px;\n --md-outlined-button-label-text-size: 12px;\n --md-outlined-button-outline-color: #666;\n --md-outlined-button-label-text-color: #666;\n }\n\n .attachment-item.upload span {\n color: #666;\n font-size: 12px;\n }\n\n .attachment-icon {\n display: none;\n }\n\n .date-section {\n text-align: right;\n margin-bottom: 20px;\n font-size: 14px;\n }\n\n .form-row {\n display: flex;\n align-items: flex-start;\n margin-bottom: 10px;\n }\n\n .form-label {\n font-weight: bold;\n width: 100px;\n margin-right: 10px;\n }\n\n .recipient-section {\n margin-bottom: 30px;\n }\n\n .recipient-item {\n display: flex;\n margin-bottom: 5px;\n }\n\n .recipient-label {\n font-weight: bold;\n margin-right: 18px;\n }\n\n .inspection-memo-input {\n width: 100%;\n max-width: -webkit-fill-available;\n height: 40px;\n border: 1px solid #ddd;\n padding: 10px;\n font-size: 15px;\n border-radius: 5px;\n }\n\n .inspection-memo-text {\n padding: 10px;\n font-size: 15px;\n color: #495057;\n border: 1px solid #e9ecef;\n border-radius: 5px;\n min-height: 20px;\n }\n\n .button-container {\n display: flex;\n justify-content: center;\n margin-top: 20px;\n padding: 15px 0;\n border-top: 1px solid #ddd;\n }\n\n .button-container md-elevated-button {\n background-color: #3498db;\n color: white;\n padding: 12px 30px;\n font-size: 16px;\n font-weight: bold;\n border-radius: 8px;\n }\n\n .document-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n `\n ]\n\n @property({ type: Object }) checklist: any = {}\n @property({ type: Object }) buildingInspection: any = {}\n @property({ type: String }) mode: InspectionMode = InspectionMode.VIEW\n\n render() {\n const headerDate = this._formatDate(new Date(this.checklist?.inspectionRequestUpdatedAt || Date.now()))\n const requestDate = this._formatDate(new Date(this.buildingInspection.requestDate))\n const attachmentCount = this.buildingInspection?.checklist?.checklistItems?.reduce((acc, item) => {\n return acc + item.checklistItemAttachmentCount\n }, 0)\n\n return html`\n <div class=\"document-container\">\n <div class=\"document-header\">\n <div class=\"document-title\">검측요청서</div>\n </div>\n\n <div class=\"document-body\">\n <div class=\"date-section\">${headerDate}</div>\n\n <div class=\"request-info\">\n <div class=\"recipient-section\">\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">문서 번호:</span>\n <span>${this.checklist?.inspectionRequestDocumentNo || ''}</span>\n </div>\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">수신:</span>\n <span>${this.buildingInspection?.buildingLevel?.building?.buildingComplex?.supervisoryCompany}</span>\n </div>\n </div>\n\n <div style=\"margin: 15px 0;\">다음과 같은 세부공종에 대하여 검측요청 하오니 검사 후 승인하여 주시 기 바랍니다.</div>\n\n <table class=\"request-table\">\n <tr>\n <th>위치 및 공종</th>\n <td>${(this.checklist?.location || '') + ' - ' + (this.checklist?.constructionType || '')}</td>\n </tr>\n <tr>\n <th>검측 부위</th>\n <td>${this.checklist?.inspectionParts?.join(', ') || ''}</td>\n </tr>\n <tr>\n <th>검측 요구일시</th>\n <td>${requestDate}</td>\n </tr>\n <tr>\n <th>검측 사항</th>\n <td>\n <input\n type=\"text\"\n class=\"inspection-memo-input\"\n .value=${this.checklist?.inspectionRequestMemo || ''}\n @input=${this._onInspectionMemoChange}\n ?disabled=${this.mode === InspectionMode.VIEW}\n placeholder=\"검측사항을 입력하세요.\"\n />\n </td>\n </tr>\n </table>\n </div>\n\n <div class=\"document-footer\">\n <div class=\"attachment-section\">\n <div class=\"attachment-title\">첨부 파일</div>\n <div class=\"attachment-list\">\n <div class=\"attachment-item\">시공자의 검측 체크리스트</div>\n ${this.mode === InspectionMode.EDIT\n ? html`\n <div class=\"attachment-item upload\">\n 실명부\n <md-outlined-button @click=${this._onNameListUpload.bind(this)}>\n ${this.checklist?.nameListAttachment ? '다시 업로드' : '업로드'}\n </md-outlined-button>\n ${this.checklist?.nameListAttachment ? html`<span>(업로드 완료)</span>` : ''}\n </div>\n `\n : this.checklist?.nameListAttachment\n ? html`<div class=\"attachment-item\">실명부</div>`\n : ''}\n ${attachmentCount > 0 ? html`<div class=\"attachment-item\">첨부 사진 ${attachmentCount}개</div>` : ''}\n </div>\n </div>\n\n <div class=\"signature-section\">\n <div class=\"signature-box\">\n <div class=\"signature-title\">공종별 시공 관리자</div>\n <div class=\"signature-name\">${this.checklist?.taskConstructor?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.taskConstructorSignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.taskConstructorSignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n <div class=\"signature-box\">\n <div class=\"signature-title\">총괄 시공 책임자</div>\n <div class=\"signature-name\">${this.checklist?.overallConstructor?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.overallConstructorSignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.overallConstructorSignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n ${this.mode === InspectionMode.EDIT\n ? html`\n <div class=\"button-container\">\n <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>\n </div>\n `\n : ''}\n `\n }\n\n private _formatDate(date: Date): string {\n return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}.`\n }\n\n private _onInspectionMemoChange(e: Event) {\n const target = e.target as HTMLInputElement\n this.checklist = { ...this.checklist, inspectionRequestMemo: target.value }\n\n // 부모 컴포넌트에 변경사항 전달\n this.dispatchEvent(\n new CustomEvent('inspection-memo-change', {\n detail: { inspectionRequestMemo: target.value },\n bubbles: true\n })\n )\n }\n\n // 실명부 업로드\n private _onNameListUpload() {\n const input = document.createElement('input')\n input.type = 'file'\n input.accept = '.pdf,.doc,.docx,.jpg,.jpeg,.png'\n input.onchange = (e: any) => {\n const file = e.target.files[0]\n if (file) {\n // checklist에 파일과 업로드 플래그 저장\n this.checklist = {\n ...this.checklist,\n nameListAttachment: file,\n isNameListAttachmentUploaded: true\n }\n\n // 부모 컴포넌트에 변경사항 알림\n this.dispatchEvent(new CustomEvent('name-list-file-selected', { detail: { file } }))\n this.requestUpdate()\n }\n }\n input.click()\n }\n\n // 확인 버튼\n private _onConfirm() {\n this.dispatchEvent(new CustomEvent('popup-close', { bubbles: true }))\n history.back()\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"inspection-request-document.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/inspection-document/inspection-request-document.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@material/web/icon/icon.js'\nimport '@material/web/button/outlined-button.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ScrollbarStyles } from '@operato/styles'\nimport './photo-album-popup'\n\nexport enum InspectionMode {\n EDIT = 'EDIT',\n VIEW = 'VIEW'\n}\n\n@customElement('inspection-request-document')\nexport class InspectionRequestDocument extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: block;\n padding: 20px;\n font-family: 'Noto Sans KR', sans-serif;\n line-height: 1.4;\n overflow-y: auto;\n }\n\n .document-container {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 2px solid #333;\n }\n\n .document-header {\n text-align: center;\n padding: 15px;\n border-bottom: 1px solid #333;\n }\n\n .document-title {\n font-size: 18px;\n font-weight: bold;\n margin-bottom: 10px;\n }\n\n .document-body {\n padding: 20px;\n }\n\n .request-info {\n margin-bottom: 20px;\n }\n\n .request-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 20px;\n }\n\n .request-table th,\n .request-table td {\n border: 1px solid #333;\n padding: 8px;\n text-align: left;\n }\n\n .request-table th {\n background-color: #f5f5f5;\n font-weight: bold;\n width: 120px;\n }\n\n .inspection-items {\n margin: 20px 0;\n }\n\n .inspection-items textarea {\n width: 100%;\n min-height: 100px;\n border: 1px solid #ddd;\n padding: 10px;\n font-family: inherit;\n resize: vertical;\n }\n\n .signature-section {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 15px;\n }\n\n .signature-box {\n display: flex;\n align-items: center;\n gap: 15px;\n text-align: right;\n }\n\n .signature-title {\n font-size: 14px;\n font-weight: bold;\n color: #333;\n min-width: 120px;\n }\n\n .signature-name {\n font-size: 14px;\n color: #333;\n }\n\n .signature-container {\n position: relative;\n min-width: 100px;\n min-height: 60px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .signature-container::after {\n content: '(인)';\n position: absolute;\n bottom: 5px;\n right: 5px;\n font-size: 12px;\n color: #333;\n font-weight: bold;\n z-index: 2;\n }\n\n .signature-image {\n max-width: 140px;\n max-height: 60px;\n width: auto;\n height: auto;\n }\n\n .attachment-section {\n margin-top: 30px;\n margin-bottom: 30px;\n }\n\n .attachment-title {\n font-weight: bold;\n font-size: 14px;\n color: #333;\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .attachment-list {\n margin-left: 30px;\n }\n\n .attachment-item {\n margin-bottom: 5px;\n color: #2196f3;\n font-size: 14px;\n line-height: 1.5;\n }\n\n .attachment-item.upload {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .attachment-item.upload md-outlined-button {\n --md-outlined-button-container-height: 24px;\n --md-outlined-button-label-text-size: 12px;\n --md-outlined-button-outline-color: #666;\n --md-outlined-button-label-text-color: #666;\n }\n\n .attachment-item.upload span {\n color: #666;\n font-size: 12px;\n }\n\n .attachment-icon {\n display: none;\n }\n\n .date-section {\n text-align: right;\n margin-bottom: 20px;\n font-size: 14px;\n }\n\n .form-row {\n display: flex;\n align-items: flex-start;\n margin-bottom: 10px;\n }\n\n .form-label {\n font-weight: bold;\n width: 100px;\n margin-right: 10px;\n }\n\n .recipient-section {\n margin-bottom: 30px;\n }\n\n .recipient-item {\n display: flex;\n margin-bottom: 5px;\n }\n\n .recipient-label {\n font-weight: bold;\n margin-right: 18px;\n }\n\n .inspection-date-input {\n width: 100%;\n max-width: -webkit-fill-available;\n height: 20px;\n border: 1px solid #ddd;\n padding: 10px;\n font-size: 15px;\n border-radius: 5px;\n cursor: pointer;\n font-family: inherit;\n }\n\n .inspection-memo-input {\n width: 100%;\n max-width: -webkit-fill-available;\n height: 40px;\n border: 1px solid #ddd;\n padding: 10px;\n font-size: 15px;\n border-radius: 5px;\n }\n\n .inspection-memo-text {\n padding: 10px;\n font-size: 15px;\n color: #495057;\n border: 1px solid #e9ecef;\n border-radius: 5px;\n min-height: 20px;\n }\n\n .button-container {\n display: flex;\n justify-content: center;\n margin-top: 20px;\n padding: 15px 0;\n border-top: 1px solid #ddd;\n }\n\n .button-container md-elevated-button {\n background-color: #3498db;\n color: white;\n padding: 12px 30px;\n font-size: 16px;\n font-weight: bold;\n border-radius: 8px;\n }\n\n .document-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n `\n ]\n\n @property({ type: Object }) checklist: any = {}\n @property({ type: Object }) buildingInspection: any = {}\n @property({ type: String }) mode: InspectionMode = InspectionMode.VIEW\n\n render() {\n const headerDate = this._formatDate(this._parseDate(this.checklist?.inspectionRequestUpdatedAt))\n const requestDate = this._formatDateTime(this._parseDate(this.buildingInspection.requestDate))\n const attachmentCount = this.buildingInspection?.checklist?.checklistItems?.reduce((acc, item) => {\n return acc + item.checklistItemAttachmentCount\n }, 0)\n\n return html`\n <div class=\"document-container\">\n <div class=\"document-header\">\n <div class=\"document-title\">검측요청서</div>\n </div>\n\n <div class=\"document-body\">\n <div class=\"date-section\">${headerDate}</div>\n\n <div class=\"request-info\">\n <div class=\"recipient-section\">\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">문서 번호:</span>\n <span>${this.checklist?.inspectionRequestDocumentNo || ''}</span>\n </div>\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">수신:</span>\n <span>${this.buildingInspection?.buildingLevel?.building?.buildingComplex?.supervisoryCompany}</span>\n </div>\n </div>\n\n <div style=\"margin: 15px 0;\">다음과 같은 세부공종에 대하여 검측요청 하오니 검사 후 승인하여 주시 기 바랍니다.</div>\n\n <table class=\"request-table\">\n <tr>\n <th>위치 및 공종</th>\n <td>${(this.checklist?.location || '') + ' - ' + (this.checklist?.constructionType || '')}</td>\n </tr>\n <tr>\n <th>검측 부위</th>\n <td>${this.checklist?.inspectionParts?.join(', ') || ''}</td>\n </tr>\n <tr>\n <th>검측 요구일시</th>\n <td>\n ${this.mode === InspectionMode.EDIT\n ? html`\n <input\n type=\"datetime-local\"\n class=\"inspection-date-input\"\n .value=${this._formatDateTimeForInput(this.buildingInspection.requestDate)}\n @change=${this._onRequestDateChange}\n @click=${this._onDateInputClick}\n />\n `\n : requestDate}\n </td>\n </tr>\n <tr>\n <th>검측 사항</th>\n <td>\n <input\n type=\"text\"\n class=\"inspection-memo-input\"\n .value=${this.checklist?.inspectionRequestMemo || ''}\n @input=${this._onInspectionMemoChange}\n ?disabled=${this.mode === InspectionMode.VIEW}\n placeholder=\"검측사항을 입력하세요.\"\n />\n </td>\n </tr>\n </table>\n </div>\n\n <div class=\"document-footer\">\n <div class=\"attachment-section\">\n <div class=\"attachment-title\">첨부 파일</div>\n <div class=\"attachment-list\">\n <div class=\"attachment-item\">시공자의 검측 체크리스트</div>\n ${this.mode === InspectionMode.EDIT\n ? html`\n <div class=\"attachment-item upload\">\n 실명부\n <md-outlined-button @click=${this._onNameListUpload.bind(this)}>\n ${this.checklist?.nameListAttachment ? '다시 업로드' : '업로드'}\n </md-outlined-button>\n ${this.checklist?.nameListAttachment ? html`<span>(업로드 완료)</span>` : ''}\n </div>\n `\n : this.checklist?.nameListAttachment\n ? html`<div class=\"attachment-item\">실명부</div>`\n : ''}\n ${attachmentCount > 0 ? html`<div class=\"attachment-item\">첨부 사진 ${attachmentCount}개</div>` : ''}\n </div>\n </div>\n\n <div class=\"signature-section\">\n <div class=\"signature-box\">\n <div class=\"signature-title\">공종별 시공 관리자</div>\n <div class=\"signature-name\">${this.checklist?.taskConstructor?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.taskConstructorSignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.taskConstructorSignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n <div class=\"signature-box\">\n <div class=\"signature-title\">총괄 시공 책임자</div>\n <div class=\"signature-name\">${this.checklist?.overallConstructor?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.overallConstructorSignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.overallConstructorSignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n ${this.mode === InspectionMode.EDIT\n ? html`\n <div class=\"button-container\">\n <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>\n </div>\n `\n : ''}\n `\n }\n\n private _parseDate(value: any): Date {\n if (!value) return new Date()\n const d = typeof value === 'string' && /^\\d+$/.test(value) ? new Date(Number(value)) : new Date(value)\n return isNaN(d.getTime()) ? new Date() : d\n }\n\n private _formatDate(date: Date): string {\n return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}.`\n }\n\n private _formatDateTime(date: Date): string {\n const hours = String(date.getHours()).padStart(2, '0')\n const minutes = String(date.getMinutes()).padStart(2, '0')\n return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}. ${hours}:${minutes}`\n }\n\n private _formatDateTimeForInput(date?: string | Date | null): string {\n let d = date ? new Date(date) : new Date()\n if (isNaN(d.getTime())) d = new Date()\n\n const year = d.getFullYear()\n const month = String(d.getMonth() + 1).padStart(2, '0')\n const day = String(d.getDate()).padStart(2, '0')\n const hours = String(d.getHours()).padStart(2, '0')\n const minutes = String(d.getMinutes()).padStart(2, '0')\n return `${year}-${month}-${day}T${hours}:${minutes}`\n }\n\n private _onRequestDateChange(e: Event) {\n const target = e.target as HTMLInputElement\n this.buildingInspection = { ...this.buildingInspection, requestDate: target.value }\n\n this.dispatchEvent(\n new CustomEvent('request-date-change', {\n detail: { requestDate: target.value },\n bubbles: true\n })\n )\n }\n\n private _onDateInputClick(e: Event) {\n const target = e.target as HTMLInputElement\n target.showPicker?.()\n }\n\n private _onInspectionMemoChange(e: Event) {\n const target = e.target as HTMLInputElement\n this.checklist = { ...this.checklist, inspectionRequestMemo: target.value }\n\n // 부모 컴포넌트에 변경사항 전달\n this.dispatchEvent(\n new CustomEvent('inspection-memo-change', {\n detail: { inspectionRequestMemo: target.value },\n bubbles: true\n })\n )\n }\n\n // 실명부 업로드\n private _onNameListUpload() {\n const input = document.createElement('input')\n input.type = 'file'\n input.accept = '.pdf,.doc,.docx,.jpg,.jpeg,.png'\n input.onchange = (e: any) => {\n const file = e.target.files[0]\n if (file) {\n // checklist에 파일과 업로드 플래그 저장\n this.checklist = {\n ...this.checklist,\n nameListAttachment: file,\n isNameListAttachmentUploaded: true\n }\n\n // 부모 컴포넌트에 변경사항 알림\n this.dispatchEvent(new CustomEvent('name-list-file-selected', { detail: { file } }))\n this.requestUpdate()\n }\n }\n input.click()\n }\n\n // 확인 버튼\n private _onConfirm() {\n this.dispatchEvent(new CustomEvent('popup-close', { bubbles: true }))\n history.back()\n }\n}\n"]}
|
|
@@ -21,6 +21,7 @@ export declare class InspectionResultNotification extends LitElement {
|
|
|
21
21
|
mode: InspectionMode;
|
|
22
22
|
render(): import("lit-html").TemplateResult<1>;
|
|
23
23
|
protected updated(): void;
|
|
24
|
+
private _parseDate;
|
|
24
25
|
private _formatDate;
|
|
25
26
|
private _getAttachmentCount;
|
|
26
27
|
private _getOverallResult;
|
|
@@ -28,7 +28,7 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
|
|
|
28
28
|
}
|
|
29
29
|
render() {
|
|
30
30
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
31
|
-
const headerDate = this._formatDate(
|
|
31
|
+
const headerDate = this._formatDate(this._parseDate((_a = this.checklist) === null || _a === void 0 ? void 0 : _a.inspectionResultUpdatedAt));
|
|
32
32
|
return html `
|
|
33
33
|
<div class="document-container">
|
|
34
34
|
<div class="document-header">
|
|
@@ -51,7 +51,7 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
|
|
|
51
51
|
|
|
52
52
|
<div class="content-section">
|
|
53
53
|
문서번호 ${((_g = this.checklist) === null || _g === void 0 ? void 0 : _g.inspectionRequestDocumentNo) || ''} 검측 요청한 건에 대하여
|
|
54
|
-
${this._formatDate(
|
|
54
|
+
${this._formatDate(this._parseDate((_h = this.buildingInspection) === null || _h === void 0 ? void 0 : _h.requestDate))} 검측한 결과를 다음과 같이 통보합니다.
|
|
55
55
|
</div>
|
|
56
56
|
|
|
57
57
|
<table class="request-table">
|
|
@@ -186,6 +186,12 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
|
|
|
186
186
|
}));
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
|
+
_parseDate(value) {
|
|
190
|
+
if (!value)
|
|
191
|
+
return new Date();
|
|
192
|
+
const d = typeof value === 'string' && /^\d+$/.test(value) ? new Date(Number(value)) : new Date(value);
|
|
193
|
+
return isNaN(d.getTime()) ? new Date() : d;
|
|
194
|
+
}
|
|
189
195
|
_formatDate(date) {
|
|
190
196
|
return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}.`;
|
|
191
197
|
}
|