|
@@ -13,9 +13,23 @@
|
|
<t-dropdown-item @click="load(true)">
|
|
<t-dropdown-item @click="load(true)">
|
|
<a>{{$t('打开文件')}}</a>
|
|
<a>{{$t('打开文件')}}</a>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
- <t-dropdown-item divider="true" @click="load()">
|
|
|
|
|
|
+ <t-dropdown-item @click="load()">
|
|
<a>{{$t('导入文件')}}</a>
|
|
<a>{{$t('导入文件')}}</a>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
|
|
+ <t-dropdown-item >
|
|
|
|
+ <a @click="importVisio">
|
|
|
|
+ <div class="flex">
|
|
|
|
+ 导入visio(vsdx)文件<span class="flex-grow"></span>
|
|
|
|
+ </div>
|
|
|
|
+ </a>
|
|
|
|
+ </t-dropdown-item>
|
|
|
|
+ <t-dropdown-item divider="true">
|
|
|
|
+ <a @click="importDxf">
|
|
|
|
+ <div class="flex">
|
|
|
|
+ 导入CAD(dxf)文件<span class="flex-grow"></span>
|
|
|
|
+ </div>
|
|
|
|
+ </a>
|
|
|
|
+ </t-dropdown-item>
|
|
<t-dropdown-item>
|
|
<t-dropdown-item>
|
|
<a @click="save(SaveType.Save,'',true)">{{$t('保存')}}</a>
|
|
<a @click="save(SaveType.Save,'',true)">{{$t('保存')}}</a>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
@@ -502,8 +516,10 @@ import {
|
|
import { readFile } from '@/services/file';
|
|
import { readFile } from '@/services/file';
|
|
import { compareVersion, baseVer, upgrade } from '@/services/upgrade';
|
|
import { compareVersion, baseVer, upgrade } from '@/services/upgrade';
|
|
import { parseSvg } from '@meta2d/svg';
|
|
import { parseSvg } from '@meta2d/svg';
|
|
-import { Pen, getGlobalColor, isShowChild } from '@meta2d/core';
|
|
|
|
|
|
+import { Pen, getGlobalColor, isShowChild, deepClone } from '@meta2d/core';
|
|
import { cdn, upCdn, addCollection } from '@/services/api';
|
|
import { cdn, upCdn, addCollection } from '@/services/api';
|
|
|
|
+import {V2M} from "visio2meta2d";
|
|
|
|
+import D2M from 'dxf';
|
|
// import JSZip from 'jszip';
|
|
// import JSZip from 'jszip';
|
|
import axios from 'axios';
|
|
import axios from 'axios';
|
|
import { switchTheme } from '@/services/theme';
|
|
import { switchTheme } from '@/services/theme';
|
|
@@ -789,6 +805,112 @@ function load(isNew = false) {
|
|
input.click();
|
|
input.click();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+async function importDxf(){
|
|
|
|
+ if (!(user && user.id)) {
|
|
|
|
+ MessagePlugin.warning(noLoginTip);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // if (!user.vip) {
|
|
|
|
+ // MessagePlugin.info('需要开通会员~');
|
|
|
|
+ // gotoAccount();
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ const input = document.createElement('input');
|
|
|
|
+ input.type = 'file';
|
|
|
|
+ input.onchange = async (event) => {
|
|
|
|
+ const elem:any = event.target;
|
|
|
|
+ if (elem.files && elem.files[0]) {
|
|
|
|
+ // 路由跳转 可能在 openFile 后执行
|
|
|
|
+ if (elem.files[0].name.endsWith('.DXF') ||elem.files[0].name.endsWith('.dxf') ) {
|
|
|
|
+ const dataObj = elem.files[0]
|
|
|
|
+ if (dataObj) {
|
|
|
|
+ const reader = new FileReader();
|
|
|
|
+ reader.readAsText(dataObj, "UTF-8")
|
|
|
|
+ reader.addEventListener(
|
|
|
|
+ "load",
|
|
|
|
+ async () => {
|
|
|
|
+ // 然后这将显示一个文本文件
|
|
|
|
+ const parser = new D2M({
|
|
|
|
+ scale: 10
|
|
|
|
+ },(e)=>{
|
|
|
|
+ console.error('error',e)
|
|
|
|
+ })
|
|
|
|
+ const res = await parser.load(dataObj)
|
|
|
|
+ if(res.success.length > 0 ){
|
|
|
|
+ const pens = await meta2d.addPens((res.success));
|
|
|
|
+ meta2d.gotoView(pens[Math.floor(pens.length / 2)])
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ false,
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ input.click();
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function importVisio() {
|
|
|
|
+ if (!(user && user.id)) {
|
|
|
|
+ MessagePlugin.warning(noLoginTip);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // if (!user.isVip) {
|
|
|
|
+ // gotoAccount();
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ // if (!user.vip) {
|
|
|
|
+ // MessagePlugin.info('需要开通会员~');
|
|
|
|
+ // gotoAccount();
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ const input = document.createElement('input');
|
|
|
|
+ input.type = 'file';
|
|
|
|
+ input.onchange = async (event) => {
|
|
|
|
+ const elem:any = event.target;
|
|
|
|
+ if (elem.files && elem.files[0]) {
|
|
|
|
+ if (elem.files[0].name.endsWith('.vsdx')) {
|
|
|
|
+ MessagePlugin.loading("文件正在加载中")
|
|
|
|
+ const dataObj = elem.files[0]
|
|
|
|
+ if (dataObj) {
|
|
|
|
+ let factory = new V2M({
|
|
|
|
+ ellipsis:false
|
|
|
|
+ },(e)=>{
|
|
|
|
+ MessagePlugin.closeAll();
|
|
|
|
+ MessagePlugin.error("文件加载失败,请检查文件是否正确(vsdx)")
|
|
|
|
+ });
|
|
|
|
+ factory.addGraphMap('Separator',{name:'rectangle'})
|
|
|
|
+ factory.addGraphMap('CFF Container',{name:'rectangle'})
|
|
|
|
+ const res = await factory.load(dataObj)
|
|
|
|
+ if(res.length > 0 ){
|
|
|
|
+ for (const page of res) {
|
|
|
|
+ const pens = await meta2d.addPens(deepClone(page.pens));
|
|
|
|
+ meta2d.combine(pens)
|
|
|
|
+ if(page.unmatch.length > 0){
|
|
|
|
+ const unMatchList = page.unmatch.map(i=>i.origin.name).join(',');
|
|
|
|
+ }
|
|
|
|
+ pens.forEach((p)=>{
|
|
|
|
+ if(p.children.length > 0){
|
|
|
|
+ meta2d.pushChildren(p,p.children.map((c)=>meta2d.findOne(c)))
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ meta2d.centerView()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ MessagePlugin.closeAll();
|
|
|
|
+ MessagePlugin.success("加载成功")
|
|
|
|
+ }else {
|
|
|
|
+ MessagePlugin.info("仅支持vsdx文件")
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+ input.click();
|
|
|
|
+}
|
|
|
|
+
|
|
const openJson = async (file: File) => {
|
|
const openJson = async (file: File) => {
|
|
const text = await readFile(file);
|
|
const text = await readFile(file);
|
|
try {
|
|
try {
|