400 lines
12 KiB
JavaScript
400 lines
12 KiB
JavaScript
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:应用内打开(默认) 2:PC默认浏览器打开
|
||
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>
|
||
);
|
||
}
|
||
}
|
||
|