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 } from "@/util/pc4xlsl";
export const exportFile = async (points: ScenePoint[]) => {
if (!points.length) {
ElMessage.error("请选择要导出的点位");
return;
}
points = points.filter((point) => !!point.pos);
if (points.length === 0) {
ElMessage.error("当前选择点位没有gis信息");
return;
}
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[]) => {
openLoading();
if (!points.length) {
ElMessage.error("请选择要导出的点位");
return;
}
const zip = new JSZip();
const imgFolder = zip.folder("images")!;
const downloadImages = Promise.all(
points.map((point) => {
const url = getPointPano(point.sceneCode, point.uuid);
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, "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`);
}
};