From ec06e3ff8f6f681f4b78bb7654e4723d14514eac Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 8 Jul 2022 18:29:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=AE=A2=E6=9C=8D=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.UAT.ts | 25 +- config/config.dev.ts | 28 +- config/config.prod.ts | 23 +- config/config.sim.ts | 23 +- src/assets/img/cs_client.png | Bin 11192 -> 0 bytes src/assets/img/cs_user.png | Bin 7246 -> 0 bytes src/customerServiceHelpers/constants/http.js | 25 - src/customerServiceHelpers/request.js | 132 ---- src/pages/MainPage/ProjectManager/Jury.js | 82 +-- .../ProjectManager/disposalManager.js | 81 +-- src/pages/MainPage/ProjectManager/manager.js | 80 +-- .../MainPage/ProjectManager/managerAdmin.js | 80 +-- .../ProjectManager/managerSubAdmin.js | 81 +-- .../MainPage/ProjectManager/participants.js | 82 +-- .../ProjectManager/purchaseManager.js | 80 +-- src/pages/MainPage/ProjectManager/supplier.js | 81 +-- src/pages/Tender/ProjectsInvolved/index.tsx | 134 +++- .../conversation/components/Chat/Chat.jsx | 53 -- .../components/Chat/style.module.css | 9 - .../components/ChatHeader/ChatHeader.jsx | 53 -- .../components/ChatHeader/style.module.css | 42 -- .../components/ChatInput/ChatInput.jsx | 595 ------------------ .../components/ChatInput/style.module.css | 103 --- .../ChatRecordList/ChatRecordList.jsx | 33 - .../ChatRecordList/style.module.css | 29 - .../components/ChatToolsBar/ChatToolBar.jsx | 37 -- .../components/ChatToolsBar/style.module.css | 8 - .../components/EmojiPopover/EmojiPopover.jsx | 85 --- .../components/EmojiPopover/style.module.css | 56 -- .../components/FilePopover/FilePopover.jsx | 68 -- .../components/FilePopover/style.module.css | 16 - .../components/ImgPopover/ImgPopover.jsx | 86 --- .../components/ImgPopover/style.module.css | 16 - .../components/ImgPreview/ImgPreview.jsx | 56 -- .../components/ImgPreview/style.module.css | 6 - .../components/MsgBubble/MsgBubble.jsx | 105 ---- .../components/MsgBubble/style.module.css | 84 --- .../components/MsgItem/MsgItem.jsx | 44 -- .../components/MsgItem/style.module.css | 39 -- .../components/RatePopover/RatePopover.jsx | 41 -- .../components/RatePopover/style.module.css | 45 -- .../ScrollWrapper/ScrollWrapper.jsx | 145 ----- .../components/ScrollWrapper/style.module.css | 45 -- .../components/SeactList/index.jsx | 285 --------- .../components/SeactList/index.styled.js | 8 - .../support/conversation/constants.js | 31 - .../conversation/image/emoji_black.png | Bin 9026 -> 0 bytes .../conversation/image/emoji_light.png | Bin 9282 -> 0 bytes .../support/conversation/image/file_black.png | Bin 2893 -> 0 bytes .../support/conversation/image/file_light.png | Bin 3013 -> 0 bytes .../support/conversation/image/pic_black.png | Bin 4537 -> 0 bytes .../support/conversation/image/pic_light.png | Bin 4605 -> 0 bytes .../support/conversation/image/rate_black.png | Bin 7590 -> 0 bytes .../support/conversation/image/rate_light.png | Bin 7941 -> 0 bytes .../conversation/image/server-avatar.jpg | Bin 11192 -> 0 bytes .../support/conversation/image/uploadFile.png | Bin 2320 -> 0 bytes .../support/conversation/index.jsx | 576 ----------------- .../support/conversation/style/common.css | 21 - .../support/conversation/utils/toClass.js | 3 - .../support/conversation/utils/utils.jsx | 568 ----------------- src/services/customerservice.js | 73 --- src/typings.d.ts | 4 + 62 files changed, 222 insertions(+), 4283 deletions(-) delete mode 100644 src/assets/img/cs_client.png delete mode 100644 src/assets/img/cs_user.png delete mode 100644 src/customerServiceHelpers/constants/http.js delete mode 100644 src/customerServiceHelpers/request.js delete mode 100644 src/pages/customerservice/support/conversation/components/Chat/Chat.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/Chat/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/ChatHeader/ChatHeader.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/ChatHeader/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/ChatInput/ChatInput.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/ChatInput/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/ChatRecordList/ChatRecordList.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/ChatRecordList/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/ChatToolsBar/ChatToolBar.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/ChatToolsBar/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/EmojiPopover/EmojiPopover.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/EmojiPopover/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/FilePopover/FilePopover.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/FilePopover/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/ImgPopover/ImgPopover.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/ImgPopover/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/ImgPreview/ImgPreview.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/ImgPreview/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/MsgBubble/MsgBubble.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/MsgBubble/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/MsgItem/MsgItem.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/MsgItem/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/RatePopover/RatePopover.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/RatePopover/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/ScrollWrapper/ScrollWrapper.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/ScrollWrapper/style.module.css delete mode 100644 src/pages/customerservice/support/conversation/components/SeactList/index.jsx delete mode 100644 src/pages/customerservice/support/conversation/components/SeactList/index.styled.js delete mode 100644 src/pages/customerservice/support/conversation/constants.js delete mode 100644 src/pages/customerservice/support/conversation/image/emoji_black.png delete mode 100644 src/pages/customerservice/support/conversation/image/emoji_light.png delete mode 100644 src/pages/customerservice/support/conversation/image/file_black.png delete mode 100644 src/pages/customerservice/support/conversation/image/file_light.png delete mode 100644 src/pages/customerservice/support/conversation/image/pic_black.png delete mode 100644 src/pages/customerservice/support/conversation/image/pic_light.png delete mode 100644 src/pages/customerservice/support/conversation/image/rate_black.png delete mode 100644 src/pages/customerservice/support/conversation/image/rate_light.png delete mode 100644 src/pages/customerservice/support/conversation/image/server-avatar.jpg delete mode 100644 src/pages/customerservice/support/conversation/image/uploadFile.png delete mode 100644 src/pages/customerservice/support/conversation/index.jsx delete mode 100644 src/pages/customerservice/support/conversation/style/common.css delete mode 100644 src/pages/customerservice/support/conversation/utils/toClass.js delete mode 100644 src/pages/customerservice/support/conversation/utils/utils.jsx delete mode 100644 src/services/customerservice.js diff --git a/config/config.UAT.ts b/config/config.UAT.ts index 6fce63b..bca21d4 100644 --- a/config/config.UAT.ts +++ b/config/config.UAT.ts @@ -22,15 +22,24 @@ export default defineConfig({ //询价-查看报价详情-虚拟用户uid REACT_APP_XUNJIA_UID: 'admin_entrance', - //智慧客服ws地址 - REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://10.242.31.158:18022/api/api/biz-customer-service', + // //智慧客服ws地址 + // REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://10.242.31.158:18022/api/api/biz-customer-service', - //智慧客服文档中心查看图片地址 - REACT_APP_CUSTOMERSERVICE_DOC_REDIRECT: 'http://cos.gz-tst.cos.tg.unicom.local/349553515466:mall/', + //智慧客服用户中心地址 + REACT_APP_CUSTOMERSERVICE_USERCENTER: 'http://10.242.31.158:8100/auth/oauth/authorize?response_type=code', - //智慧客服加密公钥私钥ciphercode - REACT_APP_CUSTOMERSERVICE_PUBLICKEY : '0428D625CEEB71CE823BD7D78DFEE7B122F2DA5C4D21E32253AD684D0FE21810394A799639C0CDFBFEB535A1DFD6A366A637E582CE0B1466A5FE7858841135DE6B', - REACT_APP_CUSTOMERSERVICE_PRIVATEKEY : '4F7144028D4DCF88FA50F0E2B3FFDDCF63BBE17D1700537DCE037687D3AA3DA7', - REACT_APP_CUSTOMERSERVICE_CIPHERCODE : 1, + //智慧客服client_id + REACT_APP_CUSTOMERSERVICE_CLIENT_ID: 'S00hFPxc', + + //智慧客服地址 + REACT_APP_CUSTOMERSERVICE_REDIRECT: 'http://localhost:3000', + + // //智慧客服文档中心查看图片地址 + // REACT_APP_CUSTOMERSERVICE_DOC_REDIRECT: 'http://cos.gz-tst.cos.tg.unicom.local/349553515466:mall/', + + // //智慧客服加密公钥私钥ciphercode + // REACT_APP_CUSTOMERSERVICE_PUBLICKEY : '0428D625CEEB71CE823BD7D78DFEE7B122F2DA5C4D21E32253AD684D0FE21810394A799639C0CDFBFEB535A1DFD6A366A637E582CE0B1466A5FE7858841135DE6B', + // REACT_APP_CUSTOMERSERVICE_PRIVATEKEY : '4F7144028D4DCF88FA50F0E2B3FFDDCF63BBE17D1700537DCE037687D3AA3DA7', + // REACT_APP_CUSTOMERSERVICE_CIPHERCODE : 1, }, }); diff --git a/config/config.dev.ts b/config/config.dev.ts index 723cdb8..dede5a4 100644 --- a/config/config.dev.ts +++ b/config/config.dev.ts @@ -21,15 +21,25 @@ export default defineConfig({ // REACT_APP_XUNJIA_REDIRECT: 'http://10.0.204.215:8080/provider_dev', //询价-查看报价详情-虚拟用户uid REACT_APP_XUNJIA_UID: 'admin_entrance', - //智慧客服ws地址 - REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://10.242.37.148:18022/api/api/biz-customer-service', - - //智慧客服文档中心查看图片地址 - REACT_APP_CUSTOMERSERVICE_DOC_REDIRECT: 'http://cos.gz-tst.cos.tg.unicom.local/349553515466:mall/', - //智慧客服加密公钥私钥ciphercode - REACT_APP_CUSTOMERSERVICE_PUBLICKEY : '0428D625CEEB71CE823BD7D78DFEE7B122F2DA5C4D21E32253AD684D0FE21810394A799639C0CDFBFEB535A1DFD6A366A637E582CE0B1466A5FE7858841135DE6B', - REACT_APP_CUSTOMERSERVICE_PRIVATEKEY : '4F7144028D4DCF88FA50F0E2B3FFDDCF63BBE17D1700537DCE037687D3AA3DA7', - REACT_APP_CUSTOMERSERVICE_CIPHERCODE : 1, + //智慧客服用户中心地址 + REACT_APP_CUSTOMERSERVICE_USERCENTER: 'http://10.242.31.158:8100/auth/oauth/authorize?response_type=code', + + //智慧客服client_id + REACT_APP_CUSTOMERSERVICE_CLIENT_ID: 'S00hFPxc', + + //智慧客服地址 + REACT_APP_CUSTOMERSERVICE_REDIRECT: 'http://localhost:3000', + + // //智慧客服ws地址 + // REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://10.242.37.148:18022/api/api/biz-customer-service', + + // //智慧客服文档中心查看图片地址 + // REACT_APP_CUSTOMERSERVICE_DOC_REDIRECT: 'http://cos.gz-tst.cos.tg.unicom.local/349553515466:mall/', + + // //智慧客服加密公钥私钥ciphercode + // REACT_APP_CUSTOMERSERVICE_PUBLICKEY : '0428D625CEEB71CE823BD7D78DFEE7B122F2DA5C4D21E32253AD684D0FE21810394A799639C0CDFBFEB535A1DFD6A366A637E582CE0B1466A5FE7858841135DE6B', + // REACT_APP_CUSTOMERSERVICE_PRIVATEKEY : '4F7144028D4DCF88FA50F0E2B3FFDDCF63BBE17D1700537DCE037687D3AA3DA7', + // REACT_APP_CUSTOMERSERVICE_CIPHERCODE : 1, }, }); diff --git a/config/config.prod.ts b/config/config.prod.ts index 067ee29..bbf3343 100644 --- a/config/config.prod.ts +++ b/config/config.prod.ts @@ -21,16 +21,23 @@ export default defineConfig({ // REACT_APP_XUNJIA_REDIRECT: 'https://60.10.26.178/provider', //询价-查看报价详情-虚拟用户uid REACT_APP_XUNJIA_UID: 'admin_entrance', + //智慧客服用户中心地址 + REACT_APP_CUSTOMERSERVICE_USERCENTER: 'http://10.242.31.158:8100/auth/oauth/authorize?response_type=code', - //智慧客服ws地址 - REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://uscm.unicom.local:18022/api/api/biz-customer-service', + //智慧客服client_id + REACT_APP_CUSTOMERSERVICE_CLIENT_ID: 'S00hFPxc', - //智慧客服文档中心查看图片地址 - REACT_APP_CUSTOMERSERVICE_DOC_REDIRECT: 'http://cos.xx-pbc.cos.tg.unicom.local/349553515466:mall/', + //智慧客服地址 + REACT_APP_CUSTOMERSERVICE_REDIRECT: 'http://localhost:3000', + // //智慧客服ws地址 + // REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://uscm.unicom.local:18022/api/api/biz-customer-service', - //智慧客服加密公钥私钥ciphercode - REACT_APP_CUSTOMERSERVICE_PUBLICKEY : '0428D625CEEB71CE823BD7D78DFEE7B122F2DA5C4D21E32253AD684D0FE21810394A799639C0CDFBFEB535A1DFD6A366A637E582CE0B1466A5FE7858841135DE6B', - REACT_APP_CUSTOMERSERVICE_PRIVATEKEY : '4F7144028D4DCF88FA50F0E2B3FFDDCF63BBE17D1700537DCE037687D3AA3DA7', - REACT_APP_CUSTOMERSERVICE_CIPHERCODE : 1, + // //智慧客服文档中心查看图片地址 + // REACT_APP_CUSTOMERSERVICE_DOC_REDIRECT: 'http://cos.xx-pbc.cos.tg.unicom.local/349553515466:mall/', + + // //智慧客服加密公钥私钥ciphercode + // REACT_APP_CUSTOMERSERVICE_PUBLICKEY : '0428D625CEEB71CE823BD7D78DFEE7B122F2DA5C4D21E32253AD684D0FE21810394A799639C0CDFBFEB535A1DFD6A366A637E582CE0B1466A5FE7858841135DE6B', + // REACT_APP_CUSTOMERSERVICE_PRIVATEKEY : '4F7144028D4DCF88FA50F0E2B3FFDDCF63BBE17D1700537DCE037687D3AA3DA7', + // REACT_APP_CUSTOMERSERVICE_CIPHERCODE : 1, }, }); diff --git a/config/config.sim.ts b/config/config.sim.ts index 8be6ed2..436155e 100644 --- a/config/config.sim.ts +++ b/config/config.sim.ts @@ -21,16 +21,23 @@ export default defineConfig({ // REACT_APP_XUNJIA_REDIRECT: 'http://10.0.204.215:8080/provider', //询价-查看报价详情-虚拟用户uid REACT_APP_XUNJIA_UID: 'admin_entrance', + //智慧客服用户中心地址 + REACT_APP_CUSTOMERSERVICE_USERCENTER: 'http://10.242.31.158:8100/auth/oauth/authorize?response_type=code', - //智慧客服ws地址 - REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://10.242.31.54:18022/api/api/biz-customer-service', + //智慧客服client_id + REACT_APP_CUSTOMERSERVICE_CLIENT_ID: 'S00hFPxc', - //智慧客服文档中心查看图片地址 - REACT_APP_CUSTOMERSERVICE_DOC_REDIRECT: 'http://cos.xx-pbc.cos.tg.unicom.local/349553515466:mall/', + //智慧客服地址 + REACT_APP_CUSTOMERSERVICE_REDIRECT: 'http://localhost:3000', + // //智慧客服ws地址 + // REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://10.242.31.54:18022/api/api/biz-customer-service', - //智慧客服加密公钥私钥ciphercode - REACT_APP_CUSTOMERSERVICE_PUBLICKEY : '0428D625CEEB71CE823BD7D78DFEE7B122F2DA5C4D21E32253AD684D0FE21810394A799639C0CDFBFEB535A1DFD6A366A637E582CE0B1466A5FE7858841135DE6B', - REACT_APP_CUSTOMERSERVICE_PRIVATEKEY : '4F7144028D4DCF88FA50F0E2B3FFDDCF63BBE17D1700537DCE037687D3AA3DA7', - REACT_APP_CUSTOMERSERVICE_CIPHERCODE : 1, + // //智慧客服文档中心查看图片地址 + // REACT_APP_CUSTOMERSERVICE_DOC_REDIRECT: 'http://cos.xx-pbc.cos.tg.unicom.local/349553515466:mall/', + + // //智慧客服加密公钥私钥ciphercode + // REACT_APP_CUSTOMERSERVICE_PUBLICKEY : '0428D625CEEB71CE823BD7D78DFEE7B122F2DA5C4D21E32253AD684D0FE21810394A799639C0CDFBFEB535A1DFD6A366A637E582CE0B1466A5FE7858841135DE6B', + // REACT_APP_CUSTOMERSERVICE_PRIVATEKEY : '4F7144028D4DCF88FA50F0E2B3FFDDCF63BBE17D1700537DCE037687D3AA3DA7', + // REACT_APP_CUSTOMERSERVICE_CIPHERCODE : 1, }, }); diff --git a/src/assets/img/cs_client.png b/src/assets/img/cs_client.png deleted file mode 100644 index abb7ffec8d1186229cff442f88366841619ec2f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11192 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 diff --git a/src/assets/img/cs_user.png b/src/assets/img/cs_user.png deleted file mode 100644 index e10b17c6cb11f2c551cac1962a299e88f93e1c5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7246 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 { - axios(defaultConfig) - .then(result => { - const { data } = result; - resolve(data); - }) - .catch(err => { - reject(err); - }); - }); -}; - -export function $get(url, options) { - return $axios({ ...options, url, method: 'get' }); -} - -export function $post(url, options) { - return $axios({ ...options, url, method: 'post' }); -} - -export function $put(url, options) { - return $axios({ ...options, url, method: 'put' }); -} - -export function $patch(url, options) { - return $axios({ ...options, url, method: 'patch' }); -} - -export function $delete(url, options) { - return $axios({ ...options, url, method: 'delete' }); -} - -export function $head(url, options) { - return $axios({ ...options, url, method: 'head' }); -} - -export function $options(url, options) { - return $axios({ ...options, url, method: 'options' }); -} - - -/** - * 下载专用请求 - * @param {downloadUrl} 接口路径 params:接口参数 - * @returns {Promise} - */ -export function $download(downloadUrl, params) { - return new Promise((resolve, reject) => { - axios( - { - method: "post", - url: downloadUrl, - data: params, - responseType: "blob", // 指定获取数据的类型为blob - } - ).then(result => { - // const { data } = result; - resolve(result); - }).catch(err => { - reject(err); - }); - }); -}; \ No newline at end of file diff --git a/src/pages/MainPage/ProjectManager/Jury.js b/src/pages/MainPage/ProjectManager/Jury.js index 2b64340..6c1cd69 100644 --- a/src/pages/MainPage/ProjectManager/Jury.js +++ b/src/pages/MainPage/ProjectManager/Jury.js @@ -10,8 +10,6 @@ import moment from 'moment'; import { jurySaveInfo, getSessionUserData, getRA } from '@/utils/session'; import NoticeDetail from '@/pages/notice/noticeList/components/NoticeDetail' import ExpertEnter from '@/pages/BidEvaluation/components/ExpertEnter'; -import ChatUI from '@/pages/customerservice/support/conversation' //智慧客服 - @connect(({ dashboard, loading }) => ({ ...dashboard, downlistLoading: loading.effects['dashboard/fetchDowntlist'], @@ -25,17 +23,7 @@ class Jury extends PureComponent { noticeDetail: false, // 公告弹窗 recordData: '', // 进入评审室弹窗数据 enterVisible: false, // 进入评审室弹窗 - isModalVisible: false, //智慧客服 - isFlash: false, //智慧客服 - isCloseWs: true, //智慧客服 - optionsModal: false, //智慧客服 - projectModal: false, //智慧客服 - supplierNumber: '', //智慧客服 - staffId: '', //智慧客服' - staffName:'', //智慧客服 - kfType:0,//智慧客服 - questionType:0,//智慧客服 - roleIds:'',//智慧客服 + } componentDidMount() { this.props.dispatch({ @@ -59,14 +47,6 @@ class Jury extends PureComponent { userlevel: "1",                       //网站自定义会员级别,1-N,可根据选择判断,取值显示到小能客户端 erpparam: "abc"                          //erpparam为erp功能的扩展字段,可选,购买erp功能后用于erp功能集成 } - //智慧客服,获取供应商编码 - let userData = getSessionUserData() - let roleAuthority = getRA() - this.setState({roleIds: roleAuthority && roleAuthority.length>0? roleAuthority[0]: userData.roleIds}) - this.setState({staffId: userData.userId}) - this.setState({staffName: userData.fullName}) - this.setState({supplierNumber: userData.organizationId}) - //<<<<<<智慧客服end } onChange = (date, dateString) => { this.setState({ @@ -115,22 +95,12 @@ class Jury extends PureComponent { enterVisible: false }) } - initChatUI = () => { - //智慧客服 - if(this.state.isCloseWs && sessionStorage.getItem('CUSTOMERSERVICE_isCloseChatUIModal')==null){ //弹窗主动关闭或者页面刷新 - this.setState({optionsModal: true}) - }else{ - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - } - } render() { - const { datevalue, detailId, noticeDetail, recordData, enterVisible, isModalVisible, isCloseWs, optionsModal, projectModal, supplierNumber, staffId, staffName, kfType, questionType, isFlash, roleIds} = this.state; //智慧客服state + const { datevalue, detailId, noticeDetail, recordData, enterVisible, } = this.state; const { Juryuplist, Jurydownlist, staloading, tlist } = this.props; return ( <> - this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 + {/* this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 */}

}> @@ -203,52 +173,6 @@ class Jury extends PureComponent { {noticeDetail && { this.noticeModel() }} modalVisible={noticeDetail} />} {recordData == '' ? null : { this.enterModel() }} onRefresh={() => { this.onRefresh() }} recordData={recordData} />} - {/*智慧客服*/} - { - this.setState({kfType: 2}) - this.setState({projectModal: true}) - }} - openWin={(kfType, questionType)=>{ - this.setState({questionType: questionType}) - this.setState({kfType: kfType}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - }} - closeWin={()=>{ - this.setState({kfType: 0}) - this.setState({questionType: 0}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - this.setState({isCloseWs: true}) - this.setState({projectModal: false}) - }} - optionsModal={optionsModal} - projectModal={projectModal} - isModalVisible={isModalVisible} - kfType={kfType} - questionType={questionType} - staffId={staffId} - staffName={staffName} - supplierNumber={supplierNumber} - isCloseWs={isCloseWs} - roleIds={roleIds} - hideWin={()=>{ - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - }} - closeOptionsModal={()=>{ - this.setState({optionsModal: false}) - }} - closeProjectModal={()=>{ - this.setState({projectModal: false}) - }} - msgAlert={()=>{ - if(!isModalVisible) this.setState({isFlash: true}) - }} - /> ) } diff --git a/src/pages/MainPage/ProjectManager/disposalManager.js b/src/pages/MainPage/ProjectManager/disposalManager.js index a9e0f6b..91431b0 100644 --- a/src/pages/MainPage/ProjectManager/disposalManager.js +++ b/src/pages/MainPage/ProjectManager/disposalManager.js @@ -13,8 +13,6 @@ import { getURLInformation } from '@/utils/CommonUtils'; import MessageDetail from '@/pages/SystemMessage/message/components/messageDetail' import NoticeDetail from '@/pages/notice/noticeList/components/NoticeDetail' import QuestDetail from '@/pages/SystemMessage/message/components/questDetail' -import { getQuestList } from '@/pages/SystemMessage/message/service' -import ChatUI from '@/pages/customerservice/support/conversation' //智慧客服 @connect(({ dashboard, loading }) => ({ ...dashboard, fetchtPageList: loading.effects['dashboard/fetchtPageList'], @@ -30,17 +28,6 @@ class manager extends PureComponent { noticeDetail: false, // 公告弹窗 questData: {},//问卷数据 questVisible: false, //问卷弹窗 - isModalVisible: false, //智慧客服 - isFlash: false, //智慧客服 - isCloseWs: true, //智慧客服 - optionsModal: false, //智慧客服 - projectModal: false, //智慧客服 - supplierNumber: '', //智慧客服 - staffId: '', //智慧客服' - staffName:'', //智慧客服 - kfType:0,//智慧客服 - questionType:0,//智慧客服 - roleIds:'',//智慧客服 } componentDidMount() { this.props.dispatch({ @@ -68,14 +55,6 @@ class manager extends PureComponent { userlevel: "1",                       //网站自定义会员级别,1-N,可根据选择判断,取值显示到小能客户端 erpparam: "abc"                          //erpparam为erp功能的扩展字段,可选,购买erp功能后用于erp功能集成 } - //<<<<<<智慧客服,获取供应商编码 - let userData = getSessionUserData() - let roleAuthority = getRA() - this.setState({roleIds: roleAuthority && roleAuthority.length>0? roleAuthority[0]: userData.roleIds}) - this.setState({staffId: userData.userId}) - this.setState({staffName: userData.fullName}) - this.setState({supplierNumber: userData.organizationId}) - //<<<<<<智慧客服end } onChange = (date, dateString) => { this.setState({ @@ -132,16 +111,6 @@ class manager extends PureComponent { questVisible: false }) } - initChatUI = () => { - //智慧客服 - if(this.state.isCloseWs && sessionStorage.getItem('CUSTOMERSERVICE_isCloseChatUIModal')==null){ //弹窗主动关闭或者页面刷新 - this.setState({optionsModal: true}) - }else{ - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - } - } followUpProject = async (data) => { // 项目跟进 auctionFollowUpAProjectManager(data) // sessionStorage.setItem('projectData', JSON.stringify(data)); @@ -150,10 +119,10 @@ class manager extends PureComponent { }; render() { const { projectlist, staloading, tlist, trelist, pagelist, disposalList } = this.props; - const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible, isModalVisible, isCloseWs, optionsModal, projectModal, supplierNumber, staffId, staffName, kfType, questionType, isFlash, roleIds} = this.state; //智慧客服state + const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible, } = this.state; return ( <> - this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 + {/* this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 */}
history.push('/SystemMessage/message')}>更多
}> @@ -223,52 +192,6 @@ class manager extends PureComponent { {messageDetail ? { this.closeModel(), this.props.dispatch({type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 }}) }} modalVisible={messageDetail} /> : null } {questVisible ? { this.closeParticipate(), this.props.dispatch({type: "dashboard/fetchtlistre", payload: { pageNo: 1, pageSize: 7 }}) }} modalVisible={questVisible} /> : null} {noticeDetail && { this.noticeModel() }} modalVisible={noticeDetail} />} - {/*智慧客服*/} - { - this.setState({kfType: 2}) - this.setState({projectModal: true}) - }} - openWin={(kfType, questionType)=>{ - this.setState({questionType: questionType}) - this.setState({kfType: kfType}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - }} - closeWin={()=>{ - this.setState({kfType: 0}) - this.setState({questionType: 0}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - this.setState({isCloseWs: true}) - this.setState({projectModal: false}) - }} - optionsModal={optionsModal} - projectModal={projectModal} - isModalVisible={isModalVisible} - kfType={kfType} - questionType={questionType} - staffId={staffId} - staffName={staffName} - supplierNumber={supplierNumber} - isCloseWs={isCloseWs} - roleIds={roleIds} - hideWin={()=>{ - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - }} - closeOptionsModal={()=>{ - this.setState({optionsModal: false}) - }} - closeProjectModal={()=>{ - this.setState({projectModal: false}) - }} - msgAlert={()=>{ - if(!isModalVisible) this.setState({isFlash: true}) - }} - /> ) } diff --git a/src/pages/MainPage/ProjectManager/manager.js b/src/pages/MainPage/ProjectManager/manager.js index 7488cf8..998315d 100644 --- a/src/pages/MainPage/ProjectManager/manager.js +++ b/src/pages/MainPage/ProjectManager/manager.js @@ -16,7 +16,6 @@ import NoticeDetail from '@/pages/notice/noticeList/components/NoticeDetail' import QuestDetail from '@/pages/SystemMessage/message/components/questDetail' import { getQuestList } from '@/pages/SystemMessage/message/service' import ApprovalDetail from '@/pages/SystemMessage/message/components/approvalDetail' -import ChatUI from '@/pages/customerservice/support/conversation' //智慧客服 @connect(({ dashboard, loading }) => ({ ...dashboard, downlistLoading: loading.effects['dashboard/fetchDowntlist'], @@ -33,17 +32,6 @@ class manager extends PureComponent { questData: {},//问卷数据 questVisible: false,//问卷弹窗 mainDetail: false, // 审批单消息弹窗 - isModalVisible: false, //智慧客服 - isFlash: false, //智慧客服 - isCloseWs: true, //智慧客服 - optionsModal: false, //智慧客服 - projectModal: false, //智慧客服 - supplierNumber: '', //智慧客服 - staffId: '', //智慧客服' - staffName:'', //智慧客服 - kfType:0,//智慧客服 - questionType:0,//智慧客服 - roleIds:'',//智慧客服 // NTKF_PARAM: { // siteid: "bl_1000", //企业ID,,为固定值 // settingid: "bl_1000_1492484340268", //接待组ID,为固定值,必填 @@ -83,14 +71,6 @@ class manager extends PureComponent { userlevel: "1",                       //网站自定义会员级别,1-N,可根据选择判断,取值显示到小能客户端 erpparam: "abc"                          //erpparam为erp功能的扩展字段,可选,购买erp功能后用于erp功能集成 } - //智慧客服,获取供应商编码 - let userData = getSessionUserData() - let roleAuthority = getRA() - this.setState({roleIds: roleAuthority && roleAuthority.length>0? roleAuthority[0]: userData.roleIds}) - this.setState({staffId: userData.userId}) - this.setState({staffName: userData.fullName}) - this.setState({supplierNumber: userData.organizationId}) - //<<<<<<智慧客服end this.approvalDetail() } onChange = (date, dateString) => { @@ -154,16 +134,6 @@ class manager extends PureComponent { questVisible: false }) } - initChatUI = () => { - //智慧客服 - if(this.state.isCloseWs && sessionStorage.getItem('CUSTOMERSERVICE_isCloseChatUIModal')==null){ //弹窗主动关闭或者页面刷新 - this.setState({optionsModal: true}) - }else{ - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - } - } followUpProject = async (data) => { // let defId = ''; //项目流程id // await getDefId(data.id).then((res) => { @@ -181,10 +151,10 @@ class manager extends PureComponent { }; render() { const { downlist, projectlist, staloading, tlist, trelist, idList, dateNum } = this.props; - const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible, mainDetail, isModalVisible, isCloseWs, optionsModal, projectModal, supplierNumber, staffId, staffName, kfType, questionType, isFlash, roleIds} = this.state; //智慧客服state + const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible, mainDetail, } = this.state; return ( <> - this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 + {/* 咨询服务︵8:30|12:3013:00|17:00 */}
{ @@ -312,52 +282,6 @@ class manager extends PureComponent { { idList.length > 0 ? { this.closeModel(), this.props.dispatch({ type: "dashboard/fetchtClarify", payload: { authorizestate: '0', templatetype: '4', size: 6 } }) }} modalVisible={mainDetail} /> : null } - {/*智慧客服*/} - { - this.setState({kfType: 2}) - this.setState({projectModal: true}) - }} - openWin={(kfType, questionType)=>{ - this.setState({questionType: questionType}) - this.setState({kfType: kfType}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - }} - closeWin={()=>{ - this.setState({kfType: 0}) - this.setState({questionType: 0}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - this.setState({isCloseWs: true}) - this.setState({projectModal: false}) - }} - optionsModal={optionsModal} - projectModal={projectModal} - isModalVisible={isModalVisible} - kfType={kfType} - questionType={questionType} - staffId={staffId} - staffName={staffName} - supplierNumber={supplierNumber} - isCloseWs={isCloseWs} - roleIds={roleIds} - hideWin={()=>{ - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - }} - closeOptionsModal={()=>{ - this.setState({optionsModal: false}) - }} - closeProjectModal={()=>{ - this.setState({projectModal: false}) - }} - msgAlert={()=>{ - if(!isModalVisible) this.setState({isFlash: true}) - }} - /> ) } diff --git a/src/pages/MainPage/ProjectManager/managerAdmin.js b/src/pages/MainPage/ProjectManager/managerAdmin.js index 31a2ad3..818e428 100644 --- a/src/pages/MainPage/ProjectManager/managerAdmin.js +++ b/src/pages/MainPage/ProjectManager/managerAdmin.js @@ -19,17 +19,6 @@ class manager extends PureComponent { state = { detailId: '1', // 公告id noticeDetail: false, // 公告弹窗 - isModalVisible: false, //智慧客服 - isFlash: false, //智慧客服 - isCloseWs: true, //智慧客服 - optionsModal: false, //智慧客服 - projectModal: false, //智慧客服 - supplierNumber: '', //智慧客服 - staffId: '', //智慧客服' - staffName:'', //智慧客服 - kfType:0,//智慧客服 - questionType:0,//智慧客服 - roleIds:'',//智慧客服 } componentDidMount() { this.props.dispatch({ @@ -45,14 +34,6 @@ class manager extends PureComponent { userlevel: "1",                       //网站自定义会员级别,1-N,可根据选择判断,取值显示到小能客户端 erpparam: "abc"                          //erpparam为erp功能的扩展字段,可选,购买erp功能后用于erp功能集成 } - //智慧客服,获取供应商编码 - let userData = getSessionUserData() - let roleAuthority = getRA() - this.setState({roleIds: roleAuthority && roleAuthority.length>0? roleAuthority[0]: userData.roleIds}) - this.setState({staffId: userData.userId}) - this.setState({staffName: userData.fullName}) - this.setState({supplierNumber: userData.organizationId}) - //<<<<<<智慧客服end } lookInfo = (id) => { // 公告查看 this.setState({ @@ -65,22 +46,13 @@ class manager extends PureComponent { noticeDetail: false }) } - initChatUI = () => { - //智慧客服 - if(this.state.isCloseWs && sessionStorage.getItem('CUSTOMERSERVICE_isCloseChatUIModal')==null){ //弹窗主动关闭或者页面刷新 - this.setState({optionsModal: true}) - }else{ - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - } - } + render() { const { tlist, trelist } = this.props; - const { detailId, noticeDetail, isModalVisible, isCloseWs, optionsModal, projectModal, supplierNumber, staffId, staffName, kfType, questionType, isFlash, roleIds } = this.state; //智慧客服state + const { detailId, noticeDetail,} = this.state; //智慧客服state return ( <> - this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 + {/* this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 */}
history.push('/notice/noticeList')}>更多
}> @@ -97,52 +69,6 @@ class manager extends PureComponent {
{noticeDetail && { this.noticeModel() }} modalVisible={noticeDetail} />} - {/*智慧客服*/} - { - this.setState({kfType: 2}) - this.setState({projectModal: true}) - }} - openWin={(kfType, questionType)=>{ - this.setState({questionType: questionType}) - this.setState({kfType: kfType}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - }} - closeWin={()=>{ - this.setState({kfType: 0}) - this.setState({questionType: 0}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - this.setState({isCloseWs: true}) - this.setState({projectModal: false}) - }} - optionsModal={optionsModal} - projectModal={projectModal} - isModalVisible={isModalVisible} - kfType={kfType} - questionType={questionType} - staffId={staffId} - staffName={staffName} - supplierNumber={supplierNumber} - isCloseWs={isCloseWs} - roleIds={roleIds} - hideWin={()=>{ - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - }} - closeOptionsModal={()=>{ - this.setState({optionsModal: false}) - }} - closeProjectModal={()=>{ - this.setState({projectModal: false}) - }} - msgAlert={()=>{ - if(!isModalVisible) this.setState({isFlash: true}) - }} - /> ) } diff --git a/src/pages/MainPage/ProjectManager/managerSubAdmin.js b/src/pages/MainPage/ProjectManager/managerSubAdmin.js index 09ff491..7e168be 100644 --- a/src/pages/MainPage/ProjectManager/managerSubAdmin.js +++ b/src/pages/MainPage/ProjectManager/managerSubAdmin.js @@ -10,7 +10,6 @@ import moment from 'moment'; import { getSessionUserData, getRA } from '@/utils/session'; import { getURLInformation } from '@/utils/CommonUtils'; import NoticeDetail from '@/pages/notice/noticeList/components/NoticeDetail' -import ChatUI from '@/pages/customerservice/support/conversation' //智慧客服 @connect(({ dashboard, loading }) => ({ ...dashboard, })) @@ -18,17 +17,6 @@ class manager extends PureComponent { state = { detailId: '1', // 公告id noticeDetail: false, // 公告弹窗 - isModalVisible: false, //智慧客服 - isFlash: false, //智慧客服 - isCloseWs: true, //智慧客服 - optionsModal: false, //智慧客服 - projectModal: false, //智慧客服 - supplierNumber: '', //智慧客服 - staffId: '', //智慧客服' - staffName:'', //智慧客服 - kfType:0,//智慧客服 - questionType:0,//智慧客服 - roleIds:'',//智慧客服 } componentDidMount() { this.props.dispatch({ @@ -44,14 +32,6 @@ class manager extends PureComponent { userlevel: "1",                       //网站自定义会员级别,1-N,可根据选择判断,取值显示到小能客户端 erpparam: "abc"                          //erpparam为erp功能的扩展字段,可选,购买erp功能后用于erp功能集成 } - //智慧客服,获取供应商编码 - let userData = getSessionUserData() - let roleAuthority = getRA() - this.setState({roleIds: roleAuthority && roleAuthority.length>0? roleAuthority[0]: userData.roleIds}) - this.setState({staffId: userData.userId}) - this.setState({staffName: userData.fullName}) - this.setState({supplierNumber: userData.organizationId}) - //<<<<<<智慧客服end } lookInfo = (id) => { // 公告查看 this.setState({ @@ -64,22 +44,13 @@ class manager extends PureComponent { noticeDetail: false }) } - initChatUI = () => { - //智慧客服 - if(this.state.isCloseWs && sessionStorage.getItem('CUSTOMERSERVICE_isCloseChatUIModal')==null){ //弹窗主动关闭或者页面刷新 - this.setState({optionsModal: true}) - }else{ - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - } - } + render() { const { tlist, trelist } = this.props; - const { detailId, noticeDetail, isModalVisible, isCloseWs, optionsModal, projectModal, supplierNumber, staffId, staffName, kfType, questionType, isFlash, roleIds} = this.state; //智慧客服state + const { detailId, noticeDetail, } = this.state; return ( <> - this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 + {/* this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 */}
history.push('/notice/noticeList')}>更多
}> @@ -96,52 +67,6 @@ class manager extends PureComponent { {noticeDetail && { this.noticeModel() }} modalVisible={noticeDetail} />} - {/*智慧客服*/} - { - this.setState({kfType: 2}) - this.setState({projectModal: true}) - }} - openWin={(kfType, questionType)=>{ - this.setState({questionType: questionType}) - this.setState({kfType: kfType}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - }} - closeWin={()=>{ - this.setState({kfType: 0}) - this.setState({questionType: 0}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - this.setState({isCloseWs: true}) - this.setState({projectModal: false}) - }} - optionsModal={optionsModal} - projectModal={projectModal} - isModalVisible={isModalVisible} - kfType={kfType} - questionType={questionType} - staffId={staffId} - staffName={staffName} - supplierNumber={supplierNumber} - isCloseWs={isCloseWs} - roleIds={roleIds} - hideWin={()=>{ - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - }} - closeOptionsModal={()=>{ - this.setState({optionsModal: false}) - }} - closeProjectModal={()=>{ - this.setState({projectModal: false}) - }} - msgAlert={()=>{ - if(!isModalVisible) this.setState({isFlash: true}) - }} - /> ) } diff --git a/src/pages/MainPage/ProjectManager/participants.js b/src/pages/MainPage/ProjectManager/participants.js index af81eee..a715881 100644 --- a/src/pages/MainPage/ProjectManager/participants.js +++ b/src/pages/MainPage/ProjectManager/participants.js @@ -16,7 +16,6 @@ import NoticeModal from '@/pages/Auction/NoticeModal/noticeModal' import StopReason from '@/pages/Auction/NoticeModal/stopReason' import QuestDetail from '@/pages/SystemMessage/message/components/questDetail' import { getQuestList } from '@/pages/SystemMessage/message/service' -import ChatUI from '@/pages/customerservice/support/conversation' //智慧客服 @connect(({ dashboard, loading }) => ({ ...dashboard, @@ -36,17 +35,7 @@ class manager extends PureComponent { tpid: '0', // 中止原因id isModalVisible: false, // 中止原因弹窗 questData: {},//问卷数据 - questVisible: false, //问卷弹窗 - isChatModalVisible: false, //智慧客服 - isFlash: false, //智慧客服 - isCloseWs: true, //智慧客服 - optionsModal: false, //智慧客服 - projectModal: false, //智慧客服 - supplierNumber: '', //智慧客服 - staffId: '', //智慧客服' - staffName:'', //智慧客服 - kfType:0,//智慧客服 - questionType:0,//智慧客服 + questVisible: false, //问卷弹窗服 roleIds:'',//智慧客服 } componentDidMount() { @@ -75,14 +64,6 @@ class manager extends PureComponent { userlevel: "1",                       //网站自定义会员级别,1-N,可根据选择判断,取值显示到小能客户端 erpparam: "abc"                          //erpparam为erp功能的扩展字段,可选,购买erp功能后用于erp功能集成 } - //智慧客服,获取供应商编码 - let userData = getSessionUserData() - let roleAuthority = getRA() - this.setState({roleIds: roleAuthority && roleAuthority.length>0? roleAuthority[0]: userData.roleIds}) - this.setState({staffId: userData.userId}) - this.setState({staffName: userData.fullName}) - this.setState({supplierNumber: userData.organizationId}) - //<<<<<<智慧客服end } onChange = (date, dateString) => { this.setState({ @@ -160,22 +141,13 @@ class manager extends PureComponent { sessionStorage.setItem('projectData', JSON.stringify(projectData)); window.open("/AuctionViewAuctions/Index"); } - initChatUI = () => { - //智慧客服 - if(this.state.isCloseWs && sessionStorage.getItem('CUSTOMERSERVICE_isCloseChatUIModal')==null){ //弹窗主动关闭或者页面刷新 - this.setState({optionsModal: true}) - }else{ - this.setState({isChatModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - } - } + render() { const { projectlist, staloading, tlist, trelist, shotList, Participants } = this.props; - const { datevalue, messId, messageDetail, detailId, noticeDetail, noticeModalVis, projectId, isModalVisible, tpid, questData, questVisible, isChatModalVisible, isCloseWs, optionsModal, projectModal, supplierNumber, staffId, staffName, kfType, questionType, isFlash, roleIds} = this.state; //智慧客服state + const { datevalue, messId, messageDetail, detailId, noticeDetail, noticeModalVis, projectId, isModalVisible, tpid, questData, questVisible, } = this.state; return ( <> - this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 + {/* this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 */}
history.push('/SystemMessage/message')}>更多
}> @@ -264,52 +236,6 @@ class manager extends PureComponent { {noticeDetail && { this.noticeModel() }} modalVisible={noticeDetail} />} { this.noticeModel() }} /> { this.noticeModel() }} /> - {/*智慧客服*/} - { - this.setState({kfType: 2}) - this.setState({projectModal: true}) - }} - openWin={(kfType, questionType)=>{ - this.setState({questionType: questionType}) - this.setState({kfType: kfType}) - this.setState({optionsModal: false}) - this.setState({isChatModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - }} - closeWin={()=>{ - this.setState({kfType: 0}) - this.setState({questionType: 0}) - this.setState({optionsModal: false}) - this.setState({isChatModalVisible: false}) - this.setState({isCloseWs: true}) - this.setState({projectModal: false}) - }} - optionsModal={optionsModal} - projectModal={projectModal} - isModalVisible={isChatModalVisible} - kfType={kfType} - questionType={questionType} - staffId={staffId} - staffName={staffName} - supplierNumber={supplierNumber} - isCloseWs={isCloseWs} - roleIds={roleIds} - hideWin={()=>{ - this.setState({optionsModal: false}) - this.setState({isChatModalVisible: false}) - }} - closeOptionsModal={()=>{ - this.setState({optionsModal: false}) - }} - closeProjectModal={()=>{ - this.setState({projectModal: false}) - }} - msgAlert={()=>{ - if(!isChatModalVisible) this.setState({isFlash: true}) - }} - /> ) } diff --git a/src/pages/MainPage/ProjectManager/purchaseManager.js b/src/pages/MainPage/ProjectManager/purchaseManager.js index 22dd04f..e269900 100644 --- a/src/pages/MainPage/ProjectManager/purchaseManager.js +++ b/src/pages/MainPage/ProjectManager/purchaseManager.js @@ -16,7 +16,6 @@ import NoticeDetail from '@/pages/notice/noticeList/components/NoticeDetail' import QuestDetail from '@/pages/SystemMessage/message/components/questDetail' import { getQuestList } from '@/pages/SystemMessage/message/service' import ApprovalDetail from '@/pages/SystemMessage/message/components/approvalDetail' -import ChatUI from '@/pages/customerservice/support/conversation' //智慧客服 @connect(({ dashboard, loading }) => ({ ...dashboard, downlistLoading: loading.effects['dashboard/fetchDowntlist'], @@ -34,16 +33,6 @@ class manager extends PureComponent { questVisible: false, //问卷弹窗 mainDetail: false, // 审批单消息弹窗 isModalVisible: false, //智慧客服 - isFlash: false, //智慧客服 - isCloseWs: true, //智慧客服 - optionsModal: false, //智慧客服 - projectModal: false, //智慧客服 - supplierNumber: '', //智慧客服 - staffId: '', //智慧客服' - staffName:'', //智慧客服 - kfType:0,//智慧客服 - questionType:0,//智慧客服 - roleIds:'',//智慧客服 } componentDidMount() { this.props.dispatch({ @@ -75,14 +64,6 @@ class manager extends PureComponent { userlevel: "1",                       //网站自定义会员级别,1-N,可根据选择判断,取值显示到小能客户端 erpparam: "abc"                          //erpparam为erp功能的扩展字段,可选,购买erp功能后用于erp功能集成 } - //智慧客服,获取供应商编码 - let userData = getSessionUserData() - let roleAuthority = getRA() - this.setState({roleIds: roleAuthority && roleAuthority.length>0? roleAuthority[0]: userData.roleIds}) - this.setState({staffId: userData.userId}) - this.setState({staffName: userData.fullName}) - this.setState({supplierNumber: userData.organizationId}) - //<<<<<<智慧客服end this.approvalDetail() } onChange = (date, dateString) => { @@ -150,22 +131,13 @@ class manager extends PureComponent { await followUpAProjectManager(data); history.push('/ProjectLayout/Manager/HomePageSectionList'); }; - initChatUI = () => { - //智慧客服 - if(this.state.isCloseWs && sessionStorage.getItem('CUSTOMERSERVICE_isCloseChatUIModal')==null){ //弹窗主动关闭或者页面刷新 - this.setState({optionsModal: true}) - }else{ - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - } - } + render() { const { downlist, projectlist, staloading, tlist, trelist, idList, dateNum } = this.props; - const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible, mainDetail, isModalVisible, isCloseWs, optionsModal, projectModal, supplierNumber, staffId, staffName, kfType, questionType, isFlash, roleIds} = this.state; //智慧客服state + const { datevalue, messId, messageDetail, detailId, noticeDetail, questData, questVisible, mainDetail, } = this.state; //智慧客服state return ( <> - this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 + {/* this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 */}
history.push('/SystemMessage/message')}>更多
}> @@ -287,52 +259,6 @@ class manager extends PureComponent { { idList.length > 0 ? { this.closeModel(), this.props.dispatch({ type: "dashboard/fetchtClarify", payload: { authorizestate: '0', templatetype: '4', size: 6 } }) }} modalVisible={mainDetail} /> : null } - {/*智慧客服*/} - { - this.setState({kfType: 2}) - this.setState({projectModal: true}) - }} - openWin={(kfType, questionType)=>{ - this.setState({questionType: questionType}) - this.setState({kfType: kfType}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - }} - closeWin={()=>{ - this.setState({kfType: 0}) - this.setState({questionType: 0}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - this.setState({isCloseWs: true}) - this.setState({projectModal: false}) - }} - optionsModal={optionsModal} - projectModal={projectModal} - isModalVisible={isModalVisible} - kfType={kfType} - questionType={questionType} - staffId={staffId} - staffName={staffName} - supplierNumber={supplierNumber} - isCloseWs={isCloseWs} - roleIds={roleIds} - hideWin={()=>{ - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - }} - closeOptionsModal={()=>{ - this.setState({optionsModal: false}) - }} - closeProjectModal={()=>{ - this.setState({projectModal: false}) - }} - msgAlert={()=>{ - if(!isModalVisible) this.setState({isFlash: true}) - }} - /> ) } diff --git a/src/pages/MainPage/ProjectManager/supplier.js b/src/pages/MainPage/ProjectManager/supplier.js index ca1b97a..bee62d2 100644 --- a/src/pages/MainPage/ProjectManager/supplier.js +++ b/src/pages/MainPage/ProjectManager/supplier.js @@ -18,8 +18,6 @@ import IParticipateIn from '@/utils/IParticipateIn' import InvitationLetter from '@/utils/InvitationLetter' import QuestDetail from '@/pages/SystemMessage/message/components/questDetail' import { getQuestList } from '@/pages/SystemMessage/message/service' -import ChatUI from '@/pages/customerservice/support/conversation' //智慧客服 - @connect(({ dashboard, loading }) => ({ ...dashboard, downlistLoading: loading.effects['dashboard/fetchDowntlist'], @@ -40,17 +38,6 @@ class supplier extends PureComponent { questData: {},//问卷数据 questVisible: false, //问卷弹窗 datestring: moment().format('YYYY-MM'),//我参与的项目日期 - isModalVisible: false, //智慧客服 - isFlash: false, //智慧客服 - isCloseWs: true, //智慧客服 - optionsModal: false, //智慧客服 - projectModal: false, //智慧客服 - supplierNumber: '', //智慧客服 - staffId: '', //智慧客服' - staffName:'', //智慧客服 - kfType:0,//智慧客服 - questionType:0,//智慧客服 - roleIds:'',//智慧客服 } componentDidMount() { const paramst = { @@ -94,14 +81,6 @@ class supplier extends PureComponent { userlevel: "1",                       //网站自定义会员级别,1-N,可根据选择判断,取值显示到小能客户端 erpparam: "abc"                          //erpparam为erp功能的扩展字段,可选,购买erp功能后用于erp功能集成 } - //智慧客服,获取供应商编码 - let userData = getSessionUserData() - let roleAuthority = getRA() - this.setState({roleIds: roleAuthority && roleAuthority.length>0? roleAuthority[0]: userData.roleIds}) - this.setState({staffId: userData.userId}) - this.setState({staffName: userData.fullName}) - this.setState({supplierNumber: userData.organizationId}) - //<<<<<<智慧客服end this.clarifyDetail() } onChange = (date, dateString) => { @@ -197,22 +176,12 @@ class supplier extends PureComponent { invitationDetail: true }) } - initChatUI = () => { - //智慧客服 - if(this.state.isCloseWs && sessionStorage.getItem('CUSTOMERSERVICE_isCloseChatUIModal')==null){ //弹窗主动关闭或者页面刷新 - this.setState({optionsModal: true}) - }else{ - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - } - } render() { const { supplieruplist, supplierleftlist, supplierrightlist, staloading, tlist, trelist, idList, dateNum } = this.props; - const { datevalue, messId, messageDetail, mainDetail, detailId, noticeDetail, joinData, joinDetail, invitationData, invitationDetail, questData, questVisible, isModalVisible, isCloseWs, optionsModal, projectModal, supplierNumber, staffId, staffName, kfType, questionType, isFlash, roleIds} = this.state; //智慧客服state + const { datevalue, messId, messageDetail, mainDetail, detailId, noticeDetail, joinData, joinDetail, invitationData, invitationDetail, questData, questVisible,} = this.state; return ( <> - this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00 + this.initChatUI()}>咨询服务︵8:30|12:3013:00|17:00
history.push('/SystemMessage/message')}>更多
}> @@ -323,52 +292,6 @@ class supplier extends PureComponent { {noticeDetail && { this.noticeModel() }} modalVisible={noticeDetail} />} {joinData == '' ? null : { this.noticeModel() }} visible={joinDetail} />} {invitationData == '' ? null : { this.noticeModel() }} visible={invitationDetail} />} - {/*智慧客服*/} - { - this.setState({kfType: 2}) - this.setState({projectModal: true}) - }} - openWin={(kfType, questionType)=>{ - this.setState({questionType: questionType}) - this.setState({kfType: kfType}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: true}) - this.setState({isCloseWs: false}) - this.setState({isFlash :false}) - }} - closeWin={()=>{ - this.setState({kfType: 0}) - this.setState({questionType: 0}) - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - this.setState({isCloseWs: true}) - this.setState({projectModal: false}) - }} - optionsModal={optionsModal} - projectModal={projectModal} - isModalVisible={isModalVisible} - kfType={kfType} - questionType={questionType} - staffId={staffId} - staffName={staffName} - supplierNumber={supplierNumber} - isCloseWs={isCloseWs} - roleIds={roleIds} - hideWin={()=>{ - this.setState({optionsModal: false}) - this.setState({isModalVisible: false}) - }} - closeOptionsModal={()=>{ - this.setState({optionsModal: false}) - }} - closeProjectModal={()=>{ - this.setState({projectModal: false}) - }} - msgAlert={()=>{ - if(!isModalVisible) this.setState({isFlash: true}) - }} - /> ) } diff --git a/src/pages/Tender/ProjectsInvolved/index.tsx b/src/pages/Tender/ProjectsInvolved/index.tsx index 2d40af1..791834c 100644 --- a/src/pages/Tender/ProjectsInvolved/index.tsx +++ b/src/pages/Tender/ProjectsInvolved/index.tsx @@ -1,15 +1,16 @@ -import React, { useState, useRef } from 'react'; +import React, { useState, useRef, useEffect } from 'react'; import { Button, Tabs, Form, Input, Modal, Space, Checkbox, message, PageHeader, Popconfirm, Progress, Tag, Spin } from 'antd'; import ProTable, { ActionType, ProColumns } from '@ant-design/pro-table'; import { getSection, exitProject, getProject, getOther, supplierRegister, exitProjectPayCheck } from './service'; import { getSupplierUser } from '@/utils/SupplierList/service' -import { getProMethod } from '@/utils/session'; +import { getProMethod, getSessionUserData, getRA } from '@/utils/session'; import '@/assets/ld_style.less'; import { history } from 'umi'; import { followUpAProjectSupplier, getDicData } from '@/utils/session'; import { getDictName, getProjectTypeCode, getURLInformation, getUrlParam, getUrlRelativePath, isEmpty, isNotEmpty, proTableValueEnum, proTableValueEnumOther } from '@/utils/CommonUtils'; import { btnAuthority } from '@/utils/authority'; import ProList from '@ant-design/pro-list'; +import { MessageOutlined } from '@ant-design/icons'; const { TabPane } = Tabs; const { TextArea } = Input; @@ -36,6 +37,8 @@ const Index: React.FC<{}> = () => { const [sectionsVal, setSectionsVal] = useState([]); // 选中数组id const [organId, setOrganId] = useState(); // id const [projectId, setProjectId] = useState(); // id + + const [quitForm] = Form.useForm(); const MethodDict = getProMethod(); //获取采购方式 const modalHeight = (innerHeight * 96) / 100; @@ -120,6 +123,13 @@ const Index: React.FC<{}> = () => { dataIndex: 'projectName', initialValue: projectName ? projectName : void 0, }, + { + title: '我要咨询', + dataIndex: 'consult', + render: (text: any, record: any) => ( + - -
- - {isSendFile && - {setIsSendFile(false);sendFile()}} onCancel={()=>setIsSendFile(false)} > - -
{e.preventDefault()}} onClick={openLocalUploadFile} className={style.customer_service_uploadfile}> - {uploadFile.name} - {uploadFile.size / 1024>=1024?(uploadFile.size / 1024/1024).toFixed(1)+"M":(uploadFile.size / 1024).toFixed(1)+"K"} - -
-
-
-

您确定要上传文件么?【确定】后,文件将无法撤回!

-
- } - - ) -}) -ChatInput.propTypes = { - me:PropTypes.object.isRequired, - onSend:PropTypes.func.isRequired, - height:PropTypes.number.isRequired, - showPic:PropTypes.func.isRequired, - changeHeight:PropTypes.func.isRequired, - setPostion:PropTypes.func.isRequired, - isModalVisible:PropTypes.bool, - style:PropTypes.any, - chatUI:PropTypes.any, - supplierNo:PropTypes.any, - roleIds:PropTypes.any, -} -export default ChatInput; \ No newline at end of file diff --git a/src/pages/customerservice/support/conversation/components/ChatInput/style.module.css b/src/pages/customerservice/support/conversation/components/ChatInput/style.module.css deleted file mode 100644 index f96b8c3..0000000 --- a/src/pages/customerservice/support/conversation/components/ChatInput/style.module.css +++ /dev/null @@ -1,103 +0,0 @@ -.customer_service_content { - background-color: white; - box-sizing: border-box; - width: 100%; - height: 100%; - min-height: 150px; - display: flex; - flex-direction: column; - /* box-shadow: 0px -5px 10px -5px rgba(0, 0, 0, 0.2); */ -} -.customer_service_content .input_area { - height: 100%; - overflow-y:auto; - border: none; - outline: none; - padding: 10px; - margin-right: 10px; - font-size: 16px; - line-height: 22px; - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; - letter-spacing: 2px; -} -.customer_service_content .input_area .emoji{ - font-size: 20px; -} -.customer_service_content .input_area::placeholder { - color: #999; -} -.customer_service_content .but_area { - align-self: flex-end; - margin-bottom: 10px; - margin-right: 20px; -} -.customer_service_content .but:hover{ - cursor: pointer; -} -.customer_service_content .but { - padding: 3px 20px; - border: none; - outline: none; - -background-color: #2ba245; - background-color: rgb(235, 34, 32); - color: white; - border-radius: 3px; -} -.customer_service_content .but:active { - background-color: rgb(235, 34, 32); -} -.customer_service_content .but:disabled { - background-color: #ddd; - cursor:auto; -} -.customer_service_content .bar_block{ - width: 8px; - /* border-radius: 4px; */ - box-sizing: border-box; - background-color: white -} -.customer_service_uploadfile{ - border: 1px solid #CCC; - background-color: white; - width: 200px; - height: 120px; - position: relative; - -webkit-touch-callout: none; /* iOS Safari */ - -webkit-user-select: none; /* Chrome/Safari/Opera */ - -khtml-user-select: none; /* Konqueror */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* Internet Explorer/Edge */ - user-select: none; /* Non-prefixed version, currently - not supported by any browser */ -} -.customer_service_uploadfile:hover{ - cursor: pointer; -} -.customer_service_filename { - height: 45px; - margin-left: 10px; - margin-top: 5px; -} -.customer_service_filesize { - margin-left: 10px; - margin-top: 5px; - color: rgb(153,153,153); -} -.customer_service_ellipsis { - max-width: 150px; - overflow: hidden; - text-overflow: ellipsis; - display:-webkit-box; - -webkit-box-orient:vertical; - -webkit-line-clamp:2; - -white-space: nowrap; -} -.customer_service_uploadicon{ - float: right; - margin-top: 15px; - margin-right: 10px; - width: 40px; - height: 40px; - background-image: url('../../image/uploadFile.png'); - background-size: cover; -} \ No newline at end of file diff --git a/src/pages/customerservice/support/conversation/components/ChatRecordList/ChatRecordList.jsx b/src/pages/customerservice/support/conversation/components/ChatRecordList/ChatRecordList.jsx deleted file mode 100644 index b37c7d1..0000000 --- a/src/pages/customerservice/support/conversation/components/ChatRecordList/ChatRecordList.jsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react' -import style from './style.module.css' -import MsgItem from '../MsgItem/MsgItem' -import PropTypes from 'prop-types'; -import {Spin } from 'antd' - -const ChatRecordList = (props) => { - let { data, me, showPic, reConnect, onEarlier } = props - return ( - -
-
- -
- - {data.map((bubble) => ( - - ))} -
-
- ) -} -ChatRecordList.propTypes = { - loading: PropTypes.bool, - showPic: PropTypes.func, - contact: PropTypes.object, - data:PropTypes.array, - me:PropTypes.any, -} -export default ChatRecordList - diff --git a/src/pages/customerservice/support/conversation/components/ChatRecordList/style.module.css b/src/pages/customerservice/support/conversation/components/ChatRecordList/style.module.css deleted file mode 100644 index ba10780..0000000 --- a/src/pages/customerservice/support/conversation/components/ChatRecordList/style.module.css +++ /dev/null @@ -1,29 +0,0 @@ -.customer_service_content_list_area { - flex: 1; - overflow: auto; - -ms-overflow-style: none; - overflow: -moz-scrollbars-none; - padding: 10px; - background-color: rgb(245,245,245) -} -.customer_service_content_list_area .load_more { - display: flex; - justify-content: center; - align-items: center; - height: 20px; - width: 100px; - text-align: center; - color: #999; - background-color: #f1f1f1; - font-size: 12px; - margin: 0 auto; - border: none; - outline: none; - border-radius: 10px; - -moz-user-select: none; - -khtml-user-select: none; - user-select: none; -} -.customer_service_content_list_area .load_more:hover { - cursor: pointer; -} \ No newline at end of file diff --git a/src/pages/customerservice/support/conversation/components/ChatToolsBar/ChatToolBar.jsx b/src/pages/customerservice/support/conversation/components/ChatToolsBar/ChatToolBar.jsx deleted file mode 100644 index 9573864..0000000 --- a/src/pages/customerservice/support/conversation/components/ChatToolsBar/ChatToolBar.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import style from './style.module.css' -import EmojiPopover from '../EmojiPopover/EmojiPopover' -import ImgPopover from '../ImgPopover/ImgPopover' -import FilePopover from '../FilePopover/FilePopover' -import RatePopover from '../RatePopover/RatePopover' - -export default function ChatToolBar(props) { - const { tools = [], - onEmojiSelect, - onImage, - onFile, - onRate, - isRateModalVisible, - closeRateModal, - } = props - return ( -
- {typeof onEmojiSelect === 'function' && ( - - )} - {typeof onImage === 'function' && } - {typeof onFile === 'function' && } - {typeof onRate === 'function' && } - {/* */} - {tools.map((tool) => tool)} -
- ) -} - -ChatToolBar.propTypes = { - tools: PropTypes.array, - onEmojiSelect: PropTypes.func, - onImage: PropTypes.func, - onFile:PropTypes.func, -} diff --git a/src/pages/customerservice/support/conversation/components/ChatToolsBar/style.module.css b/src/pages/customerservice/support/conversation/components/ChatToolsBar/style.module.css deleted file mode 100644 index 3b95871..0000000 --- a/src/pages/customerservice/support/conversation/components/ChatToolsBar/style.module.css +++ /dev/null @@ -1,8 +0,0 @@ -.customer_service_content { - height: 30px; - display: flex; - align-items: center; - padding: 0px 10px; - margin-top: 8px; - margin-right: 10px; -} \ No newline at end of file diff --git a/src/pages/customerservice/support/conversation/components/EmojiPopover/EmojiPopover.jsx b/src/pages/customerservice/support/conversation/components/EmojiPopover/EmojiPopover.jsx deleted file mode 100644 index a5898e8..0000000 --- a/src/pages/customerservice/support/conversation/components/EmojiPopover/EmojiPopover.jsx +++ /dev/null @@ -1,85 +0,0 @@ -import React, { useEffect, useState } from 'react' -import PropTypes from 'prop-types' -import style from './style.module.css' -import { cns } from '../../utils/toClass' - -const emojiList = [ - '😃', - '😄', - '😁', - '😆', - '😅', - '😂', - '😊', - '😇', - '🙂', - '🙃', - '😉', - '😌', - '😘', - '😗', - '😙', - '😚', - '😋', - '😛', - '😝', - '😜', - '😎', - '😳', - '😱', - '😨', - '😰', - '😥', - '😓', - -] -export default function EmojiPopover(props) { - const {onSelect} = props - const [visible, setVisible] = useState(false) - - const switchEmojiModal = (vis) => { - setVisible(vis) - } - - const iconClickHandle = (emoji) => { - onSelect(emoji) - } - const emojiFn = (e)=>{ - if (e.target.getAttribute('datatype') === 'emoji') { - switchEmojiModal(true) - } else { - switchEmojiModal(false) - } - } - useEffect(() => { - addEventListener('click', emojiFn) - return () => { - removeEventListener('click',emojiFn) - } - }, []) - - return ( -
-
- {emojiList.map((emoji) => ( - - {emoji} - - ))} -
-
-
- ) -} - -EmojiPopover.propTypes = { - onSelect: PropTypes.func.isRequired, -} diff --git a/src/pages/customerservice/support/conversation/components/EmojiPopover/style.module.css b/src/pages/customerservice/support/conversation/components/EmojiPopover/style.module.css deleted file mode 100644 index 83064eb..0000000 --- a/src/pages/customerservice/support/conversation/components/EmojiPopover/style.module.css +++ /dev/null @@ -1,56 +0,0 @@ -.customer_service_content { - position: relative; -} -.customer_service_content .emoji_wrapper { - position: absolute; - bottom: -90px; - left: 30px; - display: flex; - flex-wrap: wrap; - width: 400px; - background-color: white; - border: solid 1px #aaaaaa; - border-radius: 5px; - padding: 3px; -} -.customer_service_content .emoji_wrapper::before { - content: ''; - border: solid 8px transparent; - border-right: solid 8px #aaaaaa; - position: absolute; - top: 50%; - left: -16px; -} -.customer_service_content .emoji_wrapper::after { - content: ''; - border: solid 8px transparent; - border-right: solid 8px white; - position: absolute; - top: 50%; - left: -14.5px; -} -.customer_service_content .emoji_item { - font-size: 22px; - box-sizing: border-box; - padding: 0px 7px 0px 3px; -} -.customer_service_content .emoji_item:hover { - background-color: #f1f1f1; - border-radius: 50%; - cursor: pointer; -} -.customer_service_content .tool_icon { - height: 20px; - width: 20px; - background-size: 100%; - background-repeat: no-repeat; - background-position: center; - margin-right: 10px; -} -.customer_service_content .emoji { - background-image: url('../../image/emoji_black.png'); -} -.customer_service_content .emoji:hover { - cursor: pointer; - background-image: url('../../image/emoji_light.png'); -} diff --git a/src/pages/customerservice/support/conversation/components/FilePopover/FilePopover.jsx b/src/pages/customerservice/support/conversation/components/FilePopover/FilePopover.jsx deleted file mode 100644 index 4d1cdad..0000000 --- a/src/pages/customerservice/support/conversation/components/FilePopover/FilePopover.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import React, {useRef, useState } from 'react' -import PropTypes from 'prop-types' -import style from './style.module.css' -import { message, Modal, Tooltip} from 'antd'; -export default function FilePopover(props) { - const { onFile } = props - const fileSelector = useRef() - const isUpload = (file) => { - // /* - // let name = file.name; - // let type; - // if (name.lastIndexOf(".") > 0) { - // type = name - // .substr(name.lastIndexOf(".") + 1, name.length) - // .toLocaleLowerCase(); - // } - // let isType = ["pdf", "png", "jpg", "jpeg"].indexOf(type) === -1; - // if (isType) { - // message.error("上传格式错误"); - // }*/ - const isType = false - const isLt50M = file.size / 1024 / 1024 < 20; - if (!isLt50M) { - message.error("文件大小不能超过20MB"); - } - const bool = !isType && isLt50M; - return bool - } - - const beforeUpload = (file) => { - let bool = isUpload(file) - if (bool) { - onFile(file) - } - return false; - }; - const selectImg = () => { - if (fileSelector.current) { - fileSelector.current.value='' - fileSelector.current.click() - } - } - - const fileHandle = (event) => { - const files = event.target.files - //console.log(files[0]) - // if(files && files[0] && (files[0].type.indexOf('application/')!=-1 || files[0].type.indexOf('text/plain')!=-1 )){ - // beforeUpload(files[0]) - // }else{ - // message.error('上传文件格式不支持') - // } - beforeUpload(files[0]) - } - return ( -
- -
- ) -} - -FilePopover.propTypes = { - onFile: PropTypes.func.isRequired, -} diff --git a/src/pages/customerservice/support/conversation/components/FilePopover/style.module.css b/src/pages/customerservice/support/conversation/components/FilePopover/style.module.css deleted file mode 100644 index e9d5bca..0000000 --- a/src/pages/customerservice/support/conversation/components/FilePopover/style.module.css +++ /dev/null @@ -1,16 +0,0 @@ -.customer_service_content { - width: 20px; - height: 20px; - margin-right: 10px; - background-image: url('../../image/file_black.png'); - background-size: 100%; - background-position: center; - background-repeat: no-repeat; -} -.customer_service_content:hover { - background-image: url('../../image/file_light.png'); - cursor: pointer; -} -.customer_service_content > input { - display: none; -} diff --git a/src/pages/customerservice/support/conversation/components/ImgPopover/ImgPopover.jsx b/src/pages/customerservice/support/conversation/components/ImgPopover/ImgPopover.jsx deleted file mode 100644 index 64f6821..0000000 --- a/src/pages/customerservice/support/conversation/components/ImgPopover/ImgPopover.jsx +++ /dev/null @@ -1,86 +0,0 @@ -import React, {useRef } from 'react' -import PropTypes from 'prop-types' -import style from './style.module.css' -import { message } from "antd"; -//import { customerserviceAPI as API} from '@/services/customerservice'; - -export default function ImgPopover(props) { - const { onImage } = props - const fileSelector = useRef() - - const isUpload = (file) => { - /* - let name = file.name; - let type; - if (name.lastIndexOf(".") > 0) { - type = name - .substr(name.lastIndexOf(".") + 1, name.length) - .toLocaleLowerCase(); - } - let isType = ["pdf", "png", "jpg", "jpeg"].indexOf(type) === -1; - if (isType) { - message.error("上传格式错误"); - }*/ - const isType = false - const isLt50M = file.size / 1024 / 1024 < 50; - if (!isLt50M) { - message.error("文件大小不能超过50MB"); - } - const bool = !isType && isLt50M; - return bool - } - - const beforeUpload = (file) => { - let bool = isUpload(file) - if (bool) { - onImage(file) - /* - const formData = new FormData(); - console.log(file.getOriginalFilename()) - formData.append('multipartFiles', file); - API.fileUpload({ - multipartFiles: formData - }).then(res => { - if (res && res.data && res.data.length>0 && res.data[0].sysStorageVO && res.data[0].sysStorageVO.filePath!=undefined && res.data[0].sysStorageVO.filePath!=null&& res.data[0].sysStorageVO.filePath!='') { - console.log(res) - console.log(res.data) - - //文档中心返回的filePath重写content - - }else{ - console.log(res && res.message) - } - })*/ - } - return false; - }; - const selectImg = () => { - if (fileSelector.current) { - fileSelector.current.value='' - fileSelector.current.click() - } - } - - const fileHandle = (event) => { - const files = event.target.files - if(files && files[0] && files[0].type.indexOf('image/')!=-1){ - beforeUpload(files[0]) - }else{ - message.error("上传格式错误"); - } - } - return ( -
- -
- ) -} - -ImgPopover.propTypes = { - onImage: PropTypes.func.isRequired, -} diff --git a/src/pages/customerservice/support/conversation/components/ImgPopover/style.module.css b/src/pages/customerservice/support/conversation/components/ImgPopover/style.module.css deleted file mode 100644 index 7c95726..0000000 --- a/src/pages/customerservice/support/conversation/components/ImgPopover/style.module.css +++ /dev/null @@ -1,16 +0,0 @@ -.customer_service_content { - width: 20px; - height: 20px; - margin-right: 10px; - background-image: url('../../image/pic_black.png'); - background-size: 100%; - background-position: center; - background-repeat: no-repeat; -} -.customer_service_content:hover { - background-image: url('../../image/pic_light.png'); - cursor: pointer; -} -.customer_service_content > input { - display: none; -} diff --git a/src/pages/customerservice/support/conversation/components/ImgPreview/ImgPreview.jsx b/src/pages/customerservice/support/conversation/components/ImgPreview/ImgPreview.jsx deleted file mode 100644 index 94ca9e6..0000000 --- a/src/pages/customerservice/support/conversation/components/ImgPreview/ImgPreview.jsx +++ /dev/null @@ -1,56 +0,0 @@ -import React, { useRef, useState, useEffect } from 'react' -import PropTypes from 'prop-types' -import {handleElement } from '../../utils/utils' -import { Button,} from 'antd'; -import { CloseOutlined, BorderOutlined, MinusOutlined } from '@ant-design/icons'; -import style from './style.module.css' - -export default function ImgPreview(props) { - const { isImgPreviewVisible, imageParams, closePreview, maxSizePreview, normalSizePreview,} = props - const imgRef = useRef() - const [scales,setScales] = useState(1) - //const refs = useRef() - - const changeScales = (a) =>{ - setScales(a) - } - useEffect(()=>{ - if(isImgPreviewVisible) { - var html=document.querySelector("html"); - var body=document.querySelector("body"); - html.style.overflow="hidden"; - body.style.overflow="hidden"; - } - - },[isImgPreviewVisible]) - - return ( - <> -
-
-
- handleElement.handleStopDrag(e)} - onMouseDown={(e) => { e.persist(); handleElement.handleDrag(e,imgRef) }} - onContextMenu={(e)=>e.preventDefault()} - onWheel={(e)=>handleElement.handleZoom(e, imgRef, scales, changeScales)} - /> -
- - ) -} - -ImgPreview.propTypes = { - isImgPreviewVisible:PropTypes.bool, - closePreview:PropTypes.func, - maxSizePreview:PropTypes.func, - normalSizePreview:PropTypes.func, - imageParams:PropTypes.any, -} diff --git a/src/pages/customerservice/support/conversation/components/ImgPreview/style.module.css b/src/pages/customerservice/support/conversation/components/ImgPreview/style.module.css deleted file mode 100644 index 87998db..0000000 --- a/src/pages/customerservice/support/conversation/components/ImgPreview/style.module.css +++ /dev/null @@ -1,6 +0,0 @@ -.customer_service_btn{ - height: 20px; - background-color: rgb(245, 245, 245); - position: relative; - align-self: flex-end; -} diff --git a/src/pages/customerservice/support/conversation/components/MsgBubble/MsgBubble.jsx b/src/pages/customerservice/support/conversation/components/MsgBubble/MsgBubble.jsx deleted file mode 100644 index b13631b..0000000 --- a/src/pages/customerservice/support/conversation/components/MsgBubble/MsgBubble.jsx +++ /dev/null @@ -1,105 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import style from './style.module.css' -import { cns } from '../../utils/toClass' -import {parseBase64ToBlob,downloadFile} from '../../utils/utils' -import { customerserviceAPI as API} from '@/services/customerservice'; -import { message, Tooltip } from "antd"; -//import { downloadFile } from "@utils/utils"; - -export default function MsgBubble(props) { - const { data, isMe, showPic, reConnect} = props - - const onDownload = (fileId) => { - API.getSecretKey({fileId: fileId}).then(res => { - if(res.success==true){ - API.getDownload({ fileId: fileId, documentSecretKey: res.data }).then(buffer => { - const dotIndex = data.content.name.lastIndexOf('.') - const ext = data.content.name.substr(dotIndex) - const fileName = data.content.name.substring(0, dotIndex) - downloadFile(buffer, fileName, ext) - }) - }else{ - message.warning(res.message) - } - }) - } - const openFile = ()=>{ - const element = document.createElement("a"); - if(data.content.content.indexOf('base64')!=-1){ - var arr = data.content.content.split(',') //分割为数组,分割到第一个逗号 - let mime = arr[0].match(/:(.*?);/)[1] //获取分割后的base64前缀中的类型 - let myBlob = parseBase64ToBlob(arr[1], mime); - element.href = URL.createObjectURL(myBlob); - element.download = data.content.name; - document.body.appendChild(element); // Required for this to work in FireFox - element.click(); - document.body.removeChild(element); - window.URL.revokeObjectURL(myBlob); //释放掉blob对象 - }else{ - if(data.content.fileId!=''){ - onDownload(data.content.fileId) - } - } - } - const renderContent = (message) => { - switch (message.type) { - case 'dom': - return( -
您的连接已超时,请点击这里重新连接
- ) - case 'text': - return( -
{e.preventDefault()}} dangerouslySetInnerHTML={{ __html: message.content }} /> - ) - case 'image': - //console.log(message.content.content) - return ( -
{e.preventDefault()}}> - { - let src = message.content.content - let realWidth = message.content.realWidth - let realHeight = message.content.realHeight - let msgWidth = message.content.msgWidth - let msgHeight = message.content.msgHeight - let previewidth = message.content.previewidth - let previewHeight = message.content.previewHeight - let param = { - src, realWidth, realHeight, msgWidth, msgHeight, previewidth, previewHeight - } - showPic(param) - }} /> -
- ) - case 'file': - return( - -
{e.preventDefault()}} className={style.customer_service_uploadfile} onClick={openFile}> - {message.content.name} - {message.content.size} - -
-
- ) - default: - break - } - - } - return ( -
- {renderContent(data)} -
- ) -} - -MsgBubble.propTypes = { - data: PropTypes.object.isRequired, - isMe: PropTypes.bool.isRequired, - showPic: PropTypes.func.isRequired -} diff --git a/src/pages/customerservice/support/conversation/components/MsgBubble/style.module.css b/src/pages/customerservice/support/conversation/components/MsgBubble/style.module.css deleted file mode 100644 index 2179c67..0000000 --- a/src/pages/customerservice/support/conversation/components/MsgBubble/style.module.css +++ /dev/null @@ -1,84 +0,0 @@ -.customer_service_noselect{ - -webkit-touch-callout: none; /* iOS Safari */ - -webkit-user-select: none; /* Chrome/Safari/Opera */ - -khtml-user-select: none; /* Konqueror */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* Internet Explorer/Edge */ - user-select: none; /* Non-prefixed version, currently - not supported by any browser */ -} -.customer_service_text_content { - background-color: rgb(216,216,216); - color: #333; - padding: 8px; - border-radius: 3px; - max-width: 100%; - word-wrap: break-word; - word-break: break-all; - font-size: 15px; - font-family:sans-serif; - letter-spacing: 2px; -} -.customer_service_uploadfile{ - border: 1px solid #CCC; - background-color: white; - width: 200px; - height: 120px; - position: relative; - -webkit-touch-callout: none; /* iOS Safari */ - -webkit-user-select: none; /* Chrome/Safari/Opera */ - -khtml-user-select: none; /* Konqueror */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* Internet Explorer/Edge */ - user-select: none; /* Non-prefixed version, currently - not supported by any browser */ -} -.customer_service_uploadfile:hover{ - cursor: pointer; -} -.customer_service_filename { - height: 45px; - margin-left: 10px; - margin-top: 5px; -} -.customer_service_filesize { - margin-left: 10px; - margin-top: 5px; - color: rgb(153,153,153); -} -.customer_service_ellipsis { - max-width: 150px; - overflow: hidden; - text-overflow: ellipsis; - display:-webkit-box; - -webkit-box-orient:vertical; - -webkit-line-clamp:2; - -white-space: nowrap; -} -.customer_service_uploadicon{ - float: right; - margin-top: 15px; - margin-right: 10px; - width: 40px; - height: 40px; - background-image: url('../../image/uploadFile.png'); - background-size: cover; -} -.customer_service_arrow { - position: relative; -} -.customer_service_arrow::after { - content: ''; - position: absolute; - width: 8px; - height: 8px; - background-color: rgb(216,216,216); - transform: rotate(45deg); - top: 8px; -} -.customer_service_arrow_left::after { - left: -4px; -} -.customer_service_arrow_right::after { - right: -4px; -} \ No newline at end of file diff --git a/src/pages/customerservice/support/conversation/components/MsgItem/MsgItem.jsx b/src/pages/customerservice/support/conversation/components/MsgItem/MsgItem.jsx deleted file mode 100644 index bd7e38b..0000000 --- a/src/pages/customerservice/support/conversation/components/MsgItem/MsgItem.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import style from './style.module.css' -import MsgBubble from '../MsgBubble/MsgBubble' -//import dayjs from 'dayjs' -import moment from 'moment'; - - -export default function MsgItem(props) { - const { data, me ,showPic, reConnect } = props - const isMe = data.user.id === me.id - - const isValidDate= (date)=>{ - return date instanceof Date && !isNaN(date.getTime()) - } - - return ( -
-
- -
-
-
- {data.user.name} - - {/*moment(data.date).format('MM-DD HH:mm:ss')*/} - {isValidDate(new Date(data.date))?moment(data.date).format('MM-DD HH:mm:ss'):data.date} - -
- {} -
-
- ) -} - -MsgItem.propTypes = { - data: PropTypes.object.isRequired, - me: PropTypes.object.isRequired, - showPic: PropTypes.func.isRequired -} diff --git a/src/pages/customerservice/support/conversation/components/MsgItem/style.module.css b/src/pages/customerservice/support/conversation/components/MsgItem/style.module.css deleted file mode 100644 index 3c82dde..0000000 --- a/src/pages/customerservice/support/conversation/components/MsgItem/style.module.css +++ /dev/null @@ -1,39 +0,0 @@ -@import '../../style/common.css'; - -.customer_service_content { - padding-top: 20px; - display: flex; -} -.customer_service_content .avatar { - min-width: 35px; - width: 35px; - padding-top: 14px; - -moz-user-select: none; - -khtml-user-select: none; - user-select: none; -} -.customer_service_content .avatar > img { - width: 100%; - height: auto; - border-radius: 50%; - overflow: hidden; -} -.customer_service_content .text_area { - flex: 1; - padding: 0px 10px; - display: flex; - flex-direction: column; - overflow: hidden; - max-width: 60%; -} -.customer_service_content .comment_area { - font-size: 12px; - color: #999; - padding-bottom: 4px; - -moz-user-select: none; - -khtml-user-select: none; - user-select: none; -} -.customer_service_content .date_text { - margin-left: 10px; -} diff --git a/src/pages/customerservice/support/conversation/components/RatePopover/RatePopover.jsx b/src/pages/customerservice/support/conversation/components/RatePopover/RatePopover.jsx deleted file mode 100644 index 9ea98f0..0000000 --- a/src/pages/customerservice/support/conversation/components/RatePopover/RatePopover.jsx +++ /dev/null @@ -1,41 +0,0 @@ -import React, {useRef, useState } from 'react' -import PropTypes from 'prop-types' -import style from './style.module.css' -import { HeartFilled } from '@ant-design/icons'; -import { Rate, Button, Modal, Tooltip } from 'antd'; -export default function RatePopover(props) { - - const { onRate, isRateModalVisible, closeRateModal } = props - const fileSelector = useRef() - const [score, setScore] = useState(0) - const [rateModal, setRateModal] = useState(false) - - return ( - <> -
{ setScore(0); setRateModal(true)}} className={style.customer_service_content}/> - {(isRateModalVisible || rateModal) && - { - closeRateModal && closeRateModal() - setRateModal(false) - }} - footer={[ - , - ]} - > - { - setScore(value) - }}/> - - } - - ) -} -RatePopover.propTypes = { - onRate: PropTypes.func.isRequired, -} diff --git a/src/pages/customerservice/support/conversation/components/RatePopover/style.module.css b/src/pages/customerservice/support/conversation/components/RatePopover/style.module.css deleted file mode 100644 index 4162967..0000000 --- a/src/pages/customerservice/support/conversation/components/RatePopover/style.module.css +++ /dev/null @@ -1,45 +0,0 @@ -/* .customer_service_btn { - width: 12px; - height: 12px; - line-height: 12px; - margin-left: 5px; - position: relative; - background-color: #b30000; - transform: rotate(45deg); -} -.customer_service_btn::before, -.customer_service_btn::after { - position: absolute; - content: ''; - background-color: #b30000; - top: 0px; - left: -50%; - width: 100%; - height: 100%; - border-radius: 50%; -} - -.customer_service_btn::after { - left: 0; - top: -50%; -} -.customer_service_btn:hover{ - cursor: pointer; -} */ - -.customer_service_content { - width: 20px; - height: 20px; - margin-right: 10px; - background-image: url('../../image/rate_black.png'); - background-size: 100%; - background-position: center; - background-repeat: no-repeat; -} -.customer_service_content:hover { - background-image: url('../../image/rate_light.png'); - cursor: pointer; -} -.customer_service_content > input { - display: none; -} diff --git a/src/pages/customerservice/support/conversation/components/ScrollWrapper/ScrollWrapper.jsx b/src/pages/customerservice/support/conversation/components/ScrollWrapper/ScrollWrapper.jsx deleted file mode 100644 index e14643c..0000000 --- a/src/pages/customerservice/support/conversation/components/ScrollWrapper/ScrollWrapper.jsx +++ /dev/null @@ -1,145 +0,0 @@ -import React, { - useEffect, - useLayoutEffect, - useRef, - useState, - useMemo -} from 'react' -import { cns } from '../../utils/toClass' -import styles from './style.module.css' -import PropTypes from 'prop-types'; - -const ScrollWrapper = (Comp) => (props) => { - - //var data = this.props.data - const scrollView = useRef() - const thumb = useRef() - - const [viewPortH, setViewPortH] = useState(1) - const [scrollH, setScrollH] = useState(1) - const [scrollT, setScrollT] = useState(0) - const [scrollR, setScrollR] = useState(1) - // const [isReset, setIsReset] = useState(false) - const [isPressing, setIsPressing] = useState(false) - const [showScrollBar, setShowScrollBar] = useState(false) - - const [shadowStyle, setShadowStyle] = useState('') - -let { data, viewH, scrollToBottom, switchFlag, style, isMove, isModalVisible, loading, } = this? this.props : props - -const scrollHandle = () => { - if (scrollView.current) { - setScrollT(scrollView.current.scrollTop) - } -} - -const mouseUpHandle = (e) => { - setIsPressing(false) -} - -const mouseDownHandle = (e) => { - setIsPressing(true) -} - -const mouseMovingHandle = (e) => { - e.persist() - if (isPressing !== true) return - if (scrollT < 0) { - setScrollT(0) - } else if (scrollT > scrollH - viewPortH) { - setScrollT(scrollH - viewPortH) - } else { - setScrollT((preScrollT) => preScrollT + e.movementY / scrollR) - } -} - -const thumbHeight = () => viewPortH * scrollR - -const transH = () => scrollT * scrollR - -useEffect(() => { - addEventListener('mouseup', mouseUpHandle) - return () => { - removeEventListener('mouseup', mouseUpHandle) - } -}, []) - - useEffect(() => { - if(isModalVisible){ - if (scrollView.current) { - setViewPortH(scrollView.current.offsetHeight) - setScrollH(scrollView.current.scrollHeight) - } - } - }, [data, isModalVisible, viewH]) - - useLayoutEffect(() => { - if (scrollView.current) { - scrollView.current.scrollTop = scrollT - } - - if (showScrollBar !== true) return - - if (scrollT <= 0) { - setShadowStyle(styles.shadow_bottom) - } else if (scrollT >= scrollH - viewPortH) { - setShadowStyle(styles.shadow_top) - } else { - setShadowStyle(styles.shadow_vertical) - } - }, [scrollT]) - - useEffect(() => { - const sr = scrollH==0? 0: (viewPortH / scrollH) - setScrollR(sr) - if (viewPortH < scrollH) { - setShowScrollBar(true) - } else { - setShowScrollBar(false) - } - }, [scrollH, viewPortH]) - - useEffect(() => { - if (scrollToBottom) { - setScrollT(scrollH - viewPortH) - }else{ - setScrollT(0) - } - }, [scrollR, switchFlag]) - - return ( -
-
- {useMemo(() => , [data, loading, style])} -
- -
- ) -}; - -ScrollWrapper.propTypes = { - data: PropTypes.object, -}; -export default ScrollWrapper; \ No newline at end of file diff --git a/src/pages/customerservice/support/conversation/components/ScrollWrapper/style.module.css b/src/pages/customerservice/support/conversation/components/ScrollWrapper/style.module.css deleted file mode 100644 index f54b3e8..0000000 --- a/src/pages/customerservice/support/conversation/components/ScrollWrapper/style.module.css +++ /dev/null @@ -1,45 +0,0 @@ -.customer_service_wrapper_content { - display: flex; - box-sizing: border-box; -} -.customer_service_wrapper_content .list_block { - flex: auto; - overflow: auto; - overflow-x: hidden; - scrollbar-width: none; /* Firefox */ - -ms-overflow-style: none; /* IE 10+ */ - box-sizing: border-box; -} -.customer_service_wrapper_content .list_block::-webkit-scrollbar { - display: none; /* Chrome Safari */ -} -.customer_service_wrapper_content .scroll_bar_block { - width: 8px; - /* border-radius: 4px; */ - overflow: hidden; - transition: all 0.3s; - box-sizing: border-box; - background-color: rgb(231,229,229); -} -.customer_service_wrapper_content .scroll_bar_block:hover { - background-color: #eee; -} -.customer_service_wrapper_content .scroll_thumb { - display: block; - width: 100%; - background-color: #aaa; - border-radius: 4px; -} -.customer_service_wrapper_content .scroll_thumb:hover { - cursor: pointer; -} -.customer_service_wrapper_content .shadow_top { - box-shadow: inset 0px 5px 10px -5px rgba(0, 0, 0, 0.2); -} -.customer_service_wrapper_content .shadow_bottom { - box-shadow: inset 0px -5px 10px -5px rgba(0, 0, 0, 0.2); -} -.customer_service_wrapper_content .shadow_vertical { - box-shadow: inset 0px 5px 10px -5px rgba(0, 0, 0, 0.2), - inset 0px -5px 10px -5px rgba(0, 0, 0, 0.2); -} diff --git a/src/pages/customerservice/support/conversation/components/SeactList/index.jsx b/src/pages/customerservice/support/conversation/components/SeactList/index.jsx deleted file mode 100644 index a6fa0ab..0000000 --- a/src/pages/customerservice/support/conversation/components/SeactList/index.jsx +++ /dev/null @@ -1,285 +0,0 @@ -import React, { useState, useImperativeHandle, forwardRef } from 'react'; -import { - Card, - Form, - Row, - Col, - Input, - Button, - DatePicker, - Select, - Cascader, - TreeSelect, - Tooltip, - InputNumber -} from 'antd'; -import { FormLabelCenterBoxes } from './index.styled'; -import { DoubleRightOutlined } from '@ant-design/icons'; -import PropTypes from 'prop-types'; -import moment from 'moment'; -const { TreeNode } = TreeSelect; -const { Option, OptGroup } = Select; -const { RangePicker } = DatePicker; -const layout = { - labelCol: { span: 8 }, - wrapperCol: { span: 16 }, -}; -function SeactList(props, ref) { - const [form] = Form.useForm(); - const [isShow, setIsShow] = useState(false); - const { title, colSpan = 6, labelCenter = false, ResetFlag = true, extraButton, extra, bordered=false } = props; - useImperativeHandle(ref, () => { - return { - onSubmit: () => { - form.submit(); - }, - form, - }; - }); - const renderTreeNodes = (data) => - data.map((item) => { - const title = ( - <> - {item.operName} - - ); - if (item.children) { - return ( - - {renderTreeNodes(item.children)} - - ); - } - return ; - }); - - const onRangePickerChange = (dates, value) => { - let obj = {}; - obj[value] = dates; - form.setFieldsValue({ ...obj }); - props.onRangePickerChange && props.onRangePickerChange(obj); - }; - - const beforeMonthdisabledDate = (current) => { - return current > moment().subtract(1, 'months').endOf('month'); - }; - - const getformType = (item) => { - //设置默认值 - const { value, defaultValue } = item; - let obj = {}; - if (defaultValue) { - let result = form.getFieldValue(value); - if (!result) { - obj[value] = defaultValue ? defaultValue : null; - form.setFieldsValue({ ...obj }); - } - } - let formType = ; - let type = item.type; - let OptionList = item.OptionList ? item.OptionList : []; - if (type === 'input') { - formType = ; - } else if (type === 'RangePicker') { - formType = ( - { - onRangePickerChange(dates, item.value); - }} - allowClear={false} - /> - ); - } else if (type === 'Select') { - const { valueKey = 'value', labelKey = 'label' } = item; - formType = ( - - ); - } else if (type === 'monthSelect') { - formType = ; - } else if (type === 'Cascader') { - formType = ; - } else if (type === 'DatePicker') { - formType = ( - - ); - } else if (type === 'TreeSelect') { - formType = {renderTreeNodes(item.data)}; - } else if (type === 'SelectGroup') { - const { valueKey = 'value', labelKey = 'label', childrenKey = 'children', OptionList } = item; - formType = ( - - ); - } else if (type === 'daySelect') { - formType = ( - - ); - } else if (type === 'beforeMonthSelect') { - formType = ( - - ); - } else if (type === 'Range') { - formType = ( - - - ~ - - - ); - } - const label = (value) => { - return ( - - {value} - - ); - }; - return ( - - {formType} - - ); - }; - const formRef = React.createRef(); - - // 下拉框选择后回调,用于多个下拉框级联 - const onSelected = (itemValue, value) => { - if (props.getSelectedValue) { - props.getSelectedValue(itemValue, value); - } - }; - - const onReset = () => { - //清空时不清空设置的默认值 - const obj = form.getFieldsValue(); - form.setFieldsValue({ ...obj }); - formRef.current.resetFields(); - if (props.onReset) { - props.onReset(); - } - }; - const onFinish = (values) => { - if (props.onSearch) { - props.onSearch(values); - } - }; - const { dataList = [] } = props || {}; - const Center = ( - // { - // setIsShow(!isShow); - // }} - // > - // - // - // ) - // } - // > -
- - {dataList.map((item, index) => { - return ( - - {getformType(item)} - - ); - })} - 6 - ? dataList.length >= 3 - ? '24' - : colSpan - : dataList.length > 3 - ? '24' - : colSpan - } - style={{ - textAlign: - colSpan > 6 - ? dataList.length >= 3 - ? 'center' - : 'left' - : dataList.length > 3 - ? 'center' - : 'left', - }} - > - - {ResetFlag && } - {extraButton && extraButton()} - - -
- //
- ); - return labelCenter ? {Center} : Center; -} -SeactList.propTypes = { - dataList: PropTypes.array, - title: PropTypes.string, - colSpan: PropTypes.number, - extra: PropTypes.boolean, - bordered: PropTypes.boolean, -}; -export default forwardRef(SeactList); diff --git a/src/pages/customerservice/support/conversation/components/SeactList/index.styled.js b/src/pages/customerservice/support/conversation/components/SeactList/index.styled.js deleted file mode 100644 index f294e9f..0000000 --- a/src/pages/customerservice/support/conversation/components/SeactList/index.styled.js +++ /dev/null @@ -1,8 +0,0 @@ - -import styled from 'styled-components'; - -export const FormLabelCenterBoxes = styled.div` - .ant-form-item-label{ - text-align: center - } -`; \ No newline at end of file diff --git a/src/pages/customerservice/support/conversation/constants.js b/src/pages/customerservice/support/conversation/constants.js deleted file mode 100644 index e3d265e..0000000 --- a/src/pages/customerservice/support/conversation/constants.js +++ /dev/null @@ -1,31 +0,0 @@ -//保存websocket对象 -export const CUSTOMERSERVICE_WEBSOCKET = [] -//消息提醒计时器 -export const CUSTOMERSERVICE_messageAlert = { - timeout: null, - oldTitle:'招投标系统', - time: 0, - num: 0, - showMessage(msg){ - CUSTOMERSERVICE_messageAlert.num++; - if(CUSTOMERSERVICE_messageAlert.num==1){ - CUSTOMERSERVICE_messageAlert.timeout = setInterval(function(){ - CUSTOMERSERVICE_messageAlert.time ++; - let title = ''; - if(CUSTOMERSERVICE_messageAlert.time % 2 === 0){ - title = '[   ]我的咨询'; - }else{ - title = '['+msg+']我的咨询'; - } - document.getElementsByTagName('title')[0].innerText = title; - },500); - } - - - }, - stopMessage(){ - document.getElementsByTagName('title')[0].innerText = CUSTOMERSERVICE_messageAlert.oldTitle; - CUSTOMERSERVICE_messageAlert.num = 0; - clearInterval(CUSTOMERSERVICE_messageAlert.timeout); - } -} \ No newline at end of file diff --git a/src/pages/customerservice/support/conversation/image/emoji_black.png b/src/pages/customerservice/support/conversation/image/emoji_black.png deleted file mode 100644 index 0d7a15cb52e5e5c3bd2d167663574ee116a90c16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9026 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 l*E_RDxl8}QPc>hWZ_;} diff --git a/src/pages/customerservice/support/conversation/image/emoji_light.png b/src/pages/customerservice/support/conversation/image/emoji_light.png deleted file mode 100644 index 39123b0a64a6d444f91392d13355713dca7298b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9282 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 diff --git a/src/pages/customerservice/support/conversation/image/file_light.png b/src/pages/customerservice/support/conversation/image/file_light.png deleted file mode 100644 index 0276bcbf89495d75abb5f6dc3c9322760b833602..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3013 zcmeH}{Xf%tAIG;fHA*d0ok;td+fW@hCsuB@ncNi}33Es}?sbTTBzKD2DlcX!7@%Y~djf>nzfTN-Y)y6~;@vNwohymV@bTPx z=bn*_G+Zl(|GbFrN=9D@ zEjOUgUU&^q(mb3)bB?IiWZ7wRdVK>m!+PB6I7i3~*>lx{~b2oU^pDqmxm}nIp-g;y$)qB2IaJj?C)?jMfhWy&3!u`-`G_yRx6R3FM)-7v>44j&^eAJ4v6r}DfEysZ~8IMB#chP|Me z>8fjq;{58PTIwGzVf1)GYc=)0>0|kda7CVl=y|8#tV<@X*$919yBQ__BbK}-%&}sO zS->gqKUiU{k(K*LEV{XuRpzaSg@V;zUk(_J;NT`(c_9PK2~i)_XJ(=H3y+V^pGbCi zIT78Vn;!vz6)HIDQty_~wjAjwBx}6DuKFjK$T7fhT18Zh#b^;=_L2w7O>us)Lh zX%ykAU(_lfD{!?PqP2zMKfe%|it3>>^1GQ^v8BTf_TxsCD7Lmk;{ESYQKi8JUEFPF zZrEJB!WHk0U_>Lq%!9nEqO8v{R)$6Hd;?wV*%Os;vF8Lu8^vK2(;~0G|8h6blf8x+ zoZ4tuXwNJEw9b`UCp2aB_P*7*$cKx~_$LH|R?@HhPqcb;W?Y#vwo z`q#*s{IV92)AvJ|ku9jkr1WaGmRPjJDqr_P+d$zY-p?kvmY<3((P!y41EDV2Y4g9@ z&%%)bBwJ2EbWi;1xsWKA4X_;B(^#)Be@E-R(BXzoo0bK9*wdOFG2+fQbTbd~J z4ZdP?aOXxUU&y{ZeR=a)%~?UU$1n3Ih-(Zy8Ht&V3$9K_@$Wqg>&i&Bb$Z` ze9~mK6k~~~b-EiTUy~mHTB4LZb9*sqhsz{U)N*-bgWcO{8W}ux3)ti^phrdDq;Ufk zdYXn5zXc!d6L;4=BIZCV8stgq%~QdLOSnpRVir({c(*-xlO-_I5ZG^Tl0L7xqZU?I)hl)o`omn6ix|HUb3S_8%^Scq#KHI$W77Jq6=^W^7cVtKsGiOI ztw&}1Rd?Vw@AO{2JfC=T6YHr@YD(pymYVYp=7nb!Zvsk_#^X~c_5x}M5xp3Go?rxm zD_@trQwIvqtldrM0*T}wO4;|b3NA-KT+{u(obFY`U^ZS=*Nj?Ca?VfduqMT6G&P-5 zv(6E}6SQLE5r9K{(^Lf(jN3yl9M}PcA8-{En{9!@Indt^PJ)9mDK4T-flS8Ut9fV% zve?p>%-aXHw8gC9&JB>okHcMxuHimVHqJZFbj9V)%iCA{=GV&-qQ(tmt_kge^|yz= zyUg>`2V^m_KpA%(E!Z!Sg`Ja_(zOyq>$Pw5Pkf6hV_^t? zrU@)u1&2I2+-qVF!S|jye(od;ao>?nnnC~>jXem4BLr_2YWiv)6mIOfH}xk)AVc@J zphB$_V9G%2>HmxVuRgE7d(IkBcF#g?MShFemYS!yQOiGp)_}8>yG;^Zor?O(GJ}?q{D@ziWEtK7;MKa-e*^C7Sn+cdT~~RMAT< z>m1fMJ z+IUqbT`GwkOB5aZ4z%Y74XG15GU;D^<-?<&N5e^_klrf`F}t)Srv~vIN>F$WPZhfr zWM2BY;3vDlA%A!vdN+t`r5F9D3_(6Pot`iP?WZcGq}&6X^1MfE5&{G!{FrSO5{EQA znOlbh-6taUx;LodQG^NB1bK;^-Bu53FwE@w2_R)PhxUf0cgP`ZHMCZ?nlv5sfDa(XOMV4Yh8B2CES%#1$p$sKUjikjS zvJ=Y0*EY)jHD$^YvJ>9N@AubxUGMe2f4uK=UC(o_>psu9pL5^Oea^W*chY%V3t<6C z0T2izjI+er18wL24dn%%70xdUfQE}?Z(#;{*)9DG1cH-rSX0N_m*;7M>7Mwoj>gIl z*U(R3#3aF_%9hEyJUU4USfyi92Rq+)t?YC&b9Fpbj=QVgDMBeUYkf$+PKWWx%BfL^ zpR+MNoa8EVQnt)+cS-sngI1r>S^Nh#CXb2K!;=kz2&jl@(Pi@!U zfnt!+qmzT8V3?(~WU9{=JQnl!eRH`y1eyLoTe5%U7>K-a>yDE(@SduVcIht*5O|5r zTloMMiy`z~x9PtZTaC#lap1i!c8Gdv-j$y@M=m4JA16m7{Vb=4muXIi7us9~^S3UZ zX8!dqj9cU)D?>Gwuke{J(yMA51ltJPP&h4J7d~hD*cVLSI_tqC^$lcLAz8yj>dz@{ zem6mIFsg|eAV@)8?npXwl{|Wzoq8@WKmV_7(K8J&SyIfIKrnFk_gCvB*q%t&5bAN8 zHuNdbWi3$t~1hI;@F&)M1^gJi~u-e^w-L9{N+w|V|i0Fl3+MJ)Xn0!#%&RJ{LJP>@cG z9YTI9ee(KVakNEX+8>iYdvDvU*^jbYoh$nC71+z4eCHvVE5{i5xkqj8LY;|DI~}2_ z5SZoNLzW|D0_3VF9=BbhXe{Ox2ID3ShCv_j0bY0JMowCQD*u;%2?Y5+3zP2DkZ#%w zdS#kA5A*TOttVYi|w9i4Ofm;jWE>>2lvojquamGjWQ z*^>u?WO6-Ytc9Qq(5Ide9^gx_X>gT(==0)(u&~X!Z{NOMbhr=g&*#S=m0}az zHw>9|dhyl@4)`(mlq6Y;=4VvENN^ov%^p>&6>oi^-`e~;{e|h|!Z{Ea*Q_Sgs;9Zk zP;!0qu)zU4o}&Z(yR)z9>zAIM!f*2-><(+I!}Rb5&1ta`xzm~W{k}u(ZW><)W>=?9 z$&{qnmMuSwZj5<+-_sII{{EWx1>=fhk;5{TaXCd;N>{ouc$T$LaV@b>d_UBbz5x?F z;@xnfQuo5{)ik%N%t zAN)2%BA9%;s+|zQ4X+<>)yWV<#~45F7;~-sS1K! z#Cyer4;?yGAa33(L*GIiSeH{9!G1^Mgl4aMRO}o^C7ZaOq)}fU%BUWC-7TkMio_kS zxav`ns%QQ2QE8wI`<44={q>{xsAaguJ(JxHbalYQu51lOSxEwjo1h1+l4pu{?o;z~ zo)mw+L?dxzj4OV0FrLi_x918ft9L&ILEE^8t;C7*0r1|26nAP~fG}lp?!_(oN;S)P zeeq&>*1ea2SpEjFEr*OGo7!v;~Vy)VbgMR%9?w(74d;iJZ= zIOg3>*M0>k`TM}@j~_o?Q&m;HWP@EQ#Gb}i&ITC_@tEEWKqX2_>2uUB3=&yNOJ1nJ zYpG>Raec`2{0}-aKkZQASiG$JG+$nrW^$3bq{orZ`cd-#zF?@!7u}xt{CXB~vz)3u z<0l8P|CA|NSWF*2ERx9QsMFiB5M;nv+1}~Viw8FR`?iBsww%#}^sV2BA2NuHje})y zZmNnTGmo5cKn(*M=c;8}9JeZ`7e^h(dwPxeulw}( z_a6|?YgN>ROr5SUH+GjO=wb@W+ibE?e-cFh6kBnTi(3ZO*v)Q>Z|g6s@7A;Vr5+2Q zUb|p_s~>;oSyl9x8T>C6YIDFe&ZanhBBQEkl>A_XyHbR6kJgRPv?zmdgo_oiO zBa?jq{M=g6*RkW~$_QN7Ye}vLp`q zaFY?Z9BMvE{P|2GTbud!0TQ~q*Ep;Dg0VD0->e*n1e64*qqK*l31TC*)D`_B5fC+Pc&y z@$vCxXY5vj@ngcSo%jp_r(XpuKbhvA8`2PVGthj#Yzt_ zgQp6Jg_%}G;k1-)rh_SL)E=|dc9cd6I6pWnn~%XdQ9EC@iFNhDz@OmL8RuEU3!-+B zNlXI!pY~KKJ^ycSyq?F3vV`@eMXtcidxuy$FOr(S1J}U70NX2voBZ8oR6q1BUE$Qn z(Io13SF@s<-8JgZXSzfW4>eKqD)}joSIz*JgH<)v zrGsa@+in_qwu6N$%@=IF7lFztl253q8Iyc`KFwCG`B!h}|N8YSVA}EXL-%P8r)MtY zLv>C@d8~AVdGV_*2d8pz@Tcc@yKC;yw^WS(&E1rxAUEV?C$x?4G*6aA)Q_9M?Mfz8 zi=S^^A32^}V2DO9_qbdwUW&)`{Uhl~iC1`iT|l_2}r`A7lP{m3)7@MKeaU9#qjkko;}&0cxm_Z<=|V@?K+~dB~n~ zFBxkS)StyE?rHC1u3!WA&KL@{mZ3?3wPWmm1um4PX$O!hB{y;$0-Hu(WqFB#`0Uh?saVYu@pdlCv%BA%R}FQmIiENW`$-67^4Siq~E&u zsO&_dWKN@aMt}cFX+L5`YEN!>^aF|DHT)o7ie?$Y1<2Sk{Us7|G?ydnYs2!&X9^`f z)Ru3(V@0P^$EVmMaZnP6tS6*0KLMUy1HT)i8bK9xF+G$v)0d;MDBy?1>Lt4yaGN+>?dsf#|l^Y+G zpgDc9{9By+#xnD-dY-8EC~!Kfp)JB}xxp@p-e1Pwj4GkZ{R7{y#!q9_yGggSHCTMu z@0muk2^iL6pNc3$I6kDP-M8fVjI5N$?)4u%fX_R+FU#_AYI0{_#MT7ij)1Y+)rhb` zFgXS3Q*kOaud$S#FFsc{1!U8E!*g?U;_Tb3VJDbfWPpDAJrT}_qfmBd@` z6URV>u3G(wj!b`Q@byi=6BR;ZN%0O3eAAa@1M3u^tdEj<+D;!h6(ox`F;sEhaI!__ z04uXI+4xWu7yVCm9}8SN_FJX2tPJg!n1B(fEYJ`N)mpX~sm*N<8V|io9m1hEE~H$tMuAJGZw z08>nSVb+*@zp#$)FWt)BtiFT%%0Y832)603Tj6(9WN$9|AjkoCI~}5w{TY}RjlWvx zy`lprH?-55%u#`U!}NGL$KT?Qeic-GuH0B|1(>qr%Ds$%79E-n=V2CXG7C1t=5qz|X>BMWgxQ(0j z$p$_dse-;jLx{|^XJM*GPWgw2Z}H*0ha|}-IkrxNx9@deMKxX>CW0fda>kQa$9g5n z&P4X5(52soLa@gSktXM)vV#C1)jQ$$V6$Mz1=xEW_Fbig=N!+~iZLtf_<`~YKA1^> z8u@s#?W4TB&2|D>f=CwPy~75!shsxBxaDcJ9)e@^U8)V^0>Exk)Mo?4JH*})L`E*A ztY81>#KPX#@x<5BJUAQv1f&K9z}FHkFcF~0S4J2RxLFd!Wdgp<^Pkc3e}oo~qp-&3 zt%4AiViWTNt9lD3h_4@&cx#w+WooApz`8Xh1swbp7g-C)T)q0vyle;PR&q!S;i>@O zug!4h;7K4^XA=@AU2-7ueVkN{B!IU*u3hJE=0ODDoh>abHCc+9d~@C|=|ymjdp7*rzn$vQPh_bC$yhzZ{|349Z(rpE(%67Bp`)?+(7^ASY6lLb8hz4pg OAe^}^_NAE{LUb9? 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 P&jD$v>!~$hY@`1J8x3ll diff --git a/src/pages/customerservice/support/conversation/image/rate_black.png b/src/pages/customerservice/support/conversation/image/rate_black.png deleted file mode 100644 index 907dfae93e73353d7e3c6fac55e208f0a54908b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7590 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 diff --git a/src/pages/customerservice/support/conversation/image/rate_light.png b/src/pages/customerservice/support/conversation/image/rate_light.png deleted file mode 100644 index f5070c8136ccfd7c4add5cfefc0ce32b663d0bca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7941 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 diff --git a/src/pages/customerservice/support/conversation/image/server-avatar.jpg b/src/pages/customerservice/support/conversation/image/server-avatar.jpg deleted file mode 100644 index abb7ffec8d1186229cff442f88366841619ec2f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11192 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 diff --git a/src/pages/customerservice/support/conversation/image/uploadFile.png b/src/pages/customerservice/support/conversation/image/uploadFile.png deleted file mode 100644 index 3e9b110633671d37d6306bc31362a5f79e675384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2320 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yF%}28J29*~C-ahlf#Z~?i(^Pd z+}pW^eJY_MEcfSdvKMbGIPgGZ$DM?k!f$j73ML$Azx|+yIlwbHG2mdB-`D>)FN!5i zzP?_m{=%gzVdqc3`T46b&FKwL0c2NXuUT z9Udycy7T{)+%J7xi-;FcIPv<7%y;jaQo$bv#{1{TOls2bxW4kgeE4Do2CGvj z>`ZiVbjajlQkd!{!XmO-fgvapD6o;R0K3X3t2~LHuap)j#MV}sCNgmevAx=%$HaB% z>hf@5wFL@^3;JH;m)x*c;rOHYb7!u{)>fD@GTEO$<8S;qJmK25rkYtZ<(U{{E_y!L zJ@cn(LFR3)A{%v||6Cpola^J{=~&nyCKNGnk8srSs3d9qP6T+VS5$F226`zT`@U00H^t*qW*eG&NijVR6vv)!@(wb7WX@2`G>x zN*96PCYcSjYn>ld)IEPADaXoKyOc$-_<)t06Uzx>8!o1V$<4kAlPwcul@*zm7_%~N zIC)TQ!%3M9eG>&3FU@RXxbY-G_(lp}#Bq-fhL=8$3^_#`ICG5H*CeaBG?Xk;U@)`1 z!D2R(`I@1Sl7m&S0K;sV9H!Z47+*_p3M$OiJz=iUSN<;aq4N;K`zZ=3 zehIPe4opuBGwmH2e5eotYLFQ4NGCG_K7_f6DKAi1Ai&Bv!AqHosVh`~VWr6;g#{4< zEa1!O1dZ(F4x*6Qrqr(#Cbn7Mi5>|NREX$rijs~E$AyRNPzV&lg@uazTN^3nG&+*ysRAW_~Vs=*J#Meh6Ppl57 zssmYBq_bYJ?(ECB&pA;##yr06lii7%;pZ=TcNh5lyWe%^fpUC{595sJb_cHsrR!eg z3bRJ8o1`lqBoHur{vavAyjd8Nd!`6g%$@1HWNlozec%pJnd!Yk0TX5}ynjws_5B82 z4vmhcoWcP4txK9TPAoomPwf3_1+Gm;9c!;l0yYo&t*WE { - const [msgList, setMsgList] = useState([]) - const [scrollToBottom, setScrollToBottom] = useState(true) - const [switchFlag,setSwitchFlag] = useState(false) - const [viewH,setViewH] = useState(0) - const [curuser,setCuruser] = useState({}) - const [wsMsg, setWsMsg] = useState({}) - const [wsObj, setWsObj] = useState(null) - const [isImgPreviewVisible, setIsImgPreviewVisible] = useState(false) //在线客服/图片预览 - const [imageParams, setImageParams] = useState({}) //图片属性 - const [show, setShow] = useState(false) - const [projectData, setProjectData] = useState([]) - const [showLoading, setShowLoading] = useState(false) - const [isSend, setIsSend] = useState(false) - const [loading, setLoading] = useState(false) - const [sendMsg, setSendMsg] = useState([]) - const [isRateModalVisible, setIsRateModalVisible] = useState(false) - const [agentNumber, setAgentNumber] = useState('') - const [serverNo, setServerNo] = useState('') - const [msgPage, setMsgPage] = useState(1) - const [pagination, setPagination] = useState({ - showQuickJumper: true, - showSizeChanger: false, - current: 1, - pageSize: 10, - total: 0, - }); - const [queryParams, setQueryParams] = useState({}) - - const refs = useRef() - const chatUI = document.getElementById('chatUI') - const record = document.getElementById('section') - const chatInput = document.getElementById('chatInput') - const listHeight = 290 - const textHeight = 150 - const wid = 600 - const hei = 500 - - const {isModalVisible, isCloseWs, closeWin, hideWin, msgAlert, supplierNumber, staffId, staffName, optionsModal, projectModal, closeOptionsModal, closeProjectModal, kfType, questionType, openWin, openProjectWin, roleIds} = props - - document.addEventListener('visibilitychange',()=>{ //监听网页是否失焦 - var isHidden = document.hidden - sessionStorage.setItem('CUSTOMERSERVICE_isBlur', isHidden? 1: 0) - if(!isHidden && sessionStorage.getItem('CUSTOMERSERVICE_isConversationURLChanged')==0){ - stopMsg() - } - }) - - //项目信息 - const onChange = () => { - setShowLoading(true) - getProject({ - projectName: queryParams.projectName==undefined? null: queryParams.projectName, - }); - } - const getProject = (params)=>{ - API.list(params).then((res)=>{ - setShowLoading(false) - if(res && res.success && res.data){ - let data = res.data - setProjectData(data) - setPagination({ - showQuickJumper: true, - showSizeChanger: false, - pageSize: params.pageSize, - current: params.pageNum, - total: res.data.total, - showTotal: total => `共 ${total} 条`, - }) - }else{ - //message.warn(res && res.message) - } - }) - } - const dataList=[ - { label: '项目名称', value: 'projectName', type: 'input', }, - ] - const onSearch = (param) => { - setQueryParams(param) - getProject({ - projectName: param.projectName, - }); - }; - const onReset = () => { - getProject({ - projectName: null, - }); - setQueryParams({}) - } - const onMsgRender = (data)=>{ - let serverAvatar = user - if(data && data.clientNo!=undefined){ - setServerNo(data.serverNo) //保存客服编码 - let type = data.contentType==1?'text':data.contentType==2?'image':data.contentType==3?'file':'text' - let content={} - if(type=='text'){ - content = data.contentType==1?entitiestoUtf16(data.message) : data.message - }else if(type =='image'){ - let newcontent = data.message.indexOf('{')!= -1 ? JSON.parse(data.message):{} - content={ - content: newcontent.content, - realWidth: newcontent.realWidth, - realHeight:newcontent.realHeight, - msgWidth: newcontent.msgWidth, - msgHeight:newcontent.msgHeight, - previewidth: newcontent.previewidth, - previewHeight:newcontent.previewHeight, - success:false, - fileId:newcontent.fileId, - } - }else if(type =='file'){ - let newcontent = data.message.indexOf('{')!= -1 ? JSON.parse(data.message):{} - content={ - content: newcontent.content, - name: newcontent.name, - size:newcontent.size, - success:false, - fileId:newcontent.fileId, - } - } - let msgData={ - _id: doEncrypt(Math.floor(Math.random() * 1000)+ (new Date()).getTime()), - date: new Date(), - user: { - id: data.serverNo, - avatar: serverAvatar, - name: data.serverName? data.serverName: '供应链客服', - }, - message: { type: type, content: content }, - } - setMsgList([...msgList, msgData]) - msgAlert && msgAlert() - } - } - //点击获取更多信息,和uat不一致 - const getMoreMessage = (pageNum)=>{ - let serverAvatar = user - let customerAvatar = client - API.getMessageList({customNumber: serverNo, uid: staffId, empty:1, pageNum:pageNum==1?1:msgPage+1}).then(res => { - setLoading(false) - if (res && res.success) { - let data = res.data.records - let earlierMsg = [] - data && data.map((item)=>{ - let type = item.contentType==1?'text':item.contentType==2?'image':item.contentType==3?'file':'text' - let content={} - if(type=='text'){ - content = item.contentType==1?entitiestoUtf16(item.content) : item.content - }else if(type =='image'){ - let newcontent = item.content.indexOf('{')!=-1?JSON.parse(item.content):{} - content={ - content: newcontent.content, - realWidth: newcontent.realWidth, - realHeight:newcontent.realHeight, - msgWidth: newcontent.msgWidth, - msgHeight:newcontent.msgHeight, - previewidth: newcontent.previewidth, - previewHeight:newcontent.previewHeight, - success:false, - fileId:newcontent.fileId, - } - }else if(type =='file'){ - let newcontent = item.content.indexOf('{')!=-1?JSON.parse(item.content):{} - content={ - content: newcontent.content, - name: newcontent.name, - size:newcontent.size, - success:false, - fileId:newcontent.fileId, - } - } - earlierMsg.push({ - _id: doEncrypt(Math.floor(Math.random() * 1000)+ (new Date()).getTime()), - date: item.sendingTime, - user: { - id: item.senderUid, - avatar: item.senderType==1?customerAvatar:serverAvatar, - name: item.senderType==1?staffName:item.customName, - }, - message: { type: type, content: content }, - }) - }) - - if(data && data.length>0){ - if(pageNum==-1){ - setMsgPage(msgPage+1) - } - let count = earlierMsg.length - let arr = pageNum==1?[] : [...msgList] - while(count>0){ - arr.unshift(earlierMsg.pop()) - count-- - } - setMsgList([...arr]) - } - if(sendMsg && sendMsg.length>0) { //连接建立后,sendMsg有值才可以发即时消息(用户不点击发送,打开窗口即发送) - setIsSend(true) - } - } else { - //message.warn(res && res.message) - } - - }) - } -//断开连接提醒 -const disconnectedAlert = () =>{ - let serverAvatar = user - const msg = { - _id: doEncrypt(Math.floor(Math.random() * 1000)+ (new Date()).getTime()), - date: new Date(), - user: { - id: serverNo, - avatar: serverAvatar, - name: '供应链客服', - }, - message: { type: 'dom', content: '' }, - } - setMsgList([...msgList, msg]) -} -//检验连接websocket -const checkDisconnected = ()=>{ - if(sessionStorage.getItem('CUSTOMERSERVICE_isCloseChatUIModal')==0){ //弹窗没有关闭(弹窗开着或者隐藏,ws不应该断) - console.log('websocket断开,重新连接') - if(sessionStorage.getItem('CUSTOMERSERVICE_isModalVisible')==1){ //断连后,用户打开弹窗再发提醒 - disconnectedAlert() - } - }else{ - setMsgPage(0) - } -} - -//获取当前登录者token -const getToken = ()=>{ - API.check({ - clientNo: staffId, - supplierNo:kfType==1?'EMPTY':agentNumber - }).then(res => { - if (res && res.success) { - setShow(true) - websocketInit(staffId) - setLoading(true) - getMoreMessage(1) - }else{ - if(CUSTOMERSERVICE_WEBSOCKET && CUSTOMERSERVICE_WEBSOCKET.length>0){ - //别的路由切过来,ws没断,重新监听 - console.log('ws没断,重新监听') - setShow(true) - monitorWebSocket(CUSTOMERSERVICE_WEBSOCKET[0]) - setLoading(true) - getMoreMessage(1) - }else{ - closeWin && closeWin() - sessionStorage.removeItem('CUSTOMERSERVICE_isCloseChatUIModal') - message.warn(res && '您已在别的终端建立会话') - } - } - }) -} -//监听websocket -const monitorWebSocket = (ws)=>{ - // 建立 web socket 连接成功触发事件 - ws.onopen = function () { - console.log("Connection open ..."); - //记录ws - CUSTOMERSERVICE_WEBSOCKET.push(ws) - } - // 接收服务端数据时触发事件 - ws.onmessage = function (res) { - if(res.data){ - let data = JSON.parse(res.data) - //切换路由,conversaId会丢失,所以存sessionStorage - sessionStorage.setItem('CUSTOMERSERVICE_CONVERSATIONID',data.conversationId==undefined? 'EMPTY':data.conversationId) - if(sessionStorage.getItem('CUSTOMERSERVICE_isConversationURLChanged')==1){//路由变化 - sessionStorage.setItem('CUSTOMERSERVICE_msgFlash',1) - showMsg() - }else { - if(sessionStorage.getItem('CUSTOMERSERVICE_isBlur')==1){//失焦 - sessionStorage.setItem('CUSTOMERSERVICE_msgFlash',1) - showMsg() - } - setWsMsg(data) - } - } - }; - - // 断开 web socket 连接成功触发事件 - ws.onclose = function () { - console.log("连接已关闭..."); - if(CUSTOMERSERVICE_WEBSOCKET && CUSTOMERSERVICE_WEBSOCKET.length>0) - CUSTOMERSERVICE_WEBSOCKET.splice(0,CUSTOMERSERVICE_WEBSOCKET.length); - checkDisconnected() - }; -} -/*websocket*/ -const websocketInit = (id)=>{ - var addr = `${REACT_APP_CUSTOMERSERVICE_WS_REDIRECT}` + '/websocketClient/' - let no = kfType==1?'EMPTY':agentNumber - var ws = new WebSocket(addr+id+'/'+no, [sessionStorage.getItem('Authorization')]); - monitorWebSocket(ws) -} - -//消息闪烁提醒 -const showMsg = ()=>{ - CUSTOMERSERVICE_messageAlert.showMessage('新消息'); -} -//取消消息闪烁提醒 -const stopMsg = ()=>{ - CUSTOMERSERVICE_messageAlert.stopMessage('新消息'); -} - -useEffect(()=>{ - history.listen(location => { - // 最新路由的 location 对象,可以通过比较 pathname 是否相同来判断路由的变化情况 - let isChanged = location.pathname.indexOf('/Dashboard')==-1 - sessionStorage.setItem("CUSTOMERSERVICE_isConversationURLChanged", isChanged? 1: 0) - }) - if(sessionStorage.getItem('CUSTOMERSERVICE_msgFlash')==1){ - msgAlert && msgAlert() //侧边栏提醒 - } -},[]) -useEffect(()=>{ - if(!isCloseWs){ - sessionStorage.setItem("CUSTOMERSERVICE_isCloseChatUIModal", 0) - } -},[isCloseWs]) - -useEffect(() => { - sessionStorage.setItem("CUSTOMERSERVICE_isModalVisible", isModalVisible? 1: 0) - if(isModalVisible){ - stopMsg() - //登录人的信息的关键字 顺序是固定的。 - let avatar = client - //当前用户 - setCuruser({ - id: staffId, - name: staffName, - avatar: avatar, - }) - //恢复初始值 - chatUI.style.width = wid - chatUI.style.height = hei - chatUI.style.left = (document.documentElement.clientWidth - wid)*0.5 +"px" - chatUI.style.top = (document.documentElement.clientHeight - hei)*0.5 +"px" - record.style.height = listHeight + "px" - chatInput.style.height = textHeight + "px" - - //清空alert - sessionStorage.removeItem('CUSTOMERSERVICE_msgFlash'); - //校验登录 - getToken() - }else{ - setMsgList([]) - } -}, [isModalVisible]) - -useEffect(() => { - if(projectModal && supplierNumber!='EMPTY'){ - //获取项目 - setShowLoading(true) - getProject({ - projectName: null, - }) - } -}, [projectModal]) - -useEffect(() => { - //实时渲染消息 - if(sessionStorage.getItem('CUSTOMERSERVICE_isConversationURLChanged') == 0 && wsMsg && wsMsg.clientNo!=undefined){ - if(isModalVisible){ //弹窗开着才渲染 - onMsgRender(wsMsg) - }else{ - msgAlert && msgAlert() //只提醒 - } - } -}, [wsMsg]) - - const columns=[ - { title: '项目名称', dataIndex: 'projectName', align: 'center', ellipsis:true, width:'40%'}, - { title: '代理公司', dataIndex: 'agentName', align: 'center', ellipsis:true, width:'40%'}, - { - title: '操作', align: 'center', width: '150px', - render: (text, record) => { - setAgentNumber(record.agentNumber) - setSendMsg([{ - type:'text', - content:'项目名称:'+record.projectName+'
项目编号:'+record.projectNumber+'
项目状态:'+record.projectStatus - } - ]) - closeProjectModal && closeProjectModal() - openWin && openWin(2,10) - }} - okText="确定" - cancelText="取消" - >
- }, - ] - return ( - <> -
- {setIsSend(false); setSendMsg([])}} - chatUI={chatUI} - textHeight={textHeight} - listHeight={listHeight} - kfType={kfType} - questionType={questionType} - supplierNo={kfType==1?'EMPTY':agentNumber} - conversationId={sessionStorage.getItem('CUSTOMERSERVICE_CONVERSATIONID')} - roleIds={roleIds} - loading={loading} - isRateModalVisible={isRateModalVisible} - closeWin={()=>{ - if(sessionStorage.getItem('CUSTOMERSERVICE_CONVERSATIONID')!=null && sessionStorage.getItem('CUSTOMERSERVICE_CONVERSATIONID')!='EMPTY'){ - let conversationId = sessionStorage.getItem('CUSTOMERSERVICE_CONVERSATIONID') - API.estimate({id: conversationId, endTime: moment(new Date()).format('yyyy-MM-DD HH:mm:ss')}).then(res=>{ - if (res && res.success) { - }else{ - //message.warn(res && res.message) - } - }) - setIsRateModalVisible(true) - } - setShow(false) - sessionStorage.removeItem('CUSTOMERSERVICE_isCloseChatUIModal') - let ws = CUSTOMERSERVICE_WEBSOCKET.pop() - ws && ws.close() - closeWin && closeWin() - }} - closeRateModal={()=>{ - sessionStorage.removeItem('CUSTOMERSERVICE_CONVERSATIONID') - setIsRateModalVisible(false) - }} - hideWin={()=>{ - hideWin && hideWin() - }} - setPostion={()=>{ - setScrollToBottom(true) - setSwitchFlag(!switchFlag) - }} - changeHeight={(h)=>{ - setViewH(h) - }} - onSend={(msg) =>{ - setScrollToBottom(true) - setMsgList([...msgList, ...msg]) - setIsSend(false) - setSendMsg([]) - }} - showPic={(imageParams)=>{ - setImageParams(imageParams) - setIsImgPreviewVisible(true) - }} - reConnect={()=>{ - setMsgList([]) - websocketInit(staffId) - setLoading(true) - getMoreMessage(1) - } - } - onEarlier={()=>{ - setLoading(true) - setScrollToBottom(false) - getMoreMessage(-1) - }} - style={{ - width: wid, - height: hei, - }} - /> -
- {isImgPreviewVisible &&
{if(e.target.id=='blankArea' || e.target.id=='popUpImage'){e.persist(); handleElement.handleDrag(e,refs)} }}> - { - var html=document.querySelector("html") - var body=document.querySelector("body") - html.style.overflow="visible" - body.style.overflow="visible" - setIsImgPreviewVisible(false) - }} - maxSizePreview={()=>{ - refs.current.style.width=document.documentElement.clientWidth + "px" - refs.current.style.height=document.documentElement.clientHeight + "px" - refs.current.style.top= '50%' - refs.current.style.left= '50%' - refs.current.style.transform='translate(-50%,-50%)' - }} - normalSizePreview={()=>{ - refs.current.style.width= wid + "px" - refs.current.style.height= hei + "px" - refs.current.style.top= '50%' - refs.current.style.left= '50%' - refs.current.style.transform='translate(-50%,-50%)' - }} - /> -
} - {optionsModal && isCloseWs && - { - closeOptionsModal && closeOptionsModal() - }}> -

openWin && openWin(1,2)}>点击咨询平台客服(平台操作相关问题)

-

openWin && openWin(1,6)}>点击咨询智慧安全公司客服(iPASS及电子签章相关问题)

- {roleIds=="ebtp-supplier" &&

openProjectWin && openProjectWin()}>点击咨询代理机构客服(项目内容相关问题)

} - - } - {projectModal && roleIds=="ebtp-supplier" && - { - closeWin && closeWin() - }}> - {supplierNumber=='EMPTY'?

没有要咨询的项目

: - <> - - record['projectNumber']} - loading={showLoading} - pagination={pagination} - onChange={onChange} - /> - } - - } - - ) -} -export default conversation diff --git a/src/pages/customerservice/support/conversation/style/common.css b/src/pages/customerservice/support/conversation/style/common.css deleted file mode 100644 index fb6a08b..0000000 --- a/src/pages/customerservice/support/conversation/style/common.css +++ /dev/null @@ -1,21 +0,0 @@ -/* flex */ -.flex { - display: flex; -} -.flex_1 { - flex: auto; -} -.jus_cen { - justify-content: center; -} -.ali_cen { - align-items: center; -} - -/* position */ -.pos_a { - position: absolute; -} -.pos_r { - position: relative; -} diff --git a/src/pages/customerservice/support/conversation/utils/toClass.js b/src/pages/customerservice/support/conversation/utils/toClass.js deleted file mode 100644 index 1e0ebdc..0000000 --- a/src/pages/customerservice/support/conversation/utils/toClass.js +++ /dev/null @@ -1,3 +0,0 @@ -export function cns(classes = []) { - return classes.join(' ') -} diff --git a/src/pages/customerservice/support/conversation/utils/utils.jsx b/src/pages/customerservice/support/conversation/utils/utils.jsx deleted file mode 100644 index cfa1c0f..0000000 --- a/src/pages/customerservice/support/conversation/utils/utils.jsx +++ /dev/null @@ -1,568 +0,0 @@ -const sm2 = require('sm-crypto').sm2 - -export function AutoResizeImage(maxWidth,maxHeight,objImg) { - var img = new Image(); - img.src = objImg.src; - var hRatio; - var wRatio; - var Ratio = 1; - var w = img.width; - var h = img.height; - wRatio = maxWidth / w; - hRatio = maxHeight / h; - if (maxWidth ==0 && maxHeight==0){ - Ratio = 1; - }else if (maxWidth==0){// - if (hRatio<1) Ratio = hRatio; - }else if (maxHeight==0){ - if (wRatio<1) Ratio = wRatio; - }else if (wRatio<1 || hRatio<1){ - Ratio = (wRatio<=hRatio?wRatio:hRatio); - } - if (Ratio<1){ - w = w * Ratio; - h = h * Ratio; - } - objImg.style.height = h+"px"; - objImg.style.width = w+"px"; -} -export function GetResizeImg(maxsize,obj) { - var img = new Image(); - img.src = obj.src; - var hRatio; - var wRatio; - var Ratio = 1; - var w = img.width; - var h = img.height; - var maxWidth; - var maxHeight; - - if(w>=h){ - maxWidth = maxsize - maxHeight = 0 - - }else{ - maxWidth = 0 - maxHeight = maxsize - } - - wRatio = maxWidth / w; - hRatio = maxHeight / h; - - if (maxWidth ==0 && maxHeight==0){ - Ratio = 1; - }else if (maxWidth==0){// - if (hRatio<1) Ratio = hRatio; - }else if (maxHeight==0){ - if (wRatio<1) Ratio = wRatio; - }else if (wRatio<1 || hRatio<1){ - Ratio = (wRatio<=hRatio?wRatio:hRatio); - } - /* - wRatio = maxWidth / w; - hRatio = maxHeight / h; - if (maxWidth ==0 && maxHeight==0){ - Ratio = 1; - }else if (maxWidth==0){// - if (hRatio<1) Ratio = hRatio; - }else if (maxHeight==0){ - if (wRatio<1) Ratio = wRatio; - }else if (wRatio<1 || hRatio<1){ - Ratio = (wRatio<=hRatio?wRatio:hRatio); - } - */ - if (Ratio<1){ - w = w * Ratio; - h = h * Ratio; - } - - return {"width":w,"height":h} -} -export function GetNewsize(maxsize,width,height) { - var hRatio; - var wRatio; - var Ratio = 1; - var w = width; - var h = height; - - var maxWidth; - var maxHeight; - - if(w>=h){ - maxWidth = maxsize - maxHeight = 0 - - }else{ - maxWidth = 0 - maxHeight = maxsize - } - - wRatio = maxWidth / w; - hRatio = maxHeight / h; - if (maxWidth ==0 && maxHeight==0){ - Ratio = 1; - }else if (maxWidth==0){// - if (hRatio<1) Ratio = hRatio; - }else if (maxHeight==0){ - if (wRatio<1) Ratio = wRatio; - }else if (wRatio<1 || hRatio<1){ - Ratio = (wRatio<=hRatio?wRatio:hRatio); - } - if (Ratio<1){ - w = w * Ratio; - h = h * Ratio; - } - return {"width":w,"height":h} -} -/*over、move、拖拽*/ -export function mouseOverHandle(e,chatUI){ - let clickBox = e.target - var direction = 0; - - var mouseDownX = e.clientX; - var mouseDownY = e.clientY; - var clickBoxTop = chatUI.offsetHeight - clickBox.offsetHeight + chatUI.offsetTop - var clickBoxBottom = clickBoxTop + 60 - var clickBoxLeft = chatUI.offsetLeft; - var clickBoxRight = chatUI.offsetWidth + clickBoxLeft - - if(clickBox.id=="chatInput" ){ - e=e||event; //兼容ie和其他浏览器的写法 - - if ( mouseDownY < clickBoxTop + 5){ - direction = 'top'; - } - - // if(clickBox.id=="chatHeader" ){ - // e=e||event; //兼容ie和其他浏览器的写法 - // if ((mouseDownY > clickBoxTop && mouseDownY < clickBoxBottom) || (mouseDownX > clickBoxLeft && mouseDownX < clickBoxRight)){ - // direction = 'move'; - // } - // } - - if(direction!=0){ - if(direction=="left" || direction=="right"){ - clickBox.style.cursor='w-resize' - }else if(direction=="top" || direction=="bottom"){ - clickBox.style.cursor='s-resize' - }else{ - clickBox.style.cursor="auto" - } - }else{ - clickBox.style.cursor="auto" - } - } - -} -export function mouseMoveHandle(e,chatUI){ - let clickBox = e.target - var direction = 0; - clickBox.style.cursor="auto" - - var mouseDownX = e.clientX; - var mouseDownY = e.clientY; - var clickBoxTop = chatUI.offsetHeight - clickBox.offsetHeight + chatUI.offsetTop - var clickBoxBottom = clickBoxTop + 60 - var clickBoxLeft = chatUI.offsetLeft; - var clickBoxRight = chatUI.offsetWidth + clickBoxLeft - - if(clickBox.id=="chatInput" ){ - e=e||event; //兼容ie和其他浏览器的写法 - - if ( mouseDownY < clickBoxTop + 5){ - direction = 'top'; - } - } - // if(clickBox.id=="chatHeader" ){ - // e=e||event; //兼容ie和其他浏览器的写法 - // if ((mouseDownY > clickBoxTop && mouseDownY < clickBoxBottom) || (mouseDownX > clickBoxLeft && mouseDownX < clickBoxRight)){ - // direction = 'move'; - // } - // } - - if(direction!=0){ - if(direction=="left" || direction=="right"){ - clickBox.style.cursor='w-resize' - }else if(direction=="top" || direction=="bottom"){ - clickBox.style.cursor='s-resize' - }else { - clickBox.style.cursor="auto" - } - }else{ - clickBox.style.cursor="auto" - } -} -export function mouseDrag(e,selfHeight,chatUI,changeHeight,setPostion){ - - let clickBox = e.target - var direction = 0; - let count = 0 - - var mouseDownX = e.clientX; - var mouseDownY = e.clientY; - var clickBoxTop = chatUI.offsetHeight - clickBox.offsetHeight + chatUI.offsetTop - var clickBoxBottom = clickBoxTop + 60 - var clickBoxLeft = chatUI.offsetLeft; - var clickBoxRight = chatUI.offsetWidth + clickBoxLeft - var ll = chatUI.offsetLeft - var tt = chatUI.offsetTop - let record=null; - let topHeight=0; - - var maxLeft = document.documentElement.clientWidth - chatUI.offsetWidth - var maxTop = document.documentElement.clientHeight - chatUI.offsetHeight - - if(clickBox.id=="chatInput" ){ - e=e||event; //兼容ie和其他浏览器的写法 - var clickBoxHeight = clickBox.offsetHeight; - var input_maxHeight = chatUI.offsetHeight - 60 - 40 - var record_maxHeight = chatUI.offsetHeight - 60 - selfHeight - record = document.getElementById('section') - topHeight = record.offsetHeight - - if ( mouseDownY < clickBoxTop + 10){ - direction = 'top'; - } - } - if(clickBox.id=="chatHeader" || clickBox.id=="chatHeaderAvatar" || clickBox.id=="chatHeaderTitle" || clickBox.id=="chatHeaderSologan"){ - e=e||event; //兼容ie和其他浏览器的写法 - if ((mouseDownY > clickBoxTop && mouseDownY < clickBoxBottom) || (mouseDownX > clickBoxLeft && mouseDownX < clickBoxRight)){ - direction = 'move'; - } - } - document.onmousemove = function(e) { - e = e || event; //是要是使用原生js给我们提供的e回调参数,这存储了很多有用的信息 - - var yy = e.clientY; - var xx = e.clientX; - - if (clickBox.id=="chatInput" && direction==='top'){ - if(count==0 && setPostion && setPostion!=undefined) { - setPostion() - count++ - } - record.style.height = Math.min(record_maxHeight,(topHeight - mouseDownY + yy) < 40 ? 40:(topHeight - mouseDownY + yy)) + 'px'; - clickBox.style.height = Math.min(input_maxHeight, (clickBoxHeight + mouseDownY - yy) < selfHeight? selfHeight: (clickBoxHeight + mouseDownY - yy)) + 'px'; - if(changeHeight && changeHeight!=undefined) changeHeight(Math.min(record_maxHeight,(topHeight - mouseDownY + yy) < 20 ? 20:(topHeight - mouseDownY + yy))) - - } - if ((clickBox.id=="chatHeader" || clickBox.id=="chatHeaderAvatar" || clickBox.id=="chatHeaderTitle" || clickBox.id=="chatHeaderSologan") && direction==='move'){ - - var l = xx - mouseDownX + ll - var t = yy - mouseDownY + tt - - chatUI.style.left = l <0 ? 0 : Math.min(l,maxLeft) +"px" - chatUI.style.top = t < 0 ? 0 : Math.min(t,maxTop)+"px" - - chatUI.style.transform='' - //chatUI.style.top = t < 0 ? 0 : Math.min(t,maxTop) - } - //return false; //这里为了避免抖动 - }; - document.onmouseup = function(e) { - document.onmousemove = null; - document.onmouseup = null; - e.target.style.cursor='auto' - }; - - if (e.preventDefault){ - e.preventDefault(); - } -} -/*base64转blob*/ -export function previewHtmlByBase64 (base64Str, fileType) { - if (base64Str) { - const myBlob = parseBase64ToBlob(base64Str, fileType) - return myBlob - } - } -export function parseBase64ToBlob (data, fileType) { - let bstr = window.atob(data) - let n = bstr.length - const u8arr = new Uint8Array(n) - while (n--) { - u8arr[n] = bstr.charCodeAt(n) - } - if(fileType=='text/plain') - return new Blob(['\ufeff', u8arr], { type: fileType }) - else return new Blob([u8arr], { type: fileType }) -} -// 表情解码 -export function entitiestoUtf16 (strObj) { - const patt = /&#\d+;/g; - const arr = strObj.match(patt) || []; - - let H; - let L; - let code; - - for (let i = 0; i < arr.length; i += 1) { - code = arr[i]; - code = code.replace('&#', '').replace(';', ''); - // 高位 - H = Math.floor((code - 0x10000) / 0x400) + 0xD800; - // 低位 - L = ((code - 0x10000) % 0x400) + 0xDC00; - code = `&#${code};`; - const s = String.fromCharCode(H, L); - strObj = strObj.replace(code, s); - } - return strObj; - } -// 表情转义保存数据库 -export function utf16toEntities (str){ -const patt = /[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则 -str = str.replace(patt, (char) => { - let H; - let L; - let code; - let s; - - if (char.length === 2) { - H = char.charCodeAt(0); // 取出高位 - L = char.charCodeAt(1); // 取出低位 - code = (H - 0xD800) * 0x400 + 0x10000 + L - 0xDC00; // 转换算法 - s = `&#${code};`; - } else { - s = char; - } - - return s; -}); - -return str; -} -export function isEmojiCharacter(substring) { - for ( var i = 0; i < substring.length; i++) { - var hs = substring.charCodeAt(i); - if (0xd800 <= hs && hs <= 0xdbff) { - if (substring.length > 1) { - var ls = substring.charCodeAt(i + 1); - var uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000; - if (0x1d000 <= uc && uc <= 0x1f77f) { - return true; - } - } - } else if (substring.length > 1) { - var ls = substring.charCodeAt(i + 1); - if (ls == 0x20e3) { - return true; - } - } else { - if (0x2100 <= hs && hs <= 0x27ff) { - return true; - } else if (0x2B05 <= hs && hs <= 0x2b07) { - return true; - } else if (0x2934 <= hs && hs <= 0x2935) { - return true; - } else if (0x3297 <= hs && hs <= 0x3299) { - return true; - } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 - || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b - || hs == 0x2b50) { - return true; - } - } - } -} -//补齐html标签 -export function closeHTML(str){ - var arrTags=["span","font","b","u","i","h1","h2","h3","h4","h5","h6","p","li","ul","table","div"]; - for(var i=0;i]+|)\\>","ig"); - var arrMatch=str.match(re); - if(arrMatch!=null) intOpen=arrMatch.length; - re=new RegExp("\\<\\/"+arrTags[i]+"\\>","ig"); - arrMatch=str.match(re); - if(arrMatch!=null) intClose=arrMatch.length; - for(var j=0;j"; - } - } - return str; -} -/*图片处理*/ -export const imageHandleUtil = { - //插入图片 - insertImage(img, range, reformMsg, resetCachedRange,resetLoadling){ - range.insertNode(img) - resetCachedRange && resetCachedRange(range) - range.collapse(false) - window.getSelection().removeAllRanges(); - window.getSelection().addRange(range); - reformMsg && reformMsg() - resetLoadling && resetLoadling() - }, - //图片调整大小、增加onclick事件 - changeImage(img, showPic, imgInputSize, imgMsgSize, imgPreviewSize){ - let w = img.width - let h =img.height - let inputSize = GetNewsize(imgInputSize,w,h) - let msgSize = GetNewsize(imgMsgSize,w,h) - let previewSize = GetNewsize(imgPreviewSize,w,h) - - img.style.width=inputSize.width+"px" - img.style.height=inputSize.height+"px" - - let realWidth = img.realWidth = w+"px" - let realHeight = img.realHeight = h+"px" - let msgWidth = img.msgWidth = msgSize.width+"px" - let msgHeight = img.msgHeight = msgSize.height+"px" - let previewidth = img.previewidth = previewSize.width+"px" - let previewHeight = img.previewHeight = previewSize.height+"px" - - img.onclick = function() { - let src = img.src - let param = { - src, realWidth, realHeight, msgWidth, msgHeight, previewidth, previewHeight - } - showPic(param); - } - }, - //粘贴图片 - pasteImages (params){ - let {srcArr, sig, el, range, reformMsg, showPic, resetCachedRange, resetLoadling, imgInputSize, imgMsgSize, imgPreviewSize} = params - var img=new Image(); - img.src=srcArr[sig].src - img.onload=function(){ - //console.log(srcArr[sig]) - //if(!srcArr[sig].style.width || srcArr[sig].style.width==undefined || srcArr[sig].style.width==''){ - if(srcArr[sig].src.indexOf('base64')!=-1){ - var dataarr = img.src.split(',') //分割为数组,分割到第一个逗号 - let mime = dataarr[0].match(/:(.*?);/)[1] //获取分割后的base64前缀中的类型 - let myBlob = parseBase64ToBlob(dataarr[1], mime); - srcArr[sig].src = URL.createObjectURL(myBlob); - } - imageHandleUtil.changeImage(srcArr[sig], showPic, imgInputSize, imgMsgSize, imgPreviewSize) - //} - if(sig{ - imageHandleUtil.changeImage(img, showPic, imgInputSize, imgMsgSize, imgPreviewSize) - imageHandleUtil.insertImage(img, range, reformMsg, resetCachedRange, resetLoadling) - } - } - }, - // canvas转dataURL:canvas对象、转换格式、图像品质 - canvasToDataURL(canvas, format, quality){ - return canvas.toDataURL(format||'image/*', quality||1.0); - }, - // DataURL转Blob对象 - dataURLToBlob(dataurl){ - var arr = dataurl.split(','); - var mime = arr[0].match(/:(.*?);/)[1]; - let blob = parseBase64ToBlob(arr[1], mime); - return blob - }, - // image转canvas:图片地址 - imageToCanvas(src, cb){ - var canvas = document.createElement('CANVAS'); - var ctx = canvas.getContext('2d'); - var img = new Image(); - - img.onload = function (){ - canvas.width = img.width; - canvas.height = img.height; - ctx.drawImage(img, 0, 0); - cb(canvas); - }; - img.setAttribute("crossOrigin",'anonymous') - img.src = src - }, - // image转Blob - imageToBlob(msgData, imgUpload){ - imageHandleUtil.imageToCanvas(msgData.message.content.content, function (canvas){ - let blob = imageHandleUtil.dataURLToBlob(imageHandleUtil.canvasToDataURL(canvas)); - imgUpload && imgUpload(blob, msgData) - }) - }, - uploadImage(msgData, imgUpload){ - imageHandleUtil.imageToBlob(msgData, imgUpload) - }, -} - -//拖动组件 -export const handleElement = { - handleDrag(e,imgRef){ - const o = imgRef.current - const s = o.style - const p = 'onmousemove' - //在jsx中需要用e.persist()此方法会从池中移除合成事件,允许用户代码保留对事件的引用,否则clientX会是null - let x = e.clientX - o.offsetLeft; - let y = e.clientY - o.offsetTop; - document[p] = function (e) { - s.left = e.clientX - x + 'px'; - s.top = e.clientY - y + 'px'; - } - - document.onmouseup = function () { - document[p] = null - } - }, - handleZoom(e, imgRef, scales, changeScales){ - let { style } = imgRef.current - if (e.nativeEvent.deltaY <= 0 && scales < 5 ) { - let a = scales+0.05 - style.transform = 'translate(-50%,-50%) scale('+a+')' - changeScales && changeScales(a) - } else if (e.nativeEvent.deltaY > 0) { - if(scales>0.5){ - let a = scales-0.05 - style.transform = 'translate(-50%,-50%) scale('+a+') ' - changeScales && changeScales(a) - } - } - }, - - handleStopDrag(e){ - e.preventDefault() - }, -} -export function downloadFile(data, name, suffix) { - if (window.navigator && window.navigator.msSaveBlob) { - window.navigator.msSaveBlob(new Blob([data]),name + (suffix ? ('.' + suffix) : '')); - }else{ - const url = window.URL.createObjectURL(new Blob([data])) - const link = document.createElement('a') - link.style.display = 'none' - link.href = url - // const fileName = parseTime(new Date()) + '-' + name + (suffix ? ('.' + suffix) : '') - const fileName = name + (suffix ? ('.' + suffix) : '') - link.setAttribute('download', fileName) - document.body.appendChild(link) - link.click() - document.body.removeChild(link) - } - } -//加密 -export function doEncrypt(value) { - let encryptData = sm2.doEncrypt(value, `${REACT_APP_CUSTOMERSERVICE_PUBLICKEY}`, `${REACT_APP_CUSTOMERSERVICE_CIPHERCODE}`) - return '04' + encryptData; - } - //解密 - export function doDecrypt(value) { - let newValue = value.slice(2, value.length); - let decryptData = sm2.doDecrypt(newValue, `${REACT_APP_CUSTOMERSERVICE_PRIVATEKEY}`, `${REACT_APP_CUSTOMERSERVICE_CIPHERCODE}`) // 解密结果 - return decryptData; - } \ No newline at end of file diff --git a/src/services/customerservice.js b/src/services/customerservice.js deleted file mode 100644 index d1d3a69..0000000 --- a/src/services/customerservice.js +++ /dev/null @@ -1,73 +0,0 @@ -import { $post, $get } from '@/customerServiceHelpers/request'; -import request from '@/utils/request'; - -export const customerserviceAPI = { - //发送消息 - sendToCs(params) { - return request('/api/api/biz-customer-service/msg/sendToCs',{ - method:'POST', - data:{ - ...params, - } - }); - }, - //上传附件 - fileUpload(params){ - return $post('/api/doc/v1.0/files/upload?appCode=upload_cs&objectId=22&objectType='+params.objectType, { - params: params.multipartFiles, - headers: { - 'Content-Type': 'multipart/form-data' - }, - }); - }, - //下载附件 - getSecretKey(params) { - const downloadService = '/api/doc/api/data-service-document-center' - return $get(`${downloadService}` + '/outer/v1.0/files/getSecretKey', { params }); - }, - /** - * - * @param {object} params - * - * 物流订单详情附件下载 - */ - getDownload(params) { - const downloadService = '/api/doc/api/data-service-document-center' - return $post(`${downloadService}` + '/outer/v1.0/files/getDownloadBody', { params, responseType: 'arraybuffer' }); - }, - check(params) { - return request('/api/api/biz-customer-service/conversation/check',{ - method:'POST', - data:{ - ...params, - } - }); - }, - //评价 - estimate(params) { - return request('/api/api/biz-customer-service/outer/v1.0/eshopConversation/updateConversationById',{ - method:'POST', - data:{ - ...params, - } - }); - }, - //获取咨询项目 - list(params) { - let method = "get"; - if(params.projectName==null){ - return request('/api/biz-service-ebtp-tender/v1/participateProject/list', { method: method }) - }else{ - return request('/api/biz-service-ebtp-tender/v1/participateProject/list?projectName='+params.projectName, { method: method }) - } - }, - //获取历史记录 - getMessageList(params){ - return request('/api/api/biz-customer-service/outer/v1.0/conversationRecord/findRecordPageForUser',{ - method:'POST', - data:{ - ...params, - } - }); - }, -} \ No newline at end of file diff --git a/src/typings.d.ts b/src/typings.d.ts index 33e3ba7..5168230 100644 --- a/src/typings.d.ts +++ b/src/typings.d.ts @@ -52,3 +52,7 @@ declare const START_ENV: string // declare const REACT_APP_XUNJIA_REDIRECT: string /**ENV-询价查看报价跳转地址 */ declare const REACT_APP_XUNJIA_UID: string +//智慧客服 +declare const REACT_APP_CUSTOMERSERVICE_USERCENTER: string +declare const REACT_APP_CUSTOMERSERVICE_CLIENT_ID: string +declare const REACT_APP_CUSTOMERSERVICE_REDIRECT: string