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:
jl-zhoujl2
2022-11-02 16:54:15 +08:00
19 changed files with 493 additions and 225 deletions

View File

@ -160,7 +160,7 @@ export default [
icon: 'form',
path: '/Project/EntrustAssign',
routes: [
{//管理员-代理
{//管理员-代理 采购经理(查看委托记录)
name: 'manager',
path: '/Project/EntrustAssign/Manager',
component: './Project/EntrustAssign/manager',

View File

@ -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',

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

View File

@ -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;
}
}
}
}
}

View File

@ -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>
)
}

View File

@ -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;

View File

@ -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) => {

View File

@ -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',
});
}

View File

@ -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

View 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>2022613<span></span>线</p>
<p>线<span></span>线</p>
</div>
</div>
</div>
)
}

View 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;

View File

@ -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');
}

View File

@ -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"

View File

@ -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;
}
}
}

View File

@ -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,

View File

@ -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] + '文件获取开始时间',

View File

@ -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: '招募文件获取开始时间',