diff --git a/config/TanPan/router_tanpan.ts b/config/TanPan/router_tanpan.ts index 0979c47..5a04600 100644 --- a/config/TanPan/router_tanpan.ts +++ b/config/TanPan/router_tanpan.ts @@ -31,6 +31,6 @@ export default [ }, {//单一来源简化流程 选择供应商及上传应答文件 path: '/ProjectLayout/SimpleUpload', - component: './BidEvaluation/components/SimpleUpload' + component: './BidEvaluation/components/simpleUpload' } ]; diff --git a/config/router.config.ts b/config/router.config.ts index b4159e9..46b1726 100644 --- a/config/router.config.ts +++ b/config/router.config.ts @@ -3,11 +3,14 @@ import transfer from './router_transfer'; import home from './HomePage/router_home'; import juryRoom from './JuryRoom/router_menuJury.config'; import approvalForm from './router_approval_form'; +import partyMemberTopic from './router_partyMemberTopic'; export default [ //========================================================================登陆 ...transfer,//跳转、登陆 //审批单 ...approvalForm, + //党建攻坚 + ...partyMemberTopic, { path: '/userformal', // component: '../layouts/UserLayout', @@ -29,10 +32,15 @@ export default [ ], }, //日历组件暂时用 - { - path: '/Calendar', - component: './MainPage/ProjectManager/components/CalendarForm', - }, + // { + // path: '/Calendar', + // component: './MainPage/ProjectManager/components/CalendarForm', + // }, + //富文本组件 + // { + // path: '/editor', + // component: './MainPage/ProjectManager/components/WangEditor', + // }, //401错误页 { exact: true, @@ -71,6 +79,14 @@ export default [ }, ], }, + {//内拍-参与竞拍列表 + path: '/AuctionParticipateList', + component: './Auction/AuctionParticipateList', + }, + {//内拍-参与竞拍详情 + path: '/AuctionParticipateDetail', + component: './Auction/AuctionParticipateDetail', + }, {//公共服务平台 path: '/PublicPlatform', component: './Bid/BiddingAnnouncement/components/PublicPlatform', @@ -134,7 +150,7 @@ export default [ path: '/notice', routes: [ { name: 'noticeList', path: '/notice/noticeList', component: './notice/noticeList/components/NoticeList' },//通知公告查看-所有角色 - { name: 'noticeManage', path: '/notice/noticeManage', component: './notice/noticeManage/components/noticeManage' },//通知公告管理-系统管理员 + { name: 'noticeManage', path: '/notice/noticeManage', component: './notice/noticeManage/components/NoticeManage' },//通知公告管理-系统管理员 ] }, {//委托 @@ -145,12 +161,12 @@ export default [ {//管理员-代理 name: 'manager', path: '/Project/EntrustAssign/Manager', - component: './Project/EntrustAssign/Manager', + component: './Project/EntrustAssign/manager', }, {//项目经理-代理 name: 'operator', path: '/Project/EntrustAssign/Operator', - component: './Project/EntrustAssign/Operator', + component: './Project/EntrustAssign/operator', }, {//采购经理的委托管理 name: 'mandatoryAdministration', @@ -232,7 +248,7 @@ export default [ path: '/Supervision', component: './Project/ProjectManage/Supervision' }, - {//审查人员 项目管理页 + {//审查人员 项目管理页 name: 'Examination', path: '/Examination', component: './Project/ProjectManage/Examination' diff --git a/config/router_partyMemberTopic.ts b/config/router_partyMemberTopic.ts new file mode 100644 index 0000000..45847b2 --- /dev/null +++ b/config/router_partyMemberTopic.ts @@ -0,0 +1,53 @@ +export default [ + { + name: '党建攻坚', + path: '/partyMemberTopic', + routes: [ + {//首页 + name: 'home', + path: '/partyMemberTopic/home', + component: './PartyMemberTopic/Home', + }, + { //物资采购与管理专业线 党支部 省分 + name: 'partyBranch', + path: '/partyMemberTopic/partyBranch', + component: './PartyMemberTopic/PartyBranch', + }, + { //物资采购与管理专业线 党支部数据 + name: 'partyBranches', + path: '/partyMemberTopic/partyBranches', + component: './PartyMemberTopic/PartyBranches', + }, + { //物资采购与管理专业线 党支部人员信息 + name: 'personInfor', + path: '/partyMemberTopic/personInfor', + component: './PartyMemberTopic/PersonInfor', + }, + { // 攻坚克难项目 更多 + name: 'overDifficult', + path: '/partyMemberTopic/overDifficult', + component: './PartyMemberTopic/OverDifficult', + }, + { // 活动风采 更多 + name: 'activityStyle', + path: '/partyMemberTopic/activityStyle', + component: './PartyMemberTopic/ActivityStyle', + }, + { // 攻坚克难详情 + name: 'hardDetail', + path: '/partyMemberTopic/hardDetail', + component: './PartyMemberTopic/HardDetail', + }, + { // 活动风采和banner详情 + name: 'newsDetail', + path: '/partyMemberTopic/newsDetail', + component: './PartyMemberTopic/NewsDetail', + }, + {//管理端首页 + name: 'manage', + path: '/partyMemberTopic/manage', + component: './PartyMemberTopic/Management/Manage', + }, + ] + }, +]; \ No newline at end of file diff --git a/public/Weboffice4Path.html b/public/Weboffice4Path.html index aa62682..94164a5 100644 --- a/public/Weboffice4Path.html +++ b/public/Weboffice4Path.html @@ -1,12 +1,13 @@ + - - + + 招标采购中心 | 文档控件编辑器 - - - + + + -
-
- - 中国联通智慧供应链平台 | 招标采购中心 +
+ + 中国联通智慧供应链平台 | + 招标采购中心 +
-
-
- - - -
- -
- -
+ function closeBTN() { + window.open('', '_parent', ''); + window.close(); + } + //调用文档通用属性方法 1-打开 2-保存(另存为) 4-打印 + function generalProp(param) { + var name = '新建文本文档'; + if (fileName != null) { + name = fileName; + } + TANGER_OCX.WebFileName = name + "." + fileType;//文档默认名称 + TANGER_OCX.ShowDialog(param) + } + +
+ +
- + \ No newline at end of file diff --git a/public/bidOpening/bidOpening.html b/public/bidOpening/bidOpening.html index 04acc0c..2266398 100644 --- a/public/bidOpening/bidOpening.html +++ b/public/bidOpening/bidOpening.html @@ -1,11 +1,13 @@ - + + 开标大厅-招标采购中心 +
@@ -23,18 +25,18 @@

当前时间:

- / - / - - : - : - + / + / + + : + : +

- + @@ -46,7 +48,7 @@ - + @@ -54,7 +56,7 @@ - +
序号
@@ -79,7 +81,7 @@ var roleCode = role.roleCode; var tpId = obj.id; var proMethod = obj.bidMethodDict; - if(proMethod==="procurement_mode_1"||proMethod==="procurement_mode_2"){ + if (proMethod === "procurement_mode_1" || proMethod === "procurement_mode_2") { $("#bdname").text("标段名称"); $("#bdnumber").text("标段编号"); } else { @@ -88,71 +90,71 @@ } $.ajax({ - url:"/api/biz-service-ebtp-opening/v1/bizbidopenroom/openRoomList/"+tpId, - data:{ - pageNo:"1", - pageSize:"1000", - roomType:roomType + url: "/api/biz-service-ebtp-opening/v1/bizbidopenroom/openRoomList/" + tpId, + data: { + pageNo: "1", + pageSize: "1000", + roomType: roomType }, - headers:{ - "Authorization":token + headers: { + "Authorization": token }, - type:"GET", - success:function(re){ - + type: "GET", + success: function (re) { + var list = re.data.records; var tr = ""; - for(var i = 0 ; i < list.length ; i++){ - tr=tr+""; - tr=tr+""+(i+1)+""; - tr=tr+""+(list[i].sectionName)+""; - tr=tr+""+(list[i].sectionNo)+""; - tr=tr+""+(list[i].opingTime)+""; - tr=tr+""+(getRoomStateValue(list[i].roomState))+""; - tr=tr+""; - if(list[i].roomState!="9"){ - tr=tr+""; + for (var i = 0; i < list.length; i++) { + tr = tr + ""; + tr = tr + "" + (i + 1) + ""; + tr = tr + "" + (list[i].sectionName) + ""; + tr = tr + "" + (list[i].sectionNo) + ""; + tr = tr + "" + (list[i].opingTime) + ""; + tr = tr + "" + (getRoomStateValue(list[i].roomState)) + ""; + tr = tr + ""; + if (list[i].roomState != "9") { + tr = tr + ""; } - if(roleCode=="ebtp-agency-project-manager"||roleCode=="ebtp-purchase"){ + if (roleCode == "ebtp-agency-project-manager" || roleCode == "ebtp-purchase") { var openTime = list[i].opingTime; - tr=tr+""; - + tr = tr + ""; + } - tr=tr+""; + tr = tr + ""; } $("#dataDev").html(""); $("#dataDev").append(""); $("#dataTr").append("") - .append("") - .append("") - .append("") - .append("") - .append(""); + .append("") + .append("") + .append("") + .append("") + .append(""); $("#dataDev").append(tr); } }); - - function getRoomStateValue(state){ + + function getRoomStateValue(state) { // 0未开标 1、开标 2、唱标 3、唱标结束 4、取消开标' var value = ""; - if(state=="0"){ - value ="未开标"; + if (state == "0") { + value = "未开标"; } - if(state=="1"){ - value ="已开标"; + if (state == "1") { + value = "已开标"; } - if(state=="2"){ - value ="唱标"; + if (state == "2") { + value = "唱标"; } - if(state=="3"){ - value ="唱标结束"; - } - if(state=="4"){ - value ="取消开标"; - } - if(state=="9"){ - value ="异常处理"; + if (state == "3") { + value = "唱标结束"; + } + if (state == "4") { + value = "取消开标"; + } + if (state == "9") { + value = "异常处理"; } return value; }; @@ -163,14 +165,14 @@ var m = 0; var s = 0; var timestamp = 0; - function getTime(){ + function getTime() { $.ajax({ - url:"/api/biz-service-ebtp-extend/v1/timeService/getServiceSystemTime", - headers:{ - "Authorization":token + url: "/api/biz-service-ebtp-extend/v1/timeService/getServiceSystemTime", + headers: { + "Authorization": token }, - type:"GET", - success:function(re){ + type: "GET", + success: function (re) { n = re.data.year; y = re.data.month; t = re.data.date; @@ -179,65 +181,65 @@ s = re.data.second; timestamp = re.data.timestamp; } - }); + }); } getTime(); setInterval(getTime, 30000); function time() { - s = s+1; - if(s==60){ + s = s + 1; + if (s == 60) { s = 1; - m=m+1; + m = m + 1; } - if(m==60){ + if (m == 60) { m = 1; - h=h+1; + h = h + 1; } - if(h==24){ + if (h == 24) { h = 0; - t = t+1; + t = t + 1; } - $('#dateTime span').eq(0).html(n); - $('#dateTime span').eq(1).html(y<10?"0"+y:y); - $('#dateTime span').eq(2).html(t<10?"0"+t:t); - $('#dateTime span').eq(3).html(h<10?"0"+h:h); - $('#dateTime span').eq(4).html(m<10?"0"+m:m); - $('#dateTime span').eq(5).html(s<10?"0"+s:s); - for (var i = 0; i < $('#dateTime').length; i++) { - if ($('div').eq(i).text().length == 1) { - $('div').eq(i).html(function(index, html) { - return 0 + html; - }); - } - } - } - time(); - setInterval(time, 1000); - - function onClickToOpenRoom(aa,bb,cc,roomType,roomState){ - if(roomState==0){ - window.open("countDown.html?aa="+aa+"&bb="+bb+"&cc="+cc+"&roomType="+roomType); - }else if(roomState>0){ - window.open("/room/index?aa="+aa+"&bb="+bb+"&roomType="+roomType); + $('#dateTime span').eq(0).html(n); + $('#dateTime span').eq(1).html(y < 10 ? "0" + y : y); + $('#dateTime span').eq(2).html(t < 10 ? "0" + t : t); + $('#dateTime span').eq(3).html(h < 10 ? "0" + h : h); + $('#dateTime span').eq(4).html(m < 10 ? "0" + m : m); + $('#dateTime span').eq(5).html(s < 10 ? "0" + s : s); + for (var i = 0; i < $('#dateTime').length; i++) { + if ($('div').eq(i).text().length == 1) { + $('div').eq(i).html(function (index, html) { + return 0 + html; + }); + } } - - //window.open("http://10.242.31.158:18022/room/index?aa=1369571546133168128&bb=1&roomType=1"); } - function onClickDown(id,bsId){ - window.open("/api/biz-service-ebtp-opening/v1/bizbidopenroom/exportTenderRecords/"+bsId+"?roomType="+roomType); - } + time(); + setInterval(time, 1000); - function getQueryVariable(variable) - { + function onClickToOpenRoom(aa, bb, cc, roomType, roomState) { + if (roomState == 0) { + window.open("countDown.html?aa=" + aa + "&bb=" + bb + "&cc=" + cc + "&roomType=" + roomType); + } else if (roomState > 0) { + window.open("/room/index?aa=" + aa + "&bb=" + bb + "&roomType=" + roomType); + } + + //window.open("http://10.242.31.158:18022/room/index?aa=1369571546133168128&bb=1&roomType=1"); + } + function onClickDown(id, bsId) { + window.open("/api/biz-service-ebtp-opening/v1/bizbidopenroom/exportTenderRecords/" + bsId + "?roomType=" + roomType); + } + + function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); - for (var i=0;i + \ No newline at end of file diff --git a/public/bidOpening/countDown.html b/public/bidOpening/countDown.html index ad8fbe2..7ca4073 100644 --- a/public/bidOpening/countDown.html +++ b/public/bidOpening/countDown.html @@ -1,11 +1,13 @@ - + + 开标倒计时-招标采购中心 +
@@ -18,12 +20,12 @@
- 00/ - 00/ - 00 - 00: - 00: - 00 + 00/ + 00/ + 00 + 00: + 00: + 00
@@ -91,7 +93,7 @@ var roleCode = role.roleCode; $("#deptName").html(obj.deptName); - var service_opentime="";//开标时间 + var service_opentime = "";//开标时间 var openState = 0;//未开 var projectId = ""; var sectionId = ""; @@ -102,14 +104,14 @@ var oping_h = 0; var oping_m = 0; var oping_s = 0; - function getOpening(){ + function getOpening() { $.ajax({ - url:"/api/biz-service-ebtp-opening/v1/bizbidopenroom/getOpenRoomById/"+openRoomId, - headers:{ - "Authorization":token + url: "/api/biz-service-ebtp-opening/v1/bizbidopenroom/getOpenRoomById/" + openRoomId, + headers: { + "Authorization": token }, - type:"GET", - success:function(re){ + type: "GET", + success: function (re) { var data = re.data; $("#projectName").html(data.projectName); $("#projectNumber").html(data.ebpProjectNumber); @@ -118,7 +120,7 @@ openState = data.roomState; projectId = data.projectId; sectionId = data.sectionId; - if(data.opingTime!=null&&data.opingTime!=""){ + if (data.opingTime != null && data.opingTime != "") { service_opentime = data.opingTime; $("#openTime").html(data.opingTime); var openTime = data.opingTime.split(" "); @@ -135,9 +137,9 @@ getTimer = setInterval(getTime, 30000);//开标时间修正 getDescOpenRoomTime(); getDescOpenRoomTimer = setInterval(getDescOpenRoomTime, 30000);//剩余时间修正 - + systemTimer = setInterval(systemTime, 1000);//系统时间计算 - }else{ + } else { $("#openTime").html("开标日期异常") } } @@ -151,17 +153,17 @@ var h = 0; var m = 0; var s = 0; - + //获取开标时间 - function getTime(){ + function getTime() { $.ajax({ - url:"/api/biz-service-ebtp-extend/v1/timeService/getServiceSystemTime", - headers:{ - "Authorization":token + url: "/api/biz-service-ebtp-extend/v1/timeService/getServiceSystemTime", + headers: { + "Authorization": token }, - async:true, - type:"GET", - success:function(re){ + async: true, + type: "GET", + success: function (re) { n = re.data.year; y = re.data.month; t = re.data.date; @@ -169,200 +171,200 @@ m = re.data.minute; s = re.data.second; } - }); + }); } - - + + var dd = 0; var hh = 0; var mm = 0; var ss = 0; - + //获取剩余时间差 - function getDescOpenRoomTime(){ + function getDescOpenRoomTime() { $.ajax({ - url:"/api/biz-service-ebtp-extend/v1/timeService/getDescOpenRoomTime", - data:{ - openTime:service_opentime + url: "/api/biz-service-ebtp-extend/v1/timeService/getDescOpenRoomTime", + data: { + openTime: service_opentime }, - headers:{ - "Authorization":token + headers: { + "Authorization": token }, - async:true, - type:"GET", - success:function(re){ + async: true, + type: "GET", + success: function (re) { dd = re.data.date; hh = re.data.hour; mm = re.data.minute; ss = re.data.second; } - }); + }); } var timeover = false; //系统时间定时更新 function systemTime() { - s = s+1; - if(s==60){ + s = s + 1; + if (s == 60) { s = 1; - m=m+1; + m = m + 1; } - if(m==60){ + if (m == 60) { m = 1; - h=h+1; + h = h + 1; } - if(h==24){ + if (h == 24) { h = 0; - t = t+1; + t = t + 1; } - $('#dateTime span').eq(0).html(n); - $('#dateTime span').eq(1).html(y<10?"0"+y:y); - $('#dateTime span').eq(2).html(t<10?"0"+t:t); - $('#dateTime span').eq(3).html(h<10?"0"+h:h); - $('#dateTime span').eq(4).html(m<10?"0"+m:m); - $('#dateTime span').eq(5).html(s<10?"0"+s:s); - for (var i = 0; i < $('#dateTime').length; i++) { - if ($('div').eq(i).text().length == 1) { - $('div').eq(i).html(function(index, html) { - return 0 + html; - }); - } - } - if(!timeover){ - openJsystemTime(); + $('#dateTime span').eq(0).html(n); + $('#dateTime span').eq(1).html(y < 10 ? "0" + y : y); + $('#dateTime span').eq(2).html(t < 10 ? "0" + t : t); + $('#dateTime span').eq(3).html(h < 10 ? "0" + h : h); + $('#dateTime span').eq(4).html(m < 10 ? "0" + m : m); + $('#dateTime span').eq(5).html(s < 10 ? "0" + s : s); + for (var i = 0; i < $('#dateTime').length; i++) { + if ($('div').eq(i).text().length == 1) { + $('div').eq(i).html(function (index, html) { + return 0 + html; + }); + } } - } + if (!timeover) { + openJsystemTime(); + } + } //剩余时间定时 - function openJsystemTime(){ + function openJsystemTime() { - ss = ss-1; - if(ss<0){ - if(mm>0&&hh>0&&dd>0){ - mm = mm-1; + ss = ss - 1; + if (ss < 0) { + if (mm > 0 && hh > 0 && dd > 0) { + mm = mm - 1; ss = 59; - }else{ + } else { ss = 0; } - + } - if(mm<0){ - if(hh>0&&dd>0){ - hh = hh-1; + if (mm < 0) { + if (hh > 0 && dd > 0) { + hh = hh - 1; mm = 59; - }else{ + } else { mm = 0 } } - if(hh<0){ - if(dd>0){ - dd = dd-1; + if (hh < 0) { + if (dd > 0) { + dd = dd - 1; hh = 23; - }else{ + } else { dd = 0; } } - if(dd<0){ + if (dd < 0) { dd = 0; } - if(roleCode=="ebtp-agency-project-manager"||roleCode=="ebtp-purchase") { + if (roleCode == "ebtp-agency-project-manager" || roleCode == "ebtp-purchase") { $("#openButton").text('开 标'); } else { $("#openButton").text('进入开标大厅'); - if(openState==0){ + if (openState == 0) { $("#openButton").hide(); } else { $("#openButton").show(); } } - - if(ss<=0&&mm<=0&&hh<=0&&dd<=0){ + + if (ss <= 0 && mm <= 0 && hh <= 0 && dd <= 0) { dd = 0; hh = 0; mm = 0; ss = 0; //可以开标 - $("#openButton").removeClass("countBtn01").attr("class","countBtn countBtn02"); - $("#openButton").bind("click",function(){ - if(openState==0){ - if(roleCode=="ebtp-agency-project-manager"||roleCode=="ebtp-purchase"){ + $("#openButton").removeClass("countBtn01").attr("class", "countBtn countBtn02"); + $("#openButton").bind("click", function () { + if (openState == 0) { + if (roleCode == "ebtp-agency-project-manager" || roleCode == "ebtp-purchase") { opening();//未开标先开标 - }else{ + } else { supplierOpening();//供应商进入开标室 } - - }else{//否则直接进入 + + } else {//否则直接进入 onClickToOpenRoom(); } - + }) //可以开标后 结束除系统时间更新外所有定时 clearInterval(getTimer); clearInterval(getDescOpenRoomTimer); - timeover=true; + timeover = true; } - - $("#dd").html(dd<10?"00"+dd:dd<100?"0"+dd:dd); - $("#hh").html(hh<10?"0"+hh:hh); - $("#mm").html(mm<10?"0"+mm:mm); - $("#ss").html(ss<10?"0"+ss:ss); - } - - function opening(){ - var puData = {"projectId":projectId,"sectionId":sectionId,"id":openRoomId,"roomState":"1"}; + $("#dd").html(dd < 10 ? "00" + dd : dd < 100 ? "0" + dd : dd); + $("#hh").html(hh < 10 ? "0" + hh : hh); + $("#mm").html(mm < 10 ? "0" + mm : mm); + $("#ss").html(ss < 10 ? "0" + ss : ss); + } + + + function opening() { + var puData = { "projectId": projectId, "sectionId": sectionId, "id": openRoomId, "roomState": "1" }; $.ajax({ - url:"/api/biz-service-ebtp-opening/v1/bizbidopenroom/updateOpenRoom", - data:JSON.stringify(puData), - contentType : 'application/json', - dataType:"json", - headers:{ - "Authorization":token, - "token":token + url: "/api/biz-service-ebtp-opening/v1/bizbidopenroom/updateOpenRoom", + data: JSON.stringify(puData), + contentType: 'application/json', + dataType: "json", + headers: { + "Authorization": token, + "token": token }, - type:"PUT", - success:function(re){ + type: "PUT", + success: function (re) { //开标成功进入开标室 - if(re.success){ + if (re.success) { onClickToOpenRoom(); - }else{ + } else { alert(re.message); } }, - error:function(re){ + error: function (re) { alert(re.message); } - }); + }); } - function supplierOpening(){ + function supplierOpening() { //重新获取开标室信息 getOpening(); - if(openState==0){ + if (openState == 0) { alert("请等待业务经理开标"); - }else{ + } else { onClickToOpenRoom(); } } - - function onClickToOpenRoom(){ - window.location.href="/room/index?aa="+aa+"&bb="+bb+"&roomType="+roomType; - } - function getQueryVariable(variable) - { + function onClickToOpenRoom() { + window.location.href = "/room/index?aa=" + aa + "&bb=" + bb + "&roomType=" + roomType; + } + + function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); - for (var i=0;i + \ No newline at end of file diff --git a/public/ntkoStyle.css b/public/ntkoStyle.css deleted file mode 100644 index 7b6c2e4..0000000 --- a/public/ntkoStyle.css +++ /dev/null @@ -1,175 +0,0 @@ -body{ - text-align:center; - font-family:"微软雅黑"; - letter-spacing:0.05em; - color:#575757; - font-size:16px; - margin:0px; -} -a{ - text-decoration:none; - cursor:pointer; - color:#299ceb; -} -a:hover{ - text-decoration:underline; - color:#c60000; -} -hr{ - border:0px; - border-bottom:1px #b0b0b0 solid; - margin:50px 0px 30px 0px; -} -p{ - text-align:left; - line-height:1.6; - text-indent:2em; -} - -.divTop{ - width:100%; - height:70px; - text-align:center; - background-color:#000000; - top:0; -} -.divTopInner{ - width:1200px; - text-align:left; - color:#ffffff; - line-height:70px; - margin:auto; -} -.divTopInnerCaption{ - width:1150px; - font-size:20px; - float:left; -} -.divTopInnerNtko{ - width:50px; - font-size:14px; - text-align:center; - float:left; - cursor:pointer; -} -.divTopInnerNtko:hover{ - background-color:#c60000; -} -.divTopInner a{ - color:#ffffff; - text-decoration:none; -} - -.divTitle{ - width:100%; - height:80px; - line-height:80px; - border-bottom:1px #bababa solid; - margin-bottom:10px; -} -.divTitle_body{ - width:1200px; - text-align:left; - margin:auto; -} -.divTitle_caption{ - width:100%; - float:left; - color:#c60000; - font-size:36px; - font-weight:bold; - -} -.divTitle_caption_small{ - width:100%; - float:left; - color:#c60000; - font-size:24px; - font-weight:bold; - height:50px; - line-height:50px; -} -.divTitle_Information{ - width:100%; - float:left; - color:#999999; - font-size:14px; - height:auto; - line-height:24px; - margin:20px 0px 30px 0px; -} -.divTitle_Information_Left{ - width:40px; - height:40px; - line-height:40px; - background-color:#ffde00; - float:left; - text-align:center; - font-size:20px; - font-weight:bolder; - color:#ffffff; - margin:auto 20px auto auto; -} -.divTitle_Information_Right{ - width:1140px; - height:40px; - line-height:40px; - float:left; - font-size:16px; -} -.divTitle_introduction{ - width:100%; - float:left; - color:#999999; - font-size:14px; - height:auto; - line-height:24px; -} - -.divBody{ - width:1200px; - margin:10px auto; - text-align:left; -} -.divBody_Title{ - width:100%; - height:40px; - font-size:16px; - margin:40px 0px 0px 0px; -} -.divBody_Title_Flag{ - width:5px; - height:40px; - font-size:16px; - float:left; - background-color:#a10000; - margin:0px 20px 10px 0px; -} -.divBody_Table_Caption{ - width:1175px; - height:40px; - line-height:40px; - font-size:24px; - font-weight:bolder; - color:#999999; - float:left; -} -table{ - border-collapse:collapse; - width:100%; -} -td{ - border:1px #e0e0e0 solid; - height:60px; - text-align:center; - color:#999999; - font-size:14px; - padding:20px; -} -.divBody_Table_RowTitle{ - font-size:18px; - font-weight:bolder; - color:#ffffff; - background-color:#e0e0e0; -} - \ No newline at end of file diff --git a/public/ntkobackground.min.js b/public/ntkobackground.min.js deleted file mode 100644 index d655395..0000000 --- a/public/ntkobackground.min.js +++ /dev/null @@ -1,667 +0,0 @@ -/** - * version: 2.3.2 - * - * 2020.07.10版本 跟随 招商银行股份有限公司20200730 产品发送 - * 2021.04.29版本 增加兼容Edge浏览器的判断逻辑 zhoujianlong - */ -"use strict"; -var varNtkoGUID = Math.random().toString(36); -var ntkoWinOpen; -var ntkoJsonIe; -var timer; -var ntkoSendDataToChildStrUrl; -var ntkoSendDataToChildSData; -var ntkowin; -var userAgent = navigator.userAgent, - rMsie = /(msie\s|trident.*rv:)([\w.]+)/, - rFirefox = /(firefox)\/([\w.]+)/, - rOpera = /(opera).+versi1on\/([\w.]+)/, - rChrome = /(chrome)\/([\w.]+)/, - rEdge = /(edg)\/([\w.]+)/, - rSafari = /version\/([\w.]+).*(safari)/; - var browser; - var version; - var ntkoextensionmainifest; - var ua = userAgent.toLowerCase(); - function uaMatch(ua) { - var match = rMsie.exec(ua); - if (match != null) { - return { browser : "IE", version : match[2] || "0" }; - } - var match = rFirefox.exec(ua); - if (match != null) { - return { browser : match[1] || "", version : match[2] || "0" }; - } - var match = rOpera.exec(ua); - if (match != null) { - return { browser : match[1] || "", version : match[2] || "0" }; - } - var match = rChrome.exec(ua); - if (match != null) { - var matchedge= rEdge.exec(ua); - if(matchedge!=null){ - return { browser : matchedge[1] || "", version : matchedge[2] || "0" }; - }else{ - return { browser : match[1] || "", version : match[2] || "0" }; - } - } - var match = rSafari.exec(ua); - if (match != null) { - return { browser : match[2] || "", version : match[1] || "0" }; - } - if (match != null) { - return { browser : "", version : "0" }; - } - } - var browserMatch = uaMatch(userAgent.toLowerCase()); - if (browserMatch.browser) { - browser = browserMatch.browser; - version = browserMatch.version; - } - var mimeTypes = navigator.mimeTypes; - var bChromeExtensionInstalled = false; - - if( "chrome" === browserMatch.browser && version>="45") - { - - var img; - img = new Image(); - img.src = "chrome-extension://lppkeogbkjlmmbjenbogdndlgmpiddda/icons/ntko.png"; - img.onload = function() { - bChromeExtensionInstalled = true; - }; - img.onerror = function() { - bChromeExtensionInstalled = false; - }; - } - if("edg"===browserMatch.browser){ - - var img; - img = new Image(); - img.src = "chrome-extension://nldmejlecnngjgcfpinfkdhkfakjeail/icons/ntko.png"; - img.onload = function() { - bChromeExtensionInstalled = true; - }; - img.onload = function() { - bChromeExtensionInstalled = true; - }; - } - -var ntkoBrowser = { -ntkoSendDataToChild:function( strURL, data) -{ - if ( typeof data === 'undefined' ){ - return; - } - var strURL=ntkoBrowser.NtkoStrURL(strURL); - var jsonValue = '{"SendDataToChild":1,"GUID":"'; - jsonValue += varNtkoGUID; - jsonValue += '","URLMD5":"'; - jsonValue += b64_md5(strURL); - jsonValue += '","ChildValue":"'; - jsonValue += data; - jsonValue += '"}'; - var ntkobr=ntkoBrowser.NtkoBrower(); - if(ntkobr){ - window.postMessage({ type: "FROM_NTKO_PAGE", text: jsonValue }, "*"); - }else{ - ntkoWinOpen.ntkoGetParentData(data); - } -}, -ExtensionInstalled:function() -{ - var ntkobr=ntkoBrowser.NtkoBrower(); - if(!ntkobr){ - if(browser=="IE"){ - return true; - }else{ - var mimetype=navigator.mimeTypes["application/ntko-plug"]; - if(mimetype){ - var plugin=mimetype.enabledPlugin; - if(plugin){ - return true; - }else{ - return false; - } - }else{ - return false; - } - } - } - else - { - if( "firefox" === browserMatch.browser ) - { - var bInstalled = false; - if( "undefined" === typeof FirefoxInstalled ) - return ( bInstalled ); - else - return( window.FirefoxInstalled()); - } - else if( "chrome" === browserMatch.browser ) - { - if(localStorage["ntkoweb"]==="ntkoExtensionInstalled"){ - bChromeExtensionInstalled=true; - localStorage.clear(); - } - return (bChromeExtensionInstalled); - }else if("edg" === browserMatch.browser){ - if(( typeof ntkoextensionmainifest != 'undefined' ) && ( ( null != ntkoextensionmainifest ) && ( "" != ntkoextensionmainifest ))){ - return true; - }else{ - return( bChromeExtensionInstalled ); - } - } - } -}, - -ntkoClose:function( strURL ) -{ - var strURL=ntkoBrowser.NtkoStrURL(strURL); - var jsonValue = '{"Close":1,"GUID":"'; - jsonValue += varNtkoGUID; - jsonValue += '","URLMD5":"'; - jsonValue += b64_md5(strURL); - jsonValue += '"}'; - var ntkobr=ntkoBrowser.NtkoBrower(); - if(ntkobr){ - window.postMessage({ type: "FROM_NTKO_PAGE", text: jsonValue }, "*"); - }else{ - ntkoWinOpen.close(); - } -}, -openWindow:function( strURL,IsShowOnExtendMonitor,ProductCaption, ntkoBrowserProductKey, ntkoBrowserNoExpireKey, ntkoBrowserOptions,varUrlData,ntkowidth,ntkoheight ) -{ - - if(varUrlData!=null&&varUrlData!=""){ - ntkoSendDataToChildSData=varUrlData; - } - var ntkowinscr= ntkoBrowser.NtkoWidthAndHeightWinScr(ntkowidth,ntkoheight); - if(!ntkowinscr){ - alert("设置窗口大小格式不正确"); - return; - } - var strURL=ntkoBrowser.NtkoStrURL(strURL); - var jsonValue = '{"OpenWindow":1,"URL":"'; - jsonValue += strURL; - jsonValue += '","GUID":"'; - jsonValue += varNtkoGUID; - jsonValue += '","URLMD5":"'; - jsonValue +=b64_md5(strURL); - jsonValue += '","ntkobrowserMatch":"'; - jsonValue +=browserMatch.browser; - jsonValue += '","IsShowOnExtendMonitor":"'; - jsonValue += IsShowOnExtendMonitor; - jsonValue += '"'; - if( ( typeof ProductCaption != 'undefined' ) && ( ( null != ProductCaption ) && ( "" != ProductCaption ) ) ) - { - jsonValue += ',"ProductCaption":"'; - jsonValue += ProductCaption; - jsonValue += '"'; - } - - if( ( typeof ntkoBrowserProductKey != 'undefined' ) && ( ( null != ntkoBrowserProductKey ) && ( "" != ntkoBrowserProductKey ) ) ) - { - jsonValue += ',"ProductKey":"'; - jsonValue += ntkoBrowserProductKey; - jsonValue += '"'; - } - - if( ( typeof ntkoBrowserNoExpireKey != 'undefined' ) && ( ( null != ntkoBrowserNoExpireKey ) &&( "" != ntkoBrowserNoExpireKey ) ) ) - { - jsonValue += ',"NoExpireKey":"'; - jsonValue += ntkoBrowserNoExpireKey; - jsonValue += '"'; - } - - if( typeof ntkoBrowserOptions != 'undefined' && ( ( null != ntkoBrowserOptions ) && ( "" != ntkoBrowserOptions ) ) ) - { - jsonValue += ',"Options":"'; - jsonValue += ntkoBrowserOptions; - jsonValue += '"'; - } - var LocalStorge = window.localStorage; - if( typeof LocalStorge != 'undefined' && ( 0 != LocalStorge.length ) ) - { - var varLocalDataList = []; - for( var i = 0; i < LocalStorge.length; i++ ) - { - var varLocalData = {}; - varLocalData["StorageKey"] = LocalStorge.key(i); - varLocalData["StorageValue"] = LocalStorge.getItem(LocalStorge.key(i)); - varLocalDataList[i] = varLocalData; - } - jsonValue += ',"LocalStorge":'; - jsonValue += JSON.stringify(varLocalDataList);; - jsonValue += ''; - } - - var SessionStorge = window.sessionStorage; - if( typeof SessionStorge != 'undefined' && ( 0 != SessionStorge.length ) ) - { - var varSessionDataList = []; - for( var i = 0; i < SessionStorge.length; i++ ) - { - var varSessionData = {}; - varSessionData["StorageKey"] = SessionStorge.key(i); - varSessionData["StorageValue"] = SessionStorge.getItem(SessionStorge.key(i)); - varSessionDataList[i] = varSessionData; - } - - jsonValue += ',"SessionStorge":'; - jsonValue += JSON.stringify(varSessionDataList); - jsonValue += ''; - } - if( typeof ntkowidth != 'undefined' && ( ( null != ntkowidth ) && ( "" != ntkowidth ) ) ) - { - jsonValue += ',"NtkoWidth":'; - jsonValue += ntkowidth; - jsonValue += ''; - } - - if( typeof ntkoheight != 'undefined' && ( ( null != ntkoheight ) && ( "" != ntkoheight ) ) ) - { - jsonValue += ',"NtkoHeight":'; - jsonValue += ntkoheight; - jsonValue += ''; - } - - - jsonValue += '}'; - var ntkobr=ntkoBrowser.NtkoBrower(); - if(ntkobr){ - window.postMessage({type: "FROM_NTKO_PAGE", text: jsonValue}, "*"); - }else{ - ntkowin=b64_md5(strURL); - if(ntkowidth==null||ntkowidth=="" ||ntkowidth=="undefined"){ - ntkowidth=window.screen.width; - } - if(ntkoheight==null||ntkoheight==""||ntkoheight=="undefined"){ - ntkoheight=window.screen.height; - } - ntkoWinOpen=window.open(strURL+'&varNtkoGUID='+varNtkoGUID,ntkowin,"height="+ntkoheight+", width="+ntkowidth+", top=0,left=0,titlebar=no,toolbar =no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no"); - ntkoWinOpen.resizeTo(ntkowidth,ntkoheight); - ntkoWinOpen.focus(); - } - }, - NtkoWShell:function(){ - - }, - NtkoiTop:function(){ - return (window.screen.height-30-300)/2; - }, - NtkoiLeft:function(){ - return (window.screen.width-10-400)/2; - }, - NtkoBrower:function(){ - if(browser=="IE"){ - return false; - } - if(browser=="firefox"){ - if(userAgent.indexOf("Windows NT 5.1") > -1){ - return false; - } - if(version>="50"){ - return true; - }else{ - return false; - } - } - if(browser=="chrome"){ - if(userAgent.indexOf("Windows NT 5.1") > -1){ - return false; - } - if(version>="45"){ - return true; - }else{ - return false; - } - } - if(browser=="edg"){ - return true; - } - }, -NtkoStrURL:function(strURL){ - var testurl =window.location.search; - var docUrl=document.location.toString(); - var wpathname= window.document.location.pathname; - var pos=docUrl.indexOf(wpathname); - var relUrl= docUrl.substring(0,pos); - if( ( null === strURL ) || ( "" === strURL ) ) - { - alert("打开路径的url为null"); - return; - } - var strLowser = strURL.toLowerCase(); - if( '/' != strURL.charAt(0) ) - { - if( ( "http://" === strLowser.substr(0,7) ) || ( "https://" === strLowser.substr(0,8) ) ) - {} - else - { - if(strURL.indexOf("../")==-1) - { - var pathName = window.location.href; - var varLength = pathName.lastIndexOf("/"); - strURL = pathName.substr( 0, varLength + 1 ) + strURL; - } - else - { - var strURLlen=strURL.length; - strURL=strURL.substring(2,strURLlen); - strURL = relUrl +strURL; - } - if(strURL.indexOf(testurl)==-1) - { - if(strURL.indexOf("?")==-1) - { - strURL=strURL+testurl - } - else - { - var docof= strURL.indexOf("?"); - var docend=strURL.length; - var docs=strURL.substring(0,docof); - var docsurl=strURL.substring(docof+1,docend); - strURL=docs+testurl+"&"+docsurl; - } - } - } - } - else - { - var strURLlen=strURL.length; - strURL=strURL.substring(0,strURLlen); - strURL = relUrl+ strURL; - } - return strURL; - }, -NtkoWidthAndHeightWinScr:function(ntkowidth,ntkoheight){ - - var regNtko=/^\s*$/; - if(typeof(ntkowidth)=="undefined"&&typeof(ntkoheight)=="undefined"){ - return true; - }else{ - if(regNtko.test(ntkowidth)||typeof(ntkowidth)!="number"){ - return false; - }else{ - if(regNtko.test(ntkoheight)||typeof(ntkoheight)!="number"){ - return false; - }else{ - return true; - } - } - } - }, - thisNTKOGUID:varNtkoGUID, -}; - -if(browser!="IE") -{ - window.addEventListener("message", function(event) - { - if ( event.source != window ) - return; - if (event.data.type && (event.data.type == "FROM_NTKO_CONTEXT_PAGE")) - { - var vJsonData = JSON.parse( event.data.text ); - var jsonData = vJsonData["ntkoData"]; - if( typeof jsonData !== "undefined" ) - { - if( varNtkoGUID === jsonData["ntkoGUID"] ) - { - if( "ntkoClose" === jsonData["functionName"] ) - { - // 调用关闭事件 - try - { - eval('ntkoCloseEvent()'); - } - catch(e) - {} - } - else if( "ntkoReturnValueToParentPage" === jsonData["functionName"] ) - { - // 调用返回值事件,解析值 - var varFunctionName = jsonData["parentExecutionFunction"]; // 要执行的函数名 - if( typeof varFunctionName != 'undefined' && ( ( null != varFunctionName ) && ( "" != varFunctionName ) ) ) - { - var varFunctionAgrvs = jsonData["FunctionArgs"]; // 传递过来的参数值 - if( typeof varFunctionAgrvs != 'undefined' && ( ( null != varFunctionAgrvs ) && ( "" != varFunctionAgrvs ) ) ) - { - // 调用eval执行函数 - eval( varFunctionName + "( varFunctionAgrvs[0], varFunctionAgrvs[1], varFunctionAgrvs[2], varFunctionAgrvs[3]," + - "varFunctionAgrvs[4],varFunctionAgrvs[5],varFunctionAgrvs[6],varFunctionAgrvs[7],varFunctionAgrvs[8]);" ); - } - } - } - } - } - } - if(event.data.type && (event.data.type == "FROM_NTKO_MANIFEST")){ - var ntkojsontext = JSON.parse( event.data.text ); - ntkoextensionmainifest=ntkojsontext['ntkoversion']; - } - }, false); -} -function ieattachEventntko(data,varFunctionAgrvs) -{ - if( typeof data !== "undefined" ) - { - if( typeof varFunctionAgrvs != 'undefined' && ( ( null != varFunctionAgrvs ) && ( "" != varFunctionAgrvs ) ) ) - { - eval( data + "( varFunctionAgrvs[0], varFunctionAgrvs[1], varFunctionAgrvs[2], varFunctionAgrvs[3]," + - "varFunctionAgrvs[4],varFunctionAgrvs[5],varFunctionAgrvs[6],varFunctionAgrvs[7],varFunctionAgrvs[8]);" ); - } - } -} -function ntkoSendDataToChildtext(ntkoDataSendUrl) -{ - if(ntkoSendDataToChildSData!=null&&ntkoSendDataToChildSData!="") - { - ntkoBrowser.ntkoSendDataToChild(ntkoDataSendUrl,ntkoSendDataToChildSData); - } -} -/*___md5___*/ - -var hexcase = 0; -var b64pad = ""; -var chrsz = 8; -function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));} -function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));} -function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));} -function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); } -function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); } -function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); } -function md5_vm_test() -{ - return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; -} -function core_md5(x, len) -{ - x[len >> 5] |= 0x80 << ((len) % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - var d = 271733878; - for(var i = 0; i < x.length; i += 16) - { - var olda = a; - var oldb = b; - var oldc = c; - var oldd = d; - a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); - d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); - c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); - b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); - a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); - d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); - c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); - b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); - a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); - d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); - c = md5_ff(c, d, a, b, x[i+10], 17, -42063); - b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); - a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); - d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); - c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); - b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); - a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); - d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); - c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); - b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); - a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); - d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); - c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); - b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); - a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); - d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); - c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); - b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); - a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); - d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); - c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); - b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); - a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); - d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); - c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); - b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); - a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); - d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); - c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); - b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); - a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); - d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); - c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); - b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); - a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); - d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); - c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); - b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); - a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); - d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); - c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); - b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); - a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); - d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); - c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); - b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); - a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); - d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); - c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); - b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); - a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); - d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); - c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); - b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - } - return Array(a, b, c, d); -} -function md5_cmn(q, a, b, x, s, t) -{ - return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); -} -function md5_ff(a, b, c, d, x, s, t) -{ - return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); -} -function md5_gg(a, b, c, d, x, s, t) -{ - return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); -} -function md5_hh(a, b, c, d, x, s, t) -{ - return md5_cmn(b ^ c ^ d, a, b, x, s, t); -} -function md5_ii(a, b, c, d, x, s, t) -{ - return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); -} - -function core_hmac_md5(key, data) -{ - var bkey = str2binl(key); - if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz); - var ipad = Array(16), opad = Array(16); - for(var i = 0; i < 16; i++) - { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz); - return core_md5(opad.concat(hash), 512 + 128); -} -function safe_add(x, y) -{ - var lsw = (x & 0xFFFF) + (y & 0xFFFF); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); -} -function bit_rol(num, cnt) -{ - return (num << cnt) | (num >>> (32 - cnt)); -} -function str2binl(str) -{ - var bin = Array(); - var mask = (1 << chrsz) - 1; - for(var i = 0; i < str.length * chrsz; i += chrsz) - bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32); - return bin; -} -function binl2str(bin) -{ - var str = ""; - var mask = (1 << chrsz) - 1; - for(var i = 0; i < bin.length * 32; i += chrsz) - str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask); - return str; -} -function binl2hex(binarray) -{ - var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; - var str = ""; - for(var i = 0; i < binarray.length * 4; i++) - { - str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + - hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF); - } - return str; -} -function binl2b64(binarray) -{ - - var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - var str = ""; - for(var i = 0; i < binarray.length * 4; i += 3) - { - var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16) - | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 ) - | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF); - for(var j = 0; j < 4; j++) - { - if(i * 8 + j * 6 > binarray.length * 32) str += b64pad; - else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); - } - } - return str; -} - -/*接收 子页面数据*/ -function NTKO_DOC_PostMessage(param){ - window.postMessage({type: 'FROM_RETURN_DOC',text: param}, "*") -} -function NTKO_PDF_PostMessage(param){ - window.postMessage({type: 'FROM_RETURN_PDF',text: param}, "*") -} -function NTKO_HTML_PostMessage(param){ - window.postMessage({type: 'FROM_RETURN_HTML',text: param}, "*") -} -function ntkoCloseEvent(){ - window.postMessage({type: 'FROM_NTKO_CLOSE',text: varNtkoGUID}, "*") -} diff --git a/public/ntkocreatnew.docx b/public/ntkocreatnew.docx new file mode 100644 index 0000000..e69de29 diff --git a/public/ntkoofficecontrol.min.js b/public/ntkoofficecontrol.min.js deleted file mode 100644 index 099c722..0000000 --- a/public/ntkoofficecontrol.min.js +++ /dev/null @@ -1,207 +0,0 @@ -/*------------------------------------------------------*/ -/* 修改控件的配置信息 */ -/* version:2.5.1 */ -/* 2020.09.07版本 跟随 联通数字科技有限公司20210105 产品发送 */ -/* */ -/*------------------------------------------------------*/ -//64位控件的calssid -var classidx64="A64E3073-2016-4baf-A89D-FFE1FAA10EF1"; -//32位控件的classid -var classid="A64E3073-2016-4baf-A89D-FFE1FAA10ED1"; -//32位控件包的路径 -var codebase="officecontrol/ofctnewclsid.cab#version=6,0,1,0"; -//64位控件包的路径 -var codebase64="officecontrol/ofctnewclsidx64.cab#version=6,0,1,0"; -//设置高度 -var height="800px"; -//设置宽度 -var width="100%"; -//买断授权密钥如果不是买断可以不用写 -var MakerCaption="联通数字科技有限公司"; -//买断授权密钥如果不是买断可以不用写 -var MakerKey="C1AB790358ECC36C0F26DB985E43769912D15699"; -//密钥 -var ProductCaption="联通数字科技有限公司"; -//密钥 -var ProductKey="46839E48E0B10E99B17E82F35A3E5371F2C07BC0"; -//解除时间密钥 -var NoExpireKey=""; -/* -谷歌浏览器事件接管但此接管事件只支持低版本的谷歌(45以下版本不包含45)和火狐(52以下版本不包含52) -*/ -function ntkosavetourl(type,code,html) -{ - //alert("SaveToURL成功回调"); -} - - -function ntkopublishashtml(type,code,html){ - //alert("Onpublishashtmltourl成功回调"); -} -function ntkopublishaspdf(type,code,html){ -//alert("Onpublishaspdftourl成功回调"); -} -function ntkosaveasotherurl(type,code,html){ -//alert("SaveAsOtherformattourl成功回调"); -} - -function ntkoondocumentopened(type,code){ - //alert("Ondocumentopened成功回调"); - if(cmd==5){ - if(datavalue==1){ - ntko.ShowTipMessage("注意","已经接收到父页面传过来的值,请注意文档中内容的变化"); - ntkoDataToChild(datatext); - } - } -} - - - - -/*------------------------------------------------------*/ -/* 以下内容 请勿修改,否则可能出错 */ -/*------------------------------------------------------*/ - -var userAgent = navigator.userAgent, - rMsie = /(msie\s|trident.*rv:)([\w.]+)/, - rFirefox = /(firefox)\/([\w.]+)/, - rOpera = /(opera).+version\/([\w.]+)/, - rChrome = /(chrome)\/([\w.]+)/, - rSafari = /version\/([\w.]+).*(safari)/; -var browser; -var version; -var ua = userAgent.toLowerCase(); -function uaMatch(ua) { - var match = rMsie.exec(ua); - if (match != null) { - return { browser : "IE", version : match[2] || "0" }; - } - var match = rFirefox.exec(ua); - if (match != null) { - return { browser : match[1] || "", version : match[2] || "0" }; - } - var match = rOpera.exec(ua); - if (match != null) { - return { browser : match[1] || "", version : match[2] || "0" }; - } - var match = rChrome.exec(ua); - if (match != null) { - return { browser : match[1] || "", version : match[2] || "0" }; - } - var match = rSafari.exec(ua); - if (match != null) { - return { browser : match[2] || "", version : match[1] || "0" }; - } - if (match != null) { - return { browser : "", version : "0" }; - } -} -var browserMatch = uaMatch(userAgent.toLowerCase()); -if (browserMatch.browser) { - browser = browserMatch.browser; - version = browserMatch.version; -} - - -if (browser=="IE"){ - if(window.navigator.platform=="Win32"){ - - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - // document.write(' '); - document.write('不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置。 '); - document.write(''); - } - if(window.navigator.platform=="Win64"){ - - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - document.write(' '); - // document.write(' '); - document.write('不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置。 '); - document.write(''); - } -} -else if (browser=="firefox"){ - document.write(''); - document.write('尚未安装NTKO Web FireFox跨浏览器插件 '); - document.write(' '); -}else if(browser=="chrome"){ - document.write('尚未安装NTKO Web Chrome跨浏览器插件 '); - document.write(''); -}else if (Sys.opera){ - alert("sorry,ntko web印章暂时不支持opera!"); -}else if (Sys.safari){ - alert("sorry,ntko web印章暂时不支持safari!"); -} -// window.onunload =function(){ -// var ntkojb= ntkoBrowser.NtkoJudgingBrowsers(); -// if(ntkojb){ -// window.opener.ntkoCloseEvent(); -// } -// } - -//ie,谷歌,火狐传值 -var ntkoBrowser={ - ntkoSetReturnValueToParentPage:function(data1,text1){ - var ntkojb= ntkoBrowser.NtkoJudgingBrowsers(); - if(ntkojb){ - window.opener.ieattachEventntko(data1,text1); - }else{ - window.external.SetReturnValueToParentPage(data1,text1); - } - }, - NtkoJudgingBrowsers:function(){ - try{ - var ntkobtop=window.opener.top.browser; - return true; - }catch(err){ - return false; - } - }, -} -//触发父页面传值的功能 -var NtkoUrlTest = window.location.href; -if(NtkoUrlTest!=null&&NtkoUrlTest!=""){ - var ntkoarry=new Array(); - ntkoarry.push(NtkoUrlTest); - ntkoBrowser.ntkoSetReturnValueToParentPage("ntkoSendDataToChildtext",ntkoarry); -} diff --git a/public/officecontrol/NTKO控件安装程序-联通数字科技有限公司.exe b/public/officecontrol/NTKO控件安装程序-联通数字科技有限公司.exe index 1feb127..30608a3 100644 Binary files a/public/officecontrol/NTKO控件安装程序-联通数字科技有限公司.exe and b/public/officecontrol/NTKO控件安装程序-联通数字科技有限公司.exe differ diff --git a/public/jquery.js b/public/officecontrol/jquery.js similarity index 100% rename from public/jquery.js rename to public/officecontrol/jquery.js diff --git a/public/ntko.js b/public/officecontrol/ntko.20220624.js similarity index 91% rename from public/ntko.js rename to public/officecontrol/ntko.20220624.js index d1a84ce..11d3d2c 100644 --- a/public/ntko.js +++ b/public/officecontrol/ntko.20220624.js @@ -11,10 +11,11 @@ function init(readonly, DocfileCode) { contentType: "application/json;charset=UTF-8", data: JSON.stringify([DocfileCode]), success: function (result) { + if (window.navigator.platform == "Win32") { + ntko.AddDocTypePlugin(".pdf", "PDF.NtkoDocument", "4.0.1.0", "officecontrol/ntkooledocall.cab", 51, true); + } if (window.navigator.platform == "Win64") { - ntko.AddDocTypePlugin(".pdf", "PDF.NtkoDocument", "4.0.2.0", "officecontrol/ntkooledocallx64.cab", 51, true); - } else { - ntko.AddDocTypePlugin(".pdf", "PDF.NtkoDocument", "4.0.2.0", "officecontrol/ntkooledocall.cab", 51, true);//版增加对于PDF文件的支持 + ntko.AddDocTypePlugin(".pdf", "PDF.NtkoDocument", "4.0.1.0", "officecontrol/ntkooledocallx64.cab", 51, true);//PDF支持 } if (result.success) { if (result.data.length > 0) { @@ -27,7 +28,7 @@ function init(readonly, DocfileCode) { } }) } else { - ntko.CreateNew("Word.Document"); + ntko.OpenFromURL("ntkocreatnew.docx"); } } else { alert(JSON.stringify(result)); diff --git a/public/officecontrol/ntko.js b/public/officecontrol/ntko.js deleted file mode 100644 index 7218f17..0000000 --- a/public/officecontrol/ntko.js +++ /dev/null @@ -1,23 +0,0 @@ -var ntko;//控件对象 - -//初始化去打开文档 -function init(cmd){ - ntko = document.getElementById("TANGER_OCX"); - if(window.navigator.platform=="Win64"){ - //alert("平台版文档控件,请使用32位浏览器如IE"); - //TANGER_OCX_OBJ.AddDocTypePlugin(".tif","tif.NtkoDocument","4.0.1.0","officecontrol/ntkooledocallx64.cab",51,true); - ntko.AddDocTypePlugin(".pdf","PDF.NtkoDocument","4.0.2.0","officecontrol/ntkooledocallx64.cab",51,true); - - }else{ - ntko.AddDocTypePlugin(".pdf","PDF.NtkoDocument","4.0.2.0","officecontrol/ntkooledocall.cab",51,true);//版增加对于PDF文件的支持 - //TANGER_OCX_OBJ.AddDocTypePlugin(".tif","tif.NtkoDocument","4.0.1.0","officecontrol/ntkooledocallx64.cab",51,true); - } - if (cmd == 1) - { - ntko.OpenFromURL("ntkocreatnew.docx"); - } - else - { - ntko.OpenFromURL("aboutus.docx"); - } -} \ No newline at end of file diff --git a/public/ntko4Path.js b/public/officecontrol/ntko4Path.20220624.js similarity index 100% rename from public/ntko4Path.js rename to public/officecontrol/ntko4Path.20220624.js diff --git a/public/officecontrol/ntkobackground.min.js b/public/officecontrol/ntkobackground.min.20220624.js similarity index 84% rename from public/officecontrol/ntkobackground.min.js rename to public/officecontrol/ntkobackground.min.20220624.js index c874533..9a2d153 100644 --- a/public/officecontrol/ntkobackground.min.js +++ b/public/officecontrol/ntkobackground.min.20220624.js @@ -1,7 +1,7 @@ /** - * version: 2.5.1 + * version: 3.6.2 * - * 2020.09.07版本 跟随 联通系统集成有限公司20201229 产品发送 + * 2022.04.01版本 跟随 联通数字科技有限公司20220523 产品发送 */ "use strict"; var varNtkoGUID = Math.random().toString(36); @@ -11,6 +11,8 @@ var timer; var ntkoSendDataToChildStrUrl; var ntkoSendDataToChildSData; var ntkowin; +var ntkoextensionmainifest; +var strURL1; var userAgent = navigator.userAgent, rMsie = /(msie\s|trident.*rv:)([\w.]+)/, rFirefox = /(firefox)\/([\w.]+)/, @@ -56,38 +58,38 @@ var userAgent = navigator.userAgent, browser = browserMatch.browser; version = browserMatch.version; } - var mimeTypes = navigator.mimeTypes; + var mimeTypes = navigator.mimeTypes; var bChromeExtensionInstalled = false; + version=parseInt(version); + if( "chrome" === browserMatch.browser && version>=45) + { + var img; + img = new Image(); + img.src = "chrome-extension://lppkeogbkjlmmbjenbogdndlgmpiddda/icons/ntko.png"; + img.onload = function() { + bChromeExtensionInstalled = true; + } + img.onerror = function() { + bChromeExtensionInstalled = false; + } + } + if("edg"===browserMatch.browser){ + + var img; + img = new Image(); + img.src = "chrome-extension://miogdolpaknhgnfoghcmnooafkiafkcc/icons/ntko.png"; + img.onload = function() { + bChromeExtensionInstalled = true; + } + img.onerror = function() { + bChromeExtensionInstalled = false; + } + } - if( "chrome" === browserMatch.browser && version>="45") - { - - var img; - img = new Image(); - img.src = "chrome-extension://lppkeogbkjlmmbjenbogdndlgmpiddda/icons/ntko.png"; - img.onload = function() { - bChromeExtensionInstalled = true; - }; - img.onerror = function() { - bChromeExtensionInstalled = false; - }; - } - if("edg"===browserMatch.browser){ - - var img; - img = new Image(); - img.src = "chrome-extension://miogdolpaknhgnfoghcmnooafkiafkcc/icons/ntko.png"; - img.onload = function() { - bChromeExtensionInstalled = true; - }; - img.onload = function() { - bChromeExtensionInstalled = true; - }; - } - var ntkoBrowser = { ntkoSendDataToChild:function( strURL, data) { + console.log(strURL); if ( typeof data === 'undefined' ){ return; } @@ -103,8 +105,8 @@ ntkoSendDataToChild:function( strURL, data) if(ntkobr){ window.postMessage({ type: "FROM_NTKO_PAGE", text: jsonValue }, "*"); }else{ - ntkoWinOpen.ntkoGetParentData(data); - } + ntkoWinOpen.ntkoGetParentData(data); + } }, ExtensionInstalled:function() { @@ -130,27 +132,34 @@ ExtensionInstalled:function() { if( "firefox" === browserMatch.browser ) { + if(( typeof ntkoextensionmainifest != 'undefined' ) && ( ( null != ntkoextensionmainifest ) && ( "" != ntkoextensionmainifest ))){ + + return true; + }else{ var bInstalled = false; if( "undefined" === typeof FirefoxInstalled ) return ( bInstalled ); else return( window.FirefoxInstalled()); + } } else if( "chrome" === browserMatch.browser ) - { - if(localStorage["ntkoweb"]==="ntkoExtensionInstalled"){ - bChromeExtensionInstalled=true; - localStorage.clear(); - } + { + + if(( typeof ntkoextensionmainifest != 'undefined' ) && ( ( null != ntkoextensionmainifest ) && ( "" != ntkoextensionmainifest ))){ + + return true; + }else{ return (bChromeExtensionInstalled); - } else if("edg" === browserMatch.browser){ - if(localStorage["ntkoweb"]==="ntkoExtensionInstalled"){ - bChromeExtensionInstalled=true; - localStorage.clear(); - } - return( bChromeExtensionInstalled ); - } - } + } + } else if("edg" === browserMatch.browser){ + if(( typeof ntkoextensionmainifest != 'undefined' ) && ( ( null != ntkoextensionmainifest ) && ( "" != ntkoextensionmainifest ))){ + return true; + }else{ + return( bChromeExtensionInstalled ); + } + } + } }, ntkoClose:function( strURL ) @@ -168,18 +177,16 @@ ntkoClose:function( strURL ) ntkoWinOpen.close(); } }, -openWindow:function( strURL,IsShowOnExtendMonitor,ProductCaption, ntkoBrowserProductKey, ntkoBrowserNoExpireKey, ntkoBrowserOptions,varUrlData,ntkowidth,ntkoheight ) -{ - - if(varUrlData!=null&&varUrlData!=""){ - ntkoSendDataToChildSData=varUrlData; - } +openWindow:function( strURL,IsShowOnExtendMonitor,ProductCaption, ntkoBrowserProductKey, ntkoBrowserNoExpireKey, ntkoBrowserOptions,varUrlData,ntkowidth,ntkoheight,cookiesDomainPath ) +{ var ntkowinscr= ntkoBrowser.NtkoWidthAndHeightWinScr(ntkowidth,ntkoheight); if(!ntkowinscr){ alert("设置窗口大小格式不正确"); return; - } + } + var strURL=ntkoBrowser.NtkoStrURL(strURL); + strURL1=strURL; var ntkoSessionURL=""; var jsonValue = '{"OpenWindow":1,"URL":"'; jsonValue += strURL; @@ -187,6 +194,8 @@ openWindow:function( strURL,IsShowOnExtendMonitor,ProductCaption, ntkoBrowserPro jsonValue += varNtkoGUID; jsonValue += '","URLMD5":"'; jsonValue +=b64_md5(strURL); + jsonValue += '","ntkobrowserMatch":"'; + jsonValue +=browserMatch.browser; jsonValue += '","IsShowOnExtendMonitor":"'; jsonValue += IsShowOnExtendMonitor; jsonValue += '"'; @@ -225,7 +234,6 @@ openWindow:function( strURL,IsShowOnExtendMonitor,ProductCaption, ntkoBrowserPro } - var LocalStorge = window.localStorage; if( typeof LocalStorge != 'undefined' && ( 0 != LocalStorge.length ) ) { @@ -241,7 +249,12 @@ openWindow:function( strURL,IsShowOnExtendMonitor,ProductCaption, ntkoBrowserPro jsonValue += JSON.stringify(varLocalDataList);; jsonValue += ''; } + if(varUrlData!=null&&varUrlData!=""){ + ntkoSendDataToChildSData=varUrlData; + LocalStorge['ntkoSendDataToChildSData']=varUrlData; + } + var SessionStorge = window.sessionStorage; if( typeof SessionStorge != 'undefined' && ( 0 != SessionStorge.length ) ) { @@ -271,12 +284,16 @@ openWindow:function( strURL,IsShowOnExtendMonitor,ProductCaption, ntkoBrowserPro jsonValue += ntkoheight; jsonValue += ''; } - - + if( typeof cookiesDomainPath != 'undefined' && ( ( null != cookiesDomainPath ) && ( "" != cookiesDomainPath ) ) ) + { + jsonValue += ',"CookiesDomainPath":'; + jsonValue += cookiesDomainPath; + jsonValue += ''; + } jsonValue += '}'; var ntkobr=ntkoBrowser.NtkoBrower(); if(ntkobr){ - window.postMessage({type: "FROM_NTKO_PAGE", text: jsonValue}, "*"); + window.postMessage({type: "FROM_NTKO_PAGE", text: jsonValue}, "*"); }else{ ntkowin=b64_md5(strURL); if(ntkowidth==null||ntkowidth=="" ||ntkowidth=="undefined"){ @@ -307,7 +324,7 @@ openWindow:function( strURL,IsShowOnExtendMonitor,ProductCaption, ntkoBrowserPro if(userAgent.indexOf("Windows NT 5.1") > -1){ return false; } - if(version>="50"){ + if(version>=50){ return true; }else{ return false; @@ -317,7 +334,7 @@ openWindow:function( strURL,IsShowOnExtendMonitor,ProductCaption, ntkoBrowserPro if(userAgent.indexOf("Windows NT 5.1") > -1){ return false; } - if(version>="45"){ + if(version>=45){ return true; }else{ return false; @@ -398,13 +415,23 @@ NtkoWidthAndHeightWinScr:function(ntkowidth,ntkoheight){ } } } - }, + }, + thisNTKOGUID:varNtkoGUID,/**20220609 zhoujianlong 新版插件更新*/ +NtkoExtensionVersion:function(){ + if(browser=="firefox"){ + var ntkojsontext = JSON.parse(window.NtkoFireFoxVersion()); + var ntkofireforversion=ntkojsontext['ntkoversion']; + return ntkofireforversion; + }else{ + return ntkoextensionmainifest; + } +} }; if(browser!="IE") { window.addEventListener("message", function(event) - { + { if ( event.source != window ) return; if (event.data.type && (event.data.type == "FROM_NTKO_CONTEXT_PAGE")) @@ -439,10 +466,18 @@ if(browser!="IE") "varFunctionAgrvs[4],varFunctionAgrvs[5],varFunctionAgrvs[6],varFunctionAgrvs[7],varFunctionAgrvs[8]);" ); } } + }else if("NtkoError" === jsonData["functionName"]){ + //启动扩展报错信息 + alert(jsonData["NtkoReason"]) + } } } - } + } + if(event.data.type && (event.data.type == "FROM_NTKO_MANIFEST")){ + var ntkojsontext = JSON.parse( event.data.text ); + ntkoextensionmainifest=ntkojsontext['ntkoversion']; + } }, false); } function ieattachEventntko(data,varFunctionAgrvs) @@ -456,13 +491,7 @@ function ieattachEventntko(data,varFunctionAgrvs) } } } -function ntkoSendDataToChildtext(ntkoDataSendUrl) -{ - if(ntkoSendDataToChildSData!=null&&ntkoSendDataToChildSData!="") - { - ntkoBrowser.ntkoSendDataToChild(ntkoDataSendUrl,ntkoSendDataToChildSData); - } -} + /*___md5___*/ var hexcase = 0; @@ -652,3 +681,17 @@ function binl2b64(binarray) } return str; } +/*接收 子页面数据*/ +/**20220609 zhoujianlong 新版插件更新*/ +function NTKO_DOC_PostMessage(param){ + window.postMessage({type: 'FROM_RETURN_DOC',text: param}, "*") +} +function NTKO_PDF_PostMessage(param){ + window.postMessage({type: 'FROM_RETURN_PDF',text: param}, "*") +} +function NTKO_HTML_PostMessage(param){ + window.postMessage({type: 'FROM_RETURN_HTML',text: param}, "*") +} +function ntkoCloseEvent(){ + window.postMessage({type: 'FROM_NTKO_CLOSE',text: varNtkoGUID}, "*") +} \ No newline at end of file diff --git a/public/officecontrol/ntkoofficecontrol.min.js b/public/officecontrol/ntkoofficecontrol.min.20220624.js similarity index 85% rename from public/officecontrol/ntkoofficecontrol.min.js rename to public/officecontrol/ntkoofficecontrol.min.20220624.js index 54251cb..7ec4ffd 100644 --- a/public/officecontrol/ntkoofficecontrol.min.js +++ b/public/officecontrol/ntkoofficecontrol.min.20220624.js @@ -1,29 +1,28 @@ /*------------------------------------------------------*/ /* 修改控件的配置信息 */ -/* version:2.5.1 */ -/* 2020.09.07版本 跟随 联通系统集成有限公司20201229 产品发送 */ -/* */ +/* version:3.6.2 */ +/* 2022.04.01版本 跟随 联通数字科技有限公司20220523 产品发送 */ /*------------------------------------------------------*/ //64位控件的calssid var classidx64="A64E3073-2016-4baf-A89D-FFE1FAA10EF1"; //32位控件的classid var classid="A64E3073-2016-4baf-A89D-FFE1FAA10ED1"; //32位控件包的路径 -var codebase="officecontrol/ofctnewclsid.cab#version=6,0,1,0"; +var codebase="officecontrol/ofctnewclsid.cab#version=6.0.2.0"; //64位控件包的路径 -var codebase64="officecontrol/ofctnewclsidx64.cab#version=6,0,1,0"; +var codebase64="officecontrol/ofctnewclsidx64.cab#version=6.0.2.0"; //设置高度 var height="800px"; //设置宽度 var width="100%"; //买断授权密钥如果不是买断可以不用写 -var MakerCaption="联通系统集成有限公司"; +var MakerCaption="联通数字科技有限公司"; //买断授权密钥如果不是买断可以不用写 -var MakerKey="D130003CD231496EBD17D6DAC22DEFC6BD8F4E17"; +var MakerKey="C1AB790358ECC36C0F26DB985E43769912D15699"; //密钥 -var ProductCaption="联通系统集成有限公司某某测试用户"; +var ProductCaption="联通数字科技有限公司"; //密钥 -var ProductKey="F6C911699ECD29CC0D2E47822CF1775B3A80C13F"; +var ProductKey="46839E48E0B10E99B17E82F35A3E5371F2C07BC0"; //解除时间密钥 var NoExpireKey=""; @@ -49,10 +48,9 @@ function ntkosaveasotherurl(type,code,html){ function ntkoondocumentopened(type,code){ //alert("Ondocumentopened成功回调"); if(cmd==5){ - if(datavalue==1){ ntko.ShowTipMessage("注意","已经接收到父页面传过来的值,请注意文档中内容的变化"); - ntkoDataToChild(datatext); - } + var datext=localStorage.getItem('ntkoSendDataToChildSData') + ntkoDataToChild(datext); } } @@ -118,7 +116,7 @@ if (browser=="IE"){ document.write(' '); document.write(' '); document.write(' '); - document.write(' '); + // document.write(' ');/**20220609 zhoujianlong 新版插件更新*/ document.write('不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置。 '); document.write(''); } @@ -135,7 +133,7 @@ if (browser=="IE"){ document.write(' '); document.write(' '); document.write(' '); - document.write(' '); + // document.write(' ');/**20220609 zhoujianlong 新版插件更新*/ document.write('不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置。 '); document.write(''); } @@ -165,7 +163,7 @@ else if (browser=="firefox"){ document.write('_ProductCaption="'+ProductCaption+'" '); document.write('_NoExpireKey="'+NoExpireKey+'" '); document.write('_ProductKey="'+ProductKey+'" '); - document.write('codebase="'+codebase+'" width="'+width+'" height="'+height+'" type="application/ntko-plug" '); + document.write('codebase="'+codebase+'" width="'+width+'" height="'+height+'" type="application/ntko-plug" >'); document.write('尚未安装NTKO Web Chrome跨浏览器插件 '); document.write(''); }else if (Sys.opera){ @@ -173,12 +171,12 @@ else if (browser=="firefox"){ }else if (Sys.safari){ alert("sorry,ntko web印章暂时不支持safari!"); } -window.onunload =function(){ - var ntkojb= ntkoBrowser.NtkoJudgingBrowsers(); - if(ntkojb){ - window.opener.ntkoCloseEvent(); - } -} +// window.onunload =function(){/**20220609 zhoujianlong 新版插件更新*/ +// var ntkojb= ntkoBrowser.NtkoJudgingBrowsers(); +// if(ntkojb){ +// window.opener.ntkoCloseEvent(); +// } +// } //ie,谷歌,火狐传值 var ntkoBrowser={ @@ -186,6 +184,7 @@ var ntkoBrowser={ var ntkojb= ntkoBrowser.NtkoJudgingBrowsers(); if(ntkojb){ window.opener.ieattachEventntko(data1,text1); + }else{ window.external.SetReturnValueToParentPage(data1,text1); } @@ -197,12 +196,5 @@ var ntkoBrowser={ }catch(err){ return false; } - }, -} -//触发父页面传值的功能 -var NtkoUrlTest = window.location.href; -if(NtkoUrlTest!=null&&NtkoUrlTest!=""){ - var ntkoarry=new Array(); - ntkoarry.push(NtkoUrlTest); - ntkoBrowser.ntkoSetReturnValueToParentPage("ntkoSendDataToChildtext",ntkoarry); + } } \ No newline at end of file diff --git a/public/officecontrol/ntkooledocall.cab b/public/officecontrol/ntkooledocall.cab index 7ca6558..961603e 100644 Binary files a/public/officecontrol/ntkooledocall.cab and b/public/officecontrol/ntkooledocall.cab differ diff --git a/public/officecontrol/ntkooledocallx64.cab b/public/officecontrol/ntkooledocallx64.cab index 7838213..ab24d57 100644 Binary files a/public/officecontrol/ntkooledocallx64.cab and b/public/officecontrol/ntkooledocallx64.cab differ diff --git a/public/officecontrol/ofctnewclsid.cab b/public/officecontrol/ofctnewclsid.cab index fc9da50..271a1d1 100644 Binary files a/public/officecontrol/ofctnewclsid.cab and b/public/officecontrol/ofctnewclsid.cab differ diff --git a/public/officecontrol/ofctnewclsidx64.cab b/public/officecontrol/ofctnewclsidx64.cab index 5d27c65..c7e92cd 100644 Binary files a/public/officecontrol/ofctnewclsidx64.cab and b/public/officecontrol/ofctnewclsidx64.cab differ diff --git a/public/webofficeComponent.html b/public/webofficeComponent.html index 5352053..1a1d680 100644 --- a/public/webofficeComponent.html +++ b/public/webofficeComponent.html @@ -4,9 +4,9 @@ 招标采购中心 | 文档控件编辑器 - - - + + +
- +
diff --git a/public/webofficeIeComponent.html b/public/webofficeIeComponent.html index 3c7d241..05b5a8e 100644 --- a/public/webofficeIeComponent.html +++ b/public/webofficeIeComponent.html @@ -4,9 +4,9 @@ 招标采购中心 | 文档控件编辑器 - - - + + +
- +
diff --git a/src/assets/topic/bannerListPic.jpg b/src/assets/topic/bannerListPic.jpg new file mode 100644 index 0000000..38ec029 Binary files /dev/null and b/src/assets/topic/bannerListPic.jpg differ diff --git a/src/assets/topic/bannerListPic_member.jpg b/src/assets/topic/bannerListPic_member.jpg new file mode 100644 index 0000000..ed4f777 Binary files /dev/null and b/src/assets/topic/bannerListPic_member.jpg differ diff --git a/src/assets/topic/bannerPic.jpg b/src/assets/topic/bannerPic.jpg new file mode 100644 index 0000000..a2f0931 Binary files /dev/null and b/src/assets/topic/bannerPic.jpg differ diff --git a/src/assets/topic/bannerProjectPic.jpg b/src/assets/topic/bannerProjectPic.jpg new file mode 100644 index 0000000..8b0328d Binary files /dev/null and b/src/assets/topic/bannerProjectPic.jpg differ diff --git a/src/assets/topic/branch.png b/src/assets/topic/branch.png new file mode 100644 index 0000000..9f288e5 Binary files /dev/null and b/src/assets/topic/branch.png differ diff --git a/src/assets/topic/card-bg.png b/src/assets/topic/card-bg.png new file mode 100644 index 0000000..b1d51e6 Binary files /dev/null and b/src/assets/topic/card-bg.png differ diff --git a/src/assets/topic/emblem.png b/src/assets/topic/emblem.png new file mode 100644 index 0000000..eaae6d3 Binary files /dev/null and b/src/assets/topic/emblem.png differ diff --git a/src/assets/topic/listNewsPic01.jpg b/src/assets/topic/listNewsPic01.jpg new file mode 100644 index 0000000..94fe905 Binary files /dev/null and b/src/assets/topic/listNewsPic01.jpg differ diff --git a/src/assets/topic/newsDetailBg.jpg b/src/assets/topic/newsDetailBg.jpg new file mode 100644 index 0000000..497d977 Binary files /dev/null and b/src/assets/topic/newsDetailBg.jpg differ diff --git a/src/assets/topic/person-bg.jpg b/src/assets/topic/person-bg.jpg new file mode 100644 index 0000000..3d7431f Binary files /dev/null and b/src/assets/topic/person-bg.jpg differ diff --git a/src/assets/topic/person.png b/src/assets/topic/person.png new file mode 100644 index 0000000..778f805 Binary files /dev/null and b/src/assets/topic/person.png differ diff --git a/src/assets/topic/static-bg.png b/src/assets/topic/static-bg.png new file mode 100644 index 0000000..f1aef99 Binary files /dev/null and b/src/assets/topic/static-bg.png differ diff --git a/src/assets/topic/timeIcon.png b/src/assets/topic/timeIcon.png new file mode 100644 index 0000000..150635c Binary files /dev/null and b/src/assets/topic/timeIcon.png differ diff --git a/src/assets/topic/topic_activity_default.jpg b/src/assets/topic/topic_activity_default.jpg new file mode 100644 index 0000000..389c1f1 Binary files /dev/null and b/src/assets/topic/topic_activity_default.jpg differ diff --git a/src/assets/topic/topic_activity_gradient.jpg b/src/assets/topic/topic_activity_gradient.jpg new file mode 100644 index 0000000..f01c55b Binary files /dev/null and b/src/assets/topic/topic_activity_gradient.jpg differ diff --git a/src/assets/topic/topic_activity_logo.png b/src/assets/topic/topic_activity_logo.png new file mode 100644 index 0000000..4a82fbf Binary files /dev/null and b/src/assets/topic/topic_activity_logo.png differ diff --git a/src/assets/topic/topic_assure.png b/src/assets/topic/topic_assure.png new file mode 100644 index 0000000..57822b2 Binary files /dev/null and b/src/assets/topic/topic_assure.png differ diff --git a/src/assets/topic/topic_banner_default.jpg b/src/assets/topic/topic_banner_default.jpg new file mode 100644 index 0000000..e17a0ba Binary files /dev/null and b/src/assets/topic/topic_banner_default.jpg differ diff --git a/src/assets/topic/topic_bottom_button.png b/src/assets/topic/topic_bottom_button.png new file mode 100644 index 0000000..455995e Binary files /dev/null and b/src/assets/topic/topic_bottom_button.png differ diff --git a/src/assets/topic/topic_bottom_card_picture.png b/src/assets/topic/topic_bottom_card_picture.png new file mode 100644 index 0000000..1def271 Binary files /dev/null and b/src/assets/topic/topic_bottom_card_picture.png differ diff --git a/src/assets/topic/topic_commodity.png b/src/assets/topic/topic_commodity.png new file mode 100644 index 0000000..8b671ed Binary files /dev/null and b/src/assets/topic/topic_commodity.png differ diff --git a/src/assets/topic/topic_difficult.png b/src/assets/topic/topic_difficult.png new file mode 100644 index 0000000..692197b Binary files /dev/null and b/src/assets/topic/topic_difficult.png differ diff --git a/src/assets/topic/topic_firstline.png b/src/assets/topic/topic_firstline.png new file mode 100644 index 0000000..f6e0735 Binary files /dev/null and b/src/assets/topic/topic_firstline.png differ diff --git a/src/assets/topic/topic_fist.png b/src/assets/topic/topic_fist.png new file mode 100644 index 0000000..54b1307 Binary files /dev/null and b/src/assets/topic/topic_fist.png differ diff --git a/src/assets/topic/topic_graceful_textbg.png b/src/assets/topic/topic_graceful_textbg.png new file mode 100644 index 0000000..207df99 Binary files /dev/null and b/src/assets/topic/topic_graceful_textbg.png differ diff --git a/src/assets/topic/topic_header.jpg b/src/assets/topic/topic_header.jpg new file mode 100644 index 0000000..f4036cd Binary files /dev/null and b/src/assets/topic/topic_header.jpg differ diff --git a/src/assets/topic/topic_header_img.png b/src/assets/topic/topic_header_img.png new file mode 100644 index 0000000..5e83f9e Binary files /dev/null and b/src/assets/topic/topic_header_img.png differ diff --git a/src/assets/topic/topic_interview.png b/src/assets/topic/topic_interview.png new file mode 100644 index 0000000..6f26b59 Binary files /dev/null and b/src/assets/topic/topic_interview.png differ diff --git a/src/assets/topic/topic_other.png b/src/assets/topic/topic_other.png new file mode 100644 index 0000000..35359e0 Binary files /dev/null and b/src/assets/topic/topic_other.png differ diff --git a/src/assets/topic/topic_partybranch.png b/src/assets/topic/topic_partybranch.png new file mode 100644 index 0000000..6845b36 Binary files /dev/null and b/src/assets/topic/topic_partybranch.png differ diff --git a/src/assets/topic/topic_partymember.png b/src/assets/topic/topic_partymember.png new file mode 100644 index 0000000..6ce187c Binary files /dev/null and b/src/assets/topic/topic_partymember.png differ diff --git a/src/assets/topic/topic_project_picture.jpg b/src/assets/topic/topic_project_picture.jpg new file mode 100644 index 0000000..ffa2249 Binary files /dev/null and b/src/assets/topic/topic_project_picture.jpg differ diff --git a/src/assets/topic/topic_protocol.png b/src/assets/topic/topic_protocol.png new file mode 100644 index 0000000..ca08fcd Binary files /dev/null and b/src/assets/topic/topic_protocol.png differ diff --git a/src/assets/topic/topic_red_flag.png b/src/assets/topic/topic_red_flag.png new file mode 100644 index 0000000..36aa4a4 Binary files /dev/null and b/src/assets/topic/topic_red_flag.png differ diff --git a/src/assets/topic/topic_right_manager.jpg b/src/assets/topic/topic_right_manager.jpg new file mode 100644 index 0000000..7fce1c7 Binary files /dev/null and b/src/assets/topic/topic_right_manager.jpg differ diff --git a/src/assets/topic/topic_right_material.png b/src/assets/topic/topic_right_material.png new file mode 100644 index 0000000..307132a Binary files /dev/null and b/src/assets/topic/topic_right_material.png differ diff --git a/src/assets/topic/topic_totalamount.png b/src/assets/topic/topic_totalamount.png new file mode 100644 index 0000000..cfccc0e Binary files /dev/null and b/src/assets/topic/topic_totalamount.png differ diff --git a/src/assets/topic/topic_totalnumber.png b/src/assets/topic/topic_totalnumber.png new file mode 100644 index 0000000..93bc7b1 Binary files /dev/null and b/src/assets/topic/topic_totalnumber.png differ diff --git a/src/components/BiddingRoom/index.less b/src/components/BiddingRoom/index.less index c3ea6a4..8fc9318 100644 --- a/src/components/BiddingRoom/index.less +++ b/src/components/BiddingRoom/index.less @@ -31,7 +31,7 @@ text-align: center; line-height: 50px; font-size: 15px; - border:1px solid#f0f0f0; + border:1px solid #f0f0f0; //border-radius: 3px; margin-left: -1px; &:hover{ diff --git a/src/components/richText/wang/index.tsx b/src/components/richText/wang/index.tsx index 73dd343..4b4b928 100644 --- a/src/components/richText/wang/index.tsx +++ b/src/components/richText/wang/index.tsx @@ -1,7 +1,10 @@ -import React, { useEffect, useImperativeHandle, useState } from 'react'; +import React, { useEffect, useImperativeHandle, useRef, useState } from 'react'; import AlertMenu from './fullScreen' import E from 'wangeditor'; -import { Button } from 'antd'; +import { Button, message, Spin } from 'antd'; +import { pictureDisplayPath, uploadAttachmentPath } from '@/utils/DownloadUtils'; +import { isEmpty, isNotEmpty } from '@/utils/CommonUtils'; +import { createNewFileBid } from '@/services/download_'; interface WangType { braftRef: any;//挂载 @@ -9,7 +12,9 @@ interface WangType { echo?: any;//回显内容 value?: any; height?: number; - onChange?: (value: any) => void + onChange?: (value: any) => void; + useImage?: boolean;//使用图片上传 + imageId?: string;//图片objectId } let editor: any = null; @@ -21,6 +26,10 @@ const BraftText: React.FC = (props) => { //======================================================================================state const [content, setContent] = useState(''); const [fullScreen, fullScreenSet] = useState(false); + //遮罩 + const [loading, setLoading] = useState(false); + //imageId + const objectId = useRef(null); const { braftRef, echo, @@ -28,12 +37,14 @@ const BraftText: React.FC = (props) => { value, height, onChange, + useImage, + imageId, } = props; const tools = [//工具栏 'head',//标题 'fontSize', //字号 - 'lineHeight', //行高 + // 'lineHeight', //行高 'foreColor', //颜色 'bold', //加粗 'italic', //斜体 @@ -41,27 +52,30 @@ const BraftText: React.FC = (props) => { 'strikeThrough', //文字删除线 'indent', //缩进 'justify', //文字对齐方式 + 'list', //列表 'undo', //撤销 - 'redo', //重做 + 'redo', //恢复 'fullscreen', //全屏 - 'emoticon',//表情 - 'image',//图片 - 'video',//视频 - 'table',//表格 - 'todo',//待办 + // 'image',//图片 + // 'emoticon',//表情 + // 'video',//视频 + // 'table',//表格 + // 'todo',//待办 ]; //=======================================================================================func useEffect(() => { if (willCreate) { // 注:class写法需要在componentDidMount 创建编辑器 - editor = new E("#div1") + editor = new E("#div1"); + //添加图片上传 + useImage && tools.splice(-3, 0, 'image'); //工具栏 editor.config.menus = tools; //提示 - editor.config.placeholder = '为了能顺利发布,建议您内容去掉下划线等格式,尽量以纯文本形式发布。' + editor.config.placeholder = '为了能顺利发布,建议您内容去掉下划线等格式,尽量以纯文本形式发布。'; // 配置 onchange 回调函数 editor.config.onchange = editorOnChange; // 注册菜单 @@ -73,6 +87,104 @@ const BraftText: React.FC = (props) => { // 设置编辑区域高度为 500px height && (editor.config.height = height); + //关闭网络上传图片 + editor.config.showLinkImg = false; + // 关闭粘贴内容中的样式 + editor.config.pasteFilterStyle = false; + // 忽略粘贴内容中的图片 + editor.config.pasteIgnoreImg = true; + // 上传图片到服务器,对应的是controller层的@RequestMapping("/upload") + editor.config.uploadImgServer = uploadAttachmentPath;//接口名称 + //自定义name,接收的时候图片文件的那么用这个,对应的是参数中的MultipartFile upimg名称,这个名称即上传到浏览器的参数名称 + editor.config.uploadFileName = "multipartFiles";//这个需要和后台商量上传图片的名称 + //设置请求体额外参数 + if (useImage) { + if (isEmpty(imageId)) { + createNewFileBid().then(res => {//获取雪花id + editor.config.uploadImgParams = { + appCode: 'ebtp-cloud-frontend', + objectId: res?.id, + }; + objectId.current = res?.id; + }) + } else { + editor.config.uploadImgParams = { + appCode: 'ebtp-cloud-frontend', + objectId: imageId, + }; + objectId.current = imageId; + } + } + // 将 timeout 时间改为 60s + editor.config.uploadImgTimeout = 60000; + // 将图片大小限制为 600k + editor.config.uploadImgMaxSize = 600 * 1024; + // 限制一次最多上传 1 张图片 + editor.config.uploadImgMaxLength = 1; + //上传图片的错误提示默认使用alert弹出,也可以自定义用户体验更好的提示方式 + editor.config.customAlert = function (info: string) { + const repinfo = info.replace(/0.5859375M/g, '600K'); + // info 是需要提示的内容 + message.error(repinfo); + }; + // 上传图片的结果反馈 + editor.config.uploadImgHooks = { + before: function (xhr: any, editor: any, files: any) { + // 图片上传之前触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,files 是选择的图片文件 + // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 + // return { + // prevent: true, + // msg: '放弃上传' + // } + // console.log("before:",xhr) + if (isEmpty(objectId.current)) { + return { + prevent: true, + msg: '上传失败,原因:上传参数错误' + } + } + setLoading(true); + return { + prevent: false, + } + }, + success: function (xhr: any, editor: any, result: any) { + // 图片上传并返回结果,图片插入成功之后触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果 + // console.log("success:",result) + }, + fail: function (xhr: any, editor: any, result: any) { + // 图片上传并返回结果,但图片插入错误时触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果 + }, + error: function (xhr: any, editor: any) { + // 图片上传出错时触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象 + }, + // 上传图片超时 + timeout: function (xhr: any) { + message.error('服务器超时!'); + setLoading(false); + }, + // 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式,可使用该配置 + // (但是,服务器端返回的必须是一个 JSON 格式字符串!!!否则会报错) + customInsert: function (insertImg: (arg0: any) => void, result: any, editor: any) { + // 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!) + // insertImg 是插入图片的函数,参数editor 是编辑器对象,result 是服务器端返回的结果 + // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片: + if (result?.success) { + const url = pictureDisplayPath + '?filePath=' + result.data[0].sysStorageVO.filePath; + insertImg(url); + } else { + message.error('图片上传失败!'); + } + setLoading(false); + // var url = result.result.remote_path; + // insertImg(url); + // result 必须是一个 JSON 格式字符串!!!否则报错 + } + }; /**一定要创建 */ editor.create(); @@ -82,15 +194,18 @@ const BraftText: React.FC = (props) => { willCreate = false; } - // 重新设置编辑器内容 - echo && editor.txt.html(echo); - value && editor.txt.html(value); - return () => { // 组件销毁时销毁编辑器 注:class写法需要在componentWillUnmount中调用 editor.destroy() + setLoading(false); + setContent(''); } - }, [value, echo]); + }, []); + + useEffect(() => { + // 重新设置编辑器内容 + echo && editor.txt.html(echo); + }, [echo]) /** *提供给父级的内容 **/ @@ -99,6 +214,7 @@ const BraftText: React.FC = (props) => { getHtml, getHtml1, makeDis, + getImageId, })); // 获取html方法1 @@ -131,12 +247,17 @@ const BraftText: React.FC = (props) => { const triggerChange = (newHtml: any) => { onChange?.(newHtml); }; + + //获取富文本图片objectId + function getImageId() { + return objectId.current; + } return ( -
- {/* - */} -
-
+ +
+
+
+
) } export default BraftText \ No newline at end of file diff --git a/src/images/auction/participateLogo.jpg b/src/images/auction/participateLogo.jpg new file mode 100644 index 0000000..90fdff6 Binary files /dev/null and b/src/images/auction/participateLogo.jpg differ diff --git a/src/locales/zh-CN/menu.ts b/src/locales/zh-CN/menu.ts index fecbc1d..fa0f907 100644 --- a/src/locales/zh-CN/menu.ts +++ b/src/locales/zh-CN/menu.ts @@ -58,28 +58,28 @@ export default { 'menu.bidOpening': '开标', 'menu.bidOpening.openList': '开标列表', - 'menu.list.ProjectDocumentation':'项目管理', - 'menu.list.ProjectInformationManagement':'项目信息管理', - 'menu.list.ProjectComplaint':'异议投诉', + 'menu.list.ProjectDocumentation': '项目管理', + 'menu.list.ProjectInformationManagement': '项目信息管理', + 'menu.list.ProjectComplaint': '异议投诉', // 'menu.list.packageDivided':'标段划分', - 'menu.biddingInvitation':'投标邀请', - 'menu.biddingInvitation.biddingAnnouncement':'招标公告', - 'menu.biddingInvitation.responseFormat':'应答格式', - 'menu.list.packageInformation':'标包信息', - 'menu.profile.biddingAnnouncement':'招标公告', - 'menu.list.LookingForBusinessOpportunities':'寻找商机', - 'menu.list.IParticipate':'我要参与', - 'menu.list.DownloadPurchasingDocuments':'下载招标文件', - 'menu.list.SupplierQuestionsOrObjections':'供应商质疑或异议列表', - 'menu.supplierClarificationList':'供应商澄清列表', - 'menu.clarificationOfTheBid':'标中质询澄清列表', - 'menu.challengeListInTheIndex':'标中质询列表', - 'menu.clarifyTheList':'澄清列表', - 'menu.invitationLetter':'邀请函', - 'menu.mentionDoubtReply':'项目经理提疑回复列表', - 'menu.reviewResults.manager':'评审结果-项目经理', - 'menu.reviewResults.groupLeader':'评审结果-组长', - 'menu.reviewResults.jury':'评审结果-评委', + 'menu.biddingInvitation': '投标邀请', + 'menu.biddingInvitation.biddingAnnouncement': '招标公告', + 'menu.biddingInvitation.responseFormat': '应答格式', + 'menu.list.packageInformation': '标包信息', + 'menu.profile.biddingAnnouncement': '招标公告', + 'menu.list.LookingForBusinessOpportunities': '寻找商机', + 'menu.list.IParticipate': '我要参与', + 'menu.list.DownloadPurchasingDocuments': '下载招标文件', + 'menu.list.SupplierQuestionsOrObjections': '供应商质疑或异议列表', + 'menu.supplierClarificationList': '供应商澄清列表', + 'menu.clarificationOfTheBid': '标中质询澄清列表', + 'menu.challengeListInTheIndex': '标中质询列表', + 'menu.clarifyTheList': '澄清列表', + 'menu.invitationLetter': '邀请函', + 'menu.mentionDoubtReply': '项目经理提疑回复列表', + 'menu.reviewResults.manager': '评审结果-项目经理', + 'menu.reviewResults.groupLeader': '评审结果-组长', + 'menu.reviewResults.jury': '评审结果-评委', 'menu.Tender': '发标', 'menu.Tender.UploadResponse': '上传应答文件', @@ -161,15 +161,15 @@ export default { 'menu.Auction.AuctionLookingForInnerShot': '寻找内拍项目', 'menu.Auction.AuctionMyLookingForInnerShot': '我参与的内拍项目', 'menu.Auction.AuctionManagerProject': '我发起的内拍项目', - "menu.Auction.AuctionAnnouncementData":'公告信息', - "menu.Auction.AuctionInfoupdateManage":'公告信息2', + "menu.Auction.AuctionAnnouncementData": '公告信息', + "menu.Auction.AuctionInfoupdateManage": '公告信息2', //项目委托 'menu.entrust': '项目委托管理', 'menu.entrust.manager': '委托管理(管理员)', 'menu.entrust.operator': '委托管理(操作员)', - 'menu.entrust.mandatoryAdministration':'项目经理的委托管理', + 'menu.entrust.mandatoryAdministration': '项目经理的委托管理', //招标项目 'menu.bidManage': '招标项目管理', 'menu.bidManage.projectManage': '项目管理', @@ -182,13 +182,13 @@ export default { 'menu.Calibration.ViewNotice': '查看通知书', 'menu.BiddingDocumentsDecrypt': '投标文件查看',/*BiddingDocumentsDecrypt_pg*/ 'menu.BiddingDocumentsDecrypt.BiddingDocumentsDecrypt_pg': '投标文件查看页面', - 'menu.BidAssessmentResults':'评审结果', - 'menu.BidAssessmentResults.BidAssessmentResults_pg':'评审结果页面', - 'menu.BidPublicityResult':'结果公示', - 'menu.BidPublicityResult.BidPublicityResult_pg':'结果公示页面', - 'menu.NtkoPage':'weboffice', - 'menu.NtkoPage.NtkoPage_pg':'ntko', - 'menu.finance.RevenueRecognition':'收入确认审核(项目经理)', + 'menu.BidAssessmentResults': '评审结果', + 'menu.BidAssessmentResults.BidAssessmentResults_pg': '评审结果页面', + 'menu.BidPublicityResult': '结果公示', + 'menu.BidPublicityResult.BidPublicityResult_pg': '结果公示页面', + 'menu.NtkoPage': 'weboffice', + 'menu.NtkoPage.NtkoPage_pg': 'ntko', + 'menu.finance.RevenueRecognition': '收入确认审核(项目经理)', //发票管理 'menu.Invoice': '发票管理', 'menu.Invoice.InvoiceManager': '发票列表', diff --git a/src/pages/Auction/AuctionLookingForInnerShot/components/AuctionLookingForInnerShot.tsx b/src/pages/Auction/AuctionLookingForInnerShot/components/AuctionLookingForInnerShot.tsx index 4a8a364..e99b579 100644 --- a/src/pages/Auction/AuctionLookingForInnerShot/components/AuctionLookingForInnerShot.tsx +++ b/src/pages/Auction/AuctionLookingForInnerShot/components/AuctionLookingForInnerShot.tsx @@ -131,23 +131,26 @@ const AuctionLookingForInnerShot: React.FC<{}> = () => { //参与竞拍 const handleOk = () => { - const fromData = { - "auctionId": auctionId, - "biddersLxdh": form.getFieldValue("biddersLxdh"), - "biddersFj": form.getFieldValue("biddersFj"), - "biddersBs": 0 - } - insertBidders(fromData).then(res => { - if (res != null && res.message == "success") { - message.success("参与竞拍成功!"); - checkRelationRef.current?.reload(); - setIsModalVisible(false); - } else { - message.error("参与竞拍失败!"); - checkRelationRef.current?.reload(); - setIsModalVisible(false); + form.validateFields().then(values => { + const fromData = { + "auctionId": auctionId, + "biddersCpr": form.getFieldValue("biddersCpr"), + "biddersLxdh": form.getFieldValue("biddersLxdh"), + "biddersFj": form.getFieldValue("biddersFj"), + "biddersBs": 0 } - }); + insertBidders(fromData).then(res => { + if (res != null && res.message == "success") { + message.success("参与竞拍成功!"); + checkRelationRef.current?.reload(); + setIsModalVisible(false); + } else { + message.error("参与竞拍失败!"); + checkRelationRef.current?.reload(); + setIsModalVisible(false); + } + }); + }) }; const handleCancel = () => { @@ -222,7 +225,8 @@ const AuctionLookingForInnerShot: React.FC<{}> = () => { diff --git a/src/pages/Auction/AuctionParticipateDetail/components/AuctionViewAuctions.tsx b/src/pages/Auction/AuctionParticipateDetail/components/AuctionViewAuctions.tsx new file mode 100644 index 0000000..b46855b --- /dev/null +++ b/src/pages/Auction/AuctionParticipateDetail/components/AuctionViewAuctions.tsx @@ -0,0 +1,669 @@ +/* + * @Author: liqiang + * @Date: 2021-02-23 13:49:53 + * @LastEditTime: 2021-03-25 16:46:14 + * @LastEditors: Please set LastEditors + * @Description: In User Settings Edit + * @FilePath: \ebtp-cloud-frontend\src\pages\Auction\AuctionViewAuctions\components\A.tsx + */ +import { getURLInformation, isEmpty } from '@/utils/CommonUtils'; +import { Button, Col, Divider, Form, Input, message, Modal, Row, Spin, Tabs } from 'antd'; +import React, { useEffect, useRef, useState } from 'react'; +import ProTable from '@ant-design/pro-table'; +import ExtendUpload from '@/utils/ExtendUpload'; +import '../../AuctionViewAuctions/auctionParts.less'; +import { getProId, getSessionUserData } from '@/utils/session'; +import { pictureDisplayPath } from '@/utils/DownloadUtils'; +import { algebraicAddition, digitalConversionAmount } from '@/utils/NumberUtils'; +import { getFilelist } from '@/services/download_'; +import { getAuctionViewAuctions, getRedisBidData, putOrderBidPrice, updatetOnlookers } from '../../AuctionViewAuctions/service'; +import AuctionImage from '../../AuctionViewAuctions/components/AuctionImage'; +import CountDownUtils from '../../AuctionViewAuctions/components/CountDownUtils'; +import { insertBidders } from '../../AuctionLookingForInnerShot/service'; +const { TabPane } = Tabs; + +const layout = { + labelCol: { span: 7 }, + wrapperCol: { span: 13 }, +}; + +//定时器间隔时间 +const timingInterval = 5000; +//金额校验正则 保留两位小数 +const amountMoney = /^\d{1,15}([.]\d{1,2})?$/; +const AuctionViewAuctions: React.FC = () => { + //项目id + const tpId = isEmpty(getProId()) ? getURLInformation('id') : getProId(); + //状态 0围观 1 参拍 + const [viewStatus, setViewStatus] = useState(''); + //出价数据 + const [cjDataSource, setCjDataSource] = useState([]); + //起拍价 + const [startingPrice, setStartingPrice] = useState(); + //公告数据 + const [noticeData, setNoticeData] = useState(); + //物资数据 + const [auctionMaterialsList, setAuctionMaterialsList] = useState([]); + //标的物所在地:右侧信息 + const [locationOfTheSubjectMatter, setLocationOfTheSubjectMatter] = useState(); + const [subjectMatterIntroductionForm] = Form.useForm(); + //标的物清单附件bid + const [subjectMatterIntroductionBid, setSubjectMatterIntroductionBid] = useState(''); + //项目名称 + const [projectName, setProjectName] = useState(''); + //参拍信息 + const [participateData, setParticipateData] = useState(); + //当前价 + const [currentPrice, setCurrentPrice] = useState(0); + //延时次数 + const [delay, setDelay] = useState(); + //是否结束 + const [overFlag, setOverFlag] = useState(false); + //是否开始 + const [startFlag, setStartFlag] = useState(false); + //竞拍数据 + const [auctionData, setAuctionData] = useState(); + //倒计时剩余时间 + const [countDownTime, setCountDownTime] = useState(null); + //结束时间 + const [endTime, setEndTime] = useState(''); + //开始时间 + const [startTime, setStartTime] = useState(''); + const ref = useRef(); + + const overFlagRef = useRef(); + //图片 + const [auctionImage, setAuctionImage] = useState([]); + //显示图片 + const [auctionImageFlag, setAuctionImageFlag] = useState(false); + //控制模态框是否显示 + const [isModalVisible, setIsModalVisible] = useState(false); + //loading + const [loading, setLoading] = useState(false); + //form + const [form] = Form.useForm(); + //当前用户信息 + const userData = getSessionUserData(); + + const cjColumns = [ + { + title: '序号', + valueType: 'index' + }, + { + title: '参拍人', + dataIndex: 'supplierId', + }, + { + title: '出价(元)', + dataIndex: 'price', + }, + { + title: '出价时间', + dataIndex: 'bidTime', + }, + ]; + + const wzColumns = [ + { + title: '所属OU组织', + dataIndex: 'organization', + }, + { + title: '物资名称', + dataIndex: 'materialName', + }, + { + title: '物料编码', + dataIndex: 'materialCode', + }, + { + title: '物资厂家', + dataIndex: 'manufacturer', + }, + { + title: '规格型号', + dataIndex: 'specification', + key: 'specification', + }, + { + title: '库龄', + dataIndex: 'reservoirAge', + }, + { + title: '数量', + dataIndex: 'amount', + }, + { + title: '计量单位', + dataIndex: 'materialUnit', + }, + { + title: '单价', + dataIndex: 'unitPrice', + }, + { + title: '统一目录名称', + dataIndex: 'directoryName', + }, + { + title: '统一目录编码', + dataIndex: 'directoryCode', + }, + ]; + + useEffect(() => { + + init(); + + setTimeout(() => { + //项目已结束 + if (overFlagRef.current) { + return; + } + ref.current = setInterval(() => { + getRedisBidData(tpId).then(res => { + res = res !== null ? res : {}; + if (res.code === 200) { + let data = res.data; + timedRefreshData(data); + if (Number(data.jssj) <= 0) { + setOverFlag(true); + clearInterval(ref.current); + } + } else { + // clearInterval(ref.current); + } + }) + + }, timingInterval); + + }, timingInterval); + + }, []); + + + const reloadData = () => { + getRedisBidData(tpId).then(res => { + if (res.code === 200) { + let data = res.data; + timedRefreshData(data); + if (Number(data.jssj) <= 0) { + setOverFlag(true); + } + } + }) + } + + const timedRefreshData = (data: any) => { + let participateData = [data.cpr, data.cjcs, data.wgr]; + getParticipateData(participateData); + setCjDataSource(data.cjjl); + setCurrentPrice(data.zgjg); + setDelay(data.yscs); + setCountDownTime(data.jssj); + setStartFlag(data.bidOpeningStatus != "0"); + } + /** + * 倒计时结束 + */ + const countDownOver = () => { + setOverFlag(true); + } + + const getParticipateData = (arr: any[]) => { + setParticipateData( + <> + {arr[0]}人参拍 + {arr[1]}次出价 + {arr[2]}人围观 + + ) + } + + /** + * 初始化 + */ + const [range, rangeSet] = useState(0)//加价幅度 + const init = () => { + getAuctionViewAuctions(tpId).then(res => { + if (res.code === 200) { + let data = res.data; + //判断项目是否结束 + if (data.yczt) { + setOverFlag(data.yczt); + overFlagRef.current = data.yczt; + } + //项目是否开始 + setStartFlag(data.bidOpeningStatus != "0"); + findFile(data.gg.auctionBdwxcdfzp) + setProjectName(data.xm.auction.projectName); + setCurrentPrice(data.inner02_04); + let participateData = [data.inner02_03.cprsl, data.inner02_03.xmcjcs, data.inner02_03.wgrsl]; + getParticipateData(participateData); + setDelay(data.inner02_02.yscs); + setCjDataSource(data.tab03_01); + //状态 0围观 1 参拍 + setViewStatus(data.cprdm !== null ? '1' : '0'); + setStartingPrice( + <> + 起拍价:¥{digitalConversionAmount(String(data.gg.auctionJpjg), 2)} + 加价幅度:¥{digitalConversionAmount(String(data.gg.auctionJjfd), 2)} + 延时周期:{data.gg.auctionYszq}分钟/次 + + ); + rangeSet(Number(data.gg.auctionJjfd));//幅度 + // offerAPriceSet(Number(data.inner02_04));//出价 + //公告数据 + setNoticeData( +
+ +
+
+
+ 竞拍公告附件: + + +
+ ) + setAuctionMaterialsList(data.xm.auctionMaterialsList); + subjectMatterIntroductionForm.setFieldsValue(data.gg); + setSubjectMatterIntroductionBid(data.gg.auctionBdwqdfj); + setLocationOfTheSubjectMatter( + <> +
  • 标的物所在地:{data.gg.auctionBdwwz}
  • +
  • 挂拍方:{data.gg.auctionGpf}
  • +
  • 联系人:{data.gg.auctionLxr}
  • +
  • 联系电话:{data.gg.auctionLxdh}
  • + + ) + setEndTime(data.gg.auctionJpjssj); + setStartTime(data.gg.auctionJpkssj); + setCountDownTime(data.jpjssjTime); + setAuctionData(data); + //围观+1 + if (data.cprdm == null && data.bidOpeningStatus != "0") {//开始后未报名的才算围观 + updatetOnlookers(tpId).then(res => { + + }); + } + } + }) + } + + const findFile = (id: string) => { + getFilelist([id]).then(res => { + let arr = [] + if (res?.success && res?.data.length > 0) { + for (const item of res?.data) { + arr.push(pictureDisplayPath + '?filePath=' + item.filePath); + } + } + setAuctionImage(arr); + setAuctionImageFlag(true); + }) + } + + /** + * 出价 + */ + const [offerAPrice, offerAPriceSet] = useState(''); + const onSearch = () => { + let value: any = Number(offerAPrice); + if (isEmpty(value)) { + message.info('请出价!'); + return; + } + + if (!amountMoney.test(value)) { + message.info('请输入正确的格式(小数点前15位,小数点后2位)!'); + return; + } + if (Number(value) <= Number(currentPrice)) { + message.info('请输入高于当前价的金额!'); + return; + } + // let differ = (Number(value) - Number(currentPrice)) % range + // let differ = (value * 1000 - currentPrice * 1000) % (range * 1000) + // if (differ !== 0) { + // message.info('请增加加价幅度整数倍的金额!'); + // return; + // } + //出价 + confirmBidOrNot(tpId, value); + } + + + /** + * 确认出价 + * @param tpId + * @param value + */ + const confirmBidOrNot = (tpId: any, value: any) => { + const orderBidPrice = (tpId: any, value: any) => { + //出价 + putOrderBidPrice(tpId, value).then(res => { + if (res.code === 200) { + let data = res.data; + if (data) { + message.success('出价成功!'); + } + reloadData(); + } + }) + } + Modal.confirm({ + content: "请确认出价", + okText: '确认', + cancelText: '取消', + keyboard: false, + centered: true, + onCancel: () => { }, + onOk: () => orderBidPrice(tpId, value) + }); + } + /** + * 我要参拍 + */ + const toParticipate = () => { + if (isParticipant()) {//有权限 + setIsModalVisible(true); + form.setFieldsValue({ + "organizationName": userData.organizationName, + "biddersCpr": userData.fullName, + }); + } else { + message.info("您好,您不具有参拍人权限,无法参与竞拍出价,您可联系省分接口人配置参拍权限。"); + } + } + //参与竞拍 + const handleOk = () => { + form.validateFields().then(values => { + const fromData = { + "auctionId": tpId, + "biddersCpr": form.getFieldValue("biddersCpr"), + "biddersLxdh": form.getFieldValue("biddersLxdh"), + "biddersFj": form.getFieldValue("biddersFj"), + "biddersBs": 0 + } + setLoading(true); + insertBidders(fromData).then(res => { + if (res != null && res.message == "success") { + message.success("参与竞拍成功!"); + init(); + setIsModalVisible(false); + } + }).finally(() => { + setLoading(false); + }); + }) + }; + + const handleCancel = () => { + setIsModalVisible(false); + }; + //判断当前登录人是否有参拍人角色 + const isParticipant = () => { + if (userData.authorityList?.length > 0) { + for (const ite of userData.authorityList) { + if (ite.roleCode == "ebtp-auction-participant") {//参拍人角色 + return true; + } + } + return false; + } + return false; + } + + return ( + +
    + { + auctionImageFlag && + } +
    + {/* */} +
    +

    {projectName}

    + {/* */} +
    + + { + overFlag ? ( + <> + 竞拍结束 + +  结束时间:{endTime}(延时{delay}次) + + + ) : startFlag ? ( + <> + 正在进行 + +  距离结束仅剩: + countDownOver()} />(延时{delay}次) + + + + ) : ( + <> + 未开始 + +  开始时间:{startTime} + + + ) + } +

    + {participateData} +

    +
    +
    + {overFlag ? '最终价:' : '当前价:'}¥{digitalConversionAmount(String(currentPrice), 2)} +
    + { + !overFlag && ( + viewStatus === '1' ? ( + startFlag ? (
    + <> + 请出价: + offerAPriceSet(e.target.value)} + /> + + + + +
    ) : ( +
    + 您已报名参拍,竞拍未开始! +
    + ) + ) : ( +
    + +
    + ) + ) + } +
    + {startingPrice} + { + viewStatus === '1' && isParticipant() && startFlag && 竞拍代码:{auctionData?.cprdm} + } +
    +
    +
    +
      + {locationOfTheSubjectMatter} +
    +
    +
    + + + + + + + 竞拍公告 + {noticeData} + + + 标的物介绍 +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* + + */} + + +
    + + 出价记录 + + +
    + +
    + + +
    + + + + + + + + + + + + + +
    +
    +
    +
    + + +
    + ) +} +export default AuctionViewAuctions; \ No newline at end of file diff --git a/src/pages/Auction/AuctionParticipateDetail/index.tsx b/src/pages/Auction/AuctionParticipateDetail/index.tsx new file mode 100644 index 0000000..33df42c --- /dev/null +++ b/src/pages/Auction/AuctionParticipateDetail/index.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import AuctionViewAuctions from './components/AuctionViewAuctions'; + +const Index: React.FC = () => { + return ( + <> + + + ) +} + +export default Index; \ No newline at end of file diff --git a/src/pages/Auction/AuctionParticipateList/index.less b/src/pages/Auction/AuctionParticipateList/index.less new file mode 100644 index 0000000..34e0760 --- /dev/null +++ b/src/pages/Auction/AuctionParticipateList/index.less @@ -0,0 +1,109 @@ +.header { + display: flex; + height: 56px; + color: white; + font-size: 20px; + background-color: #b30000; + + .headerAlign { + align-self: center; + margin-left: 20px; + font-weight: 400; + } + + .rightBtns { + position: absolute; + right: 0; + + li { + float: left; + padding: 0 14px; + color: #fff; + font-weight: 400 !important; + font-size: 14px; + line-height: 56px; + list-style: none; + + span { + padding-right: 6px; + font-size: 16px; + } + + a { + color: #fff; + } + } + } +} + +.auction-start-time { + margin-top: 4px; + padding: 2px 0px; + color: #b30000; + background: #f2f2f2; + font-size: 90%; + font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; + text-align: center; + border-radius: 3px; +} + +.auction-final-time { + margin-top: 4px; + padding: 2px 0px; + color: #b30000; + font-size: 90%; + font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; + text-align: center; + border: 1px solid #b30000; + border-radius: 3px; +} + +.site-input-group-wrapper .site-input-split { + background-color: #fff; +} + +.site-input-group-wrapper .site-input-right { + border-left-width: 0; +} + +.site-input-group-wrapper .site-input-right { + border-left-width: 0; +} + +.site-input-group-wrapper .site-input-right:hover, +.site-input-group-wrapper .site-input-right:focus { + border-left-width: 1px; +} + +.site-input-group-wrapper .ant-input-rtl.site-input-right { + border-right-width: 0; +} + +.site-input-group-wrapper .ant-input-rtl.site-input-right:hover, +.site-input-group-wrapper .ant-input-rtl.site-input-right:focus { + border-right-width: 1px; +} + +.auction-wks-tag { + position: absolute; + top: 4px; + left: 4px; + margin: 0px; + font-size: 90%; + padding: 3px 12px; + background: #aaaaaa; + color: #fff; + border: none; +} + +.auction-jpz-tag { + position: absolute; + top: 4px; + left: 4px; + margin: 0px; + font-size: 90%; + padding: 3px 12px; + background: #b30000; + color: #fff; + border: none; +} \ No newline at end of file diff --git a/src/pages/Auction/AuctionParticipateList/index.tsx b/src/pages/Auction/AuctionParticipateList/index.tsx new file mode 100644 index 0000000..1be36da --- /dev/null +++ b/src/pages/Auction/AuctionParticipateList/index.tsx @@ -0,0 +1,346 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { Avatar, Button, Card, DatePicker, Descriptions, Input, List, Radio, Space, Spin, Tag, Typography } from 'antd'; +import './index.less'; +import styles from './index.less'; +import logo from '@/images/opening/logo.svg'; +import { UserSwitchOutlined, CarryOutOutlined, EnvironmentOutlined, SearchOutlined } from '@ant-design/icons'; +import moment from 'moment'; +import { getSessionUserData } from '@/utils/session'; +import { getProvince } from '../AuctionAnnouncementData/service'; +import { getList, getSfbm } from './service'; +import { saveDateTimeFormatter } from '@/utils/DateUtils'; +import { isNotEmpty } from '@/utils/CommonUtils'; +import { pictureDisplayPath } from '@/utils/DownloadUtils'; +import { getFilelist } from '@/services/download_'; +import participateLogo from '@/images/auction/participateLogo.jpg' + +export default () => { + //获取用户数据 + let userData = getSessionUserData(); + //省数据 + const [sfbms, setSfbms] = useState([]); + //商品列表数据 + const [productList, setProductList] = useState([]); + //loading + const [loading, setLoading] = useState(false); + //所属省份 + const sfbm = useRef('all'); + //拍卖状态 + const zt = useRef('all'); + //当前/起拍价-最低价 + const zdjg = useRef(''); + //当前/起拍价-最高价 + const zgjg = useRef(''); + //拍卖时间-开始日期 + const kssj = useRef(''); + //拍卖时间-结束日期 + const jssj = useRef(''); + //项目名称 + const name = useRef(''); + //省字典 + const provinces = useRef([]); + //最低价ref + const zdjgRef = useRef(); + //最高价ref + const zgjgRef = useRef(); + //页码 + const pageNo = useRef(1); + const { Text } = Typography; + //查询 + const getParticipateList = async () => { + const params = { + pageNo: pageNo.current, + pageSize: 12, + } + sfbm.current != 'all' ? params['sfbm'] = [sfbm.current] : null; + zt.current != 'all' ? params['zt'] = zt.current : null; + isNotEmpty(zdjg.current) ? params['zdjg'] = zdjg.current : null; + isNotEmpty(zgjg.current) ? params['zgjg'] = zgjg.current : null; + isNotEmpty(kssj.current) ? params['kssj'] = kssj.current : null; + isNotEmpty(jssj.current) ? params['jssj'] = jssj.current : null; + isNotEmpty(name.current) ? params['projectName'] = name.current : null; + setLoading(true); + await getList(params).then(async res => { + if (res?.code == 200) { + for (const ite of res?.data.records) { + await getFilelist([ite.dfzp]).then(response => {//获取主图 + if (response?.success && response?.data?.length > 0) { + const returnUrl = window.location.origin + pictureDisplayPath + '?filePath=' + response?.data[0].filePath; + ite["dfzpUrl"] = returnUrl; + } + }) + } + setProductList(res?.data.records); + } + }).finally(() => { + setLoading(false); + }) + } + //获取省份字典及数据 + const getProvinces = async () => { + await getProvince().then(res => { + if (res?.code == 200) { + provinces.current = res?.data; + } + }) + //获取省份数据 + await getSfbm().then(res => { + if (res?.code == 200) { + setSfbms(res?.data); + } + }) + } + //省份名称转换 + const getProvinceName = (id: string) => { + if (provinces.current.length > 0) { + for (const item of provinces.current) { + if (item.id == id) { + return item.name; + } + } + } + return null; + } + const sfbmChange = (e: any) => { + sfbm.current = e.target.value; + pageNo.current = 1; + getParticipateList(); + } + const bidOpeningStatusChange = (e: any) => { + zt.current = e.target.value; + pageNo.current = 1; + getParticipateList(); + } + const zdjgBlur = (e: any) => { + e.persist(); + if (zdjg.current !== e.target.value) { + zdjg.current = e.target.value; + pageNo.current = 1; + getParticipateList(); + } + } + const zgjgBlur = (e: any) => { + e.persist(); + if (zgjg.current !== e.target.value) { + zgjg.current = e.target.value; + pageNo.current = 1; + getParticipateList(); + } + } + const sjChange = (times: any) => { + if (times?.length > 0) { + kssj.current = saveDateTimeFormatter(times[0].startOf('day')); + jssj.current = saveDateTimeFormatter(times[1].endOf('day')); + pageNo.current = 1; + getParticipateList(); + } else { + kssj.current = ''; + jssj.current = ''; + pageNo.current = 1; + getParticipateList(); + } + } + const pageChange = (page: number) => { + pageNo.current = page; + getParticipateList(); + } + const nameChange = (e: any) => { + e.persist(); + name.current = e.target.value; + if (e.currentTarget?.value == "") { + pageNo.current = 1; + getParticipateList(); + } + } + //点击商品进入详情 + const cardClick = (id: string) => { + let projectData = { + id: id + }; + sessionStorage.setItem('projectData', JSON.stringify(projectData)); + window.open("/AuctionParticipateDetail"); + } + //项目名称模糊查询 + const onSearch = () => { + if (isNotEmpty(name.current)) { + pageNo.current = 1; + getParticipateList(); + } + }; + + useEffect(() => { + getProvinces(); + getParticipateList(); + }, []); + + return ( +
    +
    +
    + 中国联通智慧供应链平台 | 招标采购中心 +
    +
      +
    • {moment().format("YYYY-MM-DD")}
    • + {userData?.organizationName == null ? null : (
    • {userData.organizationName}
    • )} +
    • + + + {userData.fullName} + +
    • +
    +
    +
    + +
    +
    +
    + + 物资处置 · 内拍 +
    +
    + {/* } + /> */} +
    + } allowClear bordered={false} onChange={nameChange} onPressEnter={() => onSearch()} /> + +
    +
    +
    + + + + + 不限 + {sfbms.map(item => {getProvinceName(item)})} + + + + + + + 不限 + 未开始 + 竞拍中 + + + + +
    + + zdjgBlur(event)} + onPressEnter={() => zdjgRef.current.blur()} + /> + + zgjgBlur(event)} + onPressEnter={() => zgjgRef.current.blur()} + /> + +
    +
    + + + +
    + pageChange(page), + pageSize: 12, + }} + renderItem={item => ( + + + } + onClick={() => cardClick(item.id)} + > +
    + {item.bidOpeningStatus == "0" ? `竞拍开始时间:${item.jpkssj}` : `竞拍结束时间:${item.jpjssj}`} +
    +
    +
    + {item.projectName} +
    +
    +
    + + {getProvinceName(item.sfbm)} + +
    +
    + {item.bidOpeningStatus == "0" ? `起拍价:${item.qpjg}元` : `当前价:${item.dqjg}元`} + {item.offerNumber}次出价 +
    +
    +
    + {item.bidOpeningStatus == "0" ? '未开始' : '竞拍中'} +
    +
    + )} + /> +
    +
    +
    +
    + ) +}; diff --git a/src/pages/Auction/AuctionParticipateList/service.ts b/src/pages/Auction/AuctionParticipateList/service.ts new file mode 100644 index 0000000..0076f23 --- /dev/null +++ b/src/pages/Auction/AuctionParticipateList/service.ts @@ -0,0 +1,20 @@ +import request from '@/utils/request'; + +/** + * 获取省份数据 + * @returns + */ +export async function getSfbm() { + return request('/api/biz-service-ebtp-auction/v1/innerShot/getProvince'); +} +/** + * 查询商品列表 + * @param data + * @returns + */ +export async function getList(data: any) { + return request('/api/biz-service-ebtp-auction/v1/innerShot/libraryTube/getPageList', { + method: 'POST', + data: data, + }); +} \ No newline at end of file diff --git a/src/pages/Auction/AuctionViewAuctions/auctionParts.less b/src/pages/Auction/AuctionViewAuctions/auctionParts.less index 88b39e4..5882608 100644 --- a/src/pages/Auction/AuctionViewAuctions/auctionParts.less +++ b/src/pages/Auction/AuctionViewAuctions/auctionParts.less @@ -43,11 +43,13 @@ ul.small-img-ul li.img.active{ border-color:#b30000; } .priceBlock{ height: 56px; line-height: 56px;} .priceBlock span{ font-size: 24px; font-weight: bold;} .saleBlock{ height: 56px;} -.saleBlock span{ font-size: 24px; font-weight: bold; color: #b30000;} -.saleBlock input[type="text"]{ padding: 2px; width: 200px; height: 28px; border: 1px solid #ddd; border-radius: 2px;} -.saleBlock button{ width: 64px; height: 32px; line-height: 32px; text-align: center; background: #b30000; color: #fff; border-radius: 3px; cursor: pointer;} +.saleBlock span{ font-size: 24px; font-weight: bold; color: #b30000; position: relative; top: 2px;} +.saleBlock input[type="text"]{ padding: 2px; width: 200px; height: auto; border: 1px solid #ddd; border-radius: 2px;} +.saleBlock button{ width: 64px; height: auto; line-height: 32px; text-align: center; background: #b30000; color: #fff; border-radius: 3px; cursor: pointer;margin: 0px;padding: 0px;border: none;} .otherInform{} .otherInform span{ display:inline-block; float: left; width: 49%; line-height: 2;} .contentParts .rightInform{ position: absolute; top: 10px; right: 15px; width: 280px;} .contentParts .rightInform ul{} .contentParts .rightInform ul li{ margin: 2px 0 8px; line-height: 1.8; color: #999;} +.auction-not-started{ height: 48px;} +.auction-not-started span{ font-size: 20px; font-weight: bold; color: #b30000;} diff --git a/src/pages/Auction/AuctionViewAuctions/components/AuctionViewAuctions.tsx b/src/pages/Auction/AuctionViewAuctions/components/AuctionViewAuctions.tsx index 0cdb182..68ff3e2 100644 --- a/src/pages/Auction/AuctionViewAuctions/components/AuctionViewAuctions.tsx +++ b/src/pages/Auction/AuctionViewAuctions/components/AuctionViewAuctions.tsx @@ -303,11 +303,11 @@ const AuctionViewAuctions: React.FC = () => { return; } // let differ = (Number(value) - Number(currentPrice)) % range - let differ = (value * 1000 - currentPrice * 1000) % (range * 1000) - if (differ !== 0) { - message.info('请增加加价幅度整数倍的金额!'); - return; - } + // let differ = (value * 1000 - currentPrice * 1000) % (range * 1000) + // if (differ !== 0) { + // message.info('请增加加价幅度整数倍的金额!'); + // return; + // } //出价 confirmBidOrNot(tpId, value); } diff --git a/src/pages/Bid/ReviewConfig/Config/components/detailedMain.tsx b/src/pages/Bid/ReviewConfig/Config/components/detailedMain.tsx index 373ef14..76fac40 100644 --- a/src/pages/Bid/ReviewConfig/Config/components/detailedMain.tsx +++ b/src/pages/Bid/ReviewConfig/Config/components/detailedMain.tsx @@ -221,7 +221,7 @@ const DetailedMain: React.FC = (props) => { render: (_, record) => { if (record.scoreMethod == 2) { return ( - { record.lowScore = event.target.value; }} placeholder='最低分' diff --git a/src/pages/Calibration/BidAssessmentResults/index.tsx b/src/pages/Calibration/BidAssessmentResults/index.tsx index f9d3d22..86ddda1 100644 --- a/src/pages/Calibration/BidAssessmentResults/index.tsx +++ b/src/pages/Calibration/BidAssessmentResults/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { Button, Card, Collapse, Form, Input, List, message, Popover, Select, Space, Spin, Typography } from "antd"; import ProTable from "@ant-design/pro-table"; import { getBidAssessmentResultList, getBidAssessmentResultsList, pushBidAssessmentResult, saveResult } from "./service" @@ -11,19 +11,21 @@ import { isEmpty } from '@/utils/CommonUtils'; const BidAssessmentResults: React.FC<{}> = (props) => { const [Refresh, setRefresh] = useState(0); const { Panel } = Collapse; - const [pageloading, setPageloading] = useState(false); - const [ListData, setListData] = useState(); + const [ListData, setListData] = useState([]); const [assessRoomId, setAssessRoomId] = useState(); const [currentTable, setCurrentTable] = useState(false); - const [proID, setProID] = useState(getProId); const [spintype, setSpintype] = useState(false); - //单一来源简化 - const [form] = Form.useForm(); + //查询条件-包件名称 + const [name, setName] = useState(''); + //折叠面板 + const [collapseActiveKeys, setCollapseActiveKeys] = useState(['0']); + const FormItem = Form.Item; const { Option } = Select; const { Paragraph, Text } = Typography; const firstRvwResult = ['否', '是']; const [contractedMoney, contractedMoneySet] = useState('') + const proID = getProId();//项目id let name1 = "中标"; let name2 = "评标"; let name3 = "标段"; @@ -69,10 +71,6 @@ const BidAssessmentResults: React.FC<{}> = (props) => { type4 = true; type5 = true; } - //综合得分展开关闭 - const [expandTotalScore, setExpandTotalScore] = useState(proDict == "procurement_mode_7" ? false : true); - //查询条件-包件名称 - const [name, setName] = useState(''); useEffect(() => { setSpintype(true); @@ -82,26 +80,10 @@ const BidAssessmentResults: React.FC<{}> = (props) => { setListData(res.data); } }).finally(() => { - setSpintype(false) + setSpintype(false); }) }, [proID, Refresh]) - //初审详审原因render - const rvwResultRender = (field: any, reason: any) => { - const content = ( - -
    {reason}
    -
    - ) - return isEmpty(field) || field == '-' ? '-' : ( - - {firstRvwResult[field]} - {field == 0 && - 说明 - } - ) - } - /*推送评标结果*/ const pushResult = (record: any) => { setSpintype(true); @@ -111,56 +93,356 @@ const BidAssessmentResults: React.FC<{}> = (props) => { setRefresh(Refresh + 1); } }).finally(() => { - setSpintype(false) + setSpintype(false); }) } + /*推送列表查看*/ const getResultList = (record: any) => { setAssessRoomId(record.assesRoomId); setCurrentTable(true); } + //折叠面板change + const onCollapseChange = (key: any) => { + setCollapseActiveKeys(key); + }; + + //确认评审结果ListRender封装 + const ResultListRender = (props: { item: any, setRefresh: () => void, getResultList: (record: any) => void, ListData: any, pushResult: (record: any) => void }) => { + const { item, setRefresh, getResultList, ListData, pushResult } = props; + //单一来源简化 + const [form] = Form.useForm(); + //综合得分展开关闭 + const [expandTotalScore, setExpandTotalScore] = useState(proDict == "procurement_mode_7" ? false : true); + + //单一简化 + function returnInput(name: any, name2: any, val: any, must: boolean, pattern?: boolean, hid?: boolean) { + let rule = [ + { required: must }, + { pattern: /^.{0,21}$/, message: '超长' } + ]; + pattern && rule.push({ pattern: /(^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d{1,4})?$)/, message: '请输入正确数值(最多4位小数)' }); + return ( +
    + +
    + ) + } + function returnSelect(name: any, val: any) { + return ( +
    + + + +
    + + ) + } + + //初审详审原因render + const rvwResultRender = (field: any, reason: any) => { + const content = ( + +
    {reason}
    +
    + ) + return isEmpty(field) || field == '-' ? '-' : ( + + {firstRvwResult[field]} + {field == 0 && + 说明 + } + ) + } - //单一简化 - function returnInput(name: any, name2: any, val: any, must: boolean, pattern?: boolean, hid?: boolean) { - let rule = [ - { required: must }, - { pattern: /^.{0,21}$/, message: '超长' } - ]; - pattern && rule.push({ pattern: /(^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d{1,4})?$)/, message: '请输入正确数值(最多4位小数)' }); return ( -
    - -
    + { + //标段上的报价类型确认 1-% 0-元 + let sectionQuot = item?.quotationMethodDict == 'quotation_method_2' || item?.quotationMethodDict == 'quotation_method_3' ? '1' : '0' + const columns: any = [ + { + title: '排名', + dataIndex: 'sort', + valueType: 'text', + width: 50, + }, + { + title: '供应商名称', + dataIndex: 'companyName', + valueType: 'text', + width: 120, + }, + { + hideInTable: type1, + title: proDict == 'procurement_mode_7' ? '报价总金额净价(元)' : sectionQuot == '1' ? '报价(%)' : '报价(元)', + dataIndex: 'price', + width: 100, + render: (_: any, record: any) => { + if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { + return returnInput('price', '报价', record.price, true, true) + } else { + return record.price + } + } + }, + { + hideInTable: type2, + title: proDict == 'procurement_mode_7' ? '报价总金额含税价(元)' : sectionQuot == '1' ? '评审价(%)' : '评审价(元)', + dataIndex: 'priceReview', + width: 100, + render: (_: any, record: any) => { + if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { + return returnInput('priceReview', '评审价', record.priceReview, true, true) + } else { + return record.priceReview + } + } + }, + { + title: '商务分', + dataIndex: 'businessScore', + width: 60, + hideInTable: expandTotalScore, + render: (_: any, record: any) => { + if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { + return returnInput('businessScore', '商务分', record.businessScore, false, true) + } else { + return record.businessScore + } + } + }, + { + title: '技术分', + width: 60, + dataIndex: 'technicalScore', + hideInTable: expandTotalScore, + render: (_: any, record: any) => { + if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { + return returnInput('technicalScore', '技术分', record.technicalScore, false, true) + } else { + return record.technicalScore + } + } + }, + { + title: '服务分', + width: 60, + dataIndex: 'serviceScore', + hideInTable: expandTotalScore, + render: (_: any, record: any) => { + if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { + return returnInput('serviceScore', '服务分', record.serviceScore, false, true) + } else { + return record.serviceScore + } + } + }, + { + title: '价格分', + width: 60, + dataIndex: 'priceScore', + hideInTable: expandTotalScore, + render: (_: any, record: any) => { + if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { + return returnInput('priceScore', '价格分', record.priceScore, false, true) + } else { + return record.priceScore + } + } + }, + { + title: ( + + 综合得分 + setExpandTotalScore(!expandTotalScore)} style={{ cursor: 'pointer', color: '#1890ff' }}>{expandTotalScore ? "展开" : "收起"} + + ), + dataIndex: 'totalScore', + width: 120, + render: (_: any, record: any) => { + if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { + return returnInput('totalScore', '综合得分', record.totalScore, false, true) + } else { + return record.totalScore + } + } + }, + { + hideInTable: defId === 'negotiation_single_simple', + title: '是否通过初步评审', + dataIndex: 'firstRvwResult', + width: 100, + render: (_: any, record: any) => rvwResultRender(_, record.firstRvwReason) + }, + { + hideInTable: type5 || defId === 'negotiation_single_simple', + title: '是否通过详审', + dataIndex: 'detailRvwResult', + width: 100, + render: (_: any, record: any) => rvwResultRender(_, record.detailRvwReason) + }, + { + hideInTable: type5 || defId === 'negotiation_single_simple', + title: '应答是否有效', + width: 80, + dataIndex: 'answerValid', + render: (_: any, record: any) => { + return record.answerValid === 1 ? '是' : record.answerValid === 0 ? '否' : '-' + } + }, + { + title: '是否' + name1 + '候选人', + dataIndex: 'winnerCandidate', + width: 100, + render: (_: any, record: any) => { + if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { + return returnSelect('winnerCandidate', record.winnerCandidate) + } else { + return record.winnerCandidate === 1 ? '是' : '否' + } + } + }, + { + hideInTable: type5 || defId === 'negotiation_single_simple', + title: '是否拟' + name1 + '人', + width: 80, + dataIndex: 'winnerBidder', + render: (_: any, record: any) => { + return record.winnerBidder === 1 ? '是' : record.winnerBidder === 0 ? '否' : '-' + } + }, + { + hideInTable: type3, + title: '拟签约金额(不含增值税)(元)', + width: 150, + dataIndex: 'contractedMoney', + render: (_: any, record: any) => { + if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { + return ( + <> + {returnInput('contractedMoney', '拟签约金额', record.contractedMoney, false, true)} + {returnInput('id', '供应商id', record.id, false, false, true)} + {returnInput('resultId', '结果id', record.resultId, false, false, true)} + {returnInput('companyId', '公司id', record.companyId, false, false, true)} + {returnInput('companyName', '公司名称', record.companyName, false, false, true)} + + ) + } else { + return record.contractedMoney + } + } + }, + { + hideInTable: type4, + title: '增值税金额(元)', + width: 150, + dataIndex: 'taxRatePrice', + render: (_: any, record: any) => { + if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { + return returnInput('taxRatePrice', '增值税金额', record.taxRatePrice, false, true) + } else { + return record.taxRatePrice + } + } + }, + ] + return ( + [ + <> + + { + defId === 'negotiation_single_simple' ? + + : + + } + + + ]} + pagination={{ + defaultPageSize: 10, + showSizeChanger: false, + }} + /> + ) + }} + > + ) } - function returnSelect(name: any, val: any) { - return ( -
    - - - -
    - ) - } return ( <> @@ -177,295 +459,13 @@ const BidAssessmentResults: React.FC<{}> = (props) => { }}>重置
    - ( - - - { - //标段上的报价类型确认 1-% 0-元 - let sectionQuot = item?.quotationMethodDict == 'quotation_method_2' || item?.quotationMethodDict == 'quotation_method_3' ? '1' : '0' - const columns: any = [ - { - title: '排名', - dataIndex: 'sort', - valueType: 'text', - width: 50, - }, - { - title: '供应商名称', - dataIndex: 'companyName', - valueType: 'text', - width: 120, - }, - { - hideInTable: type1, - title: proDict == 'procurement_mode_7' ? '报价总金额净价(元)' : sectionQuot == '1' ? '报价(%)' : '报价(元)', - dataIndex: 'price', - width: 100, - render: (_: any, record: any) => { - if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { - return returnInput('price', '报价', record.price, true, true) - } else { - return record.price - } - } - }, - { - hideInTable: type2, - title: proDict == 'procurement_mode_7' ? '报价总金额含税价(元)' : sectionQuot == '1' ? '评审价(%)' : '评审价(元)', - dataIndex: 'priceReview', - width: 100, - render: (_: any, record: any) => { - if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { - return returnInput('priceReview', '评审价', record.priceReview, true, true) - } else { - return record.priceReview - } - } - }, - { - title: '商务分', - dataIndex: 'businessScore', - width: 60, - hideInTable: expandTotalScore, - render: (_: any, record: any) => { - if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { - return returnInput('businessScore', '商务分', record.businessScore, false, true) - } else { - return record.businessScore - } - } - }, - { - title: '技术分', - width: 60, - dataIndex: 'technicalScore', - hideInTable: expandTotalScore, - render: (_: any, record: any) => { - if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { - return returnInput('technicalScore', '技术分', record.technicalScore, false, true) - } else { - return record.technicalScore - } - } - }, - { - title: '服务分', - width: 60, - dataIndex: 'serviceScore', - hideInTable: expandTotalScore, - render: (_: any, record: any) => { - if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { - return returnInput('serviceScore', '服务分', record.serviceScore, false, true) - } else { - return record.serviceScore - } - } - }, - { - title: '价格分', - width: 60, - dataIndex: 'priceScore', - hideInTable: expandTotalScore, - render: (_: any, record: any) => { - if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { - return returnInput('priceScore', '价格分', record.priceScore, false, true) - } else { - return record.priceScore - } - } - }, - { - title: ( - - 综合得分 - setExpandTotalScore(!expandTotalScore)} style={{ cursor: 'pointer', color: '#1890ff' }}>{expandTotalScore ? "展开" : "收起"} - - ), - dataIndex: 'totalScore', - width: 120, - render: (_: any, record: any) => { - if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { - return returnInput('totalScore', '综合得分', record.totalScore, false, true) - } else { - return record.totalScore - } - } - }, - { - hideInTable: defId === 'negotiation_single_simple', - title: '是否通过初步评审', - dataIndex: 'firstRvwResult', - width: 100, - render: (_: any, record: any) => rvwResultRender(_, record.firstRvwReason) - }, - { - hideInTable: type5 || defId === 'negotiation_single_simple', - title: '是否通过详审', - dataIndex: 'detailRvwResult', - width: 100, - render: (_: any, record: any) => rvwResultRender(_, record.detailRvwReason) - }, - { - hideInTable: type5 || defId === 'negotiation_single_simple', - title: '应答是否有效', - width: 80, - dataIndex: 'answerValid', - render: (_: any, record: any) => { - return record.answerValid === 1 ? '是' : record.answerValid === 0 ? '否' : '-' - } - }, - { - title: '是否' + name1 + '候选人', - dataIndex: 'winnerCandidate', - width: 100, - render: (_: any, record: any) => { - if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { - return returnSelect('winnerCandidate', record.winnerCandidate) - } else { - return record.winnerCandidate === 1 ? '是' : '否' - } - } - }, - { - hideInTable: type5 || defId === 'negotiation_single_simple', - title: '是否拟' + name1 + '人', - width: 80, - dataIndex: 'winnerBidder', - render: (_: any, record: any) => { - return record.winnerBidder === 1 ? '是' : record.winnerBidder === 0 ? '否' : '-' - } - }, - { - hideInTable: type3, - title: '拟签约金额(不含增值税)(元)', - width: 150, - dataIndex: 'contractedMoney', - render: (_: any, record: any) => { - if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { - return ( - <> - {returnInput('contractedMoney', '拟签约金额', record.contractedMoney, false, true)} - {returnInput('id', '供应商id', record.id, false, false, true)} - {returnInput('resultId', '结果id', record.resultId, false, false, true)} - {returnInput('companyId', '公司id', record.companyId, false, false, true)} - - ) - } else { - return record.contractedMoney - } - } - }, - { - hideInTable: type4, - title: '增值税金额(元)', - width: 150, - dataIndex: 'taxRatePrice', - render: (_: any, record: any) => { - if (defId === 'negotiation_single_simple' && record.pushStatus == "0") { - return returnInput('taxRatePrice', '增值税金额', record.taxRatePrice, false, true) - } else { - return record.taxRatePrice - } - } - }, - ] - return ( - [ - <> - - { - defId === 'negotiation_single_simple' ? - - : - - } - - - ]} - pagination={{ - defaultPageSize: 10, - showSizeChanger: false, - }} - /> - ) - }} - > - - - - )} - /> + + {ListData.map((item, index) => ( + + { setRefresh(Refresh + 1); }} getResultList={getResultList} ListData={ListData} pushResult={pushResult} /> + + ))} + setCurrentTable(false)} /> diff --git a/src/pages/Evaluation/BidControl/BidControlManager/components/BidDocSmartCheckFormModal.tsx b/src/pages/Evaluation/BidControl/BidControlManager/components/BidDocSmartCheckFormModal.tsx new file mode 100644 index 0000000..b872537 --- /dev/null +++ b/src/pages/Evaluation/BidControl/BidControlManager/components/BidDocSmartCheckFormModal.tsx @@ -0,0 +1,121 @@ +import React, { useEffect, useState } from 'react'; +import { Collapse, Table } from 'antd'; +import { getBidDocSmartCheckList } from '../service'; +import { getRoomId, getSessionRoleData } from '@/utils/session'; + +interface BidDocSmartCheckFormModalProps { + modalVisible: boolean; + values: any; + onCancel: any; +} + +const BidDocSmartCheckFormModal: React.FC = (props) => { + + const [bidDocSmartCheckList, setBidDocSmartCheckList] = useState([]); + + //查看详情窗口record + const [juryTableShow, setJuryTableShow] = useState(true); + + //是否显示法人及投标人名称对比结果;false-不显示结果,true-显示结果 + const [checkLegalAndNameResult, setCheckLegalAndNameResult] = useState(true); + + var roleId = getSessionRoleData().roleCode; + + + useEffect(() => { + setJuryTableShow(false); + getWarningList(); + if (roleId === "ebtp-expert") { + setJuryTableShow(false); + } + }, []) + + function callback(key: any) { + //getSessionUserData.roleIds; + } + function visibleValue(key: any) { + if (key) { + return ; + } else { + return ×; + } + } + function visibleLegalAndNameValue(key: any) { + //false-不显示结果,true-显示结果 + if (checkLegalAndNameResult) { + if (key) { + return ; + } else { + return ×; + } + } else { + return ; + } + } + + const BidDocSmartCheckColumns = [ + { title: '序号', dataIndex: 'num', width: 60, render: (text: any, record: any, index: any) => `${index + 1}` }, + { title: '供应商名称', dataIndex: 'companyName', }, + { + title: '供应商投标文件密封性检查', dataIndex: 'docTightnessCheck', render: (_: any, record: any) => { + return visibleValue(record.docTightnessCheck); + } + }, + { title: '供应商投标文件的完整性', dataIndex: 'docIntegrityCheck', render: (_: any, record: any) => { + return visibleValue(record.docIntegrityCheck); + }}, + { title: 'Mac、IP地址校验', dataIndex: 'macIPCheck', render: (_: any, record: any) => { + return visibleValue(record.macIPCheck); + }}, + { title: '投标保证金缴纳', dataIndex: 'ensureStatus', render: (_: any, record: any) => { + return visibleValue(record.ensureStatus); + }}, + { title: '不同投标人间法定代表人、法定代表授权委托人对比', dataIndex: 'supplierLegalCheck', render: (_: any, record: any) => { + return visibleLegalAndNameValue(record.supplierLegalCheck); + }}, + { title: '投标人名称与系统操作投标人名称', dataIndex: 'supplierNameCheck', render: (_: any, record: any) => { + return visibleLegalAndNameValue(record.supplierNameCheck); + }}, + ]; + + + const ret = { "code": 200, "success": true, "message": "success", "data": []} + const getWarningList = async () => { + let roomId = getRoomId();//sessionStorage.getItem('roomId');//sessionStorage.getItem('roomId') + + //投标文件智能审查 + await getBidDocSmartCheckList(roomId).then((res) => { + if (res.success == true) { + setCheckLegalAndNameResult(res?.data?.isCheckLegalAndName); + if(res?.data?.isCheckOpen){ + setJuryTableShow(true); + setBidDocSmartCheckList(res.data?.checkResults) + } + } else { + setBidDocSmartCheckList(ret.data); + } + }) + } + + return ( + <> + {juryTableShow ? + + + {注:"√"为审查项智能审查通过,"×"为审查项智能审查存在风险} + { +
    + + } +
    +
    + : null} + + ); +}; + +export default BidDocSmartCheckFormModal; diff --git a/src/pages/Evaluation/BidControl/BidControlManager/components/ViewRiskSupplierModal.tsx b/src/pages/Evaluation/BidControl/BidControlManager/components/ViewRiskSupplierModal.tsx new file mode 100644 index 0000000..747868e --- /dev/null +++ b/src/pages/Evaluation/BidControl/BidControlManager/components/ViewRiskSupplierModal.tsx @@ -0,0 +1,45 @@ +import React, { useEffect, useState } from 'react'; +import { Collapse } from 'antd'; +import { getRiskSupplierList } from '../service'; +import { getRoomId, getSessionProjectData } from '@/utils/session'; + +interface ViewRiskSupplierModalProps { + modalVisible: boolean; + values: any; + onCancel: any; +} + +const ViewRiskSupplierModal: React.FC = (props) => { + + const [riskSupplierData, setRiskSupplierData] = useState({}); + + useEffect(() => { + getRiskSupplierInfo(); + }, []) + + const getRiskSupplierInfo = async () => { + let roomId = getRoomId();//sessionStorage.getItem('roomId');//sessionStorage.getItem('roomId') + let projectId = getSessionProjectData().id; + + //黑名单 + await getRiskSupplierList(projectId, roomId).then((res) => { + if (res.success == true && res.data.success==false) { + setRiskSupplierData(res.data.data.result[0].regulationData[0].message); + } else { + setRiskSupplierData("暂无数据"); + } + }) + } + + return ( + <> + + + {riskSupplierData} + + + + ); +}; + +export default ViewRiskSupplierModal; diff --git a/src/pages/Evaluation/BidControl/BidControlManager/index.tsx b/src/pages/Evaluation/BidControl/BidControlManager/index.tsx index 106c43a..3fcee5b 100644 --- a/src/pages/Evaluation/BidControl/BidControlManager/index.tsx +++ b/src/pages/Evaluation/BidControl/BidControlManager/index.tsx @@ -1,63 +1,12 @@ -import React, { useState,useRef, useEffect } from 'react'; -import { Tabs,Table, Spin, message, Popconfirm,Card,Collapse, Modal, Button} from 'antd'; -import ProTable, { ActionType, ProColumns } from '@ant-design/pro-table'; +import React, { useState } from 'react'; import ViewRishFormModal from './components/ViewRishFormModal'; import ViewQuoteWarningFormModal from './components/ViewQuoteWarningFormModal'; -import { getRoomId, getSessionUserData } from '@/utils/session'; import ViewBlacklistFormModal from './components/ViewBlacklistFormModal'; import ViewReviewResultFormModal from './components/ViewReviewResultFormModal'; import ViewJuryScoringRemindFormModal from './components/ViewJuryScoringRemindFormModal'; import ViewJuryScoringAnalysisFormModal from './components/ViewJuryScoringAnalysisFormModal'; - -function callback(key) { - //getSessionUserData.roleIds; -} - -const title2 = [ - { - title: '序号', - dataIndex: 'num', - key: 'num', - }, - { - title: '投标人及报价', - dataIndex: 'tbrbj', - key: 'tbrbj', - }, - { - title: '预警信息', - dataIndex: 'yjxx', - key: 'yjxx', - }, - { - title: '操作', - dataIndex: 'cz', - key: 'cz', - }, -]; - - - -const columns: ProColumns[] = [ - { title: '序号', dataIndex: 'num', width: 50, }, - { title: '供应商名称', dataIndex: 'gysmc', }, - { title: 'IP地址',width: '20%', dataIndex: 'ip', }, - { title: 'MAC地址', dataIndex: 'mac', }, - { title: '上传时间', dataIndex: 'uploadTime',}, -]; - -const columnsMac: ProColumns[] = [ - { title: '序号', dataIndex: 'num', width: 50, }, - { title: '供应商名称', dataIndex: 'gysmc', }, - { title: '相同的MAC地址', dataIndex: 'mac', }, -]; - -const columns2: ProColumns[] = [ - { title: '序号', dataIndex: 'num', width: 50, }, - { title: '投标人及报价', dataIndex: 'tbrbj', }, - { title: '预警信息', dataIndex: 'yjxx', }, - { title: '操作', dataIndex: '', }, -]; +import ViewRiskSupplierModal from './components/ViewRiskSupplierModal'; +import BidDocSmartCheckFormModal from './components/BidDocSmartCheckFormModal'; const Sing: React.FC<{}> = () => { @@ -65,7 +14,7 @@ const Sing: React.FC<{}> = () => { const [ViewRishFormVisible, setViewRishFormVisible] = useState(false); //查看详情窗口record const [ViewRishValues, setViewRishValues] = useState({}); - + //一致性 const [ViewQuoteWarningFormVisible, setViewQuoteWarningFormVisible] = useState(false); //查看详情窗口record @@ -85,40 +34,45 @@ const Sing: React.FC<{}> = () => { const [ViewJuryScoringRemindFormVisible, setViewJuryScoringRemindFormVisible] = useState(false); //查看详情窗口record const [ViewJuryScoringRemindValues, setViewJuryScoringRemindValues] = useState({}); - + //评审专家打分偏离度分析 const [ViewJuryScoringAnalysisFormVisible, setViewJuryScoringAnalysisFormVisible] = useState(false); //查看详情窗口record const [ViewJuryScoringAnalysisValues, setViewJuryScoringAnalysisValues] = useState({}); - - - const getWarningList = async() => { - } + //风控中心-风险限定供应商 + const [BidRiskSupplierVisible, setBidRiskSupplierVisible] = useState(false); + //风控中心-风险限定供应商record + const [BidRiskSupplierValues, setRiskSupplierValues] = useState({}); + + //投标文件智能审查 + const [BidDocSmartCheckFormVisible, setBidDocSmartCheckFormVisible] = useState(false); + //查看详情窗口record + const [BidDocSmartCheckValues, setBidDocSmartCheckValues] = useState({}); return ( <> - { - ViewRishFormModal ? ( - { - setViewRishFormVisible(!ViewRishFormVisible); - setViewRishValues({}); - }} - > - - ) : null - } - { - ViewQuoteWarningFormModal ? ( - { - setViewQuoteWarningFormVisible(!ViewQuoteWarningFormVisible); - setViewQuoteWarningValues({}); - }} - > + { + ViewRishFormModal ? ( + { + setViewRishFormVisible(!ViewRishFormVisible); + setViewRishValues({}); + }} + > + + ) : null + } + { + ViewQuoteWarningFormModal ? ( + { + setViewQuoteWarningFormVisible(!ViewQuoteWarningFormVisible); + setViewQuoteWarningValues({}); + }} + > ) : null @@ -175,6 +129,32 @@ const Sing: React.FC<{}> = () => { ) : null } + { + BidDocSmartCheckFormModal ? ( + { + setBidDocSmartCheckFormVisible(!BidDocSmartCheckFormVisible); + setBidDocSmartCheckValues({}); + }} + > + + ) : null + } + { + ViewRiskSupplierModal ? ( + { + setBidRiskSupplierVisible(!BidRiskSupplierVisible); + setRiskSupplierValues({}); + }} + > + + ) : null + } ) } diff --git a/src/pages/Evaluation/BidControl/BidControlManager/service.ts b/src/pages/Evaluation/BidControl/BidControlManager/service.ts index 12bf955..aae681e 100644 --- a/src/pages/Evaluation/BidControl/BidControlManager/service.ts +++ b/src/pages/Evaluation/BidControl/BidControlManager/service.ts @@ -61,6 +61,13 @@ export async function getBlackList(projectId:any,assessRoomId: any) { //黑名 }); } + +export async function getBidDocSmartCheckList(assessRoomId: any) { //投标文件智能审查 + return request('/api/biz-service-ebtp-resps/v1/tfilewarning/getBidDocSmartCheck?assessRoomId='+`${assessRoomId}`, { + method: 'get' + }); +} + export async function getDeviatedWarnList(assessRoomId: any) { // 偏离度提醒 return request('/api/biz-service-ebtp-rsms/v1/bid/deviated/warn/findBidDeviatedWarnListByRoomId/'+`${assessRoomId}`, { method: 'get' @@ -113,7 +120,16 @@ export async function replace(a: any,b: any,c: any){ return a.replace(b,c); } - +//风险限定供应商 +export async function getRiskSupplierList(projectId: any, assessRoomId: any) { + return request('/api/biz-service-ebtp-rsms/v1/riskcenter/querySupplierLimit', { + method: 'post', + data: { + "assessRoomId": assessRoomId, + "projectId": projectId + } + }); +} diff --git a/src/pages/Evaluation/BidDetailed/BidDetailedReview/index.tsx b/src/pages/Evaluation/BidDetailed/BidDetailedReview/index.tsx index 41c620e..d39986a 100644 --- a/src/pages/Evaluation/BidDetailed/BidDetailedReview/index.tsx +++ b/src/pages/Evaluation/BidDetailed/BidDetailedReview/index.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react'; -import { Button, Table, Tabs, Space, Progress, Radio, Input, Checkbox, Select, Modal, Pagination, Spin, Form, message, Upload } from 'antd'; +import { Button, Table, Tabs, Space, Progress, Radio, Input, Checkbox, Select, Modal, Pagination, Spin, Form, message, Upload, Tooltip } from 'antd'; import { getTabList, getProgress, getScoreDetail, getRegister, submitDetail, updateJudgesStatus, findPriceScoreList, getEval, getFile, calculationPriceScore, saveOffer, getPage, getProjectById, getOfferUrl } from './service'; import '@/assets/ld_style.less' import FirstTrialTableDetailed from '../BidDetailedManager/module/FirstTrialTableDetailed'; @@ -218,7 +218,7 @@ const Index: React.FC<{}> = () => { title: showNameT.tbr + '报价(元)', dataIndex: 'evaluatingContent', sorter: { - compare: (a, b) => a.evaluatingContent - b.evaluatingContent, + compare: (a: any, b: any) => a.evaluatingContent - b.evaluatingContent, multiple: 2, }, }, @@ -921,13 +921,15 @@ const Index: React.FC<{}> = () => { if (record.scoreMap && record.scoreMap[item.supplierRegisterId]) { return (
    - inputChange(e, record.scoreMap[item.supplierRegisterId], item.supplierRegisterId, record.highScore)} - /> + 评分区间:{record.lowScore}分~{record.highScore}分} placement="topLeft"> + inputChange(e, record.scoreMap[item.supplierRegisterId], item.supplierRegisterId, record.highScore, record.lowScore)} + /> +
    @@ -936,7 +938,10 @@ const Index: React.FC<{}> = () => { } else { return (
    - inputChange(e, record, item.supplierRegisterId, record.highScore)} style={{ width: 160 }} />
    + 评分区间:{record.lowScore}分~{record.highScore}分} placement="topLeft"> + inputChange(e, record, item.supplierRegisterId, record.highScore, record.lowScore)} style={{ width: 160 }} /> + +
    @@ -1246,7 +1251,7 @@ const Index: React.FC<{}> = () => { setDataSource([...totalQualified]) } - const inputChange = (e: any, val: any, id: any, sorce: any) => { // 输入框操作 + const inputChange = (e: any, val: any, id: any, sorce: any, lowScore: any) => { // 输入框操作 let inpVal = e.target.value let inputNum = /^(\-|\+?)\d{0,4}(\.\d{0,5})?$/ if (inputNum.test(inpVal)) { @@ -1254,6 +1259,10 @@ const Index: React.FC<{}> = () => { message.error('输入分值不可大于最高分值!') inpVal = sorce } + if (Number(inpVal) < lowScore) { + message.error('输入分值不可小于最低分值!') + inpVal = lowScore + } } else { message.error('请输入正确的分值!') inpVal = inpVal.substring(0, inpVal.length - 1) diff --git a/src/pages/Evaluation/BidDetailed/BidDetailedReviewLeader/index.tsx b/src/pages/Evaluation/BidDetailed/BidDetailedReviewLeader/index.tsx index 09666af..6abb6c1 100644 --- a/src/pages/Evaluation/BidDetailed/BidDetailedReviewLeader/index.tsx +++ b/src/pages/Evaluation/BidDetailed/BidDetailedReviewLeader/index.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useRef, useState } from 'react'; -import { Button, Table, Tabs, Space, Progress, Radio, Input, Checkbox, Select, Modal, Menu, Pagination, Spin, Form, message, Collapse, Upload } from 'antd'; +import { Button, Table, Tabs, Space, Progress, Radio, Input, Checkbox, Select, Modal, Menu, Pagination, Spin, Form, message, Collapse, Upload, Tooltip } from 'antd'; import { getTabList, getProgress, getScoreDetail, getRegister, submitDetail, updateJudgesStatus, findPriceScoreList, getMemberInfo, getEval, getUnlock, getCheckData, isStatus, getFile, calculationPriceScore, saveOffer, getPage, getProjectById, getOfferUrl } from './service'; import '@/assets/ld_style.less' import FirstTrialTableDetailed from '../BidDetailedManager/module/FirstTrialTableDetailed'; @@ -954,13 +954,15 @@ const Index: React.FC<{}> = () => { if (record.scoreMap && record.scoreMap[item.supplierRegisterId]) { return (
    - inputChange(e, record.scoreMap[item.supplierRegisterId], item.supplierRegisterId, record.highScore)} - // onFocus={e => inputFocus(e, record.scoreMap[item.supplierRegisterId], item.supplierRegisterId)} - /> + 评分区间:{record.lowScore}分~{record.highScore}分} placement="topLeft"> + inputChange(e, record.scoreMap[item.supplierRegisterId], item.supplierRegisterId, record.highScore, record.lowScore)} + // onFocus={e => inputFocus(e, record.scoreMap[item.supplierRegisterId], item.supplierRegisterId)} + /> +
    @@ -969,7 +971,10 @@ const Index: React.FC<{}> = () => { } else { return (
    - inputChange(e, record, item.supplierRegisterId, record.highScore)} style={{ width: 160 }} />
    + 评分区间:{record.lowScore}分~{record.highScore}分} placement="topLeft"> + inputChange(e, record, item.supplierRegisterId, record.highScore, record.lowScore)} style={{ width: 160 }} /> + +
    @@ -1277,7 +1282,7 @@ const Index: React.FC<{}> = () => { setDataSource([...totalQualified]) } - const inputChange = (e: any, val: any, id: any, sorce: any) => { // 输入框操作 + const inputChange = (e: any, val: any, id: any, sorce: any, lowScore: any) => { // 输入框操作 let inpVal = e.target.value let inputNum = /^(\-|\+?)\d{0,4}(\.\d{0,5})?$/ if (inputNum.test(inpVal)) { @@ -1285,6 +1290,10 @@ const Index: React.FC<{}> = () => { message.error('输入分值不可大于最高分值!') inpVal = sorce } + if (Number(inpVal) < lowScore) { + message.error('输入分值不可小于最低分值!') + inpVal = lowScore + } } else { message.error('请输入正确的分值!') inpVal = inpVal.substring(0, inpVal.length - 1) diff --git a/src/pages/Evaluation/BiddingDocumentsDecrypt/components/viewOfTenderDocuments.tsx b/src/pages/Evaluation/BiddingDocumentsDecrypt/components/viewOfTenderDocuments.tsx index 24115de..19d4b93 100644 --- a/src/pages/Evaluation/BiddingDocumentsDecrypt/components/viewOfTenderDocuments.tsx +++ b/src/pages/Evaluation/BiddingDocumentsDecrypt/components/viewOfTenderDocuments.tsx @@ -123,6 +123,9 @@ const viewOfTenderDocuments: React.FC<{}> = () => { setSpinning(true); getFileNode({ tdocCatalogId: info.node.key, tendererId: tendererId, tdocId: tdocid }).then(res => { if (res?.code == 200) { + for (const ite of res.data.tfileContentList) { + ite["nodeName"] = info.node.title; + } setZipListTable(res.data.tfileContentList); } setSpinning(false); @@ -246,7 +249,7 @@ const viewOfTenderDocuments: React.FC<{}> = () => { /* message.error('程序出错,亲您稍后在世');*/ }; const downloadZip = (render: any) => { - let fileName = render.fileName; + let fileName = render.tendererName + '-' + render.nodeName; window.location.href = "/api/core-service-ebtp-updownload/v1/hulk/download?p=" + render.content + "&n=" + fileName; } diff --git a/src/pages/Evaluation/BiddingDocumentsDecrypt/components/viewOfTenderDocumentsSecond.tsx b/src/pages/Evaluation/BiddingDocumentsDecrypt/components/viewOfTenderDocumentsSecond.tsx index 84f266c..55cbf71 100644 --- a/src/pages/Evaluation/BiddingDocumentsDecrypt/components/viewOfTenderDocumentsSecond.tsx +++ b/src/pages/Evaluation/BiddingDocumentsDecrypt/components/viewOfTenderDocumentsSecond.tsx @@ -147,6 +147,9 @@ const viewOfTenderDocumentsSecond: React.FC<{}> = () => { setSpinning(true); getFileNode({ tdocCatalogId: info.node.key, tendererId: tendererId, tdocId: tdocid }).then(res => { if (res.code == 200) { + for (const ite of res.data.tfileContentList) { + ite["nodeName"] = info.node.title; + } setZipListTable(res.data.tfileContentList); } setSpinning(false); @@ -270,7 +273,7 @@ const viewOfTenderDocumentsSecond: React.FC<{}> = () => { /* message.error('程序出错,亲您稍后在世');*/ }; const downloadZip = (render: any) => { - let fileName = render.fileName; + let fileName = render.tendererName + '-' + render.nodeName; window.location.href = "/api/core-service-ebtp-updownload/v1/hulk/download?p=" + render.content + "&n=" + fileName; } diff --git a/src/pages/Evaluation/FileDecode/index.tsx b/src/pages/Evaluation/FileDecode/index.tsx index 5d0a59d..562c6cd 100644 --- a/src/pages/Evaluation/FileDecode/index.tsx +++ b/src/pages/Evaluation/FileDecode/index.tsx @@ -100,7 +100,7 @@ const FileDecode: React.FC<{}> = () => { if (JSON.stringify(record) == "{}") { return ''; } else { - const status = record?.registerInfoVOList[0].decryptStatus; + const status = record?.quoteOrOther == "1" ? record?.registerInfoVOList[0].decryptOtherStatus : record?.registerInfoVOList[0].decryptStatus; if (status == null || status === '1') { return '未解密' } else if (status === '2') { return '解密成功' } else if (status === '3') { return '解密失败' } @@ -124,7 +124,7 @@ const FileDecode: React.FC<{}> = () => { title: '操作', width: 80, render: (_: any, record: any) => { if (JSON.stringify(record) !== "{}" && jm) { - const status = record?.registerInfoVOList[0].decryptStatus; + const status = record?.quoteOrOther == "1" ? record?.registerInfoVOList[0].decryptOtherStatus : record?.registerInfoVOList[0].decryptStatus; if (record?.decryptEndDate !== '' && record?.decryptEndDate !== null && status !== '2') { return