weaver_trunk_cli/pc4public/emobile/router/Entrance.js

400 lines
12 KiB
JavaScript
Raw Normal View History

2024-12-11 15:32:14 +08:00
import React from 'react';
import { Modal, Spin } from 'antd';
import {
WeaLocaleProvider,
WeaBrowser,
WeaTools,
} from 'ecCom';
const getLabel = WeaLocaleProvider.getLabel;
const shareTypeMap = {
152: 'workflow',
37: 'doc',
18: 'crm',
workplan: 'workplan',
28: 'meeting',
};
const addShareMap = {
workplan: 2,
};
const browserIconMap = {
28: 'icon-coms-meeting',
workplan: 'icon-coms-schedule',
};
const onCloseHandle = () => {
if (window.em) {
em.closeWindow();
} else {
Modal.error({
transitionName: 'none',
title: getLabel(125960, '初始化失败'),
content: getLabel(520050, 'em对象不存在'),
});
}
};
export default class Home extends React.Component {
constructor(props) {
super(props);
this.state = {
visible: false,
errorMsg: '',
loading: false,
};
window.setLayoutWindow = window;
this.interval = '';
this.defaultMD = null;
this.initEm = this.initEm.bind(this);
}
getFrameParams() {
let url = window.location.href;
try {
if (window.frameElement) {
url = window.frameElement.src;
}
} catch (error) {
}
let urlParams = url.slice(url.indexOf('?') + 1).split('&');
let params = [];
urlParams.forEach((element) => {
let datas = element.split('=');
params[datas[0]] = datas[1];
});
let host = url.slice(0, url.indexOf('/spa/'));
params.host = host;
return params;
}
componentDidMount() {
this.setState({ visible: true });
// if (window.em) {
this.initEm();
// } else {
// setTimeout(() => {
// this.initEm()
// } ,500)
// }
}
initEm() {
if (window.em) {
em.ready(() => {
em.setPageReload({
setvalue: 2, // 1表示每次都需要重新加载页面默认 2表示保持页面无需重新加载
success(res) {
},
});
em.pageVisible((visible) => {
if (visible) {
this.defaultMD.reload();
}
});
if (this.defaultMD && this.defaultMD.browser && this.defaultMD.openModal) {
this.defaultMD.openModal();
} else {
let interval = setInterval(() => {
if (this.defaultMD && this.defaultMD.browser && this.defaultMD.openModal) {
this.defaultMD.openModal();
clearInterval(interval);
}
}, 200);
}
});
} else {
setTimeout(() => {
this.initEm();
}, 500);
}
}
componentWillUnmount() {
this.interval && clearInterval(this.interval);
}
onChangeHandle(ids, names, datas) {
const params = this.getFrameParams();
if (!params.type) {
const modal = Modal.error({
transitionName: 'none',
title: getLabel(129174, '分享失败'),
content: getLabel(520051, '获取资源类型失败'),
onOk() {
onCloseHandle();
},
onCancel() {
onCloseHandle();
},
});
em.setPageReload({
setvalue: 1, // 1表示每次都需要重新加载页面默认 2表示保持页面无需重新加载
success: (res) => {
setTimeout(() => {
modal.destroy();
this.defaultMD && this.defaultMD.openModal();
}, 3000);
},
});
return false;
}
this.setState({ loading: true });
if (window.em) {
em.getUserFromConversation({
targetId: '', // 消息会话ID
success: (res) => {
// 以数组形式返回
// 如:{"userIdList":["123","456"]"},"errMsg":"getUserListFromConversation:ok"}
if (!res.userIdList || res.userIdList.length === 0) {
const modal = Modal.warning({
transitionName: 'none',
title: getLabel(24960, '提示信息'),
content: getLabel(520052, '获取会话用户失败'),
onOk() {
onCloseHandle();
},
onCancel() {
onCloseHandle();
},
});
em.setPageReload({
setvalue: 1, // 1表示每次都需要重新加载页面默认 2表示保持页面无需重新加载
success: (res) => {
setTimeout(() => {
modal.destroy();
this.defaultMD && this.defaultMD.openModal();
}, 3000);
},
});
return;
}
let userIdList = res.userIdList.join(',');
let shareList = [];
let successCount = 0;
let failedCount = 0;
let errorMsg = '';
const rs = () => {
if (successCount + failedCount < datas.length) {
return;
}
if (failedCount === 0) {
onCloseHandle();
this.defaultMD && this.defaultMD.openModal();
} else {
const modal = Modal.warning({
transitionName: 'none',
title: getLabel(24960, '提示信息'),
content: getLabel(520053, '共${1}条,失败${2}条').replace('${1}', datas.length).replace('${2}', datas.length - successCount) + errorMsg,
onOk() {
onCloseHandle();
},
onCancel() {
onCloseHandle();
},
});
em.setPageReload({
setvalue: 1, // 1表示每次都需要重新加载页面默认 2表示保持页面无需重新加载
success: (res) => {
setTimeout(() => {
modal.destroy();
this.defaultMD && this.defaultMD.openModal();
}, 3000);
},
});
}
};
const rj = () => {
const modal = Modal.warning({
transitionName: 'none',
title: getLabel(24960, '提示信息'),
content: getLabel(520053, '共${1}条,失败${2}条').replace('${1}', datas.length).replace('${2}', datas.length - successCount) + errorMsg,
onOk() {
onCloseHandle();
},
onCancel() {
onCloseHandle();
},
});
em.setPageReload({
setvalue: 1, // 1表示每次都需要重新加载页面默认 2表示保持页面无需重新加载
success: (res) => {
setTimeout(() => {
modal.destroy();
this.defaultMD && this.defaultMD.openModal();
}, 3000);
},
});
};
datas.forEach((element) => {
// let promise = new Promise(function(rs, rj){
let shareParams = {
resourcetype: addShareMap[params.type] || params.type,
resourceid: element.id,
resourceids: userIdList,
};
try {
WeaTools.callApi('/api/common/chatResource/addshare', 'POST', shareParams).then((res) => {
if (Object.keys(res).length === 0) {
rj();
return;
}
if (res.success !== true) {
rj();
return;
}
em.sendMsg({
targetId: '', // 消息会话ID
msgType: 10, // 消息类型1-文本 2-链接 10-E6分享消息
msgInfo: {
content: element.name, // 分享标题(必填)
sharetype: shareTypeMap[params.type], // 分享数据类型,值有"doc","workflow","task","pdoc","folder" ,"crm" 分别代表文档,流程,任务,云盘文档,云盘文件,客户名片
sharetypename: params.sharetypename ? decodeURI(params.sharetypename) : '',
shareid: element.id, // 分享的数据ID必填
opentype_pc: 2, // PC端打开方式 1:应用内打开(默认) 2PC默认浏览器打开
linkurl: res.linkUrl, // 消息链接地址(必填)
callbackurl: res.callbackurl,
canforward: res.canforward,
},
success: (res) => {
successCount++;
rs();
},
fail: (res) => {
failedCount++;
errorMsg = `${errorMsg + res.errMsg} `;
rs();
},
});
}, (res) => {
const modal = Modal.error({
transitionName: 'none',
title: getLabel(129174, '分享失败'),
content: getLabel(502350, '数据异常 ') + res,
onOk() {
onCloseHandle();
},
onCancel() {
onCloseHandle();
},
});
em.setPageReload({
setvalue: 1, // 1表示每次都需要重新加载页面默认 2表示保持页面无需重新加载
success: (res) => {
setTimeout(() => {
modal.destroy();
this.defaultMD && this.defaultMD.openModal();
}, 3000);
},
});
});
} catch (error) {
const modal = Modal.error({
transitionName: 'none',
title: getLabel(129174, '分享失败'),
content: getLabel(520054, '分享接口请求失败 ') + error,
});
em.setPageReload({
setvalue: 1, // 1表示每次都需要重新加载页面默认 2表示保持页面无需重新加载
success: (res) => {
setTimeout(() => {
modal.destroy();
this.defaultMD && this.defaultMD.openModal();
}, 3000);
},
});
}
// })
// shareList.push(promise);
});
// Promise.all(shareList).then(() => {
// }).catch(() => {
// })
},
fail: (res) => {
const modal = Modal.error({
transitionName: 'none',
title: getLabel(129174, '分享失败'),
content: getLabel(520052, '获取会话用户失败') + res.errMsg,
onOk() {
onCloseHandle();
},
onCancel() {
onCloseHandle();
},
});
em.setPageReload({
setvalue: 1, // 1表示每次都需要重新加载页面默认 2表示保持页面无需重新加载
success: (res) => {
setTimeout(() => {
modal.destroy();
this.defaultMD && this.defaultMD.openModal();
}, 3000);
},
});
},
});
}
}
render() {
const params = this.getFrameParams();
if (params.type && params.type != 'url') {
window.setDialogFullWindow = true;
}
let isSingle = false;
if (params.isSingle && params.isSingle == 'true') {
isSingle = true;
}
const browserTitleMap = {
152: getLabel(30045, '流程'),
37: getLabel(22243, '文档'),
18: getLabel(136, '客户'),
28: getLabel(2103, '会议'),
workplan: getLabel(83466, '日程'),
};
return (
<WeaLocaleProvider>
<div className="wea-emobile-entrance">
<Spin spinning={this.state.loading} tip={getLabel(520055, '分享中……')}>
<div style={{ minHeight: '500px' }} />
</Spin>
{params.type && <WeaBrowser
customized
type={params.type}
title={browserTitleMap[params.type] || getLabel(695, '浏览按钮')}
icon={browserIconMap[params.type] || 'icon-toolbar-Organization-list'}
iconBgcolor="#b32e37"
inputStyle={{ width: 200 }}
onChange={(ids, names, datas) => this.onChangeHandle(ids, names, datas)}
onCancel={() => {
onCloseHandle(); this.defaultMD.openModal();
}}
isSingle={isSingle}
// ref='defaultMD'
ref={el => (this.defaultMD = el)}
hasAdvanceSerach
dataParams={{ isFormEMShare: 1 }}
conditionDataParams={{ isFormEMShare: 1 }}
browserModalProps={
{
transitionName: 'none',
draggable: false,
visibleOnClose: true,
hideClear: true,
}
}
/>}
</div>
</WeaLocaleProvider>
);
}
}