Merge branch '20221102-3.0单点到2.0' of http://gitlab.tianti.tg.unicom.local/eshop/fe_service_ebtp_frontend into release_electronic_bid_evaluation_room
This commit is contained in:
@ -160,7 +160,7 @@ export default [
|
||||
icon: 'form',
|
||||
path: '/Project/EntrustAssign',
|
||||
routes: [
|
||||
{//管理员-代理
|
||||
{//管理员-代理 采购经理(查看委托记录)
|
||||
name: 'manager',
|
||||
path: '/Project/EntrustAssign/Manager',
|
||||
component: './Project/EntrustAssign/manager',
|
||||
|
@ -70,6 +70,16 @@ export default [
|
||||
path: '/ToHomePage',
|
||||
component: './LoadingPage/MiddleLoading/ToHomePage',
|
||||
},
|
||||
//审批单跳转公共页
|
||||
{
|
||||
path: '/CommonApproval',
|
||||
component: './LoadingPage/MiddleLoading/CommonApproval',
|
||||
},
|
||||
//2.0和3.0选择页
|
||||
{
|
||||
path: '/ChoiceLogin',
|
||||
component: './LoadingPage/MiddleLoading/ChoiceLogin',
|
||||
},
|
||||
//跨工程跳转中间页结束
|
||||
{
|
||||
name: 'index_1',
|
||||
|
BIN
src/assets/choiceLogin/chionceLoginPic01.png
Normal file
BIN
src/assets/choiceLogin/chionceLoginPic01.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 71 KiB |
BIN
src/assets/choiceLogin/chionceLoginPic02.png
Normal file
BIN
src/assets/choiceLogin/chionceLoginPic02.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 108 KiB |
BIN
src/assets/choiceLogin/choiceLoginBg.jpg
Normal file
BIN
src/assets/choiceLogin/choiceLoginBg.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 118 KiB |
@ -264,5 +264,94 @@
|
||||
/* CSS3属性 */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.choiceLoginContent-common {
|
||||
float: left;
|
||||
width: 385px;
|
||||
height: 400px;
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
text-align: center;
|
||||
padding: 24px;
|
||||
cursor: pointer;
|
||||
transition: all .5s;
|
||||
|
||||
&:hover {
|
||||
box-shadow: 0 6px 16px -8px #ffffff14, 0 9px 28px #ffffff0d, 0 12px 48px 16px #ffffff08;
|
||||
background-color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
}
|
||||
|
||||
.choiceLoginBody {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
border: 0;
|
||||
text-decoration: none;
|
||||
font-family: 'Microsoft YaHei UI';
|
||||
background-image: url("~@/assets/choiceLogin/choiceLoginBg.jpg");
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
height: 100%;
|
||||
|
||||
.choiceLoginBlock {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
|
||||
.choiceLoginContent {
|
||||
width: 778px;
|
||||
height: 400px;
|
||||
}
|
||||
|
||||
.contentLeft {
|
||||
.choiceLoginContent-common;
|
||||
border-top-left-radius: 10px;
|
||||
border-bottom-left-radius: 10px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.contentLeft img {
|
||||
margin-bottom: 9px
|
||||
}
|
||||
|
||||
.contentRight {
|
||||
.choiceLoginContent-common;
|
||||
border-top-right-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.contentLeft h4,
|
||||
.contentRight h4 {
|
||||
font-size: 22px;
|
||||
color: #333;
|
||||
line-height: 32px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.loginMassage {
|
||||
width: 778px;
|
||||
margin-top: 16px;
|
||||
|
||||
&>p:first-child {
|
||||
text-indent: 0;
|
||||
}
|
||||
|
||||
&>p {
|
||||
font-size: 18px;
|
||||
color: #eaeaea;
|
||||
line-height: 32px;
|
||||
text-indent: 2em;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
|
||||
&>span {
|
||||
color: #ffde52;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import ProTable, { ProColumns } from '@ant-design/pro-table';
|
||||
import React, { useEffect, useRef, useState } from 'react';
|
||||
import ProTable, { ActionType, ProColumns } from '@ant-design/pro-table';
|
||||
import { Button, Descriptions, Form, Input, message, Radio, Spin } from 'antd';
|
||||
import styles from './indexStyles.less';
|
||||
import '@/assets/xsy_style.less'
|
||||
@ -83,25 +83,40 @@ const costConfig: React.FC<{}> = () => {
|
||||
{ title: '序号', valueType: 'index', width: 50 },
|
||||
{ title: showName.sec, dataIndex: 'sectionName', },
|
||||
{
|
||||
title: showName.bsf + '(元)', dataIndex: 'expenses1Amount',
|
||||
title: showName.bsf + '(元)', dataIndex: 'expenses1Amount', width: '20%',
|
||||
render: (_, record) => {
|
||||
return (
|
||||
<Form form={form}>
|
||||
<FormItem
|
||||
name={`expenses1Amount${record.key}`}
|
||||
rules={[
|
||||
{ pattern: /^[0-9]+(\.[0-9]{1,2})?$/, message: '请输入正确数值(最多2位小数)' },
|
||||
{ pattern: /^.{0,21}$/, message: '超长' }
|
||||
]}
|
||||
>
|
||||
<Input
|
||||
readOnly={returnDisabled(record.sendOut)}
|
||||
style={{ width: '80%', maxWidth: '300px' }}
|
||||
placeholder={`请输入${showName.bsf}`}
|
||||
defaultValue={record.expenses1Amount}
|
||||
onBlur={(event) => record.expenses1Amount = event.target.value}
|
||||
/>
|
||||
</FormItem>
|
||||
<Radio.Group disabled={returnDisabled(record.sendOut)} onChange={(event) => {
|
||||
const value = event.target.value;
|
||||
if (value != undefined) {
|
||||
const data = [...costData];
|
||||
const now = data[data.findIndex(item => item.sectionId === record.sectionId)];
|
||||
now.expenses1Type = value;
|
||||
record.expenses1Amount = 0;
|
||||
setCostData(data);
|
||||
}
|
||||
}} value={parseInt(record.expenses1Type)}>
|
||||
<Radio value={0} className={styles.radioStyle}>免费</Radio>
|
||||
<Radio value={2} className={styles.radioStyle}>收费
|
||||
{parseInt(record.expenses1Type) == 2 ? <><FormItem
|
||||
name={`expenses1Amount${record.key}`}
|
||||
style={{ display: 'inline-block', width: '60%', paddingLeft: '6px', position: 'relative', top: '-4px' }}
|
||||
rules={[
|
||||
{ pattern: /^[0-9]+(\.[0-9]{1,2})?$/, message: '请输入正确数值(最多2位小数)' },
|
||||
{ pattern: /^.{0,21}$/, message: '超长' }
|
||||
]}
|
||||
>
|
||||
<Input
|
||||
readOnly={returnDisabled(record.sendOut)}
|
||||
size="small"
|
||||
type="number"
|
||||
placeholder={`请输入${showName.bsf}`}
|
||||
defaultValue={record.expenses1Amount}
|
||||
onBlur={(event) => record.expenses1Amount = event.target.value}
|
||||
/>
|
||||
</FormItem> 元</> : null}</Radio>
|
||||
</Radio.Group>
|
||||
</Form>
|
||||
)
|
||||
}
|
||||
|
@ -1,27 +1,27 @@
|
||||
import React, { useEffect,useState } from 'react';
|
||||
import { Tabs,Collapse,Form, Input, Modal,Col,Row,Divider, Table, message, Button, Empty } from 'antd';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { Tabs, Collapse, Form, Input, Modal, Col, Row, Divider, Table, message, Button, Empty } from 'antd';
|
||||
import ProTable, { ProColumns } from "@ant-design/pro-table";
|
||||
import { deviatedAnalysisListToRR, deviatedAnalysisRRYes, getDeviatedAnalysisList, getList} from '../service';
|
||||
import { deviatedAnalysisListToRR, deviatedAnalysisRRYes, getDeviatedAnalysisList, getList } from '../service';
|
||||
import { getProMethod, getRoomId, getSessionRoleData, getSessionUserData } from '@/utils/session';
|
||||
|
||||
interface ViewJuryScoringAnalysisFormModalProps {
|
||||
modalVisible: boolean;
|
||||
values: any;
|
||||
onCancel:any;
|
||||
onCancel: any;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const ViewJuryScoringAnalysisFormModal: React.FC<ViewJuryScoringAnalysisFormModalProps> = (props) => {
|
||||
|
||||
|
||||
const [juryScoringAnalysisList, setJuryScoringAnalysisList] = useState([]);
|
||||
const [juryYesList, setJuryYesList] = useState([]);
|
||||
const [juryYesVis, setJuryYesVisSet] = useState<boolean>(false);//专家确认页面
|
||||
const [juryTableShow, setJuryTableShow] = useState<boolean>(false);//
|
||||
var roleId = getSessionRoleData().roleCode;
|
||||
let roomId=getRoomId();//sessionStorage.getItem('roomId');//sessionStorage.getItem('roomId')
|
||||
|
||||
var params={};
|
||||
params["assessRoomId"]=roomId;
|
||||
let roomId = getRoomId();//sessionStorage.getItem('roomId');//sessionStorage.getItem('roomId')
|
||||
|
||||
var params = {};
|
||||
params["assessRoomId"] = roomId;
|
||||
|
||||
let name1 = "投标人";
|
||||
let proDict = getProMethod();
|
||||
@ -33,131 +33,135 @@ const ViewJuryScoringAnalysisFormModal: React.FC<ViewJuryScoringAnalysisFormModa
|
||||
|
||||
useEffect(() => {
|
||||
getWarningList();
|
||||
if(roleId==="ebtp-expert"){
|
||||
params["createBy"]= getSessionUserData().userId;
|
||||
if (roleId === "ebtp-expert") {
|
||||
params["createBy"] = getSessionUserData().userId;
|
||||
setJuryTableShow(false);
|
||||
}else{
|
||||
setJuryTableShow(true);
|
||||
} else {
|
||||
setJuryTableShow(true);
|
||||
}
|
||||
},[])
|
||||
}, [])
|
||||
|
||||
function callback(list: any) {
|
||||
//getSessionUserData.roleIds;
|
||||
|
||||
|
||||
}
|
||||
|
||||
function categoryValue(key:any){
|
||||
function categoryValue(key: any) {
|
||||
let name = "";
|
||||
//0:报价;1:商务;2:技术;5:服务
|
||||
if(key==="0"){
|
||||
if (key === "0") {
|
||||
name = "报价";
|
||||
}else if(key==="1"){
|
||||
} else if (key === "1") {
|
||||
name = "商务";
|
||||
}else if(key==="2"){
|
||||
} else if (key === "2") {
|
||||
name = "技术";
|
||||
}else if(key==="5"){
|
||||
} else if (key === "5") {
|
||||
name = "服务";
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
const juryColumns: ProColumns<any>[] = [
|
||||
{ title: '序号',render: (text: any, record: any, index: any) => `${index + 1}`},
|
||||
{ title: '专家名称', dataIndex:"memberName"},
|
||||
{ title: '确认时间',dataIndex:"updateDate"}
|
||||
{ title: '序号', render: (text: any, record: any, index: any) => `${index + 1}` },
|
||||
{ title: '专家名称', dataIndex: "memberName" },
|
||||
{ title: '确认时间', dataIndex: "updateDate" }
|
||||
];
|
||||
|
||||
|
||||
|
||||
function setDatZjList(dataZjList:any,
|
||||
length:any,
|
||||
confirmList:any,
|
||||
reviewTurnId: any,
|
||||
turnSort: any,
|
||||
buttonStatus: undefined,
|
||||
num:any){
|
||||
|
||||
function setDatZjList(dataZjList: any,
|
||||
length: any,
|
||||
confirmList: any,
|
||||
reviewTurnId: any,
|
||||
turnSort: any,
|
||||
buttonStatus: undefined,
|
||||
num: any) {
|
||||
const juryTitle: { title: any; dataIndex: string; key: string; children: never[]; }[] = [];
|
||||
dataZjList.map((item: any, index: any) => {
|
||||
const tbpldzt = {title:item.name,dataIndex:'title',key:'title',children:[]};
|
||||
|
||||
item.categoryList.map((dfpld: any, index: any) => {
|
||||
let value = categoryValue(dfpld);
|
||||
tbpldzt.children.push({title:value,dataIndex:dfpld+item.userId,key:dfpld+item.userId,render: (text: any, record: any, index: any) => {
|
||||
let a = "";
|
||||
|
||||
if(text>-30&&text<30){
|
||||
a = <p style={{color:'blue'}}>{text}</p>
|
||||
}else if(text>-50&&text<50){
|
||||
a = <p style={{color:'#ff9900'}}>{text}</p>
|
||||
}else if(text<=-50||text>=50){
|
||||
a = <p style={{color:'red'}}>{text}</p>
|
||||
}else{
|
||||
a = text;
|
||||
}
|
||||
return a;
|
||||
}
|
||||
const tbpldzt = { title: item.name, dataIndex: 'title', key: 'title', children: [] };
|
||||
|
||||
item.categoryList.map((dfpld: any, index: any) => {
|
||||
let value = categoryValue(dfpld);
|
||||
tbpldzt.children.push({
|
||||
title: value, dataIndex: dfpld + item.userId, key: dfpld + item.userId, render: (text: any, record: any, index: any) => {
|
||||
let a = "";
|
||||
if (text > -10 && text < 10) {
|
||||
a = <p>{text}</p>
|
||||
} else if (text > -30 && text < 30) {
|
||||
a = <p style={{ color: 'blue' }}>{text}</p>
|
||||
} else if (text > -50 && text < 50) {
|
||||
a = <p style={{ color: '#ff9900' }}>{text}</p>
|
||||
} else if (text <= -50 || text >= 50) {
|
||||
a = <p style={{ color: 'red' }}>{text}</p>
|
||||
} else {
|
||||
a = text;
|
||||
}
|
||||
return a;
|
||||
}
|
||||
});
|
||||
})
|
||||
})
|
||||
juryTitle.push(tbpldzt);
|
||||
})
|
||||
const columns: ProColumns<any>[] = [
|
||||
{ title: name1, dataIndex: 'name', key:'name',className: 'column-money'},
|
||||
{ title: '打分偏离度(%)', children:juryTitle,className: 'column-money'
|
||||
{ title: name1, dataIndex: 'name', key: 'name', className: 'column-money' },
|
||||
{
|
||||
title: '打分偏离度(%)', children: juryTitle, className: 'column-money'
|
||||
},
|
||||
{ title: '操作',render: (text: any, record: any, index: any) => {
|
||||
const obj = {
|
||||
children: '',
|
||||
props: {},
|
||||
};
|
||||
if(index===0){
|
||||
let a = "";
|
||||
if(!buttonStatus){
|
||||
a = <Button type="primary" onClick={async () => {warningToRR(roomId,reviewTurnId,turnSort)}}>发送专家确认</Button>
|
||||
}else if(buttonStatus){
|
||||
if(roleId==="ebtp-agency-project-manager"||roleId==="ebtp-purchase"){
|
||||
a = <Button type="primary" onClick={ () => {setJuryYesVisSet(true);selectJuryYes(num)}}>查看专家确认信息</Button>
|
||||
}else if(roleId==="ebtp-expert"){
|
||||
if(confirmList[0].confirmStatus===0){
|
||||
a = <Button type="primary" onClick={ () => {deviatedRRYes(confirmList[0].id,1);}}>确认</Button>
|
||||
}else{
|
||||
a = "已确认";
|
||||
{
|
||||
title: '操作', render: (text: any, record: any, index: any) => {
|
||||
const obj = {
|
||||
children: '',
|
||||
props: {},
|
||||
};
|
||||
if (index === 0) {
|
||||
let a = "";
|
||||
if (!buttonStatus) {
|
||||
a = <Button type="primary" onClick={async () => { warningToRR(roomId, reviewTurnId, turnSort) }}>发送专家确认</Button>
|
||||
} else if (buttonStatus) {
|
||||
if (roleId === "ebtp-agency-project-manager" || roleId === "ebtp-purchase") {
|
||||
a = <Button type="primary" onClick={() => { setJuryYesVisSet(true); selectJuryYes(num) }}>查看专家确认信息</Button>
|
||||
} else if (roleId === "ebtp-expert") {
|
||||
if (confirmList[0].confirmStatus === 0) {
|
||||
a = <Button type="primary" onClick={() => { deviatedRRYes(confirmList[0].id, 1); }}>确认</Button>
|
||||
} else {
|
||||
a = "已确认";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
obj.children = a;
|
||||
obj.props.rowSpan = length;
|
||||
}
|
||||
|
||||
obj.children=a;
|
||||
obj.props.rowSpan = length;
|
||||
}
|
||||
return obj
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
];
|
||||
return columns;
|
||||
//setJuryScoringAnalysisColumns(columns);
|
||||
}
|
||||
|
||||
const getWarningList = async() => {
|
||||
const getWarningList = async () => {
|
||||
await getDeviatedAnalysisList(params).then((res) => {
|
||||
if (res.success ==true) {
|
||||
if(res.data!==null&&res.data.length>0){
|
||||
|
||||
if (res.success == true) {
|
||||
if (res.data !== null && res.data.length > 0) {
|
||||
|
||||
var list = res.data;
|
||||
for(var i = 0 ; i < list.length ; i++){
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
//获取表头
|
||||
var zList = list[i].supplierlist;
|
||||
var columnsZ = setDatZjList(list[i].title,
|
||||
zList.length,
|
||||
list[i].confirmList,
|
||||
list[i].reviewTurnId,
|
||||
list[i].turnSort,list[i].buttonStatus,i);
|
||||
list[i]["columns"]=columnsZ;
|
||||
list[i]["zjShow"] = true;
|
||||
if(roleId==="ebtp-expert"&&!list[i].buttonStatus){
|
||||
list[i]["zjShow"] = false;
|
||||
}else if(roleId==="ebtp-expert"&&list[i].buttonStatus){
|
||||
setJuryTableShow(true);
|
||||
}
|
||||
list[i].turnSort, list[i].buttonStatus, i);
|
||||
list[i]["columns"] = columnsZ;
|
||||
list[i]["zjShow"] = true;
|
||||
if (roleId === "ebtp-expert" && !list[i].buttonStatus) {
|
||||
list[i]["zjShow"] = false;
|
||||
} else if (roleId === "ebtp-expert" && list[i].buttonStatus) {
|
||||
setJuryTableShow(true);
|
||||
}
|
||||
}
|
||||
setJuryScoringAnalysisList(list);
|
||||
}
|
||||
@ -165,26 +169,26 @@ const ViewJuryScoringAnalysisFormModal: React.FC<ViewJuryScoringAnalysisFormModa
|
||||
})
|
||||
}
|
||||
|
||||
const warningToRR = async(assessRoomId: any,reviewTurnId:any,reviewTurnSort:any) => {
|
||||
await deviatedAnalysisListToRR(assessRoomId,reviewTurnId,reviewTurnSort).then((res) => {
|
||||
if (res.success ==true) {
|
||||
const warningToRR = async (assessRoomId: any, reviewTurnId: any, reviewTurnSort: any) => {
|
||||
await deviatedAnalysisListToRR(assessRoomId, reviewTurnId, reviewTurnSort).then((res) => {
|
||||
if (res.success == true) {
|
||||
getWarningList();
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const deviatedRRYes = async(id: any,confirmStatus:any) => {
|
||||
await deviatedAnalysisRRYes(id,confirmStatus).then((res) => {
|
||||
if (res.success ==true) {
|
||||
const deviatedRRYes = async (id: any, confirmStatus: any) => {
|
||||
await deviatedAnalysisRRYes(id, confirmStatus).then((res) => {
|
||||
if (res.success == true) {
|
||||
getWarningList();
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const selectJuryYes = async(num: any) => {
|
||||
const selectJuryYes = async (num: any) => {
|
||||
await getDeviatedAnalysisList(params).then((res) => {
|
||||
if (res.success ==true) {
|
||||
if(res.data!==null&&res.data.length>0){
|
||||
if (res.success == true) {
|
||||
if (res.data !== null && res.data.length > 0) {
|
||||
var juryYesList = res.data[num].confirmList;
|
||||
setJuryYesList(juryYesList);
|
||||
}
|
||||
@ -195,78 +199,78 @@ const ViewJuryScoringAnalysisFormModal: React.FC<ViewJuryScoringAnalysisFormModa
|
||||
const selectjuryYesButton = () => {//返回成员modal foot
|
||||
return (
|
||||
<>
|
||||
<Button type="primary" onClick={()=>setJuryYesVisSet(false)}>确定</Button>
|
||||
<Button type="primary" onClick={() => setJuryYesVisSet(false)}>确定</Button>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
//查看专家
|
||||
const selectjuryYes = () => {
|
||||
return (
|
||||
<>
|
||||
<Modal
|
||||
title="查看专家确认信息"
|
||||
width={'400px'}
|
||||
destroyOnClose
|
||||
centered
|
||||
bodyStyle={{ overflowY: 'auto' }}
|
||||
visible={juryYesVis}
|
||||
onCancel={()=>setJuryYesVisSet(false)}
|
||||
footer={selectjuryYesButton()}
|
||||
|
||||
//查看专家
|
||||
const selectjuryYes = () => {
|
||||
return (
|
||||
<>
|
||||
<Modal
|
||||
title="查看专家确认信息"
|
||||
width={'400px'}
|
||||
destroyOnClose
|
||||
centered
|
||||
bodyStyle={{ overflowY: 'auto' }}
|
||||
visible={juryYesVis}
|
||||
onCancel={() => setJuryYesVisSet(false)}
|
||||
footer={selectjuryYesButton()}
|
||||
>
|
||||
<Table
|
||||
columns={juryColumns}
|
||||
dataSource={juryYesList}
|
||||
pagination={false}//分页
|
||||
bordered={true}
|
||||
>
|
||||
<Table
|
||||
columns={juryColumns}
|
||||
dataSource={juryYesList}
|
||||
pagination={false}//分页
|
||||
bordered={true}
|
||||
>
|
||||
</Table>
|
||||
</Modal>
|
||||
</>
|
||||
)
|
||||
}
|
||||
</Table>
|
||||
</Modal>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<>
|
||||
{juryTableShow ?
|
||||
<Collapse onChange={callback}>
|
||||
<Collapse.Panel header="专家打分偏离度分析" key="6">
|
||||
<Collapse onChange={callback}>
|
||||
<Collapse.Panel header="专家打分偏离度分析" key="6">
|
||||
{juryScoringAnalysisList?.length == 0
|
||||
? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
|
||||
: (proDict == "procurement_mode_5" || proDict == "procurement_mode_6") ? juryScoringAnalysisList?.map((item: any, index: any)=>{
|
||||
if(item.zjShow){
|
||||
? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
|
||||
: (proDict == "procurement_mode_5" || proDict == "procurement_mode_6") ? juryScoringAnalysisList?.map((item: any, index: any) => {
|
||||
if (item.zjShow) {
|
||||
return (
|
||||
<Collapse onChange={callback(item)} >
|
||||
<Collapse.Panel header={item.turnName} key={"6"+index}>
|
||||
<p>{item.turnName}表格主要展示各专家对{name1}打分与所有专家对该{name1}打分平均值的差值百分比,无-表示该专家未参与此部分评分,该表信息仅供参考</p>
|
||||
<Table
|
||||
columns={item.columns}
|
||||
dataSource={item.supplierlist}
|
||||
pagination={false}//分页
|
||||
bordered={true}
|
||||
></Table>
|
||||
</Collapse.Panel>
|
||||
</Collapse>
|
||||
<Collapse onChange={callback(item)} >
|
||||
<Collapse.Panel header={item.turnName} key={"6" + index}>
|
||||
<p>{item.turnName}表格主要展示各专家对{name1}打分与所有专家对该{name1}打分平均值的差值百分比,无-表示该专家未参与此部分评分,该表信息仅供参考</p>
|
||||
<Table
|
||||
columns={item.columns}
|
||||
dataSource={item.supplierlist}
|
||||
pagination={false}//分页
|
||||
bordered={true}
|
||||
></Table>
|
||||
</Collapse.Panel>
|
||||
</Collapse>
|
||||
);
|
||||
}
|
||||
}
|
||||
}) : (
|
||||
<>
|
||||
<p>{juryScoringAnalysisList[0].turnName}表格主要展示各专家对{name1}打分与所有专家对该{name1}打分平均值的差值百分比,无-表示该专家未参与此部分评分,该表信息仅供参考</p>
|
||||
<Table
|
||||
columns={juryScoringAnalysisList[0].columns}
|
||||
dataSource={juryScoringAnalysisList[0].supplierlist}
|
||||
pagination={false}//分页
|
||||
bordered={true}
|
||||
></Table>
|
||||
<p>{juryScoringAnalysisList[0].turnName}表格主要展示各专家对{name1}打分与所有专家对该{name1}打分平均值的差值百分比,无-表示该专家未参与此部分评分,该表信息仅供参考</p>
|
||||
<Table
|
||||
columns={juryScoringAnalysisList[0].columns}
|
||||
dataSource={juryScoringAnalysisList[0].supplierlist}
|
||||
pagination={false}//分页
|
||||
bordered={true}
|
||||
></Table>
|
||||
</>
|
||||
)
|
||||
}
|
||||
{selectjuryYes()}
|
||||
</Collapse.Panel>
|
||||
</Collapse>
|
||||
:null}
|
||||
</>
|
||||
);
|
||||
</Collapse.Panel>
|
||||
</Collapse>
|
||||
: null}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default ViewJuryScoringAnalysisFormModal;
|
||||
|
@ -3,7 +3,7 @@ import { Table, Button, Space, Form, Radio, Select, Input, InputNumber, Upload,
|
||||
import { TableListItem } from './data';
|
||||
import ExtendUpload from "@/utils/ExtendUpload";
|
||||
import '@/assets/ld_style.less';
|
||||
import { findArithmeticError, getList, getRoomType, savePrice } from './service';
|
||||
import { findArithmeticError, getList, getResponseTitle, getRoomType, savePrice } from './service';
|
||||
import { getProMethod, getRoomId, getSessionRoleData, getSessionUserData } from '@/utils/session';
|
||||
import ProTable from '@ant-design/pro-table';
|
||||
|
||||
@ -45,6 +45,7 @@ const Index: React.FC<{}> = () => {
|
||||
let roomId = getRoomId();//sessionStorage.getItem('roomId');//sessionStorage.getItem('roomId')
|
||||
var roleId = getSessionUserData().roleIds;//操作员角色
|
||||
const [dateList, setDateList] = useState([]);
|
||||
const [dataListTitle, setDataListTitle] = useState<string>("");
|
||||
const [adjustForm] = Form.useForm();
|
||||
const [whetherReadonly, setWhetherReadonly] = useState<boolean>(false);
|
||||
const [editState, setEditState] = useState<boolean>(false);
|
||||
@ -66,7 +67,7 @@ const Index: React.FC<{}> = () => {
|
||||
}
|
||||
const columns: any[] = [ // 列表数据
|
||||
{ title: `${showNameT.tbr}名称`, dataIndex: 'tendererName', key: 'tendererName' },
|
||||
{ title: '最新不含税总价', dataIndex: 'evaluatingContent', key: 'evaluatingContent' },
|
||||
{ title: dataListTitle, dataIndex: 'evaluatingContent', key: 'evaluatingContent' },
|
||||
{
|
||||
title: '调整类别', dataIndex: 'type', key: 'type', render: (text: any, record: any, index: any) => {
|
||||
let a = "";
|
||||
@ -142,7 +143,12 @@ const Index: React.FC<{}> = () => {
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
await getResponseTitle(roomId).then(res => {
|
||||
if (res.success == true) {
|
||||
const data = res?.data;
|
||||
setDataListTitle(data?.name);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const setSelectChange = async (list: any) => {
|
||||
|
@ -3,18 +3,25 @@ import request from '@/utils/request';
|
||||
export async function getList(assessRoomId: any) { // 算数错误报价调整
|
||||
return request('/api/biz-service-ebtp-resps/v1/tfiletendererprice/getlist', {
|
||||
method: 'post',
|
||||
data: {"assessRoomId": assessRoomId}
|
||||
data: { "assessRoomId": assessRoomId }
|
||||
});
|
||||
}
|
||||
|
||||
export async function getResponseTitle(assessRoomId: any) { // 算数错误报价调整-获取应答格式报价项名称
|
||||
return request('/api/biz-service-ebtp-resps/v1/tfiletendererprice/getTitle', {
|
||||
method: 'post',
|
||||
data: { "assessRoomId": assessRoomId }
|
||||
});
|
||||
}
|
||||
|
||||
export async function getRoomType(assessRoomId: any) { // 查询评审室数据
|
||||
return request('/api/biz-service-ebtp-process/v1/bizassessroom/'+`${assessRoomId}`, {
|
||||
return request('/api/biz-service-ebtp-process/v1/bizassessroom/' + `${assessRoomId}`, {
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
export async function findArithmeticError(assessRoomId: any) { // 查询评审室数据
|
||||
return request('/api/biz-service-ebtp-rsms/v1/review/config/findArithmeticError/'+`${assessRoomId}`, {
|
||||
return request('/api/biz-service-ebtp-rsms/v1/review/config/findArithmeticError/' + `${assessRoomId}`, {
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
@ -43,13 +43,15 @@ const Complete: React.FC<{}> = () => {
|
||||
{ title: '费用内容描述', dataIndex: 'commodityDescribe', width: '25%' },
|
||||
{ title: '下单时间', dataIndex: 'createDate', width: '10%', valueType: 'dateTime' },
|
||||
{ title: '支付时间', dataIndex: 'paymentTime', width: '10%', valueType: 'dateTime' },
|
||||
{ title: '金额(元)', dataIndex: 'amount', width: '4%' },
|
||||
{ title: '金额(元)', dataIndex: 'amount', width: '6%', render: (_, record) => record.chargeType == "0" ? "免费" : record.amount },
|
||||
{
|
||||
title: '操作',
|
||||
dataIndex: 'option',
|
||||
width: '3%',
|
||||
valueType: 'option',
|
||||
render: (_, record) => {
|
||||
if (record.chargeType == "0") {//免费无需申请发票
|
||||
return null;
|
||||
}
|
||||
if (record.bidInvoice == null) {
|
||||
return <Button
|
||||
type="text"
|
||||
@ -97,10 +99,11 @@ const Complete: React.FC<{}> = () => {
|
||||
options={false}
|
||||
rowSelection={{
|
||||
getCheckboxProps: (record) => ({
|
||||
disabled: record.bidInvoice == null ? false : true
|
||||
disabled: record.bidInvoice == null ? record.chargeType == "0" : true
|
||||
}),
|
||||
columnWidth: '1px',
|
||||
fixed: true,
|
||||
preserveSelectedRowKeys: true,
|
||||
// columnWidth: '50px',
|
||||
// fixed: true,
|
||||
}}
|
||||
pagination={{ defaultPageSize: 10 }} //默认显示条数
|
||||
// bordered
|
||||
|
52
src/pages/LoadingPage/MiddleLoading/ChoiceLogin.tsx
Normal file
52
src/pages/LoadingPage/MiddleLoading/ChoiceLogin.tsx
Normal file
@ -0,0 +1,52 @@
|
||||
import React, { useEffect, useRef } from 'react';
|
||||
import '@/assets/zjl_style.less';
|
||||
import chionceLoginPic01 from '@/assets/choiceLogin/chionceLoginPic01.png';
|
||||
import chionceLoginPic02 from '@/assets/choiceLogin/chionceLoginPic02.png';
|
||||
import { history } from 'umi';
|
||||
import { getToSecondUrl } from '../service';
|
||||
|
||||
export default () => {
|
||||
const urlRef = useRef(null);
|
||||
//跳转到2.0
|
||||
const contentLeftClick = async () => {
|
||||
urlRef.current && window.open(urlRef.current);
|
||||
}
|
||||
//跳转到3.0
|
||||
const contentRightClick = () => {
|
||||
history.replace({ pathname: '/Dashboard' });
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const getUrl = async () => {
|
||||
const response = await getToSecondUrl();
|
||||
if (response?.success) {
|
||||
urlRef.current = response?.data;
|
||||
}
|
||||
}
|
||||
getUrl();
|
||||
}, [])
|
||||
return (
|
||||
<div className="choiceLoginBody">
|
||||
<div className="choiceLoginBlock">
|
||||
<div className="choiceLoginContent">
|
||||
<div className="contentLeft" onClick={contentLeftClick}>
|
||||
<img src={chionceLoginPic01} alt="联通电子招投标交易平台" />
|
||||
<h4>联通电子招投标<br />交易平台</h4>
|
||||
</div>
|
||||
<div className="contentRight" onClick={contentRightClick}>
|
||||
<img src={chionceLoginPic02} alt="联通智慧供应链招标采购中心" />
|
||||
<h4>联通智慧供应链<br />招标采购中心</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div className="loginMassage">
|
||||
<p><span>重要提示:</span></p>
|
||||
<p>2021年,<span>联通集团总部、31个省分公司</span>已全部上线联通智慧供应链平台。</p>
|
||||
<p>2022年6月13日,<span>联通软件研究院、联通集团财务有限公司</span>上线联通智慧供应链平台。</p>
|
||||
<p>自上线之日起,集团总部、省分公司及上述子公司新发起的公开招标、邀请招标、公开比选、单一来源采购、竞争性谈判等采购业务将在<span>智慧供应链平台招标采购中心</span>进行操作,在途项目仍按照原流程在交易平台执行并完成线上归档。联通子公司采购业务不受影响,仍按原流程执行。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
|
||||
}
|
53
src/pages/LoadingPage/MiddleLoading/CommonApproval.tsx
Normal file
53
src/pages/LoadingPage/MiddleLoading/CommonApproval.tsx
Normal file
@ -0,0 +1,53 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import { message, Spin } from 'antd';
|
||||
import { getURLInformation, isEmpty } from '@/utils/CommonUtils';
|
||||
import { history } from 'umi';
|
||||
|
||||
const approvalMap = {
|
||||
'019': '/ExamineAndApprove/Announcement',//公告
|
||||
'021': '/ExamineAndApprove/Publicity',//候选人公示
|
||||
'081': '/ExamineAndApprove/ChangeTheAnnouncement',//变更公告
|
||||
'083': '/ExamineAndApprove/InvitationLetter',//邀请函
|
||||
'084': '/ExamineAndApprove/ExternalReference',//重新评审
|
||||
'085': '/ExamineAndApprove/FailureAnnouncement',//失败公告
|
||||
}
|
||||
const Loading: React.FC<{}> = () => {
|
||||
/**
|
||||
* 传阅审批单跳转中转页
|
||||
*/
|
||||
|
||||
useEffect(() => {
|
||||
//获取必要参数
|
||||
//招标采购中心公告id
|
||||
const id: any = getURLInformation('id') === null ? '' : getURLInformation('id');
|
||||
//菜单类型
|
||||
const type: any = getURLInformation('type') === null ? '' : getURLInformation('type');
|
||||
if (isEmpty(type)) {
|
||||
message.error('缺少必要参数,请重试');
|
||||
} else {
|
||||
let params = {}
|
||||
isEmpty(id) ? null : params['id'] = id;
|
||||
if (Object.prototype.hasOwnProperty.call(approvalMap, type)) {
|
||||
history.push({ pathname: approvalMap[type], query: { ...params } });
|
||||
} else {
|
||||
message.error('参数错误,请联系管理员');
|
||||
}
|
||||
}
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
textAlign: 'center',
|
||||
height: '100%',
|
||||
background: 'rgba(0,0,0,.05)',
|
||||
position: 'relative',
|
||||
}}
|
||||
>
|
||||
<div style={{ position: 'absolute', left: '50%', top: '48%' }}>
|
||||
<Spin tip="Loading..." />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
export default Loading;
|
@ -66,5 +66,11 @@ export async function getDictionaries() {
|
||||
export async function getProjectById(id?: any) {
|
||||
return request('/api/biz-service-ebtp-project/v1/projectRecord/' + id);
|
||||
}
|
||||
/**
|
||||
* 获取跳转2.0的URL
|
||||
*/
|
||||
export async function getToSecondUrl() {
|
||||
return request('/api/core-service-ebtp-userinfo/zglt/v1/getUrl');
|
||||
}
|
||||
|
||||
|
||||
|
@ -147,10 +147,10 @@ const EventMaintenanceModal: React.FC<EventMaintenanceModalProps> = (props) => {
|
||||
<Form.Item
|
||||
name="title"
|
||||
label="标题名称"
|
||||
rules={[{ required: !readOnly }]}
|
||||
tooltip="此项不超过18个汉字"
|
||||
rules={[{ required: !readOnly }, { max: typeSelect == "2" || typeSelect == "" ? 18 : 30, message: `此项不允许超过${typeSelect == "2" || typeSelect == "" ? 18 : 30}个汉字` }]}
|
||||
tooltip={`此项不允许超过${typeSelect == "2" || typeSelect == "" ? 18 : 30}个汉字`}
|
||||
>
|
||||
<Input maxLength={18} disabled={readOnly} placeholder="请填写标题(不超过18个汉字)" />
|
||||
<Input disabled={readOnly} placeholder={`请填写标题(不超过${typeSelect == "2" || typeSelect == "" ? 18 : 30}个汉字)`} />
|
||||
</Form.Item>
|
||||
{typeSelect == "2" && <Form.Item
|
||||
name="secordTitle"
|
||||
|
@ -45,9 +45,10 @@
|
||||
|
||||
.contentBlock01 h3 {
|
||||
padding: 30px 5px;
|
||||
font-size: 30px;
|
||||
font-size: 28px;
|
||||
line-height: 1.5;
|
||||
color: #888;
|
||||
font-family: '微软雅黑';
|
||||
// color: #888;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
font-weight: bold;
|
||||
@ -55,18 +56,25 @@
|
||||
|
||||
.contentBlock01 .informText01 {
|
||||
margin: 0 2%;
|
||||
padding: 10px 0;
|
||||
padding: 22px 24px;
|
||||
width: 96%;
|
||||
background: #fff;
|
||||
font-size: 22px;
|
||||
color: #888;
|
||||
font-size: 14pt;
|
||||
// color: #888;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.contentBlock01 .informText01 p {
|
||||
padding: 20px;
|
||||
text-indent: 45px;
|
||||
line-height: 1.5;
|
||||
// padding: 20px;
|
||||
// text-indent: 45px;
|
||||
// line-height: 1.5;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
.contentBlock01 .informText01 span {
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
.contentBlock02 {
|
||||
@ -77,7 +85,8 @@
|
||||
|
||||
.contentBlock02 h3 {
|
||||
padding: 30px 5px;
|
||||
font-size: 30px;
|
||||
font-size: 28px;
|
||||
font-family: '微软雅黑';
|
||||
line-height: 1.5;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
@ -94,22 +103,29 @@
|
||||
|
||||
.contentBlock02 .informText02 {
|
||||
margin: 0 5%;
|
||||
padding: 10px 0;
|
||||
padding: 22px 24px;
|
||||
width: 90%;
|
||||
font-size: 22px;
|
||||
color: #fff;
|
||||
font-size: 14pt;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
// .contentBlock02 .informText02 img {
|
||||
// display: inherit;
|
||||
// margin: 10px auto;
|
||||
// height: 488px;
|
||||
// width: 60%;
|
||||
// }
|
||||
|
||||
.contentBlock02 .informText02 p {
|
||||
padding: 20px;
|
||||
text-indent: 45px;
|
||||
line-height: 1.5;
|
||||
// padding: 20px;
|
||||
// text-indent: 45px;
|
||||
// line-height: 1.5;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
color: #fff !important;
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
.contentBlock02 .informText02 span {
|
||||
color: #fff !important;
|
||||
background: transparent !important;
|
||||
}
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table';
|
||||
import { multipleTypeTransform, proTableValueEnum, returnDictVal } from '@/utils/CommonUtils';
|
||||
import { getPage, agreeEntrust, queryEntrust, recallEntrust, refuseEntrust, aginstEntrust, assignEntrust, queryTree } from './service';
|
||||
import './styles.less';
|
||||
import { getDicData, getSessionUserData } from '@/utils/session';
|
||||
import { getDicData, getSessionRoleData, getSessionUserData } from '@/utils/session';
|
||||
import FileDown from '@/utils/Download';
|
||||
import { btnAuthority } from '@/utils/authority';
|
||||
import { downloadFile } from '@/utils/DownloadUtils';
|
||||
@ -178,6 +178,8 @@ const entrust: React.FC<{}> = () => {
|
||||
pageNo: 1,
|
||||
pageSize: 10
|
||||
});
|
||||
//当前登录人角色
|
||||
const roleCode = getSessionRoleData().roleCode;
|
||||
|
||||
//委托列表
|
||||
const columns: ProColumns<any>[] = [
|
||||
@ -185,7 +187,7 @@ const entrust: React.FC<{}> = () => {
|
||||
{ title: '委托方', dataIndex: 'purchaser', width: '10%', search: false },
|
||||
{ title: '项目名称', dataIndex: 'projectName', },
|
||||
{ title: '方案编号', dataIndex: 'projectNumber', width: '10%', search: false },
|
||||
{ title: '接收时间', dataIndex: 'createDate', width: '10%', valueType: 'dateTime', search: false },
|
||||
{ title: roleCode == "ebtp-purchase" ? '委托时间' : '接收时间', dataIndex: 'createDate', width: '10%', valueType: 'dateTime', search: false },
|
||||
{ title: '采购方式', dataIndex: 'procurementMode', width: '10%', valueEnum: proTableValueEnum(dictData['procurement_mode=entrust']) },
|
||||
{ title: '标的类型', dataIndex: 'procurementType', width: '10%', hideInTable: typeVisible, search: false, render: (_, record) => multipleTypeTransform(record.procurementType, proTableValueEnum(dictData['procurement_type=entrust'])) },
|
||||
{
|
||||
@ -208,6 +210,7 @@ const entrust: React.FC<{}> = () => {
|
||||
{
|
||||
title: '操作', width: '12%',
|
||||
valueType: 'option',
|
||||
hideInTable: roleCode == "ebtp-purchase",//采购经理无操作列
|
||||
render: (_, record) => {
|
||||
if (record.status === 1) {
|
||||
return (
|
||||
@ -668,7 +671,7 @@ const entrust: React.FC<{}> = () => {
|
||||
}
|
||||
return (
|
||||
<Spin spinning={spin} key='spin'>
|
||||
<PageHeader title="委托管理" />
|
||||
<PageHeader title={roleCode == "ebtp-purchase" ? "查看委托记录" : "委托管理"} />
|
||||
<div style={{ maxHeight: innerHeight - 130, height: innerHeight - 130 }} className='xsy-entrust bgCWhite' key='fenpai-div'>
|
||||
<ProTable
|
||||
actionRef={actionRef}//action触发后更新表格
|
||||
@ -679,22 +682,26 @@ const entrust: React.FC<{}> = () => {
|
||||
className='tableSearch'
|
||||
size='small'
|
||||
search={{ labelWidth: 'auto', span: 6 }}
|
||||
request={(params) =>
|
||||
getPage({
|
||||
request={async (params) => {
|
||||
let params_1 = {
|
||||
...params,
|
||||
basePageRequest: { pageNo: pageData.pageNo, pageSize: pageData.pageSize },
|
||||
agencyCompany: getSessionUserData().organizationId//机构id
|
||||
}).then((res) => {
|
||||
const result = {
|
||||
data: res.data.records,
|
||||
total: res.data.total,
|
||||
success: res.success,
|
||||
pageSize: res.data.size,
|
||||
current: res.data.current
|
||||
}
|
||||
return result;
|
||||
})
|
||||
}
|
||||
}
|
||||
if (roleCode == "ebtp-purchase") {//采购经理
|
||||
params_1["purchasingManager"] = getSessionUserData().userId;//当前登录账号
|
||||
} else if (roleCode == "ebtp-agency-admin") {//代理机构管理员
|
||||
params_1["agencyCompany"] = getSessionUserData().organizationId //机构id
|
||||
}
|
||||
const res = await getPage(params_1);
|
||||
const result_1 = {
|
||||
data: res.data.records,
|
||||
total: res.data.total,
|
||||
success: res.success,
|
||||
pageSize: res.data.size,
|
||||
current: res.data.current
|
||||
};
|
||||
return result_1;
|
||||
}}
|
||||
pagination={{
|
||||
defaultPageSize: 10,
|
||||
showSizeChanger: false,
|
||||
|
@ -189,7 +189,7 @@ const IParticipate: React.FC = () => {
|
||||
{
|
||||
title: flowName[moduleName.cost],
|
||||
dataIndex: 'amount',
|
||||
render: (_: any, record: any, index: number) => digitalConversionAmount(record.amount, 2)
|
||||
render: (_: any, record: any, index: number) => record.chargeType == "0" ? "免费" : digitalConversionAmount(record.amount, 2)
|
||||
},
|
||||
{
|
||||
title: flowName[moduleName.fileName] + '文件获取开始时间',
|
||||
|
@ -180,7 +180,7 @@ const IParticipate: React.FC = () => {
|
||||
{
|
||||
title: '招募文件费用(元)',
|
||||
dataIndex: 'amount',
|
||||
render: (_: any, record: any, index: number) => digitalConversionAmount(record.amount, 2)
|
||||
render: (_: any, record: any, index: number) => record.chargeType == "0" ? "免费" : digitalConversionAmount(record.amount, 2)
|
||||
},
|
||||
{
|
||||
title: '招募文件获取开始时间',
|
||||
|
Reference in New Issue
Block a user