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`); } };