Commit 27c5c89c authored by 前端-黄佳鑫's avatar 前端-黄佳鑫

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

parents 0d93f62c d0e64241
......@@ -136,6 +136,76 @@ export const callForBidsRoute = [
hideInMenu: true,
noMargin: true,
},
// 待定标
{
path: '/memberCenter/procurementAbility/callForBids/readyConfirmBid',
name: '待定标',
component: '@/pages/procurement/callForBids/readyConfirmBid',
},
// 待定标-详情
{
path: '/memberCenter/procurementAbility/callForBids/readyConfirmBid/detail',
name: '待定标详情',
component: '@/pages/procurement/callForBids/readyConfirmBid/detail',
hideInMenu: true,
noMargin: true,
},
// 待审核定标(一级)
{
path: '/memberCenter/procurementAbility/callForBids/readyCheckedConfirmFirst',
name: '待审核定标(一级)',
component: '@/pages/procurement/callForBids/readyCheckedConfirmFirst',
},
// 待审核定标(一级)-详情
{
path: '/memberCenter/procurementAbility/callForBids/readyCheckedConfirmFirst/detail',
name: '待审核定标(一级)',
component: '@/pages/procurement/callForBids/readyCheckedConfirmFirst/detail',
hideInMenu: true,
noMargin: true,
},
// 待审核定标(二级)
{
path: '/memberCenter/procurementAbility/callForBids/readyCheckedConfirmSecond',
name: '待审核定标(二级)',
component: '@/pages/procurement/callForBids/readyCheckedConfirmSecond',
},
// 待审核定标(二级)-详情
{
path: '/memberCenter/procurementAbility/callForBids/readyCheckedConfirmSecond/detail',
name: '待审核定标(二级)',
component: '@/pages/procurement/callForBids/readyCheckedConfirmSecond/detail',
hideInMenu: true,
noMargin: true,
},
// 待确认定标
{
path: '/memberCenter/procurementAbility/callForBids/readyPassBid',
name: '待确认定标',
component: '@/pages/procurement/callForBids/readyPassBid',
},
// 待确认定标-详情
{
path: '/memberCenter/procurementAbility/callForBids/readyPassBid/detail',
name: '待确认定标详情',
component: '@/pages/procurement/callForBids/readyPassBid/detail',
hideInMenu: true,
noMargin: true,
},
// 待发中标公示
{
path: '/memberCenter/procurementAbility/callForBids/readySendBidNotice',
name: '待发中标公示',
component: '@/pages/procurement/callForBids/readySendBidNotice',
},
// 待发中标公示-详情
{
path: '/memberCenter/procurementAbility/callForBids/readySendBidNotice/detail',
name: '待发中标公示',
component: '@/pages/procurement/callForBids/readySendBidNotice/detail',
hideInMenu: true,
noMargin: true,
},
]
},
]
import React, { useState, useCallback, useRef, useContext, useEffect, createRef } from 'react';
import { history } from 'umi'
import { Button } from 'antd';
import style from './index.less'
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 BidDetailHeader from '@/pages/procurement/components/bidDetailHeader';
import BidDetailSection from '@/pages/procurement/components/bidDetailSection';
const ReadyCheckedConfirmFirstDetail: React.FC = () => {
const { formContext, id, detailList } = useBidDetail({type: 'purchaseOrder'})
const {data, currentPayInfoId} = 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" },
]
return (
<div>
<BidDetailContext.Provider value={formContext}>
<BidDetailHeader
detailList={detailList}
formContext={formContext}
anchorList={anchorTitleList}
backLink="/memberCenter/procurementAbility/callForBids/callForBidsSearch"
extraRight={
<Button type='primary'>
单据审核
</Button>
}
/>
<OrderDetailWrapper>
<PreLoading loading={!formContext.data} active paragraph={{rows: 6}}>
<BidDetailSection formContext={formContext} anchorList={anchorTitleList} type="callForBid" />
</PreLoading>
</OrderDetailWrapper>
<OrderPayModal
currentRef={payRef}
/>
</BidDetailContext.Provider>
</div>
);
};
export default ReadyCheckedConfirmFirstDetail;
import React, { useRef } from 'react'
import { history } from 'umi'
import { Card, Button, Space, Dropdown, Menu, message } from 'antd'
import { StandardTable } from 'god'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { PublicApi } from '@/services/api'
import { useSelfTable } from './model/useSelfTable'
import { PlusCircleOutlined, DownOutlined, DeleteOutlined } from '@ant-design/icons'
import DropDeleteDown from '@/components/DropDeleteDown'
import { tableListSchema } from './schema'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import Submit from '@/components/NiceForm/components/Submit'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState } from '@/constants'
import { useHttpRequest } from '@/hooks/useHttpRequest'
// 待审核定标(一级) 招标
export interface ReadyCheckedConfirmFirstProps {}
const fetchTableData = async (params) => {
const { data } = await PublicApi.getOrderProcurementReviewedListOne(params)
return data
}
// TODO
const ReadyCheckedConfirmFirst:React.FC<ReadyCheckedConfirmFirstProps> = (props) => {
const {
columns,
ref,
rowSelection,
rowSelectionCtl
} = useSelfTable()
const { run, loading } = useHttpRequest(PublicApi.postOrderProcurementOrderReviewedAll)
const handleSubmitBatch = async () => {
if (rowSelectionCtl.selectRow.length === 0) {
message.error('请先勾选订单')
return ;
}
const canBitch = !rowSelectionCtl.selectRow.some(v => v.interiorState !== PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER)
if (canBitch) {
const { code } = await run({ids: rowSelectionCtl.selectedRowKeys})
if (code === 1000) {
ref.current.reload()
rowSelectionCtl.setSelectRow([])
rowSelectionCtl.setSelectedRowKeys([])
}
} else {
message.error('只能批量提交内部状态为审核中的订单')
}
}
return <PageHeaderWrapper>
<Card>
<StandardTable
fetchTableData={params => fetchTableData(params)}
// rowSelection={rowSelection}
columns={columns}
currentRef={ref}
rowKey={'id'}
formilyLayouts={{
justify: 'space-between'
}}
formilyProps={{
ctx: {
inline: false,
schema: tableListSchema,
effects: ($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'orderNo',
FORM_FILTER_PATH,
);
},
components: {
DateRangePickerUnix,
Submit
}
},
layouts: {
order: 2,
span: 24
}
}}
formilyChilds={{
children: <Space>
<Button onClick={handleSubmitBatch} loading={loading}>批量审核通过</Button>
</Space>,
layouts: {
span: 8
}
}}
/>
</Card>
</PageHeaderWrapper>
}
ReadyCheckedConfirmFirst.defaultProps = {}
export default ReadyCheckedConfirmFirst
import React, { useRef } from 'react'
import { Button } from 'antd'
import { history } from 'umi'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState } from '@/constants'
import { baseBidListColumns } from '@/pages/procurement/constants'
// 待审核定标(一级) 招标
export const useSelfTable = () => {
const ref = useRef<any>({})
const [rowSelection, rowSelectionCtl] = useRowSelectionTable({customKey: 'id', extendsSelection: {
getCheckboxProps: record => ({
// 不等于可提交审核的 都无法通过批量提交
disabled: record.interiorState !== PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER,
interiorState: record.interiorState,
})
}})
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()
}
const secondColumns: any[] = baseBidListColumns.concat([
{
title: '操作',
align: 'center',
dataIndex: 'ctl',
key: 'ctl',
render: (text, record) => <>
{
record.interiorState === PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER &&
<Button type='link' onClick={() => handleSubmit(record)}>审核</Button>
}
</>
}
])
return {
columns: secondColumns,
ref,
rowSelection,
rowSelectionCtl
}
}
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { OrderTypeMap, PurchaseOrderInsideWorkStateTexts, PurchaseOrderOutWorkStateTexts } from '@/constants';
/**
* 除了订单必填字段, 默认
*/
export const tableListSchema: ISchema = {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-end',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginLeft: 20
}
},
properties: {
orderThe: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
},
"supplyMembersName": {
type: 'string',
"x-component-props": {
placeholder: '请输入供应会员名称'
}
},
"type": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
},
enum: Object.keys(OrderTypeMap).map(item => ({
label: OrderTypeMap[item],
value: item,
}))
},
"[startCreateTime,endCreateTime]": {
type: 'array',
"x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
},
},
},
},
}
}
import React, { useState, useCallback, useRef, useContext, useEffect, createRef } from 'react';
import { history } from 'umi'
import { Button } from 'antd';
import style from './index.less'
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 BidDetailHeader from '@/pages/procurement/components/bidDetailHeader';
import BidDetailSection from '@/pages/procurement/components/bidDetailSection';
const ReadyCheckedConfirmSecondDetail: React.FC = () => {
const { formContext, id, detailList } = useBidDetail({type: 'purchaseOrder'})
const {data, currentPayInfoId} = 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" },
]
return (
<div>
<BidDetailContext.Provider value={formContext}>
<BidDetailHeader
detailList={detailList}
formContext={formContext}
anchorList={anchorTitleList}
backLink="/memberCenter/procurementAbility/callForBids/callForBidsSearch"
extraRight={
<Button type='primary'>
单据审核
</Button>
}
/>
<OrderDetailWrapper>
<PreLoading loading={!formContext.data} active paragraph={{rows: 6}}>
<BidDetailSection formContext={formContext} anchorList={anchorTitleList} type="callForBid" />
</PreLoading>
</OrderDetailWrapper>
<OrderPayModal
currentRef={payRef}
/>
</BidDetailContext.Provider>
</div>
);
};
export default ReadyCheckedConfirmSecondDetail;
import React, { useRef } from 'react'
import { history } from 'umi'
import { Card, Button, Space, Dropdown, Menu, message } from 'antd'
import { StandardTable } from 'god'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { PublicApi } from '@/services/api'
import { useSelfTable } from './model/useSelfTable'
import { PlusCircleOutlined, DownOutlined, DeleteOutlined } from '@ant-design/icons'
import DropDeleteDown from '@/components/DropDeleteDown'
import { tableListSchema } from './schema'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import Submit from '@/components/NiceForm/components/Submit'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState } from '@/constants'
import { useHttpRequest } from '@/hooks/useHttpRequest'
// 待审核定标(二级) 招标
export interface ReadyCheckedConfirmSecondProps {}
const fetchTableData = async (params) => {
const { data } = await PublicApi.getOrderProcurementReviewedListOne(params)
return data
}
// TODO
const ReadyCheckedConfirmSecond:React.FC<ReadyCheckedConfirmSecondProps> = (props) => {
const {
columns,
ref,
rowSelection,
rowSelectionCtl
} = useSelfTable()
const { run, loading } = useHttpRequest(PublicApi.postOrderProcurementOrderReviewedAll)
const handleSubmitBatch = async () => {
if (rowSelectionCtl.selectRow.length === 0) {
message.error('请先勾选订单')
return ;
}
const canBitch = !rowSelectionCtl.selectRow.some(v => v.interiorState !== PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER)
if (canBitch) {
const { code } = await run({ids: rowSelectionCtl.selectedRowKeys})
if (code === 1000) {
ref.current.reload()
rowSelectionCtl.setSelectRow([])
rowSelectionCtl.setSelectedRowKeys([])
}
} else {
message.error('只能批量提交内部状态为审核中的订单')
}
}
return <PageHeaderWrapper>
<Card>
<StandardTable
fetchTableData={params => fetchTableData(params)}
// rowSelection={rowSelection}
columns={columns}
currentRef={ref}
rowKey={'id'}
formilyLayouts={{
justify: 'space-between'
}}
formilyProps={{
ctx: {
inline: false,
schema: tableListSchema,
effects: ($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'orderNo',
FORM_FILTER_PATH,
);
},
components: {
DateRangePickerUnix,
Submit
}
},
layouts: {
order: 2,
span: 24
}
}}
formilyChilds={{
children: <Space>
<Button onClick={handleSubmitBatch} loading={loading}>批量审核通过</Button>
</Space>,
layouts: {
span: 8
}
}}
/>
</Card>
</PageHeaderWrapper>
}
ReadyCheckedConfirmSecond.defaultProps = {}
export default ReadyCheckedConfirmSecond
import React, { useRef } from 'react'
import { Button } from 'antd'
import { history } from 'umi'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState } from '@/constants'
import { baseBidListColumns } from '@/pages/procurement/constants'
// 待审核定标(二级) 招标
export const useSelfTable = () => {
const ref = useRef<any>({})
const [rowSelection, rowSelectionCtl] = useRowSelectionTable({customKey: 'id', extendsSelection: {
getCheckboxProps: record => ({
// 不等于可提交审核的 都无法通过批量提交
disabled: record.interiorState !== PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER,
interiorState: record.interiorState,
})
}})
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()
}
const secondColumns: any[] = baseBidListColumns.concat([
{
title: '操作',
align: 'center',
dataIndex: 'ctl',
key: 'ctl',
render: (text, record) => <>
{
record.interiorState === PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER &&
<Button type='link' onClick={() => handleSubmit(record)}>审核</Button>
}
</>
}
])
return {
columns: secondColumns,
ref,
rowSelection,
rowSelectionCtl
}
}
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { OrderTypeMap, PurchaseOrderInsideWorkStateTexts, PurchaseOrderOutWorkStateTexts } from '@/constants';
/**
* 除了订单必填字段, 默认
*/
export const tableListSchema: ISchema = {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-end',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginLeft: 20
}
},
properties: {
orderThe: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
},
"supplyMembersName": {
type: 'string',
"x-component-props": {
placeholder: '请输入供应会员名称'
}
},
"type": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
},
enum: Object.keys(OrderTypeMap).map(item => ({
label: OrderTypeMap[item],
value: item,
}))
},
"[startCreateTime,endCreateTime]": {
type: 'array',
"x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
},
},
},
},
}
}
import React, { useState, useCallback, useRef, useContext, useEffect, createRef } from 'react';
import { history } from 'umi'
import { Button } from 'antd';
import style from './index.less'
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 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 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" },
]
return (
<div>
<BidDetailContext.Provider value={formContext}>
<BidDetailHeader
detailList={detailList}
formContext={formContext}
anchorList={anchorTitleList}
backLink="/memberCenter/procurementAbility/callForBids/callForBidsSearch"
extraRight={
<Button type='primary'>
单据审核
</Button>
}
/>
<OrderDetailWrapper>
<PreLoading loading={!formContext.data} active paragraph={{rows: 6}}>
<BidDetailSection formContext={formContext} anchorList={anchorTitleList} type="callForBid" />
</PreLoading>
</OrderDetailWrapper>
<OrderPayModal
currentRef={payRef}
/>
</BidDetailContext.Provider>
</div>
);
};
export default ReadyQualifityCheckedDetail;
import React, { useRef } from 'react'
import { history } from 'umi'
import { Card, Button, Space, Dropdown, Menu, message } from 'antd'
import { StandardTable } from 'god'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { PublicApi } from '@/services/api'
import { useSelfTable } from './model/useSelfTable'
import { PlusCircleOutlined, DownOutlined, DeleteOutlined } from '@ant-design/icons'
import DropDeleteDown from '@/components/DropDeleteDown'
import { tableListSchema } from './schema'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import Submit from '@/components/NiceForm/components/Submit'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState } from '@/constants'
import { useHttpRequest } from '@/hooks/useHttpRequest'
// 待定标 招标
export interface ReadyConfirmBidProps {}
const fetchTableData = async (params) => {
const { data } = await PublicApi.getOrderProcurementReviewedListOne(params)
return data
}
// TODO
const ReadyConfirmBid:React.FC<ReadyConfirmBidProps> = (props) => {
const {
columns,
ref,
rowSelection,
rowSelectionCtl
} = useSelfTable()
const { run, loading } = useHttpRequest(PublicApi.postOrderProcurementOrderReviewedAll)
const handleSubmitBatch = async () => {
if (rowSelectionCtl.selectRow.length === 0) {
message.error('请先勾选订单')
return ;
}
const canBitch = !rowSelectionCtl.selectRow.some(v => v.interiorState !== PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER)
if (canBitch) {
const { code } = await run({ids: rowSelectionCtl.selectedRowKeys})
if (code === 1000) {
ref.current.reload()
rowSelectionCtl.setSelectRow([])
rowSelectionCtl.setSelectedRowKeys([])
}
} else {
message.error('只能批量提交内部状态为审核中的订单')
}
}
return <PageHeaderWrapper>
<Card>
<StandardTable
fetchTableData={params => fetchTableData(params)}
// rowSelection={rowSelection}
columns={columns}
currentRef={ref}
rowKey={'id'}
formilyLayouts={{
justify: 'space-between'
}}
formilyProps={{
ctx: {
inline: false,
schema: tableListSchema,
effects: ($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'orderNo',
FORM_FILTER_PATH,
);
},
components: {
DateRangePickerUnix,
Submit
}
},
layouts: {
order: 2,
span: 24
}
}}
// formilyChilds={{
// children: <Space>
// <Button onClick={handleSubmitBatch} loading={loading}>批量审核通过</Button>
// </Space>,
// layouts: {
// span: 8
// }
// }}
/>
</Card>
</PageHeaderWrapper>
}
ReadyConfirmBid.defaultProps = {}
export default ReadyConfirmBid
import React, { useRef } from 'react'
import { Button } from 'antd'
import { history } from 'umi'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState } from '@/constants'
import { baseBidListColumns } from '@/pages/procurement/constants'
// 待审核报名 招标
export const useSelfTable = () => {
const ref = useRef<any>({})
const [rowSelection, rowSelectionCtl] = useRowSelectionTable({customKey: 'id', extendsSelection: {
getCheckboxProps: record => ({
// 不等于可提交审核的 都无法通过批量提交
disabled: record.interiorState !== PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER,
interiorState: record.interiorState,
})
}})
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()
}
const secondColumns: any[] = baseBidListColumns.concat([
{
title: '操作',
align: 'center',
dataIndex: 'ctl',
key: 'ctl',
render: (text, record) => <>
{
record.interiorState === PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER &&
<Button type='link' onClick={() => handleSubmit(record)}>审核</Button>
}
</>
}
])
return {
columns: secondColumns,
ref,
rowSelection,
rowSelectionCtl
}
}
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { OrderTypeMap, PurchaseOrderInsideWorkStateTexts, PurchaseOrderOutWorkStateTexts } from '@/constants';
/**
* 除了订单必填字段, 默认
*/
export const tableListSchema: ISchema = {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-end',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginLeft: 20
}
},
properties: {
orderThe: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
},
"supplyMembersName": {
type: 'string',
"x-component-props": {
placeholder: '请输入供应会员名称'
}
},
"type": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
},
enum: Object.keys(OrderTypeMap).map(item => ({
label: OrderTypeMap[item],
value: item,
}))
},
"[startCreateTime,endCreateTime]": {
type: 'array',
"x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
},
},
},
},
}
}
import React, { useState, useCallback, useRef, useContext, useEffect, createRef } from 'react';
import { history } from 'umi'
import { Button } from 'antd';
import style from './index.less'
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 BidDetailHeader from '@/pages/procurement/components/bidDetailHeader';
import BidDetailSection from '@/pages/procurement/components/bidDetailSection';
const ReadyPassBidDetail: React.FC = () => {
const { formContext, id, detailList } = useBidDetail({type: 'purchaseOrder'})
const {data, currentPayInfoId} = 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" },
]
return (
<div>
<BidDetailContext.Provider value={formContext}>
<BidDetailHeader
detailList={detailList}
formContext={formContext}
anchorList={anchorTitleList}
backLink="/memberCenter/procurementAbility/callForBids/callForBidsSearch"
extraRight={
<Button type='primary'>
单据审核
</Button>
}
/>
<OrderDetailWrapper>
<PreLoading loading={!formContext.data} active paragraph={{rows: 6}}>
<BidDetailSection formContext={formContext} anchorList={anchorTitleList} type="callForBid" />
</PreLoading>
</OrderDetailWrapper>
<OrderPayModal
currentRef={payRef}
/>
</BidDetailContext.Provider>
</div>
);
};
export default ReadyPassBidDetail;
import React, { useRef } from 'react'
import { history } from 'umi'
import { Card, Button, Space, Dropdown, Menu, message } from 'antd'
import { StandardTable } from 'god'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { PublicApi } from '@/services/api'
import { useSelfTable } from './model/useSelfTable'
import { PlusCircleOutlined, DownOutlined, DeleteOutlined } from '@ant-design/icons'
import DropDeleteDown from '@/components/DropDeleteDown'
import { tableListSchema } from './schema'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import Submit from '@/components/NiceForm/components/Submit'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState } from '@/constants'
import { useHttpRequest } from '@/hooks/useHttpRequest'
// 待确认定标 招标
export interface ReadyPassBidProps {}
const fetchTableData = async (params) => {
const { data } = await PublicApi.getOrderProcurementReviewedListOne(params)
return data
}
// TODO
const ReadyPassBid:React.FC<ReadyPassBidProps> = (props) => {
const {
columns,
ref,
rowSelection,
rowSelectionCtl
} = useSelfTable()
const { run, loading } = useHttpRequest(PublicApi.postOrderProcurementOrderReviewedAll)
const handleSubmitBatch = async () => {
if (rowSelectionCtl.selectRow.length === 0) {
message.error('请先勾选订单')
return ;
}
const canBitch = !rowSelectionCtl.selectRow.some(v => v.interiorState !== PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER)
if (canBitch) {
const { code } = await run({ids: rowSelectionCtl.selectedRowKeys})
if (code === 1000) {
ref.current.reload()
rowSelectionCtl.setSelectRow([])
rowSelectionCtl.setSelectedRowKeys([])
}
} else {
message.error('只能批量提交内部状态为审核中的订单')
}
}
return <PageHeaderWrapper>
<Card>
<StandardTable
fetchTableData={params => fetchTableData(params)}
// rowSelection={rowSelection}
columns={columns}
currentRef={ref}
rowKey={'id'}
formilyLayouts={{
justify: 'space-between'
}}
formilyProps={{
ctx: {
inline: false,
schema: tableListSchema,
effects: ($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'orderNo',
FORM_FILTER_PATH,
);
},
components: {
DateRangePickerUnix,
Submit
}
},
layouts: {
order: 2,
span: 24
}
}}
formilyChilds={{
children: <Space>
<Button onClick={handleSubmitBatch} loading={loading}>批量审核通过</Button>
</Space>,
layouts: {
span: 8
}
}}
/>
</Card>
</PageHeaderWrapper>
}
ReadyPassBid.defaultProps = {}
export default ReadyPassBid
import React, { useRef } from 'react'
import { Button } from 'antd'
import { history } from 'umi'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState } from '@/constants'
import { baseBidListColumns } from '@/pages/procurement/constants'
// 待确认定标 招标
export const useSelfTable = () => {
const ref = useRef<any>({})
const [rowSelection, rowSelectionCtl] = useRowSelectionTable({customKey: 'id', extendsSelection: {
getCheckboxProps: record => ({
// 不等于可提交审核的 都无法通过批量提交
disabled: record.interiorState !== PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER,
interiorState: record.interiorState,
})
}})
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()
}
const secondColumns: any[] = baseBidListColumns.concat([
{
title: '操作',
align: 'center',
dataIndex: 'ctl',
key: 'ctl',
render: (text, record) => <>
{
record.interiorState === PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER &&
<Button type='link' onClick={() => handleSubmit(record)}>审核</Button>
}
</>
}
])
return {
columns: secondColumns,
ref,
rowSelection,
rowSelectionCtl
}
}
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { OrderTypeMap, PurchaseOrderInsideWorkStateTexts, PurchaseOrderOutWorkStateTexts } from '@/constants';
/**
* 除了订单必填字段, 默认
*/
export const tableListSchema: ISchema = {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-end',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginLeft: 20
}
},
properties: {
orderThe: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
},
"supplyMembersName": {
type: 'string',
"x-component-props": {
placeholder: '请输入供应会员名称'
}
},
"type": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
},
enum: Object.keys(OrderTypeMap).map(item => ({
label: OrderTypeMap[item],
value: item,
}))
},
"[startCreateTime,endCreateTime]": {
type: 'array',
"x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
},
},
},
},
}
}
import React, { useState, useCallback, useRef, useContext, useEffect, createRef } from 'react';
import { history } from 'umi'
import { Button } from 'antd';
import style from './index.less'
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 BidDetailHeader from '@/pages/procurement/components/bidDetailHeader';
import BidDetailSection from '@/pages/procurement/components/bidDetailSection';
const ReadySendBidNoticeDetail: React.FC = () => {
const { formContext, id, detailList } = useBidDetail({type: 'purchaseOrder'})
const {data, currentPayInfoId} = formContext
const payRef = useRef<any>({})
/** 约定好 对应的锚点title和元素id映射 */
// type? 用于区分DescriptionsInfo组件的内容
// componentName? 用于区分不同组件的渲染
const anchorTitleList = [
{ title: '流转进度', id: 'transferProcess', componentName: 'TransferProcess' },
{ title: '基本信息', id: 'baseicInfo', type: 'basicInfo' },
{ title: '流转记录', id: 'transferRecord', componentName: "BidTransformRecord" },
]
return (
<div>
<BidDetailContext.Provider value={formContext}>
<BidDetailHeader
detailList={detailList}
formContext={formContext}
anchorList={anchorTitleList}
backLink="/memberCenter/procurementAbility/callForBids/callForBidsSearch"
extraRight={
<Button type='primary'>
发送中标公示
</Button>
}
/>
<OrderDetailWrapper>
<PreLoading loading={!formContext.data} active paragraph={{rows: 6}}>
<BidDetailSection formContext={formContext} anchorList={anchorTitleList} type="callForBid" />
</PreLoading>
</OrderDetailWrapper>
<OrderPayModal
currentRef={payRef}
/>
</BidDetailContext.Provider>
</div>
);
};
export default ReadySendBidNoticeDetail;
import React, { useRef } from 'react'
import { history } from 'umi'
import { Card, Button, Space, Dropdown, Menu, message } from 'antd'
import { StandardTable } from 'god'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { PublicApi } from '@/services/api'
import { useSelfTable } from './model/useSelfTable'
import { PlusCircleOutlined, DownOutlined, DeleteOutlined } from '@ant-design/icons'
import DropDeleteDown from '@/components/DropDeleteDown'
import { tableListSchema } from './schema'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import Submit from '@/components/NiceForm/components/Submit'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState } from '@/constants'
import { useHttpRequest } from '@/hooks/useHttpRequest'
// 待发中标公示 招标
export interface ReadySendBidNoticeProps {}
const fetchTableData = async (params) => {
const { data } = await PublicApi.getOrderProcurementReviewedListOne(params)
return data
}
// TODO
const ReadySendBidNotice:React.FC<ReadySendBidNoticeProps> = (props) => {
const {
columns,
ref,
rowSelection,
rowSelectionCtl
} = useSelfTable()
const { run, loading } = useHttpRequest(PublicApi.postOrderProcurementOrderReviewedAll)
const handleSubmitBatch = async () => {
if (rowSelectionCtl.selectRow.length === 0) {
message.error('请先勾选订单')
return ;
}
const canBitch = !rowSelectionCtl.selectRow.some(v => v.interiorState !== PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER)
if (canBitch) {
const { code } = await run({ids: rowSelectionCtl.selectedRowKeys})
if (code === 1000) {
ref.current.reload()
rowSelectionCtl.setSelectRow([])
rowSelectionCtl.setSelectedRowKeys([])
}
} else {
message.error('只能批量提交内部状态为审核中的订单')
}
}
return <PageHeaderWrapper>
<Card>
<StandardTable
fetchTableData={params => fetchTableData(params)}
// rowSelection={rowSelection}
columns={columns}
currentRef={ref}
rowKey={'id'}
formilyLayouts={{
justify: 'space-between'
}}
formilyProps={{
ctx: {
inline: false,
schema: tableListSchema,
effects: ($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'orderNo',
FORM_FILTER_PATH,
);
},
components: {
DateRangePickerUnix,
Submit
}
},
layouts: {
order: 2,
span: 24
}
}}
formilyChilds={{
children: <Space>
<Button onClick={handleSubmitBatch} loading={loading}>批量审核通过</Button>
</Space>,
layouts: {
span: 8
}
}}
/>
</Card>
</PageHeaderWrapper>
}
ReadySendBidNotice.defaultProps = {}
export default ReadySendBidNotice
import React, { useRef } from 'react'
import { Button } from 'antd'
import { history } from 'umi'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState } from '@/constants'
import CustomTag from '@/pages/procurement/components/CustomTag'
import CustomBadge from '@/pages/procurement/components/customBadge'
import EyePreview from '@/components/EyePreview'
const baseBidListColumns = [
{
title: '序号',
align: 'center',
dataIndex: 'id',
key: 'id',
render: (t, r, i) => ++i
},
{
title: '招标编号/项目',
align: 'center',
dataIndex: 'orderNo',
key: 'orderNo',
render: (text, record) => <>
<EyePreview url={`${history.location.pathname}/detail?id=${record.id}`}>
{text}
</EyePreview>
<div>{text}</div>
</>
},
{
title: '采购类型',
align: 'center',
dataIndex: 'type',
key: 'type',
},
{
title: '招标方式',
align: 'center',
dataIndex: 'supplyMembersName',
key: 'supplyMembersName',
},
{
title: '外部状态',
align: 'center',
dataIndex: 'externalState',
key: 'externalState',
render: text => <CustomTag status={text} type='out' />
},
{
title: '内部状态',
align: 'center',
dataIndex: 'interiorState',
key: 'interiorState',
render: (text) => <CustomBadge status={text} type='inside' />
},
]
// 待发中标公示 招标
export const useSelfTable = () => {
const ref = useRef<any>({})
const [rowSelection, rowSelectionCtl] = useRowSelectionTable({customKey: 'id', extendsSelection: {
getCheckboxProps: record => ({
// 不等于可提交审核的 都无法通过批量提交
disabled: record.interiorState !== PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER,
interiorState: record.interiorState,
})
}})
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()
}
const secondColumns: any[] = baseBidListColumns.concat([
{
title: '操作',
align: 'center',
dataIndex: 'ctl',
key: 'ctl',
render: (text, record) => <>
{
record.interiorState === PurchaseOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER &&
<Button type='link' onClick={() => handleSubmit(record)}>审核</Button>
}
</>
}
])
return {
columns: secondColumns,
ref,
rowSelection,
rowSelectionCtl
}
}
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { OrderTypeMap, PurchaseOrderInsideWorkStateTexts, PurchaseOrderOutWorkStateTexts } from '@/constants';
/**
* 除了订单必填字段, 默认
*/
export const tableListSchema: ISchema = {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: '请输入订单编号',
align: 'flex-end',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginLeft: 20
}
},
properties: {
orderThe: {
type: 'string',
'x-component-props': {
placeholder: '请输入订单摘要',
}
},
"supplyMembersName": {
type: 'string',
"x-component-props": {
placeholder: '请输入供应会员名称'
}
},
"type": {
type: 'string',
"x-component-props": {
placeholder: '请选择订单类型'
},
enum: Object.keys(OrderTypeMap).map(item => ({
label: OrderTypeMap[item],
value: item,
}))
},
"[startCreateTime,endCreateTime]": {
type: 'array',
"x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: ['开始时间','结束时间'],
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: '查询',
},
},
},
},
}
}
import React, { useState, useRef, useContext, useEffect } from 'react'
import { Form, Input, Checkbox, Row, Col, InputNumber } from 'antd';
import style from '../../index.less'
/**
* 招标定标表格中 授标的每一项
*/
export interface GivenBidItemProps {
}
export const GivenBidItem:React.FC<GivenBidItemProps> = ({}) => {
const onChangeInput = (v) => {
console.log(v, '改变')
}
const chanegChecked = (e) => {
if(e.target.checked) {
e.nativeEvent.target.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.style.border = '1px solid #00B37A'
e.nativeEvent.target.parentElement.parentElement.nextSibling.style.display = 'inline-block'
} else {
e.nativeEvent.target.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.style.border = 'none'
e.nativeEvent.target.parentElement.parentElement.nextSibling.style.display = 'none'
}
}
return <div className={style.throwBidInfo}>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>含税单价:</p></Col>
<Col><p>¥19.00</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>含税金额:</p></Col>
<Col><p>¥30000</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>是否含税:</p></Col>
<Col><p></p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>税率:</p></Col>
<Col><p>7%</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>授标:</p></Col>
<Col>
<p>
<Checkbox defaultChecked={false} style={{marginRight: 16}} onChange={chanegChecked} />
<InputNumber
defaultValue={100}
min={0}
max={100}
formatter={value => `${value}%`}
parser={value => value.replace('%', '')}
onChange={onChangeInput}
style={{display: 'none'}}
/>
</p>
</Col>
</Row>
</div>
</div>
}
GivenBidItem.defaultProps = {}
export default GivenBidItem
import React, { useState, useRef, useContext, useEffect } from 'react'
import { Form, Input, Divider, Row, Col } from 'antd';
import style from '../../index.less'
/**
* 招标定标表格底部的 合计模块
*/
export interface TotalAmountProps {
}
export const TotalAmount:React.FC<TotalAmountProps> = ({}) => {
return <div className={style.totalWrapper}>
<Row>
<Col span={4}></Col>
<Col span={4}></Col>
<Col span={4}>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>报价小计:</p></Col>
<Col><p>¥156,000.00(含税)</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>报价排名:</p></Col>
<Col><p>1</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>最低标价:</p></Col>
<Col><p>3</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>¥158,000.00(含税)</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>报价排名:</p></Col>
<Col><p>2</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>最低标价:</p></Col>
<Col><p>2</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>¥168,000.00(含税)</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>报价排名:</p></Col>
<Col><p>3</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>最低标价:</p></Col>
<Col><p>0</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>¥176,000.00(含税)</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>报价排名:</p></Col>
<Col><p>4</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>最低标价:</p></Col>
<Col><p>3</p></Col>
</Row>
</div>
</Col>
</Row>
<Divider dashed={true} style={{margin: 0, marginBottom: 8}} />
<Row>
<Col span={4}></Col>
<Col span={4}></Col>
<Col span={4}>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>授标数量:</p></Col>
<Col><p>3</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>授标总额:</p></Col>
<Col><p>¥100,000.00(含税)</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>1</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>授标总额:</p></Col>
<Col><p>¥54,000.00(含税)</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>0</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>授标总额:</p></Col>
<Col><p>0</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>3</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>授标总额:</p></Col>
<Col><p>0</p></Col>
</Row>
</div>
</Col>
</Row>
</div>
}
TotalAmount.defaultProps = {}
export default TotalAmount
.card-list {
font-size: 12px;
// line-height: 20px;
// margin-top: 24px;
// border: 1px solid #F4F5F7;
// padding: 12px;
p {
margin-bottom: 8px;
}
}
.card-list_title {
font-size: 12px;
color: #909399;
}
.bidConfirmWrapper {
:global {
.ant-row {
.ant-col {
.ant-row {
.ant-col-4 {
padding-top: 0;
padding-bottom: 0;
margin-bottom: 2px;
margin-top: 2px;
}
}
}
}
}
background: #F4F5F7;
.bidTableHead {
height: 32px;
line-height: 32px;
background: #F4F5F7;
border: 4px solid #F4F5F7;
color: #303133;
padding-left: 16px;
img {
width: 24px;
height: 24px;
}
.levelCircle {
display: inline-block;
width: 20px;
height: 20px;
line-height: 20px;
background: #EBECF0;
border-radius: 50%;
color: #909399;
margin-right: 8px;
text-align: center;
}
}
.materialInfo, .amountInfo, .throwBidInfo, .totalWrapper {
height: 162px;
background-color: #fff;
padding: 16px;
position: relative;
overflow: hidden;
}
.rankNumber {
width: 32px;
height: 32px;
font-size: 12px;
font-weight: 500;
color: #606266;
line-height: 44px;
border-radius: 50%;
background-color: #F4F5F7;
position: absolute;
top: -16px;
left: -16px;
text-align: right;
padding-right: 6px;
}
}
import React, { useContext, useState } from 'react'
import { Row, Col } from 'antd'
import MellowCard from '@/components/MellowCard'
import { BidDetailContext } from '@/pages/procurement/_public/bid/context';
import style from './index.less'
import level1 from '@/assets/imgs/rank1.png'
import level2 from '@/assets/imgs/rank2.png'
import level3 from '@/assets/imgs/rank3.png'
import TotalAmount from './components/totalAmount';
import GivenBidItem from './components/givenBidItem';
/**
* 招标定标
*/
export interface BidConfirmProps {
cardTitle?: string;
}
const BidConfirm: React.FC<BidConfirmProps> = ({cardTitle}) => {
const bidDetailContext = useContext(BidDetailContext)
const { data, ctl } = bidDetailContext
return (
<MellowCard
title={cardTitle}
style={{marginTop: 24}}
bordered={false}
fullHeight
>
<div className={style.bidConfirmWrapper}>
<Row gutter={[0, 4]}>
<Col span={24}>
<Row>
<Col span={4}><p className={style.bidTableHead}>采购物料</p></Col>
<Col span={4}><p className={style.bidTableHead}>采购数量</p></Col>
<Col span={4}><p className={style.bidTableHead}><img src={level1} alt="排名一"/>广州白马皮具交易中心</p></Col>
<Col span={4}><p className={style.bidTableHead}><img src={level2} alt="排名二"/>东莞绿洲皮具有限公司</p></Col>
<Col span={4}><p className={style.bidTableHead}><img src={level3} alt="排名三"/>江门华飞皮具有限公司</p></Col>
<Col span={4}><p className={style.bidTableHead}><span className={style.levelCircle}>4</span>广州万福皮具有限公司</p></Col>
</Row>
<Row gutter={[0, 4]} style={{margin: '0 4px'}}>
<Col span={4}>
<div className={style.materialInfo}>
<span className={style.rankNumber}>1</span>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>物料编号:</p></Col>
<Col><p>Q89YTE1</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>物料名称:</p></Col>
<Col><p>进口头层牛皮荔枝纹</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>规格型号:</p></Col>
<Col><p>红色/XL/厚1.5mm</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>品类:</p></Col>
<Col><p>牛皮</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>品牌:</p></Col>
<Col><p>PELLE</p></Col>
</Row>
</div>
</div>
</Col>
<Col span={4}>
<div className={style.amountInfo}>
<span>3000</span>
<br />
<span style={{color: "#909399"}}>(次)</span>
</div>
</Col>
<Col span={4}>
<GivenBidItem />
</Col>
<Col span={4}>
<GivenBidItem />
</Col>
<Col span={4}>
<GivenBidItem />
</Col>
<Col span={4}>
<GivenBidItem />
</Col>
</Row>
<Row gutter={[0, 4]} style={{margin: '0 4px'}}>
<Col span={4}>
<div className={style.materialInfo}>
<span className={style.rankNumber}>2</span>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>物料编号:</p></Col>
<Col><p>Q89YTE1</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>物料名称:</p></Col>
<Col><p>进口头层牛皮荔枝纹</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>规格型号:</p></Col>
<Col><p>红色/XL/厚1.5mm</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>品类:</p></Col>
<Col><p>牛皮</p></Col>
</Row>
</div>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>品牌:</p></Col>
<Col><p>PELLE</p></Col>
</Row>
</div>
</div>
</Col>
<Col span={4}>
<div className={style.amountInfo}>
<span>3000</span>
<br />
<span style={{color: "#909399"}}>(次)</span>
</div>
</Col>
<Col span={4}>
<GivenBidItem />
</Col>
<Col span={4}>
<GivenBidItem />
</Col>
<Col span={4}>
<GivenBidItem />
</Col>
<Col span={4}>
<GivenBidItem />
</Col>
</Row>
<Row gutter={[0, 4]} style={{margin: '0 4px'}}>
<Col span={24}>
<TotalAmount />
</Col>
</Row>
</Col>
</Row>
</div>
</MellowCard>)
}
BidConfirm.defaultProps = {}
export default BidConfirm
......@@ -21,6 +21,15 @@
background: #fff;
padding: 24px 24px 0;
:global {
.ant-row {
.ant-col-2 {
.ant-btn {
position: absolute;
top: 0;
right: 0;
}
}
}
.ant-anchor-wrapper {
min-height: auto;
}
......@@ -97,4 +106,15 @@
top: 0;
width: 100%;
z-index: 10;
:global {
.ant-row {
.ant-col-2 {
.ant-btn {
position: fixed;
top: 16px;
right: 16px;
}
}
}
}
}
......@@ -87,7 +87,7 @@ const BidDetailHeader:React.FC<BidDetailHeaderProps> = ({
<Row>
{
<>
<Col span={23}>
<Col span={22}>
<Row align='middle'>
<Col>
<ArrowLeftOutlined onClick={() => backLink ? history.push(backLink) : history.goBack()}/>
......@@ -120,7 +120,7 @@ const BidDetailHeader:React.FC<BidDetailHeaderProps> = ({
</Col>
</Row>
</Col>
<Col span={1}>{ extraRight }</Col>
<Col span={2}>{ extraRight }</Col>
</>
}
</Row>
......
......@@ -8,6 +8,8 @@ import BidMethod from '../bidMethod'
import BidTransformRecord from '../transferRecord'
import BidParticulars from '../bidParticulars'
import RemarkBidReport from '../remarkBidReport'
import ParticipateInfo from '../participateInfo'
import BidConfirm from '../bidConfirm'
export interface BidDetailSectionProps {
formContext: any,
......@@ -47,7 +49,12 @@ const BidDetailSection:React.FC<BidDetailSectionProps> = ({
"BidTransformRecord": BidTransformRecord,
// 中标结果详情组件
"BidParticulars": BidParticulars,
// 评标报告
"RemarkBidReport": RemarkBidReport,
// 会员参标信息
"ParticipateInfo": ParticipateInfo,
// 招标定标
"BidConfirm": BidConfirm,
}
const RenderDetailSection = ({ componentList }) => {
......@@ -103,6 +110,12 @@ const BidDetailSection:React.FC<BidDetailSectionProps> = ({
case "RemarkBidReport":
RcDom = (<RemarkBidReport cardTitle={title} />)
break;
case "ParticipateInfo":
RcDom = (<ParticipateInfo cardTitle={title} />)
break;
case "BidConfirm":
RcDom = (<BidConfirm cardTitle={title} />)
break;
default:
RcDom = (<DescriptionsInfo cardTitle={title} type={type} />)
}
......@@ -113,58 +126,6 @@ const BidDetailSection:React.FC<BidDetailSectionProps> = ({
formContext.data &&
<div className={[style.anchorContentWrap, "anchorContent"].join(' ')}>
<RenderDetailSection componentList={anchorList} />
{/* <div id={anchorList[0]['id']}>
<TransferProcess
cardTitle={anchorList[0]['title']}
customTitleKey='operationalProcess'
customKey='state'
outerVerifyCurrent={findLastIndexFlowState(formContext.data.externalWorkflowFlowRecordLogResponses)}
innerVerifyCurrent={findLastIndexFlowState(formContext.data.interiorWorkflowFlowRecordLogResponses)}
outerVerifySteps={
formContext.data.externalWorkflowFlowRecordLogResponses ?
formContext.data.externalWorkflowFlowRecordLogResponses.map(item => ({
...item,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
innerVerifySteps={
formContext.data.interiorWorkflowFlowRecordLogResponses ?
formContext.data.interiorWorkflowFlowRecordLogResponses.map(item => ({
...item,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
></TransferProcess>
</div>
<div id={anchorList[1]['id']}>
<DescriptionsInfo cardTitle={anchorList[1]['title']} type="basicInfo" />
</div>
<div id={anchorList[2]['id']}>
<BidMaterial cardTitle={anchorList[2]['title']} />
</div>
<div id={anchorList[3]['id']}>
<DescriptionsInfo cardTitle={anchorList[3]['title']} type="bidNeed" />
</div>
<div id={anchorList[4]['id']}>
<DescriptionsInfo cardTitle={anchorList[4]['title']} type="registerNeed" />
</div>
<div id={anchorList[5]['id']}>
<DescriptionsInfo cardTitle={anchorList[5]['title']} type="checkNeed" />
</div>
<div id={anchorList[6]['id']}>
<DescriptionsInfo cardTitle={anchorList[6]['title']} type="remarkNeed" />
</div>
<div id={anchorList[7]['id']}>
<DescriptionsInfo cardTitle={anchorList[7]['title']} type="otherNeed" />
</div>
<div id={anchorList[8]['id']}>
<BidMethod cardTitle={anchorList[8]['title']} />
</div>
<div id={anchorList[9]['id']}>
<BidTransformRecord cardTitle={anchorList[9]['title']} />
</div> */}
</div>
)
......
.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;
}
.participateContent {
border: 1px solid #F4F5F7;
padding: 12px;
margin-bottom: 16px;
border-top: 1px solid #00B37A;
}
.amount {
font-weight: bold;
border-bottom: 1px dashed #EBECF0;
margin-bottom: 0;
padding-bottom: 12px;
span {
color: #909399
}
}
import React, { useContext, useState } from 'react'
import { Table, Button, Radio, Tooltip, Row, Col } from 'antd'
import MellowCard from '@/components/MellowCard'
import { BidDetailContext } from '@/pages/procurement/_public/bid/context';
import { QuestionCircleOutlined, UserOutlined } from '@ant-design/icons';
import style from './index.less'
import CustomTag from '../CustomTag';
/**
* 会员参标信息
*/
export interface ParticipateInfoProps {
cardTitle?: string;
}
const ParticipateInfo: React.FC<ParticipateInfoProps> = ({cardTitle}) => {
const bidDetailContext = useContext(BidDetailContext)
const { data, ctl } = bidDetailContext
const mockData = [
{
company: '广州第三个官方工地公司',
amount: 13516,
isTax: true,
status: 1,
createTime: '2012-12-14 23:35:43',
no: 'HEGF05495',
},
{
company: '广州第三个官方工地公司',
amount: 13516,
isTax: false,
status: 1,
createTime: '2012-12-14 23:35:43',
no: 'HEGF05495',
},
{
company: '广州第三个官方工地公司',
amount: 13516,
isTax: false,
status: 2,
createTime: '2012-12-14 23:35:43',
no: 'HEGF05495',
},
{
company: '广州第三个官方工地公司',
amount: 13516,
isTax: true,
status: 1,
createTime: '2012-12-14 23:35:43',
no: 'HEGF05495',
},
{
company: '广州第三个官方工地公司',
amount: 13516,
isTax: true,
status: 0,
createTime: '2012-12-14 23:35:43',
no: 'HEGF05495',
},
{
company: '广州第三个官方工地公司',
amount: 13516,
isTax: true,
status: 1,
createTime: '2012-12-14 23:35:43',
no: 'HEGF05495',
},
{
company: '广州第三个官方工地公司',
amount: 13516,
isTax: true,
status: 2,
createTime: '2012-12-14 23:35:43',
no: 'HEGF05495',
},
]
return (
<MellowCard
title={cardTitle}
style={{marginTop: 24}}
bordered={false}
fullHeight
>
<div className={style.participateWrapper}>
<Row gutter={[16, 0]}>
{
mockData.map((item, index) => (<Col span={4} key={index}>
<div className={style.participateContent}>
<div className={style.topWrapper}>
<h3>{item.company}</h3>
<p className={style.amount}>{item.amount}<span>{item.isTax ? ' (含税)' : ' (不含税)'}</span></p>
</div>
<div className={style.contentWrapper}>
<Row className={style['card-list']}>
<Col span={8} className={style['card-list_title']}>环节状态:</Col>
<Col>
<CustomTag type="out" status={item.status} />
</Col>
</Row>
<Row className={style['card-list']}>
<Col span={8} className={style['card-list_title']}>投标时间:</Col>
<Col>{item.createTime}</Col>
</Row>
<Row className={style['card-list']}>
<Col span={8} className={style['card-list_title']}>投标单号:</Col>
<Col>{item.no}</Col>
</Row>
</div>
</div>
</Col>
))
}
</Row>
</div>
</MellowCard>)
}
ParticipateInfo.defaultProps = {}
export default ParticipateInfo
......@@ -97,6 +97,9 @@
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before {
background-color: #6B778C;
}
.ant-table-thead > tr > th {
color: #909399;
}
}
}
}
......@@ -240,24 +240,32 @@ const RemarkBidReport: React.FC<RemarkBidReportProps> = ({cardTitle}) => {
<Col span={4}>
<div className={style['card-list']}>
<Row>
<Col span={8}><p className={style['card-list_title']}>招标方式:</p></Col>
<Col><p>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
<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>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
<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>{callForWay === 1 ? '系统匹配' : '公开招标'}</p></Col>
<Col span={8}><p className={style['card-list_title']}>会员:</p></Col>
<Col><p>广州室间隔度过后工地</p></Col>
</Row>
</div>
</Col>
......
......@@ -34,6 +34,17 @@ export const outStatusText = [
"已废标",
]
// 评标中的环节状态
export const remarkProcessStatus = [
"未报名",
"已评标",
"未评标",
"未报名",
"未报价",
"报名审核未通过",
"资格审核未通过",
]
// 招标表格基本列
export const baseBidListColumns: any[] = [
{
......
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