12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import { CAD_VIEWER_IFRAME_ID } from '../viewer.data';
- import { message } from 'ant-design-vue';
- import { transformCadFile } from '../viewer.api';
- import { SupportedOperationName } from '../types';
- import { useGlobSetting } from '/@/hooks/setting';
- const globSetting = useGlobSetting();
- const baseApiUrl = globSetting.domainUrl;
- // 先设计成这样避免hooks无法取消注册
- const hooks = new Map<SupportedOperationName, () => void>();
- export default function useCADViewer() {
- /** 向CADViewer发送指令 */
- function postMessage(cmd: SupportedOperationName, param?: unknown) {
- const dom = document.getElementById(CAD_VIEWER_IFRAME_ID) as any;
- if (!dom) message.info('CAD预览器尚未准备好,请稍后再试');
- dom.contentWindow.postMessage(
- {
- cmd: cmd,
- type: 'sendStringToExecute',
- param: param,
- },
- '*'
- );
- }
- /** 调用 api 转换文件格式,并返回转换后文件的网络地址 */
- function processFile(file: Blob) {
- const data = new FormData();
- data.append('file', file);
- const close = message.loading('正在转换文件格式,请稍等', 0);
- return transformCadFile(data)
- .then((result) => {
- const filepath = result.replace('/data/file/', '');
- if (import.meta.env.PROD) {
- return `${baseApiUrl}/sys/common/static/${filepath}`.replace(/\/+/g, '/');
- } else {
- return import.meta.env.VITE_GLOB_DOMAIN_URL + `/sys/common/static/${filepath}`.replace(/\/+/g, '/');
- }
- })
- .finally(() => {
- close();
- });
- }
- function registHook(name: SupportedOperationName, callback: () => void) {
- hooks.set(name, callback);
- }
- function triggerHook(name: SupportedOperationName) {
- if (hooks.has(name)) {
- const fn = hooks.get(name) as () => void;
- fn();
- }
- }
- function unregistHook(name: SupportedOperationName) {
- hooks.delete(name);
- }
- return {
- /** 向CADViewer发送指令 */
- postMessage,
- /** 调用 api 转换文件格式,并返回转换后文件的网络地址 */
- processFile,
- /** 注册Hook函数,同名的Hook函数将覆盖,常用于在某些指令执行完毕后做处理 */
- registHook,
- /** 触发Hook函数 */
- triggerHook,
- /** 解除注册Hook函数 */
- unregistHook,
- };
- }
|