import { ScenePoint, getPointPano } from "@/store/scene";
import JSZip from "jszip";
import saveAs from "@/util/file-serve";
import { openLoading, closeLoading } from "@/helper/loading";
import { dateFormat } from "@/util";
import { ElMessage } from "element-plus";
import {
downloadPointsXLSL,
downloadPointsXLSL1,
downloadPointsXLSL2,
} from "@/util/pc4xlsl";
import { noValidPoint } from "./install";
import { PointTypeEnum } from "@/lib/board/4dmap";
export const exportFile = async (
points: ScenePoint[],
type: number,
name: string = "",
version = "v1"
) => {
if (!points.length) {
ElMessage.error("请选择要导出的点位");
return;
}
name = name ? name + "-" : "";
points = points.filter((point) => !noValidPoint(point));
if (points.length === 0) {
ElMessage.error("当前选择点位没有gis信息");
return;
}
if (type === 1) {
await downloadPointsXLSL1(
points.map((point) => point.pos),
points.map((point) => ({
title: point.name,
desc: point.remark || "无",
type: point.type || PointTypeEnum.other,
})),
name + "绘制矢量数据"
);
} else if (type === 2) {
await downloadPointsXLSL2(
points.map((point) => point.pos),
points.map((point) => ({
title: point.name,
desc: point.remark || "无",
type: point.type || PointTypeEnum.other,
})),
name + "本体边界坐标",
version
);
} else {
await downloadPointsXLSL(
points.map((point) => point.pos),
points.map((point) => ({ title: point.name, desc: point.name })),
"test"
);
}
ElMessage.success("文件导出成功");
};
export const exportImage = async (points: ScenePoint[], name?: string) => {
if (!points.length) {
ElMessage.error("请选择要导出的点位");
return;
}
openLoading();
const zip = new JSZip();
const imgFolder = zip.folder(name || "images")!;
const downloadImages = Promise.all(
points.map((point) => {
const url = getPointPano(point);
return fetch(url as string)
.then((res) => res.blob())
.then((blob) => {
imgFolder.file(`${point.sceneCode}-${point.uuid}.jpg`, blob);
})
.catch((e) => {
ElMessage.error(url + "图片下载失败!");
throw e;
});
})
);
await downloadImages;
const content = await zip.generateAsync({ type: "blob" });
await saveAs(content, `${name || "images"}.zip`);
closeLoading();
};
export const exposeExsl = async (pointsGroup: ScenePoint[][]) => {
const timeStr = dateFormat(new Date(), "yyyy-MM-ddThh:mm:ssZ");
const rets: string[] = pointsGroup.map((points, i) => {
const name = `Rt${(i + 1).toString().padStart(4, "0")}`;
const rtepts = points.map((point, j) => {
return `
${point.pos[2]}
${name}_pt${(j + 1).toString().padStart(4, "0")}
`;
});
return `
${name}
${rtepts.join("")}
`;
});
for (let i = 0; i < rets.length; i++) {
const name = `Rt${(i + 1).toString().padStart(4, "0")}`;
const text = `\
${rets[i]}
`;
await saveAs(new Blob([text], { type: "text/plain" }), `${name}.gpx`);
}
};