|
@@ -13,7 +13,7 @@
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
import Header from "../../../components/header/index.vue";
|
|
|
-import { ElButton } from "element-plus";
|
|
|
+import { ElButton, ElMessage } from "element-plus";
|
|
|
import { useDraw } from "../../../components/container/use-draw.ts";
|
|
|
import { selectScene } from "../../../dialog/vr/index.ts";
|
|
|
import { Scene } from "../../../platform/platform-resource.ts";
|
|
@@ -35,6 +35,7 @@ import { router } from "../../router.ts";
|
|
|
import { overviewId, params, tabulationId } from "@/example/env.ts";
|
|
|
import { listener } from "@/utils/event.ts";
|
|
|
import { repeatedlyOnly } from "@/utils/shared.ts";
|
|
|
+import saveAs from "@/utils/file-serve.ts";
|
|
|
|
|
|
const props = defineProps<{ title: string }>();
|
|
|
const draw = useDraw();
|
|
@@ -66,8 +67,24 @@ const actions = [
|
|
|
...baseActions.expose,
|
|
|
children: baseActions.expose.children.map((item) => ({
|
|
|
...item,
|
|
|
- handler() {
|
|
|
- return item.handler(props.title);
|
|
|
+ async handler() {
|
|
|
+ const format = item.text.toLowerCase();
|
|
|
+ if (format !== "dxf") {
|
|
|
+ const blob = await draw.enterTemp(async () => {
|
|
|
+ const back = draw.config.back;
|
|
|
+ const [_, recover] = await setViewToTableCover();
|
|
|
+ if (format === "jpg") draw.config.back = back;
|
|
|
+ await nextTick();
|
|
|
+ const blob = await getImage(draw, `image/${format}`);
|
|
|
+ recover();
|
|
|
+ await nextTick();
|
|
|
+ return blob;
|
|
|
+ });
|
|
|
+ await saveAs(blob, `${props.title}.${format}`);
|
|
|
+ ElMessage.success("导出成功");
|
|
|
+ } else {
|
|
|
+ await item.handler(props.title);
|
|
|
+ }
|
|
|
},
|
|
|
})),
|
|
|
},
|
|
@@ -139,31 +156,37 @@ const setViewToTableCover = async () => {
|
|
|
|
|
|
const saveHandler = repeatedlyOnly(async () => {
|
|
|
const storeData = draw.getData();
|
|
|
- const [blob, scale, rect] = await draw.enterTemp(async () => {
|
|
|
+ const [tabBlob, listBlob, scale, rect] = await draw.enterTemp(async () => {
|
|
|
+ const back = draw.config.back;
|
|
|
const [rect, recover] = await setViewToTableCover();
|
|
|
await nextTick();
|
|
|
const mat = draw.viewer.transform.invert();
|
|
|
const scale =
|
|
|
lineLen(mat.point({ x: 1, y: 0 }), mat.point({ x: 0, y: 0 })) *
|
|
|
draw.store.config.proportion.scale;
|
|
|
- const blob = await getImage(draw, "image/png");
|
|
|
+ const tabBlob = await getImage(draw, "image/png");
|
|
|
+ draw.config.back = back;
|
|
|
+ await nextTick();
|
|
|
+ const listBlob = await getImage(draw, "image/jpg");
|
|
|
recover();
|
|
|
await nextTick();
|
|
|
- return [blob, scale, rect] as const;
|
|
|
+ return [tabBlob, listBlob, scale, rect] as const;
|
|
|
});
|
|
|
|
|
|
- const url = await window.platform.uploadResourse(
|
|
|
- new File([blob], `tabulation-cover.png`)
|
|
|
- );
|
|
|
+ const [tabUrl, listUrl] = await Promise.all([
|
|
|
+ window.platform.uploadResourse(new File([tabBlob], `tabulation-cover.png`)),
|
|
|
+ window.platform.uploadResourse(new File([listBlob], `list-cover.png`)),
|
|
|
+ ]);
|
|
|
+
|
|
|
overviewId.value = await window.platform.saveOverviewData(overviewId.value, {
|
|
|
...overviewData.value,
|
|
|
- listCover: url,
|
|
|
+ listCover: listUrl,
|
|
|
store: storeData,
|
|
|
viewport: draw!.viewer.transform.m,
|
|
|
});
|
|
|
|
|
|
const cover = {
|
|
|
- url,
|
|
|
+ url: tabUrl,
|
|
|
width: rect.width,
|
|
|
height: rect.height,
|
|
|
proportion: { ...draw.store.config.proportion, scale },
|