| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /* eslint-disable no-undef */
- export default class DxfComparePanel {
- compareDetail;
- container;
- viewer;
- constructor(viewer, container = document.body) {
- this.init(viewer, container);
- }
- init(viewer, container) {
- this.viewer = viewer;
- this.container = container;
- this.buildPanel();
- this.initEvents();
- }
- buildPanel() {
- const panelContainer = document.createElement("div");
- panelContainer.classList.add("compare-panel-container");
- const header = document.createElement("h3");
- panelContainer.appendChild(header);
- this.container.appendChild(panelContainer);
- const compareDetail = document.createElement("div");
- compareDetail.classList.add("compare-detail");
- panelContainer.appendChild(compareDetail);
- this.compareDetail = compareDetail;
- const changes = this.viewer.getCompareChanges();
- if (!changes) {
- return;
- }
- const changesValues = Object.values(changes);
- header.innerHTML = `差异列表(${changesValues.length})`;
- const addedChangesValues = changesValues.filter((val) => val.type === "Added");
- const deletedChangeValues = changesValues.filter((val) => val.type === "Removed");
- const modifiedChanageValues = changesValues.filter((val) => val.type === "Modified");
- if (addedChangesValues.length > 0) {
- this.buildList(addedChangesValues, "新增");
- }
- if (deletedChangeValues.length > 0) {
- this.buildList(deletedChangeValues, "删除");
- }
- if (modifiedChanageValues.length > 0) {
- this.buildList(modifiedChanageValues, "修改");
- }
- }
- buildList(changesValues, text) {
- const section = document.createElement("div");
- section.classList.add("compare-list", "compare-add");
- this.compareDetail.appendChild(section);
- this.buildListTitle(section, `${text}(<b>${changesValues.length}</b>)`);
- const listEle = document.createElement("ul");
- listEle.classList.add("list", "hide");
- section.appendChild(listEle);
- let listFragment = "";
- changesValues.forEach((val) => {
- listFragment += `<li data-id=${val.id} class="list-item">${val.handle}</li>`;
- });
- listEle.innerHTML = listFragment;
- }
- buildListTitle(group, title) {
- const listTitle = document.createElement("div");
- listTitle.classList.add("list-title", "compare-collapse");
- group.appendChild(listTitle);
- const titleIcon = document.createElement("span");
- titleIcon.classList.add("title-icon");
- listTitle.appendChild(titleIcon);
- const titleContent = document.createElement("span");
- titleContent.classList.add("title-content");
- titleContent.innerHTML = title;
- listTitle.appendChild(titleContent);
- }
- initEvents() {
- const listTitles = document.querySelectorAll(".list-title");
- listTitles.forEach((listTitle) => {
- listTitle.addEventListener("click", () => {
- listTitle.classList.toggle("compare-collapse");
- listTitle.nextSibling?.classList.toggle("hide");
- });
- });
- const lists = document.querySelectorAll(".list");
- lists.forEach((list) => {
- list.addEventListener("click", (e) => {
- if (e.target.tagName.toUpperCase() === "LI" && e.target.dataset.id) {
- this.viewer.zoomToCompareChange(e.target.dataset.id);
- }
- });
- });
- }
- destroy() {
- this.container.remove();
- this.container = undefined;
- }
- }
|