3.10 工程代码同步master
This commit is contained in:
@ -0,0 +1,176 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { Table } from 'antd';
|
||||
import '@/assets/ld_style.less';
|
||||
import { getJuryList, getJuryScoreData } from '../service';
|
||||
import { getURLInformation } from '@/utils/CommonUtils';
|
||||
import { getRoomId } from '@/utils/session';
|
||||
|
||||
interface BidDetailSpeedProps {
|
||||
reload: any;//重新加载
|
||||
}
|
||||
|
||||
const BidDetailSpeed: React.FC<BidDetailSpeedProps> = (props) => {
|
||||
const { reload } = props
|
||||
//存储表
|
||||
const [scheduleTable, setScheduleTable] = useState<any>();
|
||||
//初始化表
|
||||
useEffect(() => {
|
||||
//全部参数
|
||||
const juryParams = getRoomId();
|
||||
const juryDataParams = {
|
||||
// bidEvalId: '111',
|
||||
assessRoomId: getRoomId(),
|
||||
reviewTurnId: getURLInformation('turnId'),
|
||||
reviewType: '2',
|
||||
};
|
||||
//获取评委
|
||||
getJuryList(juryParams).then(async (res) => {
|
||||
if (res?.code == 200) {
|
||||
//获取进度表数据
|
||||
await getJuryScoreData(juryDataParams).then((response) => {
|
||||
if (response?.code == 200) {
|
||||
//调用数据处理方法并初始化表格
|
||||
InitializeTable(res?.data, response?.data);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}, [reload]);
|
||||
|
||||
//截取字符串方法
|
||||
const getCaption =(obj: any) => {
|
||||
var index=obj.lastIndexOf("\-");
|
||||
obj=obj.substring(index+1,obj.length);
|
||||
return obj;
|
||||
}
|
||||
|
||||
//初始化表格方法
|
||||
const InitializeTable = (columns: any, data: any) => {
|
||||
|
||||
//处理数据
|
||||
let totalData: any[] = []
|
||||
let count = 0
|
||||
data.forEach((ele: any) => {
|
||||
if(ele.hasOwnProperty("detailList")){
|
||||
ele?.detailList?.forEach((element: any,index: any) => {
|
||||
let inner = element
|
||||
inner.key = ele.category + '-' + count
|
||||
inner.name = ele.name
|
||||
inner.categoryName = ele.categoryName
|
||||
inner.rowSpan = index == 0 ? ele.detailList.length : 0
|
||||
inner.length = data.reduce((pre: any,item: any) => {
|
||||
if(item.category == ele.category) {
|
||||
return pre + item.detailList?.length
|
||||
} else {
|
||||
return pre
|
||||
}
|
||||
}, 0)
|
||||
if(count == inner.length - 1) {
|
||||
count = 0
|
||||
} else {
|
||||
count = count + 1
|
||||
}
|
||||
Object.assign(inner,inner.scoreMap)
|
||||
totalData.push(inner)
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//处理表头
|
||||
const tcolumns: any[] = [
|
||||
{
|
||||
title: '序号',
|
||||
dataIndex: 'key',
|
||||
key: 'key',
|
||||
render(_: any, record: any, index: any) {
|
||||
return index + 1;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '详审类型',
|
||||
dataIndex: 'categoryName',
|
||||
key: 'categoryName',
|
||||
render(value: any, record: any, index: any) {
|
||||
if (!record.id) {
|
||||
return {
|
||||
children: '是否完成评审',
|
||||
props: {
|
||||
colSpan: 3,
|
||||
},
|
||||
};
|
||||
}
|
||||
return {
|
||||
children: value,
|
||||
props: {
|
||||
rowSpan: getCaption(record.key) == '0' ? record.length : 0
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '类型名称',
|
||||
dataIndex: 'name',
|
||||
key: 'name',
|
||||
render(value: any, record: any, index: any) {
|
||||
if (!record.id) {
|
||||
return {
|
||||
children: "",
|
||||
props: {
|
||||
colSpan: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
children: value,
|
||||
props: {
|
||||
rowSpan: record.rowSpan
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '评审因素',
|
||||
dataIndex: 'scoreItem',
|
||||
key: 'scoreItem',
|
||||
render(value: any, record: any, index: any) {
|
||||
if (!record.id) {
|
||||
return {
|
||||
children: "",
|
||||
props: {
|
||||
colSpan: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
return value
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '评委',
|
||||
children: []
|
||||
}
|
||||
];
|
||||
columns.forEach((ele: any) => {
|
||||
tcolumns[4].children.push({
|
||||
title: ele.name,
|
||||
dataIndex: ele.userId,
|
||||
key: ele.userId,
|
||||
render:(value: any,record: any,index: any) => {
|
||||
if(record?.id) {
|
||||
// return value == -1 ? "-" : `${value}%`
|
||||
return value?.actualValue == undefined ? "-" : value?.actualValue == -1 ? "-" : value?.remarks == 1 ? <span style={{color: '#b30000'}}>{value?.actualValue}%(未提交)</span> : `${value?.actualValue}%`
|
||||
} else {
|
||||
return value?.actualValue == undefined ? "-" : value?.actualValue == -1 ? "-" : (value?.actualValue == 0 ? "未完成" : "已完成" )
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
// setTableColumns(tableColumns)
|
||||
setScheduleTable(
|
||||
// <div className="bidContent" key="1">
|
||||
<Table bordered pagination={false} columns={tcolumns} dataSource={totalData} key="1"/>
|
||||
// </div>,
|
||||
);
|
||||
};
|
||||
return <>{scheduleTable}</>;
|
||||
};
|
||||
export default BidDetailSpeed;
|
@ -0,0 +1,109 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { Table } from 'antd';
|
||||
import '@/assets/ld_style.less';
|
||||
import { getJuryDetailScoreData, getJuryList } from '../service';
|
||||
import { getURLInformation } from '@/utils/CommonUtils';
|
||||
import { getRoomId } from '@/utils/session';
|
||||
|
||||
interface BidDetailSummaryProps {
|
||||
reload: any;//重新加载
|
||||
}
|
||||
|
||||
const BidDetailSummary: React.FC<BidDetailSummaryProps> = (props) => {
|
||||
const { reload } = props
|
||||
//存储表
|
||||
const [scheduleTable, setScheduleTable] = useState<any>();
|
||||
//初始化表
|
||||
useEffect(() => {
|
||||
//全部参数
|
||||
const juryParams = getRoomId();
|
||||
// const juryDataParams = {
|
||||
// // bidEvalId: '222',
|
||||
// assessRoomId: getRoomId(),
|
||||
// reviewTurnId: getURLInformation('turnId'),
|
||||
// reviewType: '2',
|
||||
// };
|
||||
const juryDataParams = {
|
||||
reviewTurnId: getURLInformation('turnId'),
|
||||
reviewType: '2',
|
||||
assessRoomId: getRoomId(),
|
||||
};
|
||||
//获取评委
|
||||
getJuryList(juryParams).then((res) => {
|
||||
if (res.code == 200) {
|
||||
|
||||
//获取进度表数据
|
||||
getJuryDetailScoreData(juryDataParams).then((response) => {
|
||||
if (response.code == 200) {
|
||||
//调用数据处理方法并初始化表格
|
||||
InitializeTable(res.data, response.data);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}, [reload]);
|
||||
|
||||
//初始化表格方法
|
||||
const InitializeTable = (columns: any, data: any) => {
|
||||
|
||||
//处理数据
|
||||
let totalData: any[] = []
|
||||
data.forEach((ele: any) => {
|
||||
let inner = ele
|
||||
inner.key = ele.supplierRegisterId + 1
|
||||
for (const key in inner.scoreMap) {
|
||||
if (Object.prototype.hasOwnProperty.call(inner.scoreMap, key)) {
|
||||
inner.scoreMap[key] = inner.scoreMap[key] == undefined ? "-" : inner.scoreMap[key].score
|
||||
}
|
||||
}
|
||||
Object.assign(inner,inner.scoreMap)
|
||||
totalData.push(inner)
|
||||
});
|
||||
|
||||
//处理表头
|
||||
const tcolumns: any[] = [
|
||||
{
|
||||
title: '供应商',
|
||||
dataIndex: 'supplierRegisterName',
|
||||
key: 'supplierRegisterName',
|
||||
},
|
||||
{
|
||||
title: '排序',
|
||||
render(value: any, record: any, index: any) {
|
||||
return index + 1
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '评审委员会',
|
||||
children: []
|
||||
},
|
||||
{
|
||||
title: '报价分',
|
||||
dataIndex: 'priceScore',
|
||||
key: 'priceScore',
|
||||
},
|
||||
{
|
||||
title: '最终得分',
|
||||
dataIndex: 'finalScore',
|
||||
key: 'finalScore',
|
||||
}
|
||||
];
|
||||
columns.forEach((ele: any) => {
|
||||
tcolumns[2].children.push({
|
||||
title: ele.name,
|
||||
dataIndex: ele.userId,
|
||||
key: ele.userId,
|
||||
render:(value: any,record: any,index: any) => {
|
||||
return value == undefined ? "-" : value
|
||||
}
|
||||
});
|
||||
});
|
||||
setScheduleTable(
|
||||
// <div className="bidContent" key="1">
|
||||
<Table bordered pagination={false} columns={tcolumns} dataSource={totalData} key="1"/>
|
||||
// </div>,
|
||||
);
|
||||
};
|
||||
return <>{scheduleTable}</>;
|
||||
};
|
||||
export default BidDetailSummary;
|
@ -0,0 +1,112 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { Button, Modal, Space, Spin, Table } from 'antd';
|
||||
import { getJuryList } from '../service';
|
||||
import { getRoomId } from '@/utils/session';
|
||||
|
||||
interface ConsistencyCheckProps {
|
||||
modalVisible: boolean;
|
||||
onCancel: () => void;
|
||||
onSubmit: () => void;
|
||||
values: any;
|
||||
}
|
||||
|
||||
const modalHeight = (window.innerHeight * 96) / 100;
|
||||
|
||||
const ConsistencyCheck: React.FC<ConsistencyCheckProps> = (props) => {
|
||||
const { modalVisible, onCancel, values, onSubmit } = props;
|
||||
//存储columns
|
||||
const [tableColumns, setTableColumns] = useState<any[]>([]);
|
||||
//存储表数据
|
||||
const [tableData, setTableData] = useState<any[]>([]);
|
||||
//loading
|
||||
const [loading, setLoading] = useState<boolean>(false);
|
||||
|
||||
//初始化表
|
||||
useEffect(() => {
|
||||
setLoading(true);
|
||||
//全部参数
|
||||
const juryParams = getRoomId();
|
||||
//获取评委
|
||||
getJuryList(juryParams).then((res) => {
|
||||
if (res.code == 200) {
|
||||
//调用数据处理方法并初始化表格
|
||||
InitializeTable(res.data, values);
|
||||
setLoading(false);
|
||||
}
|
||||
});
|
||||
}, [modalVisible]);
|
||||
|
||||
//初始化表格方法
|
||||
const InitializeTable = (columns: any, data: any) => {
|
||||
//处理数据
|
||||
let totalData: any[] = [];
|
||||
let count = 0;
|
||||
data.forEach((ele: any) => {
|
||||
count = count + 1;
|
||||
let inner = ele;
|
||||
inner.key = count;
|
||||
Object.assign(inner, inner.scoreMap);
|
||||
totalData.push(inner);
|
||||
});
|
||||
|
||||
//处理表头
|
||||
const tcolumns: any[] = [
|
||||
{
|
||||
title: '序号',
|
||||
dataIndex: 'key',
|
||||
key: 'key',
|
||||
},
|
||||
{
|
||||
title: '校验项',
|
||||
dataIndex: 'scoreItem',
|
||||
key: 'scoreItem',
|
||||
},
|
||||
{
|
||||
title: '供应商',
|
||||
dataIndex: 'supplierRegisterName',
|
||||
key: 'supplierRegisterName',
|
||||
},
|
||||
];
|
||||
columns.forEach((ele: any) => {
|
||||
tcolumns.push({
|
||||
title: ele.name,
|
||||
dataIndex: ele.userId,
|
||||
key: ele.userId,
|
||||
render: (value: any, record: any, index: any) => {
|
||||
return value == undefined ? '-' : value;
|
||||
},
|
||||
});
|
||||
});
|
||||
setTableColumns(tcolumns);
|
||||
setTableData(totalData);
|
||||
};
|
||||
return (
|
||||
<Modal
|
||||
destroyOnClose
|
||||
title="一致性检查"
|
||||
centered
|
||||
visible={modalVisible}
|
||||
onCancel={onCancel}
|
||||
footer={false}
|
||||
width={1000}
|
||||
style={{ maxHeight: modalHeight }}
|
||||
bodyStyle={{ maxHeight: modalHeight - 54, overflowY: 'auto', padding: '12px 24px' }}
|
||||
>
|
||||
<Spin spinning={loading} delay={300}>
|
||||
<span style={{ color: 'red', display: 'block', marginBottom: 8 }}>
|
||||
提示:以下是一致性打分项检查结果,存在打分不一致的情况,请检查评审结果并确认是否继续提交!
|
||||
</span>
|
||||
<Table bordered pagination={false} columns={tableColumns} dataSource={tableData} key="1" />
|
||||
<div style={{ display: 'block' }}>
|
||||
<Space style={{ display: 'flex', justifyContent: 'center', marginTop: 12 }}>
|
||||
<Button type="primary" onClick={onCancel}>
|
||||
返回,暂不提交
|
||||
</Button>
|
||||
<Button onClick={onSubmit}>忽略,继续提交</Button>
|
||||
</Space>
|
||||
</div>
|
||||
</Spin>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
export default ConsistencyCheck;
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,212 @@
|
||||
import request from '@/utils/request';
|
||||
|
||||
// export async function getTabList(params: any) { // tab
|
||||
// return request('/v1/bid/eval/category/findCategoryTabList', {
|
||||
// method: 'get',
|
||||
// params
|
||||
// });
|
||||
// }
|
||||
|
||||
export async function getTabList(params: any) { // tab
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bid/eval/category/findCategoryTabList', {
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
// export async function getProgress(data: any) { // 我的进度
|
||||
// return request('/v1/bid/eval/detail/evalProgress', {
|
||||
// method: 'post',
|
||||
// data: data
|
||||
// });
|
||||
// }
|
||||
|
||||
export async function getProgress(data: any) { // 我的进度
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bid/eval/detail/evalProgress', {
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
||||
export async function getScoreDetail(data: any) { // 评分数据
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bid/eval/detail/findReviewConfig', {
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
||||
export async function getRegister(params: any) { // 供应商动态列头
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bid/eval/detail/findRegister', {
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
// export async function submitDetail(data: any) { // 保存
|
||||
// return request('/v1/bid/eval/detail', {
|
||||
// method: 'post',
|
||||
// data: data
|
||||
// });
|
||||
// }
|
||||
|
||||
export async function submitDetail(data: any) { // 保存
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bid/eval/detail', {
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
||||
// export async function updateJudgesStatus(data: any) { // 提交
|
||||
// return request('/v1/bxmulti/eval/summary/submitPriceSummary', {
|
||||
// method: 'post',
|
||||
// data: data
|
||||
// });
|
||||
// }
|
||||
|
||||
export async function updateJudgesStatus(data: any) { // 提交
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bxmulti/eval/summary/submitPriceSummary', {
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
||||
// export async function findPriceScoreList(data: any) { // 报价数据
|
||||
// return request('/v1/bid/eval/detail/findPriceScoreList', {
|
||||
// method: 'post',
|
||||
// data: data
|
||||
// });
|
||||
// }
|
||||
|
||||
export async function findPriceScoreList(data: any) { // 报价数据
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bid/eval/detail/findPriceScoreList', {
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
||||
export async function getMemberInfo(id: any) { // 评审解锁
|
||||
return request('/api/biz-service-ebtp-rsms/v1/jury/member/info/'+id, {
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
export async function getEval(params: any) { // 获取页面接口数据
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bid/eval/find', {
|
||||
method: 'get',
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
export async function getUnlock(data: any) { // 评审解锁
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bid/eval/category/unlock', {
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 详审汇总表-获取评委打分表格数据
|
||||
* @param params
|
||||
*/
|
||||
// export async function getJuryDetailScoreData(params: any) {
|
||||
// return request(`/v1/bid/eval/record/findPriceScoreRecord`,{
|
||||
// method: 'POST',
|
||||
// data: params
|
||||
// })
|
||||
// }
|
||||
export async function getJuryDetailScoreData(params: any) {
|
||||
return request(`/api/biz-service-ebtp-rsms/v1/bid/eval/summary/findScoreDetailSummary`,{
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 详审进度表-根据评标室id获取评委会成员数据
|
||||
* @param params
|
||||
*/
|
||||
export async function getJuryList(params: any) {
|
||||
return request(`/api/biz-service-ebtp-rsms/v1/jury/member/info/${params}`,{
|
||||
method: 'GET',
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 详审进度表-获取评委会打分表格数据
|
||||
* @param params
|
||||
*/
|
||||
export async function getJuryScoreData(params: any) {
|
||||
return request(`/api/biz-service-ebtp-rsms/v1/bid/eval/summary/findProgressSummary`,{
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 详审汇总表-获取一致性检查数据
|
||||
* @param params
|
||||
*/
|
||||
export async function getCheckData(params: any) {
|
||||
return request(`/api/biz-service-ebtp-rsms/v1/bid/eval/summary/findConsistentResult`,{
|
||||
method: 'POST',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 详审汇总表-汇总提交
|
||||
* @param params
|
||||
*/
|
||||
export async function submitSummary(params: any) {
|
||||
return request(`/api/biz-service-ebtp-rsms/v1/bid/eval/summary/submitSummary`,{
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 详审汇总表-判断当前是进度表还是汇总表状态
|
||||
* @param params
|
||||
*/
|
||||
export async function isStatus(params: any) {
|
||||
return request(`/api/biz-service-ebtp-rsms/v1/bid/eval/category/findAllJudgesStatus`,{
|
||||
method: 'GET',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
export async function getFile(id: any) { // 查找是否有应答文件
|
||||
return request('/api/biz-service-ebtp-rsms/v1/review/config/detail/doc/list?detailId='+id, {
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
// export async function calculationPriceScore(data: any) { // 自动报价确定
|
||||
// return request('/v1/bid/eval/detail/calculationPriceScore', {
|
||||
// method: 'post',
|
||||
// data
|
||||
// });
|
||||
// }
|
||||
|
||||
export async function calculationPriceScore(data: any) { // 自动报价确定
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bid/eval/detail/calculationPriceScore', {
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// export async function saveOffer(data: any) { // 自动报价保存
|
||||
// return request('/v1/bid/eval/detail', {
|
||||
// method: 'post',
|
||||
// data
|
||||
// });
|
||||
// }
|
||||
|
||||
export async function saveOffer(data: any) { // 自动报价保存
|
||||
return request('/api/biz-service-ebtp-rsms/v1/bid/eval/detail', {
|
||||
method: 'post',
|
||||
data
|
||||
});
|
||||
}
|
||||
|
@ -0,0 +1,16 @@
|
||||
import { message } from "antd";
|
||||
import { submitSummary } from "./service";
|
||||
|
||||
/**
|
||||
* 评审汇总提交
|
||||
* @param fields
|
||||
*/
|
||||
|
||||
export const handleSubmit = async (fields: any) => {
|
||||
return await submitSummary(fields).then((res) => {
|
||||
if (res?.code == 200) {
|
||||
message.success('提交成功');
|
||||
}
|
||||
return res?.success;
|
||||
});
|
||||
};
|
Reference in New Issue
Block a user