Commit d7dfd91e authored by 前端-钟卫鹏's avatar 前端-钟卫鹏

fix: 订单支付方式新增账期月结确认,招标专家抽取通知管理

parent b3ab0260
......@@ -5,3 +5,6 @@ export const BidDetailContext = createContext<any>({})
// 待新增招标 详情
export const ReadyAddBidDetailContext = createContext<any>({})
// 专家评标详情
export const RemarkDetailContext = createContext<any>({})
......@@ -5,8 +5,14 @@ import { PublicApi } from '@/services/api'
import { message } from 'antd'
interface OrderDetailHookProps {
/** 招标-招标详情,投标-投标详情,招标-投标详情,投标-招标详情 */
type: 'callForBid' | 'tender' | 'callForBidInTender' | 'tenderInCallForBid'
/** 招标-招标详情,投标-投标详情,招标-投标详情,投标-招标详情,custom自定义 配合requestApi字段 */
type: 'callForBid' | 'tender' | 'callForBidInTender' | 'tenderInCallForBid' | 'custom',
/** custom模式下 传入获取详情的api */
requestApi?: any,
/** custom模式下 传入获取调用requestApi的params字段 */
customDetailField?: string,
// /** custom模式下 传入获取调用获取流程流转记录接口的params字段 */
// customSearchRecordField?: string,
}
// 招标详情, 支持(招标-招标、投标-投标、招标-投标、投标-招标)两种模式
......@@ -27,7 +33,12 @@ export const useBidDetail = (options: OrderDetailHookProps) => {
const [offsetTopList, setOffsetTopList] = useState<number[]>([])
const { id } = usePageStatus()
const { type } = options
const {
type,
requestApi = null,
customDetailField = null,
// customSearchRecordField = null
} = options
useEffect(() => {
reloadFormData()
......@@ -49,7 +60,7 @@ export const useBidDetail = (options: OrderDetailHookProps) => {
_api = PublicApi.getPurchaseSubmitTenderGetInviteTender;
break;
default:
_api = null;
_api = requestApi;
}
return _api
}
......@@ -70,7 +81,7 @@ export const useBidDetail = (options: OrderDetailHookProps) => {
field = 'inviteTenderId'
break;
default:
field = null;
field = customDetailField;
}
return field
}
......
......@@ -17,6 +17,7 @@ import RelevanceGoodDrawer from './components/relevanceGoodDrawer'
import { INVITE_BID, PUBLIC_BID, SYSTEM_BID } from '@/constants'
import MemberModal from './components/memberModal'
import { useAttachmentChangeForEdit } from './effects'
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect'
export interface AddNewBidProps {}
......@@ -170,6 +171,11 @@ const AddNewBid:React.FC<AddNewBidProps> = (props) => {
}
}
const fetchTemplateSelectOptions = async () => {
const { data } = await PublicApi.getPurchaseTemplateGetTemplateList({ current: '1', pageSize: '999', status: 'true' });
return data.data.map(v => ({ label: v.name, value: v.id }))
}
return (
<PageHeaderWrapper
style={{margin: 0}}
......@@ -236,6 +242,11 @@ const AddNewBid:React.FC<AddNewBidProps> = (props) => {
// 监听附件列表字段变动 处理编辑情况下的id问题
useAttachmentChangeForEdit(ctx, )
useAsyncSelect(
'templateId',
fetchTemplateSelectOptions,
)
}}
expressionScope={{
materialAddButton,
......
......@@ -612,12 +612,7 @@ const evaluationNeedInfo: ISchema = {
type: 'number',
title: '评标项模板',
required: true,
enum: [
{ label: 'One', value: '1' },
{ label: 'Two', value: '2' },
{ label: 'Three', value: '3' },
{ label: 'Four', value: '4' }
],
enum: [],
"x-component-props": {
placeholder: "请选择评标项模板"
},
......
......@@ -18,6 +18,8 @@ import { PublicApi } from '@/services/api'
import { buildColumns, expertColumns, initConditionData, selectExpertColumns, selectItemColumns, transformAreaField, transformSelectExpertField } from './constant'
import { selectBidSchema } from './schema/modal'
import { formatTimeString } from '@/utils'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import { BidOuterWorkState } from '@/constants'
export interface AddRemarkBidCommitteeProps {}
......@@ -160,7 +162,7 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
const fetchData = (params: any) => {
return new Promise((resolve, reject) => {
PublicApi.postPurchaseInviteTenderGetInviteTenderList({ ...params }, { ctlType: "none" }).then(res => {
PublicApi.postPurchaseInviteTenderGetInviteTenderList({ ...params, tenderOutStatusList: [BidOuterWorkState.Not_Selection_Tender] }, { ctlType: "none" }).then(res => {
resolve(res.data)
})
})
......@@ -293,7 +295,11 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
{
ctx: {
schema: selectBidSchema,
components: { ModalSearch: Search, Submit } ,
components: {
DateRangePickerUnix,
ModalSearch: Search,
Submit
} ,
effects: ($, actions) => {
actions.reset()
useStateFilterSearchLinkageEffect(
......
import React, { useState, useEffect, useRef } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { history } from 'umi'
import { Button, Row, Col, Card } from 'antd'
import { Button, Row, Col } from 'antd'
import ReutrnEle from '@/components/ReturnEle';
import { SaveOutlined } from '@ant-design/icons';
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus'
import MellowCard from '@/components/MellowCard';
import ModalForm from '@/components/ModalForm';
import { createAsyncFormActions, createFormActions } from '@formily/antd';
import { createFormActions } from '@formily/antd';
import { PublicApi } from '@/services/api';
import { formatTimeString } from '@/utils';
import styles from './index.less'
......
......@@ -11,27 +11,16 @@ import BidDetailHeader from '@/pages/procurement/components/bidDetailHeader';
import BidDetailSection from '@/pages/procurement/components/bidDetailSection';
const ReadyQualifityCheckedDetail: React.FC = () => {
const { formContext, id, detailList } = useBidDetail({type: 'purchaseOrder'})
const {data, currentPayInfoId} = formContext
const { formContext, id } = useBidDetail({type: 'callForBid'})
const {data} = formContext
const payRef = useRef<any>({})
/** 约定好 对应的锚点title和元素id映射 */
// type? 用于区分DescriptionsInfo组件的内容
// componentName? 用于区分不同组件的渲染
const anchorTitleList = [
{ title: '流转进度', id: 'transferProcess', componentName: 'TransferProcess' },
{ title: '基本信息', id: 'baseicInfo', type: 'basicInfo' },
{ title: '评标报告', id: 'remarkBidReport', componentName: 'RemarkBidReport' },
{ title: '会员参标信息', id: 'participateInfo', componentName: 'ParticipateInfo' },
{ title: '招标定标', id: 'bidConfirm', componentName: 'BidConfirm' },
// { title: '招标物料', id: 'bidMaterial', componentName: "BidMaterial" },
// { title: '招标要求', id: 'bidNeed', type: "bidNeed" },
// { title: '报名要求', id: 'registerNeed', type: "registerNeed" },
// { title: '资格预审要求', id: 'checkNeed', type: "checkNeed" },
// { title: '评标要求', id: 'remarkNeed', type: "remarkNeed" },
// { title: '其他要求', id: 'otherNeed', type: "otherNeed" },
// { title: '招标方式', id: 'bidWay', componentName: "BidMethod" },
{ title: '流转记录', id: 'transferRecord', componentName: "BidTransformRecord" },
]
......@@ -39,7 +28,6 @@ const ReadyQualifityCheckedDetail: React.FC = () => {
<div>
<BidDetailContext.Provider value={formContext}>
<BidDetailHeader
detailList={detailList}
formContext={formContext}
anchorList={anchorTitleList}
backLink="/memberCenter/procurementAbility/callForBids/callForBidsSearch"
......
.card-list {
font-size: 12px;
line-height: 20px;
margin-top: 24px;
border: 1px solid #F4F5F7;
padding: 12px;
}
.card-list_title {
font-size: 12px;
color: #909399;
}
.headColor {
font-weight: 500;
color: #909399;
}
.rankContainer {
.levelCircle {
display: inline-block;
width: 20px;
height: 20px;
background: #EBECF0;
border-radius: 50%;
color: #909399;
margin-right: 8px;
text-align: center;
}
p {
display: flex;
justify-content: space-between;
margin-left: 8px;
}
h5 {
margin-left: 8px;
}
}
.remarkBidReportWrapper {
// 评标委员会
.remarkCommitteeContainer {
margin-bottom: 24px;
.committeeItem {
position: relative;
display: flex;
background-color: #FAFBFC;
text-align: center;
padding-top: 12px;
padding-left: 12px;
p {
align-items: center;
height: 56px;
line-height: 56px;
}
.avater {
width: 72px;
img {
width: 32px;
height: 32px;
}
p {
height: 12px;
font-size: 12px;
font-weight: 400;
color: #909399;
line-height: 12px;
}
}
.status {
position: absolute;
right: 0;
top: 0;
height: 12px;
font-size: 12px;
font-weight: 400;
color: #00B37A;
line-height: 12px;
padding: 2px 4px;
background-color: #E4F7EF;
}
}
}
// 评标记录
.remarkRecordContainer {
.remarkRecordHead {
display: flex;
justify-content: space-between;
}
:global {
.ant-radio-button-wrapper:hover {
color: #606266;
}
.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
color: #fff;
background: #6B778C;
border-color: #6B778C;
}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before {
background-color: #6B778C;
}
.ant-table-thead > tr > th {
color: #909399;
}
}
}
}
import React, { useContext, useState, useEffect } from 'react'
import { Table, Button, Radio, Tooltip, Row, Col } from 'antd'
import MellowCard from '@/components/MellowCard'
import { UserOutlined } from '@ant-design/icons';
import style from './index.less'
import { useRemarkTable } from '../../model/useRemarkTable';
import NiceForm from '@/components/NiceForm';
import { createFormActions } from '@formily/antd';
import { PublicApi } from '@/services/api';
import { useRemarkDetail } from '../../model/useRemarkDetail';
import { generateRemarkTable } from '../../constant';
/**
* 评标报告
*/
export interface RemarkBidReportProps {
cardTitle?: string;
}
const addSchemaAction = createFormActions()
const OnlineRemark: React.FC<RemarkBidReportProps> = ({cardTitle}) => {
const { formContext, id } = useRemarkDetail({type: 'callForBid'})
const { data } = formContext
const { remarkColumns, remarkComponents } = useRemarkTable(addSchemaAction, data)
const [initFormValue, setInitFormValue] = useState<any>({})
const handleSubmit = async (value) => {
}
return (
<MellowCard
title={cardTitle}
style={{marginTop: 24}}
bordered={false}
fullHeight
>
<div className={style.remarkBidReportWrapper}>
<div className={style.remarkRecordContainer}>
<div className={style.remarkRecordHead}>
<h3 className="commonPanelTitle">评标记录</h3>
</div>
{/* <Table dataSource={dataSource} columns={columns} pagination={{size: "small"}} /> */}
<NiceForm
// loading={formLoading}
previewPlaceholder=' '
value={initFormValue}
actions={addSchemaAction}
schema={{
type: 'object',
properties: {
evaluationTenderList: {
type: 'array',
"x-component": 'MultTable',
"x-component-props": {
rowKey: 'id',
columns: "{{remarkColumns}}",
components: "{{remarkComponents}}",
pagination: { size: 'small' }
},
},
}
}}
onSubmit={handleSubmit}
// effects={($, ctx) => {
// $('onFormMount').subscribe(async () => {
// $('onFieldValueChange', 'deliverAddress').subscribe(async state => {
// })
// })
// }}
expressionScope={{
remarkColumns,
remarkComponents,
}}
/>
</div>
<div className={style.bidMemberContainer}>
<h3 className="commonPanelTitle">推荐中标会员</h3>
{/* <Row gutter={[16, 0]}>
<Col span={4}>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>会员:</p></Col>
<Col><p>广州室间隔度过后工地</p></Col>
</Row>
<Row>
<Col span={8}><p className={style['card-list_title']}>推荐人:</p></Col>
<Col><p>佳士得拍卖行</p></Col>
</Row>
<Row>
<Col span={8}><p className={style['card-list_title']}>理由:</p></Col>
<Col><p>无条件中标</p></Col>
</Row>
</div>
</Col>
<Col span={4}>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>会员:</p></Col>
<Col><p>广州室间隔度过后工地</p></Col>
</Row>
</div>
</Col>
<Col span={4}>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>会员:</p></Col>
<Col><p>广州室间隔度过后工地</p></Col>
</Row>
</div>
</Col>
</Row> */}
</div>
</div>
</MellowCard>)
}
OnlineRemark.defaultProps = {}
export default OnlineRemark
import React, { useRef, useContext } from 'react'
import { Form, Input } from 'antd';
export interface TableCellProps {
title: React.ReactNode;
editable: boolean;
children: React.ReactNode;
dataIndex: string;
record: any;
handleSave: (record: any) => Promise<any>;
forceEdit: boolean,
formItem: string,
formItemProps: any,
}
const EditableContext = React.createContext<any>({});
export const RemarkEditableRow: React.FC<any> = ({...props }) => {
const [form] = Form.useForm();
const ctx = {
form
}
return (
<Form form={form} component={false}>
<EditableContext.Provider value={ctx}>
<tr {...props} />
</EditableContext.Provider>
</Form>
);
};
export const RemarkTableCell:React.FC<TableCellProps> = ({
title,
editable,
children,
dataIndex,
record,
handleSave,
forceEdit,
formItem,
formItemProps={},
...restProps
}) => {
const formItemRef = useRef<any>();
const { form } = useContext(EditableContext);
const save = async e => {
try {
const values = await form.validateFields();
values.taxRate = Number(values.taxRate) || 0
values.price = Number(values.price) || 0
handleSave({ ...record, ...values });
} catch (errInfo) {
console.log('Save failed:', errInfo);
}
};
const chooseFormItem = (type) => {
switch(type) {
case 'input': {
return <Input
style={{width: 140}}
type='number'
ref={formItemRef}
onChange={save}
{...formItemProps}
id={dataIndex + record.id}
className="purchase_amount_input"
/>
}
}
}
let childNode = children;
if (editable) {
childNode =
<Form.Item
style={{ margin: 0 }}
name={dataIndex}
initialValue={record[dataIndex] || ''}
rules={[
{
required: true,
message: `${title}必须填写`,
},
{
pattern: /^\d+(\.\d{1,2})?$/,
message: '采购数量仅限两位小数',
},
]}
>
{chooseFormItem(formItem)}
</Form.Item>
}
return <td {...restProps}>{childNode}</td>;
}
RemarkTableCell.defaultProps = {}
export default RemarkTableCell
import { BidInOpeartTexts, BidInStateTexts, BidOutOpeartTexts, BidOutStateTexts } from '@/constants'
import CustomTag from '@/pages/procurement/components/CustomTag'
import { formatTimeString } from '@/utils'
import { FileFilled } from '@ant-design/icons'
import React, { useEffect } from 'react'
export const anchorTitleList = [
{ title: '流转进度', id: 'transferProcess', componentName: "TransferProcess" },
{ title: '基本信息', id: 'baseicInfo', type: "basicInfo" },
{ title: '评标要求', id: 'remarkNeed', type: "remarkNeed" },
{ title: '评标报告', id: 'remarkBidReport', componentName: "RemarkBidReport" },
{ title: '流转记录', id: 'transferRecord', componentName: "BidTransformRecord" },
]
// 基本信息
export const basicColumnList = [
{
span: 8,
fieldList: [
{ title: '招标编号:', name: 'code' },
{ title: '外部状态:', name: 'tenderOutStatus', render: (text) => BidOutStateTexts[text]},
{ title: '内部状态:', name: 'inviteTenderInStatus', render: (text) => BidInStateTexts[text] },
{ title: '发布时间:', name: 'createTime', render: (text) => formatTimeString(text) },
]
},
{
span: 8,
fieldList: [
{ title: '招标项目:', name: 'projectName' },
{ title: '招标会员:', name: 'memberName' },
{ title: '招标摘要:', name: 'remark' },
]
},
]
// 评标要去
export const evaluationColumnList = [
{
span: 8,
fieldList: [
{ title: '评标要求时间:', name: 'createTime', render: (t, r) => formatTimeString(r['evaluationStartTime']) + '至' + formatTimeString(r['evaluationEndTime'])},
{ title: '评标要求:', name: 'evaluationRequirement' },
]
},
{
span: 8,
fieldList: [
{
title: '评标要求附件:',
name: 'evaluationFile',
render: (t, r) => (<div>
{
t.map((_item, _i) => <p><a key={`evaluationFile${_i}`} target="_blank" href={_item.url}><FileFilled /> {_item.name}</a></p>)
}
</div>)
},
]
},
{
span: 8,
fieldList: [
{ title: '是否在线评标:', name: 'isOnlineEvaluation', render: (text) => text ? '是' : '否' },
{ title: '评标项模板:', name: 'templateName' },
]
},
]
export const outReocrdCols: any[] = [
{
title: '流转顺序号',
dataIndex: 'no',
align: 'center',
key: 'no',
render: (_, __, index: number) => index + 1
},
{
title: '操作角色',
dataIndex: 'memberRoleName',
align: 'center',
key: 'memberRoleName',
},
{
title: '状态',
dataIndex: 'status',
align: 'center',
key: 'status',
render: text => <CustomTag status={text} type='out'/>
},
{
title: '操作',
dataIndex: 'operation',
align: 'center',
key: 'operation',
render: text => BidOutOpeartTexts[text]
},
{
title: '操作时间',
dataIndex: 'createTime',
align: 'center',
key: 'createTime',
render: time => formatTimeString(time)
},
{
title: '审核意见',
dataIndex: 'checkRemark',
align: 'center',
key: 'checkRemark',
},
]
export const insideRecordCols: any[] = [
{
title: '流转记录',
dataIndex: 'no',
align: 'center',
key: 'no',
render: (_, __, index: number) => index + 1
},
{
title: '操作人',
dataIndex: 'memberRoleName',
align: 'center',
key: 'memberRoleName',
},
{
title: '部门',
dataIndex: 'department',
align: 'center',
key: 'department',
},
{
title: '职位',
dataIndex: 'position',
align: 'center',
key: 'position',
},
{
title: '状态',
dataIndex: 'status',
align: 'center',
key: 'status',
render: text => <CustomTag status={text} type='inside' />
},
{
title: '操作',
dataIndex: 'operation',
align: 'center',
key: 'operation',
render: text => BidInOpeartTexts[text]
},
{
title: '操作时间',
dataIndex: 'createTime',
align: 'center',
key: 'createTime',
render: text => formatTimeString(text)
},
{
title: '审核意见',
dataIndex: 'checkRemark',
align: 'center',
key: 'checkRemark',
},
]
/** 生成在线评标表格
* memeberList: 投标会员列表
* contentList: 评标细则内容列表
*/
export const generateRemarkTable = (memeberList, contentList) => {
// 初始列
const columns: any[] = [
{ title: '会员ID', dataIndex: 'memberId', key: 'memberId', className: 'commonHide' },
{ title: '评标会员', dataIndex: 'memberName', key: 'memberName' },
{ title: '总计得分', dataIndex: 'score', key: 'score' },
{ title: '评标分类', dataIndex: 'sort', key: 'sort' },
]
// 新增字段以 字符term+细则id组合而成
contentList.map(item => {
columns.push({
title: item.term,
dataIndex: `term_${item.id}`,
key: `term_${item.id}`,
align: 'center',
formItem: 'input',
editable: true,
width: 140,
})
})
const dataSource: any[] = []
memeberList.map(item => {
let dataItem = { memberId: item.memberId, memberName: item.memberName }
contentList.map(_ => `term_${_.id}`).map(_ => {
dataItem[_] = null
return dataItem
})
dataSource.push(dataItem)
})
return {
columns,
dataSource,
}
}
.card-list {
font-size: 12px;
line-height: 20px;
margin-top: 24px;
}
.card-list_title {
font-size: 12px;
color: #909399;
}
import React, { useState, useCallback, useRef, useContext, useEffect, createRef } from 'react';
import React, { useState, useEffect, useRef } from 'react';
import { history } from 'umi'
import { Button } from 'antd';
import style from './index.less'
import { Button, Row, Col, Radio, Table } from 'antd';
import OrderDetailWrapper from '@/pages/transaction/components/OrderDetailWrapper';
import PreLoading from '@/components/PreLoading';
import OrderPayModal from '@/pages/transaction/components/orderPayModal';
import { BidDetailContext } from '@/pages/procurement/_public/bid/context';
import { useBidDetail } from '@/pages/procurement/_public/bid/effects/useBidDetail';
import { RemarkDetailContext } from '@/pages/procurement/_public/bid/context';
import BidDetailHeader from '@/pages/procurement/components/bidDetailHeader';
import BidDetailSection from '@/pages/procurement/components/bidDetailSection';
import { PublicApi } from '@/services/api';
import { usePageStatus } from '@/hooks/usePageStatus'
import TransferProcess, { TransferEnum } from '@/pages/procurement/components/transferProcess';
import { findLastIndexFlowState } from '@/utils';
import { useRemarkDetail } from '../model/useRemarkDetail';
import style from './index.less'
import MellowCard from '@/components/MellowCard';
import { anchorTitleList, basicColumnList, evaluationColumnList, insideRecordCols, outReocrdCols } from '../constant';
import OnlineRemark from '../components/onlineRemark';
const ReadyExpertRemarkDetail: React.FC = () => {
const { formContext, id, detailList } = useBidDetail({type: 'purchaseOrder'})
const {data, currentPayInfoId} = formContext
const payRef = useRef<any>({})
const { formContext, id } = useRemarkDetail({type: 'callForBid'})
const { data, externalProcurementOrderLogResponses, interiorProcurementOrderLogResponses } = formContext
const [transferRadio, setTransferRadio] = useState<TransferEnum>(TransferEnum.Outer)
/** 约定好 对应的锚点title和元素id映射 */
// type? 用于区分DescriptionsInfo组件的内容
// componentName? 用于区分不同组件的渲染
const anchorTitleList = [
{ title: '流转进度', id: 'transferProcess', componentName: "TransferProcess" },
{ title: '基本信息', id: 'baseicInfo', type: "basicInfo" },
// { title: '招标物料', id: 'bidMaterial', componentName: "BidMaterial" },
// { title: '招标要求', id: 'bidNeed', type: "bidNeed" },
// { title: '报名要求', id: 'registerNeed', type: "registerNeed" },
// { title: '资格预审要求', id: 'checkNeed', type: "checkNeed" },
{ title: '评标要求', id: 'remarkNeed', type: "remarkNeed" },
// { title: '其他要求', id: 'otherNeed', type: "otherNeed" },
// { title: '招标方式', id: 'bidWay', componentName: "BidMethod" },
{ title: '评标报告', id: 'remarkBidReport', componentName: "RemarkBidReport" },
{ title: '流转记录', id: 'transferRecord', componentName: "BidTransformRecord" },
]
const RenderBasicInfoColumns = ({ infoList = [], dataSource }) => <Row>
{
infoList.map(({span, fieldList = []}, index) => (<Col key={index} span={span}>
{
fieldList.length ? fieldList.map((_v, _i) => <Row key={_v.name} className={style['card-list']} style={_v.rowStyle}>
{_v?.noTitle ? null : <Col span={6} className={style['card-list_title']}>{_v.title}</Col>}
<Col>{_v.render ? _v.render(dataSource[_v.name], dataSource) : dataSource[_v.name]}</Col>
</Row>) : null
}
</Col>))
}
</Row>
const handleChangeType = (e) => {
setTransferRadio(e.target.value)
}
return (
<div>
<BidDetailContext.Provider value={formContext}>
<RemarkDetailContext.Provider value={formContext}>
<BidDetailHeader
detailList={detailList}
formContext={formContext}
anchorList={anchorTitleList}
backLink="/memberCenter/procurementAbility/callForBids/callForBidsSearch"
extraRight={
<Button type='primary'>
单据审核
......@@ -49,16 +52,95 @@ const ReadyExpertRemarkDetail: React.FC = () => {
/>
<OrderDetailWrapper>
<PreLoading loading={!formContext.data} active paragraph={{rows: 6}}>
<BidDetailSection formContext={formContext} anchorList={anchorTitleList} type="callForBid" />
<div id="transferProcess">
<TransferProcess
cardTitle='流转进度'
customTitleKey='name'
customKey='id'
outerVerifyCurrent={findLastIndexFlowState(formContext.externalWorkflowFlowRecordLogResponses)}
innerVerifyCurrent={findLastIndexFlowState(formContext.interiorWorkflowFlowRecordLogResponses)}
outerVerifySteps={
formContext.externalWorkflowFlowRecordLogResponses ?
formContext.externalWorkflowFlowRecordLogResponses.map(item => ({
...item,
status: item.isActive ? 'finish' : 'wait',
})) :
[]
}
innerVerifySteps={
formContext.interiorWorkflowFlowRecordLogResponses ?
formContext.interiorWorkflowFlowRecordLogResponses.map(item => ({
...item,
status: item.isActive ? 'finish' : 'wait',
})) :
[]
}
></TransferProcess>
</div>
<div id="baseicInfo">
<MellowCard
title='基本信息'
style={{marginTop: 24}}
bordered={false}
fullHeight
>
{data?.inviteTender && <RenderBasicInfoColumns infoList={basicColumnList} dataSource={data.inviteTender} />}
</MellowCard>
</div>
<div id="remarkNeed">
<MellowCard
title='评标要求'
style={{marginTop: 24}}
bordered={false}
fullHeight
>
{data?.inviteTender && <RenderBasicInfoColumns infoList={evaluationColumnList} dataSource={data.inviteTender} />}
</MellowCard>
</div>
{/* 在线评标 */}
<div id="remarkBidReport">
<OnlineRemark cardTitle="在线评标" />
</div>
{/* 在线评标 */}
<div id="transferRecord">
<MellowCard
title='流转记录'
style={{marginTop: 24}}
bordered={false}
extra={
<Radio.Group value={transferRadio} buttonStyle="solid" size="small" onChange={handleChangeType}>
{externalProcurementOrderLogResponses?.length ? <Radio.Button value={TransferEnum.Outer}>外部流转</Radio.Button> : null}
{interiorProcurementOrderLogResponses?.length ? <Radio.Button value={TransferEnum.Interior}>内部流转</Radio.Button> : null}
</Radio.Group>
}
className={style.cardWrap}
>
{
(externalProcurementOrderLogResponses?.length && transferRadio === TransferEnum.Outer) ?
<Table
columns={outReocrdCols}
dataSource={externalProcurementOrderLogResponses}
pagination={{ size: "small" }}
rowKey="id"
/> : null
}
{
(interiorProcurementOrderLogResponses?.length && transferRadio === TransferEnum.Interior) ?
<Table
columns={insideRecordCols}
dataSource={interiorProcurementOrderLogResponses}
pagination={{ size: "small" }}
rowKey="id"
/> : null
}
</MellowCard>
</div>
</PreLoading>
</OrderDetailWrapper>
<OrderPayModal
currentRef={payRef}
/>
</BidDetailContext.Provider>
</RemarkDetailContext.Provider>
</div>
);
};
}
export default ReadyExpertRemarkDetail;
......@@ -17,9 +17,8 @@ import '../../constants/index.less'
export interface ReadyExpertRemarkProps {}
const fetchTableData = async (params) => {
const { data } = await PublicApi.postPurchaseInviteTenderGetInviteTenderList({
const { data } = await PublicApi.getPurchaseExpertExtractRecordGetEvaluationTenderList({
...params,
tenderOutStatusList: [BidOuterWorkState.Not_Selection_Tender],
}, { ctlType: "none" })
return data
}
......
import React from 'react'
import { useCallback, useState, useEffect } from 'react'
import { usePageStatus } from '@/hooks/usePageStatus'
import { PublicApi } from '@/services/api'
import { message } from 'antd'
interface DetailHookProps {
}
export const useRemarkDetail = (options: DetailHookProps) => {
// 详情数据
const [formData, setFormData] = useState<any>(null)
// 流转记录数据(内/外)
const [interiorProcurementOrderLogResponses, setInteriorProcurementOrderLogResponses] = useState<any>(null)
const [externalProcurementOrderLogResponses, setExternalProcurementOrderLogResponses] = useState<any>(null)
// 流程状态数据(内/外)
const [interiorWorkflowFlowRecordLogResponses, setInteriorWorkflowFlowRecordLogResponses] = useState<any>(null)
const [externalWorkflowFlowRecordLogResponses, setExternalWorkflowFlowRecordLogResponses] = useState<any>(null)
const { id } = usePageStatus()
useEffect(() => {
reloadFormData()
}, [])
const reloadFormData = useCallback(async () => {
if (id) {
const { code, data, message: msg } = await PublicApi.getPurchaseExpertExtractRecordGetEvaluationTender({id}, { ctlType: "none" })
if (code === 1000) {
setFormData(data)
} else {
message.error(msg)
}
const searchId = data.inviteTender.id
// 流转记录(内/外)
// 招投标
const inCheckRecordFn = PublicApi.getPurchaseInviteTenderInCheckRecordGetInviteTenderInCheckRecord
const inReocrdRes = await inCheckRecordFn({ inviteTenderId: searchId })
if (inReocrdRes.code === 1000) {
setInteriorProcurementOrderLogResponses(inReocrdRes.data)
}
const outCheckRecordFn = PublicApi.getPurchaseTenderOutCheckRecordGetTenderOutCheckRecord
const outRecordRes = await outCheckRecordFn({ inviteTenderId: searchId })
if (outRecordRes.code === 1000) {
setExternalProcurementOrderLogResponses(outRecordRes.data)
}
// 流程状态(内/外)
// 招投标
const processRes = await PublicApi.getPurchaseInviteTenderGetInviteTenderProcess({ inviteTenderId: searchId })
if(processRes.code === 1000 && processRes.data) {
setInteriorWorkflowFlowRecordLogResponses(processRes.data.subProcess.userTaskList)
setExternalWorkflowFlowRecordLogResponses(processRes.data.userTaskList)
}
}
}, [id])
// 需共享的状态
const formContext = {
data: formData,
interiorProcurementOrderLogResponses,
externalProcurementOrderLogResponses,
interiorWorkflowFlowRecordLogResponses,
externalWorkflowFlowRecordLogResponses,
ctl: {
setData: setFormData,
},
reloadFormData,
}
return {
formContext,
id,
}
}
import React, { useState, useEffect } from 'react'
import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd';
import { Button, message } from 'antd';
import { CaretDownOutlined, CaretRightOutlined } from '@ant-design/icons';
import { PublicApi } from '@/services/api';
import { Row, Col } from 'antd'
import style from '../index.less'
import { generateRemarkTable } from '../constant';
import RemarkTableCell, { RemarkEditableRow } from '../components/remarkTableCell';
/**
* @param ctx schemaAction
* data: 详情数据
*/
export const useRemarkTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActions, data: any) => {
const [remarkColumns, setRemarkColumns] = useState<any>([])
// 获取投标会员和模板整合成评标 table
useEffect(() => {
if(data?.inviteTender?.id) {
const getMemberFn = PublicApi.getPurchaseExpertExtractRecordGetSubmitTenderMemberList({inviteTenderId: data.inviteTender.id})
const getTemplateFn = PublicApi.getPurchaseTemplateGetTemplate({id: data.inviteTender.templateId})
Promise.all([getMemberFn, getTemplateFn]).then(values => {
console.log(values, 'all')
const { code: memberCode, data: memberData } = values[0]
const { code: contentCode, data: contentData } = values[1]
if(memberCode === 1000 && contentCode === 1000 && memberData?.length && contentData.templateContentList?.length) {
const { templateContentList } = contentData
// 生成在线评标表格
const { columns, dataSource } = generateRemarkTable(memberData, templateContentList)
console.log(columns, dataSource, 11)
setRemarkColumns(columns)
ctx.setFieldValue('evaluationTenderList', dataSource)
}
})
}
}, [data])
const remarkComponents = {
body: {
row: RemarkEditableRow,
cell: RemarkTableCell
}
}
const handleSave = row => {
return new Promise((resolve, reject) => {
const newData = [...ctx.getFieldValue('submitTenderMateriel')];
const index = newData.findIndex(item => row.id === item.id);
const item = newData[index];
newData.splice(index, 1, {
...item,
...row,
});
ctx.setFieldValue('submitTenderMateriel', newData)
// // thead总计变动
// let _ = [...onlineInfoColumns]
// _[_.length - 2]['title'] = <>
// <div>金额(含税)</div>
// <div>总计:¥<span style={{fontWeight: 'bolder'}}>{newData.reduce((prev, next) => (prev*100 + (next.money || 0)*100)/100, 0)}</span></div>
// </>
// setRemarkColumns(_)
resolve({item, newData})
})
};
const remarkMergeColumns = remarkColumns.map(col => {
if (!col.editable) {
return col;
}
return {
...col,
onCell: record => ({
record,
editable: ctx.getFormState().editable === false ? false : col.editable,
dataIndex: col.dataIndex,
title: col.title,
formItem: col.formItem,
formItemProps: col.formItemProps,
handleSave
}),
};
})
return {
remarkColumns: remarkMergeColumns,
remarkComponents,
}
}
......@@ -20,43 +20,37 @@ const baseBidListColumns: any[] = [
{
title: '招标编号/项目',
align: 'left',
dataIndex: 'code',
key: 'code',
dataIndex: ['inviteTender', 'code'],
key: ['inviteTender', 'code'],
render: (text, record) => <>
<EyePreview url={`${history.location.pathname}/detail?id=${record.id}`}>
{text}
</EyePreview>
<div>{record.projectName}</div>
<div>{record.inviteTender.projectName}</div>
</>
},
{
title: '专家号码',
align: 'left',
dataIndex: 'type',
key: 'type',
dataIndex: 'userId',
key: 'userId',
},
// {
// title: '评标人',
// align: 'left',
// dataIndex: 'supplyMembersName',
// key: 'supplyMembersName',
// },
{
title: '评标开始/评标时间',
title: '评标开始/结束时间',
align: 'left',
dataIndex: 'createTime',
key: 'createTime',
dataIndex: ['inviteTender', 'evaluationStartTime'],
key: ['inviteTender', 'evaluationEndTime'],
render: (text, record) => <>
<div><PlayCircleOutlined />{formatTimeString(record.createTime)}</div>
<div><PoweroffOutlined />{formatTimeString(record.createTime)}</div>
<div><PlayCircleOutlined />{formatTimeString(record.inviteTender.evaluationStartTime)}</div>
<div><PoweroffOutlined />{formatTimeString(record.inviteTender.evaluationEndTime)}</div>
</>,
width: 200
},
{
title: '外部状态',
align: 'left',
dataIndex: 'tenderOutStatus',
key: 'tenderOutStatus',
dataIndex: ['inviteTender', 'tenderOutStatus'],
key: ['inviteTender', 'tenderOutStatus'],
render: text => <CustomTag status={text} type='out' />
},
{
......@@ -80,11 +74,7 @@ export const useSelfTable = () => {
}})
const handleSubmit = async (record) => {
if (record.interiorState === PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER) {
history.push(`/memberCenter/tranactionAbility/purchaseOrder/firstApprovedOrder/detail?id=${record.id}`)
}
// await PublicApi.postOrderQuotationBeReviewed({id})
// ref.current.reload()
history.push(`/memberCenter/procurementAbility/callForBids/readyExpertRemark/detail?id=${record.id}`)
}
const secondColumns: any[] = baseBidListColumns.concat([
{
......@@ -92,10 +82,7 @@ export const useSelfTable = () => {
align: 'left',
dataIndex: 'ctl',
key: 'ctl',
render: (text, record) => <>
<Button type='link' onClick={() => handleSubmit(record)}>评标</Button>
<Button type='link' onClick={() => handleSubmit(record)}>拒绝</Button>
</>
render: (text, record) => new Date().getTime() < record.inviteTender.evaluationEndTime && <Button type='link' onClick={() => handleSubmit(record)}>评标</Button>
}
])
......
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { OrderTypeMap, PurchaseOrderInsideWorkStateTexts, PurchaseOrderOutWorkStateTexts } from '@/constants';
/**
* 除了订单必填字段, 默认
......@@ -29,17 +28,17 @@ export const tableListSchema: ISchema = {
}
},
properties: {
projectName: {
inviteTenderProjectName: {
type: 'string',
'x-component-props': {
placeholder: '请输入招标项目',
}
},
"[startTime,endTime]": {
"[evaluationStartTime,evaluationEndTime]": {
type: 'array',
"x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['发布开始时间','发布结束时间'],
placeholder: ['评标开始时间','评标结束时间'],
},
},
submit: {
......
......@@ -68,18 +68,6 @@ const BidDetailHeader: React.FC<BidDetailHeaderProps> = ({
}
}
const clickItem = (index: any) => {
let distance = formContext.offsetTopList[index] - 140
window.scrollTo({
top: distance < 0 ? 0 : distance,
behavior: "smooth"
})
let dom = document.documentElement || document.body
if (formContext.offsetTopList[index] - 189 + dom.clientHeight >= dom.scrollHeight) {
setCurrent(index)
}
}
return (
<div className={isFixed ? [style.detailHeader, style.anchorTitleFixed].join(' ') : style.detailHeader} id="detailHeader">
{
......@@ -99,16 +87,6 @@ const BidDetailHeader: React.FC<BidDetailHeaderProps> = ({
<Row>
<Col>
<div className={style.anchorTitle} id="anchorTitle">
{/* <ul className={style.anchorUl}>
{
anchorList.map((item, index) => (
<li key={index} onClick={()=>clickItem(index)}>
<a className={current === index ? style.current : null}>{item}</a>
</li>
))
}
</ul> */}
<Anchor onClick={(e) => e.preventDefault()} showInkInFixed={false} targetOffset={200}>
{
anchorList.map((item, index) => (
......
......@@ -14,7 +14,7 @@ import MemberWinInfo from '../memberWinInfo'
export interface BidDetailSectionProps {
formContext: any,
/** 招标-招标详情,投标-投标详情,招标-投标详情,投标-招标详情 */
/** 招标-招标详情,投标-投标详情,招标-投标详情,投标-招标详情*/
type: 'callForBid' | 'tender' | 'callForBidInTender' | 'tenderInCallForBid'
anchorList?: any,
}
......
......@@ -15,6 +15,7 @@ import Interval from 'bizcharts/lib/geometry/Interval'
import DataSet from "@antv/data-set";
import { BidInStateTexts, BidOutStateTexts, PURCHASE_TYPE } from '@/constants';
import { PublicApi } from '@/services/api';
import moment from 'moment';
/**
* 描述信息列表
......@@ -494,10 +495,10 @@ const DescriptionsInfo: React.FC<BasicInfoProps> = ({cardTitle, type}) => {
<div className={style.thankLetter}>
<h2>感谢函</h2>
<h4>THANKS LETTER</h4>
<p className={style.name}>尊敬的广州白马皮具交易中心</p>
<p>贵公司参与了我公司《进口头层黄牛皮荔枝纹采购》竞标。在我公司综合各投标单位的基本情况,并进行充分技术交流后,经评标委员会综合评定,贵公司未能中标。我公司对贵公司的积极参与和支持深表感谢!希望下次合作成功。</p>
<p className={style.company}>温州龙昌手袋有限公司</p>
<p className={style.time}>2020-08-25</p>
<p className={style.name}>尊敬的{_data.memberName}</p>
<p>贵公司参与了我公司《{data.projectName}》竞标。在我公司综合各投标单位的基本情况,并进行充分技术交流后,经评标委员会综合评定,贵公司未能中标。我公司对贵公司的积极参与和支持深表感谢!希望下次合作成功。</p>
<p className={style.company}>{data.memberName}</p>
<p className={style.time}>{moment().format('YYYY-MM-DD')}</p>
</div>
</Modal>
</MellowCard>)
......
......@@ -21,7 +21,6 @@ const RemarkBidReport: React.FC<RemarkBidReportProps> = ({cardTitle}) => {
const bidDetailContext = useContext(BidDetailContext)
const { data, ctl } = bidDetailContext
const [transferRadio, setTransferRadio] = useState<number>(5)
const dataSource = [
{
......@@ -132,16 +131,6 @@ const RemarkBidReport: React.FC<RemarkBidReportProps> = ({cardTitle}) => {
}
}
const onChange = (record) => {
console.log(record)
}
const callForWay = 1 // 招标方式
const handleChangeType = (e) => {
setTransferRadio(e.target.value)
}
return (
<MellowCard
title={cardTitle}
......@@ -150,89 +139,11 @@ const RemarkBidReport: React.FC<RemarkBidReportProps> = ({cardTitle}) => {
fullHeight
>
<div className={style.remarkBidReportWrapper}>
<div className={style.remarkCommitteeContainer}>
<h3 className="commonPanelTitle">评标委员会</h3>
<Row gutter={[16, 0]}>
<Col span={4}>
<div className={style.committeeItem}>
<div className={style.avater}>
<img src={imgLink} alt="专家头像"/>
<p>系统抽取</p>
</div>
<p><span className={style['card-list_title']}>评委专家编号:</span>135</p>
<span className={style.status}>已评标</span>
</div>
</Col>
<Col span={4}>
<div className={style.committeeItem}>
<div className={style.avater}>
<img src={imgLink} alt="专家头像"/>
<p>系统抽取</p>
</div>
<p><span className={style['card-list_title']}>评委专家编号:</span>135</p>
<span className={style.status}>已评标</span>
</div>
</Col>
<Col span={4}>
<div className={style.committeeItem}>
<div className={style.avater}>
<img src={imgLink} alt="专家头像"/>
<p>系统抽取</p>
</div>
<p><span className={style['card-list_title']}>评委专家编号:</span>135</p>
<span className={style.status}>已评标</span>
</div>
</Col>
<Col span={4}>
<div className={style.committeeItem}>
<div className={style.avater}>
<img src={imgLink} alt="专家头像"/>
<p>系统抽取</p>
</div>
<p><span className={style['card-list_title']}>评委专家编号:</span>135</p>
<span className={style.status}>已评标</span>
</div>
</Col>
<Col span={4}>
<div className={style.committeeItem}>
<div className={style.avater}>
<img src={imgLink} alt="专家头像"/>
<p>系统抽取</p>
</div>
<p><span className={style['card-list_title']}>评委专家编号:</span>135</p>
<span className={style.status}>已评标</span>
</div>
</Col>
<Col span={4}>
<div className={style.committeeItem}>
<div className={style.avater}>
<img src={imgLink} alt="专家头像"/>
<p>系统抽取</p>
</div>
<p><span className={style['card-list_title']}>评委专家编号:</span>135</p>
<span className={style.status}>已评标</span>
</div>
</Col>
</Row>
</div>
<div className={style.remarkRecordContainer}>
<div className={style.remarkRecordHead}>
<h3 className="commonPanelTitle">评标记录</h3>
<Radio.Group value={transferRadio} buttonStyle="solid" size="small" onChange={handleChangeType}>
<Radio.Button value={5}>技术部分(50%)</Radio.Button>
<Radio.Button value={3}>商务部分(30%)</Radio.Button>
<Radio.Button value={2}>综合部分(20%)</Radio.Button>
</Radio.Group>
</div>
{
transferRadio === 5 ? <Table dataSource={dataSource} columns={columns} pagination={{size: "small"}} /> : null
}
{
transferRadio === 3 ? <Table dataSource={dataSource} columns={columns} pagination={{size: "small"}} /> : null
}
{
transferRadio === 2 ? <Table dataSource={dataSource} columns={columns} pagination={{size: "small"}} /> : null
}
<Table dataSource={dataSource} columns={columns} pagination={{size: "small"}} />
</div>
<div className={style.bidMemberContainer}>
<h3 className="commonPanelTitle">推荐中标会员</h3>
......@@ -272,31 +183,6 @@ const RemarkBidReport: React.FC<RemarkBidReportProps> = ({cardTitle}) => {
</Row>
</div>
</div>
{/* <div className={style['card-list']}>
<Row>
<Col span={2}><p className={style['card-list_title']}>招标方式</p></Col>
<Col><p>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
</Row>
</div>
{
callForWay === 1 ?
<Table dataSource={dataSource} columns={columns} pagination={{size: "small"}} />
:
<div className={style['card-list']}>
<Row>
<Col span={6}><p className={style['card-list_title']}>招标方式</p></Col>
<Col><p>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
</Row>
<Row>
<Col span={6}><p className={style['card-list_title']}>招标方式</p></Col>
<Col><p>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
</Row>
<Row>
<Col span={6}><p className={style['card-list_title']}>招标方式</p></Col>
<Col><p>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
</Row>
</div>
} */}
</MellowCard>)
}
......
......@@ -87,7 +87,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
console.log(transformPayList, 'trans')
const [visible, setVisible] = useState(false)
const [checked, setChecked] = useState<any>({})
const [current, setCurrent] = useState(0) // 0选择方式 1线下支付方式 2授信支付 3余额支付 4微信支付 5货到付款 6支付宝 1000清除
const [current, setCurrent] = useState(0) // 0选择方式 1线下支付方式 2授信支付 3余额支付 4微信支付 5货到付款 6支付宝 100账期 101月结 1000清除
const [payStep, setPayStep] = useState(0) // 支付模态框的步骤 0选方式 1下一步的具体操作 2输入支付密码
const mobilePayFlag = useRef(0) // 用于判断移动支付类型 4微信6支付宝
const [qrLoading, setQrLoading] = useState(false)
......@@ -246,6 +246,15 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
// setQrLoading(true)
// handleSubmitPay()
// }
else if(checked.id === 100) {
console.log('选择了账期结算模式')
setCurrent(100)
setPayStep(1)
} else if(checked.id === 101) {
console.log('选择了月结结算模式')
setCurrent(101)
setPayStep(1)
}
else {
message.error('暂只支持线下支付、授信额度支付、余额支付、货到付款、微信支付方式')
}
......@@ -287,6 +296,14 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
} else if(current === 5) {
// 开始提交货到付款数据
handleSubmitPay()
} else if(current === 100) {
// 开始提交账期结算数据
// @todo 与后端联调传参
handleSubmitPay()
} else if(current === 101) {
// 开始提交月结结算数据
// @todo 与后端联调传参
handleSubmitPay()
}
confirm && confirm()
......@@ -422,18 +439,18 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
?
payTextList[key]
:
( value[0]['value'] === 1 ? '账期' : '月结' )
( value[0]['value'] === 100 ? '账期' : '月结' )
}
</Col>
<Col style={{ flex: 1 }}>
<div className={style.radioBox}>
{
(value as any[]).map(v => {
if(payOnReceived && v.value === 7) { // 过滤到付
return null
} else {
// if(payOnReceived && v.value === 7) { // 过滤到付
// return null
// } else {
return <div key={v.value} className={cx(style.payRadio, (checked && v.value === checked.id) ? style.active : '')} onClick={() => setChecked({ id: v.value, channel: v.channel })}>{v.label}</div>
}
// }
})
}
</div>
......@@ -596,7 +613,68 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
</div>
</div>
}
{/* 账期结算 */}
{
current === 100 &&
<div>
<p style={{fontWeight: "bold"}}>账期支付确认</p>
<p>
<span className={style.title}>
支付方式:
</span>
<span className={style.amount}>
账期
</span>
</p>
<p>
<span className={style.title}>
支付渠道:
</span>
<span className={style.amount}>
{transformPayList['-1'][0]['label']}
</span>
</p>
<p>
<span className={style.title}>
支付金额(元):
</span>
<span className={cx(style.amount, style.amount2)}>
{data?.paymentInformationResponses?.filter(item => item.id === Number(currentPayInfoId))[0]?.payPrice?.toFixed(2)}
</span>
</p>
</div>
}
{/* 月结结算 */}
{
current === 101 &&
<div>
<p style={{fontWeight: "bold"}}>月结支付确认</p>
<p>
<span className={style.title}>
支付方式:
</span>
<span className={style.amount}>
月结
</span>
</p>
<p>
<span className={style.title}>
支付渠道:
</span>
<span className={style.amount}>
{transformPayList['-1'][0]['label']}
</span>
</p>
<p>
<span className={style.title}>
支付金额(元):
</span>
<span className={cx(style.amount, style.amount2)}>
{data?.paymentInformationResponses?.filter(item => item.id === Number(currentPayInfoId))[0]?.payPrice?.toFixed(2)}
</span>
</p>
</div>
}
</Modal>
)
}
......
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