@dssp/supervision 1.0.0-alpha.27 → 1.0.0-alpha.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist-client/pages/action-plan/action-plan-importer.d.ts +1 -1
  2. package/dist-client/pages/action-plan/action-plan-list-page.d.ts +1 -1
  3. package/dist-client/pages/building-inspection/building-inspection-detail-camera.d.ts +1 -1
  4. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +1 -1
  5. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.d.ts +2 -1
  6. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js +36 -11
  7. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js.map +1 -1
  8. package/dist-client/pages/building-inspection/building-inspection-list.d.ts +6 -2
  9. package/dist-client/pages/building-inspection/building-inspection-list.js +113 -13
  10. package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -1
  11. package/dist-client/pages/building-inspection/component/daily-worklog-popup.d.ts +9 -4
  12. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js +122 -45
  13. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js.map +1 -1
  14. package/dist-client/pages/building-inspection/component/image-preview-popup.d.ts +1 -1
  15. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +1 -1
  16. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +1 -1
  17. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.d.ts +1 -1
  18. package/dist-client/pages/building-inspection/component/inspection-event-provider.d.ts +2 -1
  19. package/dist-client/pages/building-inspection/component/inspection-event-provider.js +39 -17
  20. package/dist-client/pages/building-inspection/component/inspection-event-provider.js.map +1 -1
  21. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +2 -2
  22. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.d.ts +1 -1
  23. package/dist-client/pages/checklist/inspection-info-popup.d.ts +1 -1
  24. package/dist-client/pages/checklist/inspection-tab-popup.d.ts +1 -1
  25. package/dist-client/pages/checklist-template/checklist-template-list.d.ts +1 -1
  26. package/dist-client/pages/checklist-template/checklist-type-management.d.ts +1 -1
  27. package/dist-client/pages/issue/issue-importer.d.ts +1 -1
  28. package/dist-client/pages/issue/issue-list-page.d.ts +1 -1
  29. package/dist-client/pages/project-report/project-report-importer.d.ts +1 -1
  30. package/dist-client/pages/project-report/project-report-list-page.d.ts +1 -1
  31. package/dist-client/pages/supervisor/supervisor-importer.d.ts +1 -1
  32. package/dist-client/pages/supervisor/supervisor-list-page.d.ts +1 -1
  33. package/dist-client/tsconfig.tsbuildinfo +1 -1
  34. package/dist-server/service/building-inspection/building-inspection.d.ts +3 -0
  35. package/dist-server/service/building-inspection/building-inspection.js +10 -0
  36. package/dist-server/service/building-inspection/building-inspection.js.map +1 -1
  37. package/dist-server/service/building-inspection/index.d.ts +1 -1
  38. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.d.ts +3 -5
  39. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js +29 -71
  40. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js.map +1 -1
  41. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.d.ts +2 -0
  42. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js +52 -2
  43. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js.map +1 -1
  44. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.d.ts +10 -3
  45. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js +35 -8
  46. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js.map +1 -1
  47. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.d.ts +2 -0
  48. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js +6 -0
  49. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js.map +1 -1
  50. package/dist-server/service/index.d.ts +1 -1
  51. package/dist-server/tsconfig.tsbuildinfo +1 -1
  52. package/package.json +3 -3
@@ -5,6 +5,6 @@ export declare class ActionPlanImporter extends LitElement {
5
5
  static styles: import("lit").CSSResult[];
6
6
  private actionPlans;
7
7
  private columns;
8
- render(): import("lit").TemplateResult<1>;
8
+ render(): import("lit-html").TemplateResult<1>;
9
9
  private save;
10
10
  }
@@ -48,7 +48,7 @@ export declare class ActionPlanListPage extends ActionPlanListPage_base {
48
48
  handler: (records: any) => Promise<void>;
49
49
  };
50
50
  };
51
- render(): import("lit").TemplateResult<1>;
51
+ render(): import("lit-html").TemplateResult<1>;
52
52
  pageInitialized(lifecycle: any): Promise<void>;
53
53
  pageUpdated(changes: any, lifecycle: any): Promise<void>;
54
54
  fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<{
@@ -15,7 +15,7 @@ export declare class BuildingInspectionCamera extends PageView {
15
15
  get context(): {
16
16
  title: string;
17
17
  };
18
- render(): import("lit").TemplateResult<1>;
18
+ render(): import("lit-html").TemplateResult<1>;
19
19
  protected updated(changes: PropertyValues): Promise<void>;
20
20
  pageUpdated(changes: any, lifecycle: PageLifecycle): Promise<void>;
21
21
  initBuildingInspection(buildingInspectionId?: string): Promise<void>;
@@ -13,7 +13,7 @@ export declare class BuildingInspectionDetailChecklist extends PageView {
13
13
  get context(): {
14
14
  title: string;
15
15
  };
16
- render(): import("lit").TemplateResult<1>;
16
+ render(): import("lit-html").TemplateResult<1>;
17
17
  pageUpdated(changes: any, lifecycle: PageLifecycle): Promise<void>;
18
18
  initBuildingInspection(buildingInspectionId?: string): Promise<void>;
19
19
  private _getProjectByBuildingComplexId;
@@ -25,11 +25,12 @@ export declare class BuildingInspectionDetailDrawing extends BuildingInspectionD
25
25
  title: string;
26
26
  };
27
27
  connectedCallback(): void;
28
- render(): import("lit").TemplateResult<1>;
28
+ render(): import("lit-html").TemplateResult<1>;
29
29
  protected updated(changes: PropertyValues): Promise<void>;
30
30
  pageUpdated(changes: any, lifecycle: PageLifecycle): Promise<void>;
31
31
  initBuildingInspection(buildingInspectionId?: string): Promise<void>;
32
32
  private _getProjectByBuildingComplexId;
33
33
  private onClickMarkerSave;
34
+ private parseBoxCoordinates;
34
35
  }
35
36
  export {};
@@ -56,19 +56,17 @@ let BuildingInspectionDetailDrawing = class BuildingInspectionDetailDrawing exte
56
56
  body
57
57
  @link-clicked=${async (e) => {
58
58
  const { link } = e.detail;
59
- const { id, type, symbol, box, dwgId } = JSON.parse(link);
60
- const [x, y, width, height] = (box === null || box === void 0 ? void 0 : box.split(',').map(Number)) || [];
59
+ const { id, type, symbol, box, dwgId } = JSON.parse(link) || {};
60
+ // 좌표 파싱 유효성 검증
61
+ const coordinates = this.parseBoxCoordinates(box);
62
+ // 유효하지 않은 좌표면 링크 처리 중단
63
+ if (!coordinates) {
64
+ console.warn('Invalid link coordinates, skipping:', box);
65
+ return;
66
+ }
61
67
  this.linkUrl = `DWGID:${dwgId}`;
62
68
  this.linkShapes = [
63
- {
64
- id: id,
65
- type: 'link',
66
- x,
67
- y,
68
- width,
69
- height,
70
- link: '{}'
71
- }
69
+ Object.assign(Object.assign({ id: id || 'unknown', type: 'link' }, coordinates), { link: '{}' })
72
70
  ];
73
71
  if (this.dialog) {
74
72
  this.dialog.showModal();
@@ -221,6 +219,33 @@ let BuildingInspectionDetailDrawing = class BuildingInspectionDetailDrawing exte
221
219
  return;
222
220
  notify({ message: '저장되었습니다.' });
223
221
  }
222
+ parseBoxCoordinates(box) {
223
+ if (!box || typeof box !== 'string') {
224
+ console.warn('Invalid box coordinate for link:', box);
225
+ return null;
226
+ }
227
+ try {
228
+ const coords = box.split(',').map(str => {
229
+ const num = Number(str.trim());
230
+ return Number.isFinite(num) ? num : NaN;
231
+ });
232
+ if (coords.length !== 4 || coords.some(coord => isNaN(coord))) {
233
+ console.warn('Box coordinate should have 4 valid numbers:', box);
234
+ return null;
235
+ }
236
+ const [x, y, width, height] = coords;
237
+ // width, height가 0 이하면 유효하지 않음
238
+ if (width <= 0 || height <= 0) {
239
+ console.warn('Invalid width or height for link:', box);
240
+ return null;
241
+ }
242
+ return { x, y, width, height };
243
+ }
244
+ catch (error) {
245
+ console.warn('Error parsing box coordinates:', box, error);
246
+ return null;
247
+ }
248
+ }
224
249
  };
225
250
  BuildingInspectionDetailDrawing.styles = [
226
251
  ScrollbarStyles,
@@ -1 +1 @@
1
- {"version":3,"file":"building-inspection-detail-drawing.js","sourceRoot":"","sources":["../../../client/pages/building-inspection/building-inspection-detail-drawing.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/image-marker/ox-image-marker.js'\nimport '@operato/image-marker/ox-image-marker-view.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, query, state } from 'lit/decorators.js'\nimport { consume } from '@lit/context'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\n\nimport { PageView } from '@operato/shell'\nimport { CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\nimport { Shape } from '@operato/image-marker'\n\nimport { DrawingImageProvider } from '@dssp/drawing/dist-client/drawing-management/drawing-image-provider.js'\n\nimport './component/building-inspection-detail-header'\nimport { BuildingInspectionStatus } from './building-inspection-list'\n\n@customElement('building-inspection-detail-drawing')\nexport class BuildingInspectionDetailDrawing extends ScopedElementsMixin(PageView) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: 55px auto;\n color: #4e5055;\n\n width: 100%;\n background-color: var(--md-sys-color-background, #f6f6f6);\n overflow-y: auto;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n\n div[body] {\n display: flex;\n justify-content: center;\n\n ox-image-marker-view {\n width: 100%;\n }\n }\n\n dialog ox-image-marker-view {\n width: 80vw;\n height: 80vh;\n }\n `\n ]\n\n @state() project: any = {}\n @state() buildingInspection: any = {}\n @state() buildingInspectionId: string = ''\n @state() imageUrl?: string\n @state() shapes: Shape[] = []\n @state() linkUrl?: string\n @state() linkShapes: Shape[] = []\n\n @state() drawingImageProvider: DrawingImageProvider = new DrawingImageProvider()\n // @consume({ context: OxUserPreferencesContext, subscribe: true })\n\n @query('#image-marker') imageMarker!: any\n @query('#link-viewer') linkViewer!: any\n @query('dialog') dialog!: HTMLDialogElement\n\n get context() {\n return {\n title: '검측 관리 상세 - 검측 도면'\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n\n requestAnimationFrame(() => {\n this.dialog.addEventListener('click', event => {\n const rect = this.dialog.getBoundingClientRect()\n const isInDialog =\n rect.top <= event.clientY && event.clientY <= rect.bottom && rect.left <= event.clientX && event.clientX <= rect.right\n\n // 다이아로그 내부를 클릭한 것이 아니면 다이아로그 닫기\n if (!isInDialog) {\n this.dialog.close()\n }\n })\n })\n }\n\n render() {\n return html`\n <building-inspection-detail-header\n .buildingInspectionId=${this.buildingInspection?.id}\n .buildingLevelId=${this.buildingInspection?.buildingLevel?.id}\n .projectName=${this.project.name}\n .buildingName=${this.buildingInspection?.buildingLevel?.building?.name}\n .buildingLevelFloor=${this.buildingInspection?.buildingLevel?.floor}\n ></building-inspection-detail-header>\n\n <div\n body\n @link-clicked=${async (e: CustomEvent) => {\n const { link } = e.detail\n const { id, type, symbol, box, dwgId } = JSON.parse(link)\n const [x, y, width, height] = box?.split(',').map(Number) || []\n\n this.linkUrl = `DWGID:${dwgId}`\n this.linkShapes = [\n {\n id: id!,\n type: 'link',\n x,\n y,\n width,\n height,\n link: '{}'\n }\n ]\n\n if (this.dialog) {\n this.dialog.showModal()\n\n requestAnimationFrame(() => {\n this.linkViewer.reset()\n })\n }\n }}\n >\n ${this.buildingInspection?.status == BuildingInspectionStatus.PASS\n ? html`<ox-image-marker-view\n id=\"image-marker\"\n .imageUrl=${this.imageUrl}\n .shapes=${this.shapes}\n .imageProvider=${this.drawingImageProvider}\n ></ox-image-marker-view>`\n : html` <ox-image-marker\n id=\"image-marker\"\n .imageUrl=${this.imageUrl}\n .shapes=${this.shapes}\n .imageProvider=${this.drawingImageProvider}\n @shapes-changed=${this.onClickMarkerSave}\n .currentMode=${'view'}\n ></ox-image-marker>`}\n </div>\n\n <dialog>\n <ox-image-marker-view\n id=\"link-viewer\"\n .imageUrl=${this.linkUrl}\n .shapes=${this.linkShapes}\n .imageProvider=${this.drawingImageProvider}\n ></ox-image-marker-view>\n </dialog>\n `\n }\n\n protected async updated(changes: PropertyValues): Promise<void> {\n if (changes.has('buildingInspection') && this.buildingInspection?.checklist) {\n // 1-1. 위치 정보 - 체크리스트에 들어가는 위치정보 텍스트\n const location_1 = this.buildingInspection.checklist?.location\n\n // 1-2. 위치 정보 - 실제 위치정보 텍스트 (동 + 층) - ID 필드를 사용하면 DB ID 필드입니다.\n const location_building = this.buildingInspection.buildingLevel.building.name\n const location_floor = this.buildingInspection.buildingLevel.floor\n\n // 2. 평면도 pdf 파일\n // mainDrawing {\n // id\n // name\n // fullpath\n // }\n const mainDrawing = this.buildingInspection.buildingLevel.mainDrawing\n\n // 3. 선택 도면\n const inspectionDrawingType = this.buildingInspection.checklist.inspectionDrawingType\n\n const shapes = JSON.parse(this.buildingInspection?.drawingMarker || null) || []\n const markers = await this.drawingImageProvider.getMarkers(inspectionDrawingType)\n\n this.imageUrl = String(inspectionDrawingType).normalize('NFC')\n this.shapes = [...shapes, ...markers]\n }\n }\n\n async pageUpdated(changes: any, lifecycle: PageLifecycle) {\n if (this.active) {\n this.buildingInspectionId = lifecycle.resourceId || ''\n await this.initBuildingInspection(this.buildingInspectionId)\n\n this.imageMarker?.reset()\n } else {\n this.dialog?.close()\n }\n }\n\n async initBuildingInspection(buildingInspectionId: string = '') {\n const response = await client.query({\n query: gql`\n query BuildingInspection($buildingInspectionId: String!) {\n buildingInspection(id: $buildingInspectionId) {\n id\n status\n requestDate\n drawingMarker\n checklist {\n location\n inspectionDrawingType\n }\n buildingLevel {\n id\n floor\n mainDrawing {\n id\n name\n fullpath\n }\n mainDrawingImage\n building {\n id\n name\n buildingComplex {\n id\n }\n }\n }\n }\n }\n `,\n variables: {\n buildingInspectionId\n }\n })\n\n if (response.errors) return\n\n this.buildingInspection = response.data.buildingInspection\n\n await this._getProjectByBuildingComplexId(this.buildingInspection?.buildingLevel?.building?.buildingComplex?.id)\n }\n\n private async _getProjectByBuildingComplexId(buildingComplexId) {\n const response = await client.query({\n query: gql`\n query ProjectByBuildingComplexId($buildingComplexId: String!) {\n project: projectByBuildingComplexId(buildingComplexId: $buildingComplexId) {\n id\n name\n }\n }\n `,\n variables: {\n buildingComplexId\n }\n })\n\n if (response.errors) return\n\n this.project = response.data.project\n }\n\n private async onClickMarkerSave(e) {\n const response = await client.query({\n query: gql`\n mutation UpdateBuildingInspection($patch: UpdateBuildingInspection!) {\n updateBuildingInspection(patch: $patch) {\n id\n drawingMarker\n }\n }\n `,\n variables: {\n patch: {\n id: this.buildingInspectionId,\n drawingMarker: JSON.stringify(e.detail)\n }\n }\n })\n\n if (response.errors) return\n\n notify({ message: '저장되었습니다.' })\n }\n}\n"]}
1
+ {"version":3,"file":"building-inspection-detail-drawing.js","sourceRoot":"","sources":["../../../client/pages/building-inspection/building-inspection-detail-drawing.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/image-marker/ox-image-marker.js'\nimport '@operato/image-marker/ox-image-marker-view.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, query, state } from 'lit/decorators.js'\nimport { consume } from '@lit/context'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\n\nimport { PageView } from '@operato/shell'\nimport { CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\nimport { Shape } from '@operato/image-marker'\n\nimport { DrawingImageProvider } from '@dssp/drawing/dist-client/drawing-management/drawing-image-provider.js'\n\nimport './component/building-inspection-detail-header'\nimport { BuildingInspectionStatus } from './building-inspection-list'\n\n@customElement('building-inspection-detail-drawing')\nexport class BuildingInspectionDetailDrawing extends ScopedElementsMixin(PageView) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: 55px auto;\n color: #4e5055;\n\n width: 100%;\n background-color: var(--md-sys-color-background, #f6f6f6);\n overflow-y: auto;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n\n div[body] {\n display: flex;\n justify-content: center;\n\n ox-image-marker-view {\n width: 100%;\n }\n }\n\n dialog ox-image-marker-view {\n width: 80vw;\n height: 80vh;\n }\n `\n ]\n\n @state() project: any = {}\n @state() buildingInspection: any = {}\n @state() buildingInspectionId: string = ''\n @state() imageUrl?: string\n @state() shapes: Shape[] = []\n @state() linkUrl?: string\n @state() linkShapes: Shape[] = []\n\n @state() drawingImageProvider: DrawingImageProvider = new DrawingImageProvider()\n // @consume({ context: OxUserPreferencesContext, subscribe: true })\n\n @query('#image-marker') imageMarker!: any\n @query('#link-viewer') linkViewer!: any\n @query('dialog') dialog!: HTMLDialogElement\n\n get context() {\n return {\n title: '검측 관리 상세 - 검측 도면'\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n\n requestAnimationFrame(() => {\n this.dialog.addEventListener('click', event => {\n const rect = this.dialog.getBoundingClientRect()\n const isInDialog =\n rect.top <= event.clientY && event.clientY <= rect.bottom && rect.left <= event.clientX && event.clientX <= rect.right\n\n // 다이아로그 내부를 클릭한 것이 아니면 다이아로그 닫기\n if (!isInDialog) {\n this.dialog.close()\n }\n })\n })\n }\n\n render() {\n return html`\n <building-inspection-detail-header\n .buildingInspectionId=${this.buildingInspection?.id}\n .buildingLevelId=${this.buildingInspection?.buildingLevel?.id}\n .projectName=${this.project.name}\n .buildingName=${this.buildingInspection?.buildingLevel?.building?.name}\n .buildingLevelFloor=${this.buildingInspection?.buildingLevel?.floor}\n ></building-inspection-detail-header>\n\n <div\n body\n @link-clicked=${async (e: CustomEvent) => {\n const { link } = e.detail\n const { id, type, symbol, box, dwgId } = JSON.parse(link) || {}\n \n // 좌표 파싱 및 유효성 검증\n const coordinates = this.parseBoxCoordinates(box)\n \n // 유효하지 않은 좌표면 링크 처리 중단\n if (!coordinates) {\n console.warn('Invalid link coordinates, skipping:', box)\n return\n }\n\n this.linkUrl = `DWGID:${dwgId}`\n this.linkShapes = [\n {\n id: id || 'unknown',\n type: 'link' as const,\n ...coordinates,\n link: '{}'\n }\n ]\n\n if (this.dialog) {\n this.dialog.showModal()\n\n requestAnimationFrame(() => {\n this.linkViewer.reset()\n })\n }\n }}\n >\n ${this.buildingInspection?.status == BuildingInspectionStatus.PASS\n ? html`<ox-image-marker-view\n id=\"image-marker\"\n .imageUrl=${this.imageUrl}\n .shapes=${this.shapes}\n .imageProvider=${this.drawingImageProvider}\n ></ox-image-marker-view>`\n : html` <ox-image-marker\n id=\"image-marker\"\n .imageUrl=${this.imageUrl}\n .shapes=${this.shapes}\n .imageProvider=${this.drawingImageProvider}\n @shapes-changed=${this.onClickMarkerSave}\n .currentMode=${'view'}\n ></ox-image-marker>`}\n </div>\n\n <dialog>\n <ox-image-marker-view\n id=\"link-viewer\"\n .imageUrl=${this.linkUrl}\n .shapes=${this.linkShapes}\n .imageProvider=${this.drawingImageProvider}\n ></ox-image-marker-view>\n </dialog>\n `\n }\n\n protected async updated(changes: PropertyValues): Promise<void> {\n if (changes.has('buildingInspection') && this.buildingInspection?.checklist) {\n // 1-1. 위치 정보 - 체크리스트에 들어가는 위치정보 텍스트\n const location_1 = this.buildingInspection.checklist?.location\n\n // 1-2. 위치 정보 - 실제 위치정보 텍스트 (동 + 층) - ID 필드를 사용하면 DB ID 필드입니다.\n const location_building = this.buildingInspection.buildingLevel.building.name\n const location_floor = this.buildingInspection.buildingLevel.floor\n\n // 2. 평면도 pdf 파일\n // mainDrawing {\n // id\n // name\n // fullpath\n // }\n const mainDrawing = this.buildingInspection.buildingLevel.mainDrawing\n\n // 3. 선택 도면\n const inspectionDrawingType = this.buildingInspection.checklist.inspectionDrawingType\n\n const shapes = JSON.parse(this.buildingInspection?.drawingMarker || null) || []\n const markers = await this.drawingImageProvider.getMarkers(inspectionDrawingType)\n\n this.imageUrl = String(inspectionDrawingType).normalize('NFC')\n this.shapes = [...shapes, ...markers]\n }\n }\n\n async pageUpdated(changes: any, lifecycle: PageLifecycle) {\n if (this.active) {\n this.buildingInspectionId = lifecycle.resourceId || ''\n await this.initBuildingInspection(this.buildingInspectionId)\n\n this.imageMarker?.reset()\n } else {\n this.dialog?.close()\n }\n }\n\n async initBuildingInspection(buildingInspectionId: string = '') {\n const response = await client.query({\n query: gql`\n query BuildingInspection($buildingInspectionId: String!) {\n buildingInspection(id: $buildingInspectionId) {\n id\n status\n requestDate\n drawingMarker\n checklist {\n location\n inspectionDrawingType\n }\n buildingLevel {\n id\n floor\n mainDrawing {\n id\n name\n fullpath\n }\n mainDrawingImage\n building {\n id\n name\n buildingComplex {\n id\n }\n }\n }\n }\n }\n `,\n variables: {\n buildingInspectionId\n }\n })\n\n if (response.errors) return\n\n this.buildingInspection = response.data.buildingInspection\n\n await this._getProjectByBuildingComplexId(this.buildingInspection?.buildingLevel?.building?.buildingComplex?.id)\n }\n\n private async _getProjectByBuildingComplexId(buildingComplexId) {\n const response = await client.query({\n query: gql`\n query ProjectByBuildingComplexId($buildingComplexId: String!) {\n project: projectByBuildingComplexId(buildingComplexId: $buildingComplexId) {\n id\n name\n }\n }\n `,\n variables: {\n buildingComplexId\n }\n })\n\n if (response.errors) return\n\n this.project = response.data.project\n }\n\n private async onClickMarkerSave(e) {\n const response = await client.query({\n query: gql`\n mutation UpdateBuildingInspection($patch: UpdateBuildingInspection!) {\n updateBuildingInspection(patch: $patch) {\n id\n drawingMarker\n }\n }\n `,\n variables: {\n patch: {\n id: this.buildingInspectionId,\n drawingMarker: JSON.stringify(e.detail)\n }\n }\n })\n\n if (response.errors) return\n\n notify({ message: '저장되었습니다.' })\n }\n\n private parseBoxCoordinates(box: string | undefined): {\n x: number; y: number; width: number; height: number\n } | null {\n if (!box || typeof box !== 'string') {\n console.warn('Invalid box coordinate for link:', box)\n return null\n }\n\n try {\n const coords = box.split(',').map(str => {\n const num = Number(str.trim())\n return Number.isFinite(num) ? num : NaN\n })\n \n if (coords.length !== 4 || coords.some(coord => isNaN(coord))) {\n console.warn('Box coordinate should have 4 valid numbers:', box)\n return null\n }\n\n const [x, y, width, height] = coords\n \n // width, height가 0 이하면 유효하지 않음\n if (width <= 0 || height <= 0) {\n console.warn('Invalid width or height for link:', box)\n return null\n }\n \n return { x, y, width, height }\n \n } catch (error) {\n console.warn('Error parsing box coordinates:', box, error)\n return null\n }\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import '@material/web/icon/icon.js';
2
2
  import '@operato/data-grist';
3
+ import '@operato/image-marker/ox-image-marker-view.js';
3
4
  import { PageView } from '@operato/shell';
4
- import { TemplateResult } from 'lit';
5
5
  import { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view';
6
6
  import { FetchOption } from '@operato/data-grist';
7
7
  import './inspection-create-popup';
@@ -50,6 +50,7 @@ export declare class BuildingInspectionList extends BuildingInspectionList_base
50
50
  calendarData?: EventProvider;
51
51
  selectedYearMonth: string;
52
52
  selectedDate?: string;
53
+ dailyWorklog: any;
53
54
  private grist;
54
55
  private eventView;
55
56
  get context(): {
@@ -66,7 +67,7 @@ export declare class BuildingInspectionList extends BuildingInspectionList_base
66
67
  action: () => void;
67
68
  }[];
68
69
  };
69
- render(): TemplateResult<1>;
70
+ render(): import("lit-html").TemplateResult<1>;
70
71
  pageUpdated(changes: any, lifecycle: PageLifecycle): Promise<void>;
71
72
  initProject(buildingLevelId?: string): Promise<void>;
72
73
  pageInitialized(lifecycle: any): Promise<void>;
@@ -82,5 +83,8 @@ export declare class BuildingInspectionList extends BuildingInspectionList_base
82
83
  _openInspectionRequestDocument(buildingInspectionId: string): Promise<void>;
83
84
  private _showNameListPreview;
84
85
  private _openDailyWorklogPopup;
86
+ private _refreshCalendar;
87
+ private _fetchDailyWorklog;
88
+ private _openDrawingPopup;
85
89
  }
86
90
  export {};
@@ -1,6 +1,7 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import '@material/web/icon/icon.js';
3
3
  import '@operato/data-grist';
4
+ import '@operato/image-marker/ox-image-marker-view.js';
4
5
  import { CommonGristStyles, CommonButtonStyles, ScrollbarStyles } from '@operato/styles';
5
6
  import { PageView, navigate } from '@operato/shell';
6
7
  import { css, html } from 'lit';
@@ -22,6 +23,8 @@ import { InspectionEventProvider } from './component/inspection-event-provider';
22
23
  import { getBuildingInspectionForChecklist } from '../../graphql/building-inspection';
23
24
  import { InspectionMode } from './component/inspection-document/inspection-request-document';
24
25
  import moment from 'moment-timezone';
26
+ import { DailyWorklogMode } from './component/daily-worklog-popup';
27
+ import { DrawingImageProvider } from '@dssp/drawing/dist-client/drawing-management/drawing-image-provider.js';
25
28
  export var ChecklistTypeMainType;
26
29
  (function (ChecklistTypeMainType) {
27
30
  ChecklistTypeMainType["BASIC"] = "10";
@@ -65,6 +68,11 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
65
68
  this.buildingInspectionSummary = {};
66
69
  this.selectedYearMonth = moment().tz('Asia/Seoul').format('YYYY-MM');
67
70
  this.selectedDate = moment().tz('Asia/Seoul').format('YYYY-MM-DD');
71
+ this.dailyWorklog = {};
72
+ // 캘린더 객체 재 생성하여 재 랜더링
73
+ this._refreshCalendar = (e) => {
74
+ this.calendarData = new InspectionEventProvider(this.buildingLevelId, this.project.id);
75
+ };
68
76
  }
69
77
  get context() {
70
78
  return {
@@ -129,10 +137,13 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
129
137
  .eventProvider=${this.calendarData}
130
138
  @select-date=${(e) => {
131
139
  this.selectedDate = moment(e.detail[0]).format('YYYY-MM-DD');
140
+ this._fetchDailyWorklog(this.selectedDate);
132
141
  }}
133
142
  @change-month=${(e) => {
134
- const { year, month } = e.detail;
135
- this.selectedYearMonth = moment({ year, month }).tz('Asia/Seoul').format('YYYY-MM');
143
+ var _a, _b, _c;
144
+ const year = e.detail.year;
145
+ const month = (_c = (_b = (_a = e.detail) === null || _a === void 0 ? void 0 : _a.month) === null || _b === void 0 ? void 0 : _b.toString()) === null || _c === void 0 ? void 0 : _c.padStart(2, '0');
146
+ this.selectedYearMonth = `${year}-${month}`;
136
147
  this.grist.fetch();
137
148
  }}
138
149
  >
@@ -142,9 +153,13 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
142
153
 
143
154
  <div bottom>
144
155
  <div daily-worklog-actions>
145
- <md-filled-button @click=${this._openDailyWorklogPopup}>
146
- <md-icon slot="icon">note_add</md-icon>일일 업무일지 작성
147
- </md-filled-button>
156
+ ${this.dailyWorklog.id
157
+ ? html `<md-filled-button green @click=${this._openDailyWorklogPopup}>
158
+ <md-icon slot="icon">edit</md-icon>일일 업무일지 수정
159
+ </md-filled-button>`
160
+ : html `<md-filled-button @click=${this._openDailyWorklogPopup}>
161
+ <md-icon slot="icon">note_add</md-icon>일일 업무일지 작성
162
+ </md-filled-button>`}
148
163
  </div>
149
164
  <ox-grist .mode=${'GRID'} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}> </ox-grist>
150
165
  </div>
@@ -200,7 +215,7 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
200
215
  return;
201
216
  this.project = (_a = response.data) === null || _a === void 0 ? void 0 : _a.projectByBuildingLevelId;
202
217
  this.buildingInspectionSummary = (_b = response.data) === null || _b === void 0 ? void 0 : _b.buildingInspectionSummaryOfBuildingLevel;
203
- this.calendarData = new InspectionEventProvider(buildingLevelId);
218
+ this.calendarData = new InspectionEventProvider(buildingLevelId, this.project.id);
204
219
  // 캘린더 최소 높이 속성 수정
205
220
  this.eventView.style.setProperty('--calendar-monthly-date-min-height', '50px');
206
221
  }
@@ -230,13 +245,23 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
230
245
  type: 'string',
231
246
  name: 'location',
232
247
  header: '위치',
233
- width: 150
248
+ width: 150,
249
+ handlers: {
250
+ click: (columns, data, column, record, rowIndex) => {
251
+ navigate(`building-inspection-detail-drawing/${record.id}`);
252
+ }
253
+ }
234
254
  },
235
255
  {
236
256
  type: 'string',
237
257
  name: 'constructionType',
238
258
  header: '공종',
239
- width: 120
259
+ width: 120,
260
+ handlers: {
261
+ click: (columns, data, column, record, rowIndex) => {
262
+ navigate(`building-inspection-detail-drawing/${record.id}`);
263
+ }
264
+ }
240
265
  },
241
266
  {
242
267
  type: 'string',
@@ -245,13 +270,23 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
245
270
  record: {
246
271
  renderer: value => (value === null || value === void 0 ? void 0 : value.join(', ')) || ''
247
272
  },
248
- width: 200
273
+ width: 200,
274
+ handlers: {
275
+ click: (columns, data, column, record, rowIndex) => {
276
+ navigate(`building-inspection-detail-drawing/${record.id}`);
277
+ }
278
+ }
249
279
  },
250
280
  {
251
281
  type: 'string',
252
282
  name: 'requestDate',
253
283
  header: '검측 요청일',
254
- width: 120
284
+ width: 120,
285
+ handlers: {
286
+ click: (columns, data, column, record, rowIndex) => {
287
+ navigate(`building-inspection-detail-drawing/${record.id}`);
288
+ }
289
+ }
255
290
  },
256
291
  {
257
292
  type: 'string',
@@ -260,7 +295,12 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
260
295
  record: {
261
296
  renderer: value => BUILDING_INSPECTION_STATUS_DISPLAY[value]
262
297
  },
263
- width: 120
298
+ width: 120,
299
+ handlers: {
300
+ click: (columns, data, column, record, rowIndex) => {
301
+ navigate(`building-inspection-detail-drawing/${record.id}`);
302
+ }
303
+ }
264
304
  },
265
305
  {
266
306
  type: 'gutter',
@@ -270,7 +310,7 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
270
310
  width: 50,
271
311
  handlers: {
272
312
  click: (columns, data, column, record, rowIndex) => {
273
- console.log('record : ', record);
313
+ this._openDrawingPopup(record);
274
314
  }
275
315
  }
276
316
  },
@@ -344,6 +384,8 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
344
384
  id
345
385
  status
346
386
  requestDate
387
+ drawingMarker
388
+
347
389
  checklist {
348
390
  checklistId: id
349
391
  name
@@ -351,6 +393,8 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
351
393
  constructionDetailType
352
394
  location
353
395
  inspectionParts
396
+ inspectionDrawingType
397
+
354
398
  nameListAttachment {
355
399
  id
356
400
  name
@@ -507,12 +551,60 @@ let BuildingInspectionList = class BuildingInspectionList extends ScopedElements
507
551
  }
508
552
  _openDailyWorklogPopup() {
509
553
  const date = this.selectedDate;
510
- openPopup(html `<daily-worklog-popup .project=${this.project} .date=${date}></daily-worklog-popup>`, {
554
+ openPopup(html `<daily-worklog-popup
555
+ .project=${this.project}
556
+ .date=${date}
557
+ .dailyWorklog=${this.dailyWorklog}
558
+ .mode=${this.dailyWorklog.id ? DailyWorklogMode.EDIT : DailyWorklogMode.CREATE}
559
+ @createdDailyWorklog=${this._refreshCalendar}
560
+ ></daily-worklog-popup>`, {
511
561
  backdrop: true,
512
562
  size: 'large',
513
563
  title: '일일 업무일지 작성'
514
564
  });
515
565
  }
566
+ async _fetchDailyWorklog(date) {
567
+ var _a;
568
+ const response = await client.query({
569
+ query: gql `
570
+ query ($projectId: String!, $date: String!) {
571
+ buildingInspectionDailyWorklogByProjectIdAndDate(projectId: $projectId, date: $date) {
572
+ id
573
+ date
574
+ documentNo
575
+ worklogs
576
+ memo
577
+ directiveMemo
578
+
579
+ buildingInspections {
580
+ id
581
+ }
582
+ }
583
+ }
584
+ `,
585
+ variables: { projectId: this.project.id, date }
586
+ });
587
+ this.dailyWorklog = ((_a = response.data) === null || _a === void 0 ? void 0 : _a.buildingInspectionDailyWorklogByProjectIdAndDate) || {};
588
+ }
589
+ async _openDrawingPopup(buildingInspection) {
590
+ const drawingImageProvider = new DrawingImageProvider();
591
+ const inspectionDrawingType = buildingInspection.checklist.inspectionDrawingType;
592
+ const drawingShapes = JSON.parse((buildingInspection === null || buildingInspection === void 0 ? void 0 : buildingInspection.drawingMarker) || null) || [];
593
+ const markers = await drawingImageProvider.getMarkers(inspectionDrawingType);
594
+ const imageUrl = String(inspectionDrawingType).normalize('NFC');
595
+ const shapes = [...drawingShapes, ...markers];
596
+ openPopup(html `<ox-image-marker-view
597
+ style="pointer-events: none;"
598
+ id="image-marker"
599
+ .imageUrl=${imageUrl}
600
+ .shapes=${shapes}
601
+ .imageProvider=${drawingImageProvider}
602
+ ></ox-image-marker-view>`, {
603
+ backdrop: true,
604
+ size: 'large',
605
+ title: '검측 도면'
606
+ });
607
+ }
516
608
  };
517
609
  BuildingInspectionList.styles = [
518
610
  ScrollbarStyles,
@@ -538,6 +630,10 @@ BuildingInspectionList.styles = [
538
630
  --md-filled-button-leading-space: 15px;
539
631
  }
540
632
 
633
+ md-filled-button[green] {
634
+ --md-filled-button-container-color: #008000;
635
+ }
636
+
541
637
  md-outlined-button {
542
638
  --md-outlined-button-container-height: 30px;
543
639
  --md-outlined-button-trailing-space: var(--spacing-medium, 8px);
@@ -757,6 +853,10 @@ __decorate([
757
853
  state(),
758
854
  __metadata("design:type", String)
759
855
  ], BuildingInspectionList.prototype, "selectedDate", void 0);
856
+ __decorate([
857
+ state(),
858
+ __metadata("design:type", Object)
859
+ ], BuildingInspectionList.prototype, "dailyWorklog", void 0);
760
860
  __decorate([
761
861
  query('ox-grist'),
762
862
  __metadata("design:type", DataGrist)