diff --git a/config/config.UAT.ts b/config/config.UAT.ts index c31047c..19ebc69 100644 --- a/config/config.UAT.ts +++ b/config/config.UAT.ts @@ -21,5 +21,25 @@ export default defineConfig({ // REACT_APP_XUNJIA_REDIRECT: 'http://10.0.204.215:8280/provider_uat', //询价-查看报价详情-虚拟用户uid REACT_APP_XUNJIA_UID: 'admin_entrance', + + // //智慧客服ws地址 + // REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://10.242.31.158:18022/api/api/biz-customer-service', + + //智慧客服用户中心地址 + REACT_APP_CUSTOMERSERVICE_USERCENTER: 'http://10.242.31.158:18022/auth/oauth/authorize?response_type=code', + + //智慧客服client_id + REACT_APP_CUSTOMERSERVICE_CLIENT_ID: 'COsHJydx', + + //智慧客服地址 + REACT_APP_CUSTOMERSERVICE_REDIRECT: 'http://10.242.31.158:8632', + + // //智慧客服文档中心查看图片地址 + // 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 2a4cf79..2b07069 100644 --- a/config/config.dev.ts +++ b/config/config.dev.ts @@ -21,5 +21,25 @@ export default defineConfig({ // REACT_APP_XUNJIA_REDIRECT: 'http://10.0.204.215:8080/provider_dev', //询价-查看报价详情-虚拟用户uid REACT_APP_XUNJIA_UID: 'admin_entrance', + + //智慧客服用户中心地址 + REACT_APP_CUSTOMERSERVICE_USERCENTER: 'http://10.242.31.158:8100/auth/oauth/authorize?response_type=code', + + //智慧客服client_id + REACT_APP_CUSTOMERSERVICE_CLIENT_ID: 'COsHJydx', + + //智慧客服地址 + REACT_APP_CUSTOMERSERVICE_REDIRECT: 'http://10.242.31.158:8632', + + // //智慧客服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 c00bb2e..a3545df 100644 --- a/config/config.prod.ts +++ b/config/config.prod.ts @@ -21,5 +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: 'https://uscm.chinaunicom.cn:18023/auth/oauth/authorize?response_type=code', + + //智慧客服client_id + REACT_APP_CUSTOMERSERVICE_CLIENT_ID: 'COsHJydx', + + //智慧客服地址 + REACT_APP_CUSTOMERSERVICE_REDIRECT: 'https://uscm.chinaunicom.cn:18011', + // //智慧客服ws地址 + // REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://uscm.unicom.local:18022/api/api/biz-customer-service', + + // //智慧客服文档中心查看图片地址 + // 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 fa9e473..2538565 100644 --- a/config/config.sim.ts +++ b/config/config.sim.ts @@ -21,5 +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', + + //智慧客服client_id + REACT_APP_CUSTOMERSERVICE_CLIENT_ID: 'COsHJydx', + + //智慧客服地址 + REACT_APP_CUSTOMERSERVICE_REDIRECT: 'http://10.242.31.158:8632', + // //智慧客服ws地址 + // REACT_APP_CUSTOMERSERVICE_WS_REDIRECT: 'ws://10.242.31.54:18022/api/api/biz-customer-service', + + // //智慧客服文档中心查看图片地址 + // 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/package.json b/package.json index b759f9c..57a7017 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,14 @@ "private": true, "description": "An out-of-box UI solution for enterprise applications", "scripts": { - "start-dev": "cross-env UMI_UI=none UMI_ENV=dev LOGIN_PATH=login umi dev --port=3000", - "start-UAT": "cross-env UMI_UI=none UMI_ENV=UAT LOGIN_PATH=login umi dev --port=3000", - "start-sim": "cross-env UMI_UI=none UMI_ENV=sim LOGIN_PATH=login umi dev --port=3000", - "start-prod": "cross-env UMI_UI=none UMI_ENV=prod LOGIN_PATH=prod/login umi dev --port=3000", - "build-dev": "cross-env UMI_ENV=dev LOGIN_PATH=login umi build", - "build-UAT": "cross-env UMI_ENV=UAT LOGIN_PATH=login umi build", - "build-sim": "cross-env UMI_ENV=sim LOGIN_PATH=login umi build", - "build-prod": "cross-env UMI_ENV=prod LOGIN_PATH=prod/login umi build", + "start-dev": "cross-env UMI_UI=none UMI_ENV=dev LOGIN_PATH=ebtp-frontend umi dev --port=3000", + "start-UAT": "cross-env UMI_UI=none UMI_ENV=UAT LOGIN_PATH=ebtp-frontend umi dev --port=3000", + "start-sim": "cross-env UMI_UI=none UMI_ENV=sim LOGIN_PATH=ebtp-frontend umi dev --port=3000", + "start-prod": "cross-env UMI_UI=none UMI_ENV=prod LOGIN_PATH=prod/ebtp-frontend umi dev --port=3000", + "build-dev": "cross-env UMI_ENV=dev LOGIN_PATH=ebtp-frontend umi build", + "build-UAT": "cross-env UMI_ENV=UAT LOGIN_PATH=ebtp-frontend umi build", + "build-sim": "cross-env UMI_ENV=sim LOGIN_PATH=ebtp-frontend umi build", + "build-prod": "cross-env UMI_ENV=prod LOGIN_PATH=prod/ebtp-frontend umi build", "analyze": "cross-env ANALYZE=1 umi build", "build": "umi build", "deploy": "npm run site && npm run gh-pages", diff --git a/src/assets/img/kefu.png b/src/assets/img/kefu.png new file mode 100644 index 0000000..4bd2a8f Binary files /dev/null and b/src/assets/img/kefu.png differ diff --git a/src/components/Promenu/index.tsx b/src/components/Promenu/index.tsx index 0615e2c..199d7c1 100644 --- a/src/components/Promenu/index.tsx +++ b/src/components/Promenu/index.tsx @@ -9,6 +9,7 @@ import { getReadInfo, menuList, updateReadStatus } from './service/service'; import { getProName, getSessionRoleData, getProTypeCode, getDefId, getPurchaseCanOperate, getReturnURL, getProId, getProMethod } from '@/utils/session'; import { Step, StepButton, StepLabel, Stepper, Toolbar, Popover, Typography } from '@material-ui/core'; import { isEmpty } from '@/utils/CommonUtils'; +import { CustomerServiceTwoTone } from '@ant-design/icons'; const useStyles = makeStyles((theme: Theme) => ({ root: { @@ -194,6 +195,29 @@ const Promenu: React.FC<{}> = () => { const handlePopoverClose = () => { setAnchorEl(null); }; + const initChatUI = () => { //智慧客服 + if(MethodDict!='procurement_mode_6' && MethodDict!='procurement_mode_7' && window.location.pathname.indexOf('BidEvaluation')!=-1){ + message.warn('非谈判类项目【评标】阶段禁止沟通') + }else{ + var tempForm = document.getElementById('tempForm_CustomerService') as HTMLFormElement + if(tempForm){ + var hideInput = document.getElementById('tempInput_CustomerService') as HTMLInputElement + if(hideInput){ + hideInput.value= window.location.pathname + }else{ + hideInput = document.createElement("input") + hideInput.id = 'tempInput_CustomerService' + hideInput.type="hidden" + hideInput.name= 'sceneUrl' + hideInput.value= window.location.pathname + tempForm.appendChild(hideInput) + } + tempForm.submit(); + }else{ + message.warn('请先选择跟进的项目') + } + } + } return (
@@ -212,6 +236,9 @@ const Promenu: React.FC<{}> = () => { history.push("/ProjectLayout/Archive/projectArchive") setButtonValue(stepButtonClick(data?.[data?.length - 1])) }}>项目归档 : null, + , ((randerRole == 'ebtp-agency-project-manager' || randerRole == 'ebtp-purchase' || randerRole == 'ebtp-supervision') && MethodDict != "procurement_mode_7") ? : null, (randerRole == 'ebtp-supplier' && MethodDict != "procurement_mode_7") diff --git a/src/layouts/BasicLayout.tsx b/src/layouts/BasicLayout.tsx index 6e75ec1..8a26b1f 100644 --- a/src/layouts/BasicLayout.tsx +++ b/src/layouts/BasicLayout.tsx @@ -12,7 +12,7 @@ import { ConnectState } from '@/models/connect'; import { getMatchMenu } from '@umijs/route-utils'; import { getMenu } from './services' import logo from '../assets/logo.svg'; -import { getSessionRoleData } from '@/utils/session'; +import { getSessionRoleData, getSessionUserData } from '@/utils/session'; import { HomeOutlined, @@ -105,6 +105,8 @@ const BasicLayout: React.FC = (props) => { const [menuData, setMenuData] = React.useState(); const [menuShow, setmenuShow] = React.useState(false); const menuDataRef = useRef([]); + const mall3_token: any = sessionStorage.getItem('Authorization');//当前登录token + const userData: any = getSessionUserData();//当前登录人信息 useEffect(() => { if (getSessionRoleData()?.roleId) { let params = { @@ -161,7 +163,9 @@ const BasicLayout: React.FC = (props) => { } else if (menuItemProps.frame && menuItemProps.frame == 'Y') { return window.open(menuItemProps.path)} to="#">{defaultDom}; } else if (menuItemProps.frame && menuItemProps.frame == 'S') { - return window.open(menuItemProps.path + '&mall3_token=' + sessionStorage.getItem('Authorization'))} to="#">{defaultDom}; + const initPath = menuItemProps.path; + const rePath = initPath?.replace("{mall3_token}", mall3_token).replace("{loginName}", userData.loginName).replace("{organizationId}", userData.organizationId); + return window.open(rePath)} to="#">{defaultDom}; } else { return {defaultDom}; } diff --git a/src/pages/Bid/BiddingAnnouncement/components/BiddingInvitation.tsx b/src/pages/Bid/BiddingAnnouncement/components/BiddingInvitation.tsx index 785150a..d049888 100644 --- a/src/pages/Bid/BiddingAnnouncement/components/BiddingInvitation.tsx +++ b/src/pages/Bid/BiddingAnnouncement/components/BiddingInvitation.tsx @@ -13,6 +13,7 @@ import { Radio, Row, Spin, Tabs, + Typography, Upload } from "antd" import '@/assets/ld_style.less' @@ -25,7 +26,7 @@ import { creatNotice, getChooseRoom, getPackageAndSupplierList, - chooseSupplier, deleteSupplier, updateSupplierUser, checkConflict + chooseSupplier, deleteSupplier, updateSupplierUser, saveAnno } from '../service' import moment from "moment"; import TabPane from "@ant-design/pro-card/lib/components/TabPane"; @@ -46,6 +47,8 @@ import BraftText from "@/components/richText/wang" import RiskPrevention from "@/utils/RiskPrevention" import Dating from '@/images/招标公告/dating.jpg'; import './style.less'; +import TextArea from "antd/lib/input/TextArea" +import RiskPreventionSoft from "@/utils/RiskPreventionSoft" interface BiddingInvitation { type: string; @@ -104,6 +107,11 @@ const BiddingInvitation: React.FC = (props) => { const [riskVisible, setRiskVisible] = useState(false);//风控弹窗 2021.9.7 zhoujianlong const [riskData, setRiskData] = useState([]);//风控数据 2021.9.7 zhoujianlong const WebofficeRef = useRef(null); + const [memoVisible, setMemoVisible] = useState(false);//说明弹窗 + /*weboffic end*/ + const [UploadMemoID, setUploadMemoID] = useState("empty"); //upload 业务id + + const { Text } = Typography; const onRef = (ref) => { /* this.child= ref;*/ } @@ -182,6 +190,7 @@ const BiddingInvitation: React.FC = (props) => { setDocSaveBtn("compact"); setDocBtnName("新建"); setSping(false); + setUploadMemoID(""); } }); } else if (type == "edit") {//==========================================================编辑 @@ -211,6 +220,7 @@ const BiddingInvitation: React.FC = (props) => { "openhallId": data.openhallId, "annoTitle": data.annoTitle, "sectionIds": defPak, + "reasonMemo": data.reasonMemo, }); echoSet(data.contentWithStyle); setUploadID(data.attDatasetId); @@ -220,6 +230,7 @@ const BiddingInvitation: React.FC = (props) => { setDocReadOnly("false"); setDocSaveBtn("compact"); setDocBtnName("编辑"); + setUploadMemoID(data.reasonMemoAttrId); } }); @@ -256,6 +267,7 @@ const BiddingInvitation: React.FC = (props) => { setDocReadOnly("ture"); setDocSaveBtn("none"); setDocBtnName("查看"); + setUploadMemoID(data.reasonMemoAttrId); } }); } @@ -318,7 +330,15 @@ const BiddingInvitation: React.FC = (props) => { } else if (TpPackageName == "谈判") { if (form.getFieldValue("docStartTime") < moment().startOf('day')) { message.warn('采购文件获取开始时间需晚于当前时间'); - } else if (moment(form.getFieldValue("docEndTime")).startOf('day').diff(moment(form.getFieldValue("docStartTime")).startOf('day'), "days") < 3) { + } else if (proDict == "procurement_mode_6" && moment(form.getFieldValue("docEndTime")).startOf('day').diff(moment(form.getFieldValue("docStartTime")).startOf('day'), "days") < 1) { + message.warn('采购文件获取截止时间需与采购文件获取开始时间间隔不少于1天'); + } else if (proDict == "procurement_mode_6" && moment(form.getFieldValue("docEndTime")).startOf('day').diff(moment(form.getFieldValue("docStartTime")).startOf('day'), "days") < 3) { + if(form.getFieldValue("reasonMemo") !== null && form.getFieldValue("reasonMemo") !== undefined){ + msg = "true" + }else{ + setMemoVisible(true); + } + } else if (moment(form.getFieldValue("docEndTime")).startOf('day').diff(moment(form.getFieldValue("docStartTime")).startOf('day'), "days") < 3) { message.warn('采购文件获取截止时间需与采购文件获取开始时间间隔不少于3天'); } else if (form.getFieldValue("replyEndTime").format('YYYY-MM-DD HH:mm:ss') < form.getFieldValue("docEndTime").format('YYYY-MM-DD HH:mm:ss')) { message.warn('应答截止时间需晚于或等于采购文件获取截止时间'); @@ -442,12 +462,16 @@ const BiddingInvitation: React.FC = (props) => { // "contentHtmlId": WebofficeRef.current!.HTMLfileCode,//html id "sections": packageMsg, "medias": "9", - "roomType": "2" + "roomType": "2", + "reasonMemoAttrId": form.getFieldValue("reasonMemoAttrId"), + "reasonMemo": form.getFieldValue("reasonMemo") } creatNotice(type, fromData).then(res => { if (res?.code == 4004 && res?.success == false) { //2021.9.7 zhoujianlong 新增和修改邀请函增加风控 - const data = res?.data?.result == undefined ? [] : res?.data?.result - setRiskData(data) + const data = res?.data== undefined ? [] : res?.data + let thisData = []; + thisData.push(data); + setRiskData(thisData) setRiskVisible(true) } if (res.code == 200) { @@ -458,6 +482,48 @@ const BiddingInvitation: React.FC = (props) => { setTimeout(() => setSping(false), 1000) }); } + const saveAfterRisk = () => { + const packageMsg = []; + for (const item of TpPackageId) {//包数据 + for (const item1 of form.getFieldValue("sectionIds")) { + if (item.value == item1) { + packageMsg.push({ "bsId": item.value, "bsName": item.label }) + } + } + } + setSping(true); + const fromData = { + "id": pkId, + "annoNature": 101,//邀请函 + "tpId": tpId, + "csAnnoId": pkId, + "attDatasetId": form.getFieldValue("attDatasetId"), + "openhallTitle": form.getFieldValue("openhallIdTime"),//开标大厅 时间段 + "source": 21,//来源(1:预审公告;2:预审公示;11:资审公告;12资审公示;21:邀请函) + "annoTitle": form.getFieldValue("annoTitle"), + "contentWithStyle": braftRef.current.getHtml().replace(/ { + if (res.code == 200) { + setAnnoId(res?.data); + message.success("成功"); + setTabsKeys("2"); + } + setTimeout(() => setSping(false), 1000) + }); + } const columns1: ProColumns<{}>[] = [ @@ -828,6 +894,45 @@ const BiddingInvitation: React.FC = (props) => { */} + { + setMemoVisible(false) + }} + onOk={() => {setMemoVisible(false);onFinshInvitation();}} + footer={[ + , + , + ]} + centered + > + + 提示:当前采购文件获取截止时间与采购文件获取开始时间间隔少于3天,请填写原因说明! + +