Commit 452cb24f authored by 前端-黄佳鑫's avatar 前端-黄佳鑫

Merge branch 'dev-srm' of http://10.0.0.22:3000/lingxi/lingxi-business-paltform into dev-srm

parents a2b9b146 0e04ce33
......@@ -281,7 +281,7 @@ const bidRequestInfo: ISchema = {
hopeDate: {
type: 'string',
"x-component": 'date',
title: '期望交付日期',
title: '交付日期',
required: true,
"x-component-props": {
disabledDate: current => {
......
......@@ -51,6 +51,7 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
const {
id,
code,
preview,
pageStatus
} = usePageStatus()
......@@ -63,7 +64,7 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
useEffect(() => {
if(id) {
PublicApi.getPurchaseExpertExtractGetExpertExtract({id}).then(res => {
const { code, data } = res
const { code, data }: any = res
if(code === 1000) {
data.createTime = formatTimeString(data['createTime'])
data.remarkTime = `${formatTimeString(data['inviteTender']['evaluationStartTime'])} ~ ${formatTimeString(data['inviteTender']['evaluationEndTime'])}`
......@@ -77,6 +78,26 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
}
}, [id])
// 招标查询跳转
useEffect(() => {
if(code) {
PublicApi.getPurchaseInviteTenderGetInviteTender({inviteTenderId: code}).then(res => {
const { code, data }: any = res
let initRender: any = {}
if(code === 1000) {
initRender.createTime = formatTimeString(data['createTime'])
initRender.remarkTime = `${formatTimeString(data['evaluationStartTime'])} ~ ${formatTimeString(data['evaluationEndTime'])}`
initRender.code = data['code']
initRender.projectName = data['projectName']
initRender.openTenderTime = formatTimeString(data['openTenderTime'])
initRender.status = data.status ? '待发送' : '已发送'
initRender.expertExtractQueryList = initConditionData
setInitFormValue(initRender)
}
})
}
}, [code])
const conditionColumns = buildColumns.concat([
{
dataIndex: 'ctl',
......
......@@ -47,9 +47,9 @@ const callForBidsSearch: React.FC<{}> = () => {
render: (text, record) => <>
<Button type='link' onClick={() => handleCopy(record.id)}>复制</Button>
{ record.isOpenTenderTime && <Button type='link' onClick={() => handleChangeTime(record)}>修改开标时间</Button> }
{ record.isExpert && <Button type='link' onClick={handleWithdraw}>抽取专家</Button> }
{ record.isExpert && <Button type='link' onClick={() => handleWithdraw(record.id)}>抽取专家</Button> }
{ record.isDiscardTender && <Button type='link' onClick={() => handleDestory(record.id)}>废标</Button> }
</>
</>
}
])
......@@ -60,8 +60,8 @@ const callForBidsSearch: React.FC<{}> = () => {
return data
}
const handleWithdraw = () => {
history.push('/memberCenter/procurementAbility/callForBids/remarkBidCommittee/add')
const handleWithdraw = (id) => {
history.push(`/memberCenter/procurementAbility/callForBids/remarkBidCommittee/add?code=${id}`)
}
// 复制 id存入本地存储跳转至新增页
......
......@@ -16,6 +16,7 @@ import { EditableCell, EditableRow } from '../remarkTableCell';
import { groupBy } from '@/pages/procurement/constants';
import { getAuth } from '@/utils/auth';
import { ExpertRectractStatus } from '@/constants/procurement';
import { PublicApi } from '@/services/api';
/**
* 评标报告
......@@ -35,15 +36,12 @@ const RemarkBidReport: React.FC<RemarkBidReportProps> = ({cardTitle, editable})
const currentRef = useRef<any>({})
const [transferRadio, setTransferRadio] = useState<number>(0)
const [loading, setLoading] = useState<boolean>(false)
// 存入context表单数据
// const [fileList, setFileList] = useState<any>([])
// const [recommandList, setRecommandList] = useState<any>()
// const [childTableData, setChildrenTableData] = useState<any>([])
const { fileList, recommandList, childTableData } = submitData
const { setFileList, setRecommandList, setChildrenTableData } = submitCtl
const [evaluationRecord, setEvaluationRecord] = useState<any>([])
const [childTableColumns, setChildrenTableColumns] = useState<any>([])
const [templateSort, setTemplateSort] = useState<any>([])
useEffect(() => {
if(data?.evaluationTenderRecommendList.length) {
......@@ -94,6 +92,16 @@ const RemarkBidReport: React.FC<RemarkBidReportProps> = ({cardTitle, editable})
console.log(dataSource, computedScore, dataBySort, 'computedScore')
setEvaluationRecord(dataBySort)
// 线下评标或者线上评标但是没有去评 评分项Radio来自评标模板接口
if(data?.templateId) {
PublicApi.getPurchaseTemplateGetTemplate({id: data.templateId}).then(res => {
const { code, data } = res
if(code === 1000 && data?.templateContentList?.length) {
setTemplateSort(data.templateContentList)
}
})
}
// 根据评标sort分类后的数据 遍历 分子表格
let childrenTableDataSource = [] // table data
let childTableDataColumns = [] // table columns
......
......@@ -53,7 +53,7 @@ const BidParticulars: React.FC<BidParticularsProps> = ({cardTitle}) => {
title: <span>金额(含税)<br />合计: ¥{totalMoney}</span>,
dataIndex: 'money',
key: 'money',
render: (t, r) => Number((r.price * r.count).toFixed(2))
render: (t, r) => `¥${Number((r.price * r.count).toFixed(2))}`
}
return tempCol
})
......
......@@ -44,6 +44,16 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
}
// 基本信息——招标
const fieldList = apiType === 'tenderInCallForBid' ? [
{ title: '招标项目:', name: 'projectName' },
{ title: '招标会员:', name: 'memberName' },
{ title: '招标摘要:', name: 'remark' },
] : [{ title: '招标项目:', name: 'projectName' },
{ title: '项目预算:', name: 'budget', render: (t) => `¥${t}` },
{ title: '采购类型:', name: 'purchaseType', render: (text) => PURCHASE_TYPE[text] },
{ title: '招标会员:', name: 'memberName' },
{ title: '招标摘要:', name: 'remark' },
]
const basicColumnList = [
{
span: 8,
......@@ -56,13 +66,7 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
},
{
span: 8,
fieldList: [
{ title: '招标项目:', name: 'projectName' },
{ title: '项目预算:', name: 'budget', render: (t) => `¥${t}` },
{ title: '采购类型:', name: 'purchaseType', render: (text) => PURCHASE_TYPE[text] },
{ title: '招标会员:', name: 'memberName' },
{ title: '招标摘要:', name: 'remark' },
]
fieldList: fieldList
},
{
span: 8,
......@@ -110,7 +114,7 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
name: 'inviteTenderFile',
render: (t, r) => (<div>
{
_data?.submitTender?.file?.length && _data['submitTender']['file'].map((_item, _i) => <p><a key={`submitTenderFile${_i}`} target="_blank" href={_item.url}><FileFilled /> {_item.name}</a></p>)
_data?.submitTender?.file?.length ? _data['submitTender']['file'].map((_item, _i) => <p><a key={`submitTenderFile${_i}`} target="_blank" href={_item.url}><FileFilled /> {_item.name}</a></p>) : null
}
</div>)
},
......@@ -157,7 +161,7 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
{
span: 8,
fieldList: [
{ title: '期望交付日期:', name: 'hopeDate', render: (text) => formatTimeString(text) },
{ title: '交付日期:', name: 'hopeDate', render: (text) => formatTimeString(text) },
{ title: '目标价:', name: 'targetPrice', render: (t) => `¥${t}` },
]
},
......@@ -178,6 +182,39 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
}
]
// 投标要求
const tenderNeedList = [
{
span: 8,
fieldList: [
{ title: '投标截止时间:', name: 'createTime', render: (t, r) => formatTimeString(r['inviteTenderStartTime']) + '至' + formatTimeString(r['inviteTenderEndTime'])},
{ title: '开标时间:', name: 'openTenderTime', render: (text) => formatTimeString(text) },
]
},
{
span: 8,
fieldList: [
{ title: '交付日期:', name: 'hopeDate', render: (text) => formatTimeString(text) },
{ title: '目标价:', name: 'targetPrice', render: (t) => `¥${t}` },
]
},
{
span: 8,
fieldList: [
{ title: '投标摘要:', name: 'inviteTenderRequirement', render: (t) => _data['submitTender']['remark']},
{
title: '投标文件:',
name: 'inviteTenderFile',
render: (t, r) => (<div>
{
_data['submitTender']['file'].map((_item, _i) => <p><a key={`submitTenderFile${_i}`} target="_blank" href={_item.url}><FileFilled /> {_item.name}</a></p>)
}
</div>)
},
]
}
]
// 报名要求
const registerNeedList = [
{
......@@ -345,8 +382,10 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
/** 投标区块 **/
// @todo 中标结果 根据后端数据控制
const result = _data.isWin
const sumPrice = _data?.submitTender ? _data.submitTender.submitTenderMateriel.reduce((a, b) => a + b.price * b.inviteTenderMateriel.count, 0) : 0
const alreadyPay = _data?.submitTender ? _data.submitTender.submitTenderMateriel.reduce((a, b) => a + b.price * b.inviteTenderMateriel.count * b.awardTenderRatio/100, 0) : 0
// const sumPrice = _data?.submitTender ? _data.submitTender.submitTenderMateriel.reduce((a, b) => a + b.price * b.inviteTenderMateriel.count, 0) : 0
// const alreadyPay = _data?.submitTender ? _data.submitTender.submitTenderMateriel.reduce((a, b) => a + b.price * b.inviteTenderMateriel.count * b.awardTenderRatio/100, 0) : 0
const sumPrice = _data?.allWinnerAmount
const alreadyPay = _data?.winnerAmount
const bidResultList = [
{
......@@ -443,7 +482,8 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
const Type_Data_Map = {
// 招标大类显示招标信息 投标大类显示投标信息
'basicInfo': (apiType[0] === 'c' || apiType === 'tenderInCallForBid') ? basicColumnList : basicTenderColumnList,
'bidNeed': callForNeedList,
// 投标显示投标要求
'bidNeed': apiType[apiType.length - 1] === 'r' ? tenderNeedList : callForNeedList,
'registerNeed': registerNeedList,
'checkNeed': checkNeedList,
'remarkNeed': remarkNeedList,
......
......@@ -109,6 +109,11 @@ const AddBidRegister:React.FC<AddBidRegisterProps> = (props) => {
ele.style.marginBottom = '24px'
}
})
$('onFieldChange', 'phoneCode').subscribe(result => {
if(result.props.enum.length) {
ctx.setFieldValue('phoneCode', '86')
}
})
}}
expressionScope={{
beforeUpload,
......
......@@ -84,8 +84,14 @@ export const RelevanceTenderProduct: React.FC<RelateProductDrawerProps> = ({
properties: { "Text_0": tempSchema['properties']['Text_0'], "Text_99": tempSchema['properties']['Text_99'] }
}
})
setSelectRow([])
setSelectedRowKeys([])
// 没有关联商品清空相关回显信息
if(!currentMaterial?.commodityId && !currentMaterial?.commoditySkuId) {
setSelectRow([])
setSelectedRowKeys([])
} else {
setSelectedRowKeys([currentMaterial.commodityId])
}
console.log(currentMaterial, selectRow)
}
}, [visible])
......@@ -223,7 +229,6 @@ export const RelevanceTenderProduct: React.FC<RelateProductDrawerProps> = ({
formActions.submit(v => {
// 点击确定 设置商品id和商品文件到对应物料行中
let submitMateriel = schemaAction.getFieldValue('submitTenderMateriel')
console.log(v, submitMateriel, selectRow, currentMaterial)
submitMateriel.map(item => {
if(item.id === currentMaterial['id']) {
item.file = v['file']
......@@ -259,13 +264,8 @@ export const RelevanceTenderProduct: React.FC<RelateProductDrawerProps> = ({
</Button>
</div>)
// 子级抽屉点击确定 ~生成动态schema和dataList
const onConfirm = () => {
setChildVisible(false)
// console.log('确定', selectRow)//////////
formActions.setFieldValue('tenderProduct', selectRow[0])
PublicApi.getProductCommodityGetCommodityAttributeByUnitPriceAndPicId({ unitPriceAndPicId: selectRow[0]['id'] }).then(res => {
console.log(res.data)
const getCommodityUnitAndRender = (uid) => {
PublicApi.getProductCommodityGetCommodityAttributeByUnitPriceAndPicId({ unitPriceAndPicId: uid }).then(res => {
setDataIdList(() => {
let origin = [...dataIdList]
res.data.map((item, index) => {
......@@ -308,6 +308,13 @@ export const RelevanceTenderProduct: React.FC<RelateProductDrawerProps> = ({
})
}
// 子级抽屉点击确定 ~生成动态schema和dataList
const onConfirm = () => {
setChildVisible(false)
formActions.setFieldValue('tenderProduct', selectRow[0])
getCommodityUnitAndRender(selectRow[0]['id'])
}
const fetchData = (params: any) => {
return new Promise((resolve, reject) => {
PublicApi.getProductCommodityCommonGetCommodityListBySeller({
......
......@@ -5,12 +5,12 @@ import { BidInStateTexts, BidOutStateTexts } from '@/constants/procurement'
/** 对后端返回的投标数据转换为render数据 */
export const processTenderData = (tenderData) => {
let alreadyData = {
//--毫无意义 仅显示
//-- 仅显示
submitTenderCode: tenderData.code,
projectName: tenderData.inviteTender.projectName,
inviterTenderCode: tenderData.inviteTender.code,
memberName: tenderData.inviteTender.memberName,
inviteTenderAreaList: tenderData.inviteTender.inviteTenderAreaList,
inviteTenderAreaList: tenderData.inviteTender.inviteTenderAreaList.map(item => `${item.provinceName}${item.cityName}`).join('/'),
inviteTenderOutStatus: tenderData.submitTenderOutStatusValue,
inviteTenderInStatus: tenderData.submitTenderInStatusValue,
inviteTenderStartTime: unixChangeRender(tenderData.inviteTender.inviteTenderStartTime),
......
......@@ -50,15 +50,20 @@ export const formSchema: ISchema = {
title: '招标会员',
readOnly: true,
},
// inviteTenderAreaList: {
// type: 'array',
// title: '适用城市',
// 'x-component': 'MultAddress',
// 'x-component-props': {
// placeholder: '选择区域',
// warningText: '请完善适用地市',
// },
// default: [{ provinceCode: null, province: null, cityCode: null, city: null }],
// readOnly: true,
// },
inviteTenderAreaList: {
type: 'array',
type: 'string',
title: '适用城市',
'x-component': 'MultAddress',
'x-component-props': {
placeholder: '选择区域',
warningText: '请完善适用地市',
},
default: [{ provinceCode: null, province: null, cityCode: null, city: null }],
readOnly: true,
},
inviteTenderOutStatus: {
......
......@@ -28,6 +28,9 @@
width: 104px;
color: #909399;
margin: 0;
p{
margin: 0;
}
}
.content{
flex: 1;
......
......@@ -39,14 +39,40 @@ const BidCommonLayout: React.FC<BidCommonLayoutProps> = (props: any) => {
return data.extra ? (<FilesItem files={data.extra} />) : '-'
}
}
const _returnLabel = (child: any) => {
const _icon = <QuestionCircleOutlined style={ICON_STYLE} />;
if (child.tips) {
return (
<Tooltip placement="top" title={child.tips}>
{child.isMix ? (
<p>
{child.isMix[0]}{_icon}
<p>{child.isMix[1]}: </p>
</p>
) : <p>{child.label}: {_icon}</p>}
</Tooltip>
)
} else {
if (child.isMix) {
return (
<>
<p>{child.isMix[0]}</p>
<p>{child.isMix[1]}: </p>
</>
)
} else {
return `${child.label}: `;
}
}
}
const _returnChild = (child, key) => {
if (child.type === 'text' || child.type === 'area' || child.type === 'files') {
return (
<div className={selfStyles.baseItem} key={key}>
<h5 className={selfStyles.label}>
{child.tips ? <Tooltip placement="top" title={child.tips}>
{child.label}: <QuestionCircleOutlined style={ICON_STYLE} />
</Tooltip> : `${child.label}: `}
{_returnLabel(child)}
</h5>
<h5 className={selfStyles.content}>{_returnItem(child)}</h5>
</div>
......@@ -56,7 +82,7 @@ const BidCommonLayout: React.FC<BidCommonLayoutProps> = (props: any) => {
<div className={selfStyles.pieItem} key={key}>
<PieItem />
<div className={selfStyles.box}>
<div className={selfStyles.title}>{child.label}</div>
<div className={selfStyles.title}>{child.label}: </div>
<div className={selfStyles.price}>¥114,000.00</div>
</div>
</div>
......
......@@ -139,7 +139,7 @@ const SearchDetail = () => {
},
{
col: [
{ label: '公开当前最低报价', extra: transforType[data.isOpenPurchase], type: 'text', tips: '选择公开当前最低报价,竞价过程中将供应商所报当前最低价在竞价页面即时公开。' },
{ label: '公开当前最低报价', extra: transforType[data.isOpenPurchase], type: 'text', tips: '选择公开当前最低报价,竞价过程中将供应商所报当前最低价在竞价页面即时公开。', isMix: ['公开当前最低', '报价'] },
{ label: '公开报价排名', extra: transforType[data.isOpenRanking], type: 'text', tips: '选择公开报价排名,竞价过程中将供应商当前报价排名在竞价页面即时公开。' },
]
},
......
......@@ -173,7 +173,7 @@ const SearchDetail = () => {
},
{
col: [
{ label: '公开当前最低报价', extra: transforType[data.isOpenPurchase], type: 'text', tips: '选择公开当前最低报价,竞价过程中将供应商所报当前最低价在竞价页面即时公开。' },
{ label: '公开当前最低报价', extra: transforType[data.isOpenPurchase], type: 'text', tips: '选择公开当前最低报价,竞价过程中将供应商所报当前最低价在竞价页面即时公开。', isMix: ['公开当前最低', '报价'] },
{ label: '公开报价排名', extra: transforType[data.isOpenRanking], type: 'text', tips: '选择公开报价排名,竞价过程中将供应商当前报价排名在竞价页面即时公开。' },
]
},
......@@ -567,7 +567,7 @@ const SearchDetail = () => {
}, [pathPci, awardResult])
const _handleBiddingReturn = (signUpIdea: string, urls: any) => {
if(confirmLoading){
if (confirmLoading) {
return;
}
const _params = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment