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

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

parents f562200b 9a23825e
......@@ -20,6 +20,10 @@ export interface GaugeProps {
formatter?: (value: string) => string;
// 格式化内容
formatContent?: (value: number) => string;
/**
* 线条宽度
*/
strokeWidth?: number,
}
const defaultFormatter = (val: string): string => {
......@@ -85,6 +89,7 @@ const Gauge: React.FC<GaugeProps> = (props) => {
formatContent = defaultFormatContent,
color = '#2F9CFF',
bgColor = '#F0F2F5',
strokeWidth = 10,
} = props;
const cols = {
value: {
......@@ -128,12 +133,10 @@ const Gauge: React.FC<GaugeProps> = (props) => {
label={{
offset: -24,
formatter,
textStyle,
style: textStyle,
}}
subTickLine={null}
tickLine={{
length: -12,
}}
tickLine={null}
grid={null}
/>
<Point
......@@ -148,7 +151,7 @@ const Gauge: React.FC<GaugeProps> = (props) => {
end={[10, 0.965]}
style={{
stroke: bgColor,
lineWidth: 10,
lineWidth: strokeWidth,
lineDash: null,
}}
/>
......@@ -157,7 +160,7 @@ const Gauge: React.FC<GaugeProps> = (props) => {
end={[data[0].value, 0.965]}
style={{
stroke: color,
lineWidth: 10,
lineWidth: strokeWidth,
lineDash: null,
}}
/>
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 09:54:04
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-02-19 20:33:36
* @LastEditTime: 2021-05-13 16:09:56
* @Description: 换货收货地址
*/
import React, { useEffect } from 'react';
......@@ -26,7 +26,48 @@ export interface Values {
sendAddress: string | undefined,
sendUserName: string | undefined,
sendUserTel: string | undefined,
};
}
interface AddressData {
/**
* id
*/
id?: number;
/**
* 配送方式
*/
deliveryType?: number;
/**
* 收件人名字
*/
name: string,
/**
* 收件人电话号码
*/
phone: string,
/**
* 收件地址
*/
fullAddress: string,
}
interface AddressProps {
value: AddressData,
}
const Address: React.FC<AddressProps> = ({ value }) => (
<div>
<p>{value.name || ''} / {value.phone || ''}</p>
<p>{value.fullAddress || ''}</p>
</div>
);
const ShippingAddress: React.FC<AddressProps> = ({ value }) => (
<div>
<p>{value.name || ''} / {value.phone || ''}</p>
<p>{value.fullAddress || ''}</p>
</div>
);
interface ExchangeAddressInfo extends MellowCardProps {
/**
......@@ -90,7 +131,7 @@ interface ExchangeAddressInfo extends MellowCardProps {
* 提交事件
*/
onFormSubmit: (values: Values) => void;
};
}
const ExchangeAddressInfo: React.FC<ExchangeAddressInfo> = ({
isEdit = false,
......@@ -188,20 +229,6 @@ const ExchangeAddressInfo: React.FC<ExchangeAddressInfo> = ({
});
};
const Address = (
<div>
<p>{deliveryAddress.name || ''} / {deliveryAddress.phone || ''}</p>
<p>{deliveryAddress.fullAddress || ''}</p>
</div>
);
const ShippingAddress = (
<div>
<p>{shippingAddress.name || ''} / {shippingAddress.phone || ''}</p>
<p>{shippingAddress.fullAddress || ''}</p>
</div>
);
return (
<MellowCard
title="换货收货地址"
......@@ -212,12 +239,10 @@ const ExchangeAddressInfo: React.FC<ExchangeAddressInfo> = ({
deliveryType: shippingAddress.deliveryType,
shippingAddress: shippingAddress.id,
pickupAddress: shippingAddress.id,
deliveryAddress,
shippingAddressShow: shippingAddress,
}}
previewPlaceholder=" "
expressionScope={{
Address,
ShippingAddress,
}}
effects={($, { getFieldValue }) => {
useAsyncSelect('*(shippingAddress,pickupAddress)', fetchShipperAddress, ['label', 'value']);
......@@ -285,6 +310,10 @@ const ExchangeAddressInfo: React.FC<ExchangeAddressInfo> = ({
}
});
}}
components={{
Address,
ShippingAddress,
}}
editable={isEdit}
actions={modalFormActions}
schema={schema}
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-09 15:56:35
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-01-21 14:14:26
* @LastEditTime: 2021-05-13 16:18:24
* @Description:
*/
import { ISchema } from '@formily/antd';
......@@ -15,9 +15,10 @@ export const schema: ISchema = {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelCol: 6,
wrapperCol: 16,
labelAlign: 'left',
labelWidth: 106,
labelAlign: 'left',
grid: true,
full: true
},
properties: {
deliveryType: {
......@@ -37,14 +38,6 @@ export const schema: ISchema = {
},
],
},
deliveryAddress: {
type: 'object',
title: '换货收货地址',
'x-component': 'Children',
'x-component-props': {
children: '{{Address}}',
},
},
shippingAddress: {
type: 'string',
title: '换货发货地址',
......@@ -81,14 +74,16 @@ export const schema: ISchema = {
},
],
},
deliveryAddress: {
type: 'object',
title: '换货收货地址',
'x-component': 'Address',
},
shippingAddressShow: {
type: 'object',
title: '换货发货地址',
visible: false,
'x-component': 'Children',
'x-component-props': {
children: '{{ShippingAddress}}',
},
'x-component': 'ShippingAddress',
},
},
},
......
.detailedWrap {
padding: 25px 24px 9px;
margin: 16px 0;
background-color: #F7F8FA;
background-color: #FAFBFC;
}
\ No newline at end of file
.detailedWrap {
padding: 25px 24px 9px;
margin: 16px 0;
background-color: #F7F8FA;
background-color: #FAFBFC;
}
\ No newline at end of file
.file {
:global {
.ant-upload-list-item {
margin-top: 0;
}
}
}
\ No newline at end of file
......@@ -2,16 +2,11 @@
* @Author: XieZhiXiong
* @Date: 2020-11-03 11:49:34
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-05-12 15:10:10
* @LastEditTime: 2021-05-13 15:38:46
* @Description: 附件列表
*/
import React from 'react';
import { Empty } from 'antd';
import {
SchemaForm,
SchemaMarkupField as Field,
} from '@formily/antd';
import { Upload, FormMegaLayout } from '@formily/antd-components';
import { Empty, Descriptions, Upload } from 'antd';
import { FileData } from '@/utils';
import MellowCard, { MellowCardProps } from '@/components/MellowCard';
import styles from './index.less';
......@@ -33,18 +28,27 @@ const FileList: React.FC<FileListProps> = ({
{...rest}
>
{fileList && fileList.length ? (
<SchemaForm
components={{ Upload }}
value={{
files: fileList,
}}
editable={false}
previewPlaceholder=" "
>
<FormMegaLayout full>
<Field name="files" title="相关不良原因举证附件" x-component="Upload" />
</FormMegaLayout>
</SchemaForm>
// <SchemaForm
// components={{ Upload }}
// value={{
// files: fileList,
// }}
// editable={false}
// previewPlaceholder=" "
// >
// <FormMegaLayout full>
// <Field name="files" title="相关不良原因举证附件" x-component="Upload" />
// </FormMegaLayout>
// </SchemaForm>
<Descriptions column={1}>
<Descriptions.Item label="相关不良原因举证附件">
<Upload
className={styles.file}
fileList={fileList}
disabled
/>
</Descriptions.Item>
</Descriptions>
) : (
<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
)}
......
......@@ -30,30 +30,40 @@ export interface Values {
};
interface AddressData {
value: {
/**
* 收件人名字
*/
name: string,
/**
* 收件人电话号码
*/
phone: string,
/**
* 收件地址
*/
fullAddress: string,
}
/**
* id
*/
id?: number;
/**
* 配送方式
*/
deliveryType?: number;
/**
* 收件人名字
*/
name: string,
/**
* 收件人电话号码
*/
phone: string,
/**
* 收件地址
*/
fullAddress: string,
}
interface AddressProps {
value: AddressData,
}
const Address: React.FC<AddressData> = ({ value }) => (
const Address: React.FC<AddressProps> = ({ value }) => (
<div>
<p>{value.name || ''} / {value.phone || ''}</p>
<p>{value.fullAddress || ''}</p>
</div>
);
const DeliveryAddress: React.FC<AddressData> = ({ value }) => (
const DeliveryAddress: React.FC<AddressProps> = ({ value }) => (
<div>
<p>{value.name || ''} / {value.phone || ''}</p>
<p>{value.fullAddress || ''}</p>
......@@ -69,54 +79,12 @@ interface ReturnAddressInfo extends MellowCardProps {
/**
* 退货收货地址
*/
deliveryAddress: {
/**
* id
*/
id?: number;
/**
* 配送方式
*/
deliveryType?: number;
/**
* 收件人姓名
*/
name: string;
/**
* phone
*/
phone: string;
/**
* 完整地址
*/
fullAddress: string;
},
deliveryAddress: AddressData,
/**
* 退货发货地址
*/
shippingAddress: {
/**
* id
*/
id?: number;
/**
* 配送方式
*/
deliveryType?: number;
/**
* 收件人姓名
*/
name: string;
/**
* phone
*/
phone: string;
/**
* 完整地址
*/
fullAddress: string;
},
shippingAddress: AddressData,
/**
* 表单提交事件
......
.detailedWrap {
padding: 25px 24px 9px;
margin: 16px 0;
background-color: #F7F8FA;
background-color: #FAFBFC;
}
\ No newline at end of file
@import '~antd/es/style/themes/default.less';
.evaluate {
.score {
position: absolute;
&-left {
padding-right: 90px;
}
&-right {
position: absolute;
top: -50%;
right: 0;
width: 80px;
flex-shrink: 0;
}
&-star {
font-size: @font-size-lg;
font-weight: 500;
}
}
}
\ No newline at end of file
......@@ -2,12 +2,14 @@
* @Author: XieZhiXiong
* @Date: 2020-11-03 14:12:34
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-02-20 14:28:19
* @LastEditTime: 2021-05-13 15:30:21
* @Description: 评价
*/
import React from 'react';
import { Row, Col, Descriptions } from 'antd';
import MellowCard, { MellowCardProps } from '@/components/MellowCard';
import { Gauge } from '@/components/Charts';
import styles from './index.less';
// 满分 5分
const FULL_SCORE = 5;
......@@ -47,19 +49,46 @@ const Score: React.FC<ScoreProps> = ({
return (
<MellowCard
title="售后评价"
className={styles.evaluate}
{...rest}
>
<Gauge
title={`${score}分`}
height={170}
percent={+(score/FULL_SCORE * 100).toFixed(2)}
formatter={() => ''}
formatContent={(val) => `${TITLE_MAP[score]}`}
color={COLOR_MAP[score]}
/>
<p style={{ color: '#909399' }}>
售后评价: {content}
</p>
<Row gutter={40}>
<Col span={8}>
<div className={styles.score}>
<div className={styles['score-left']}>
<Descriptions column={1}>
<Descriptions.Item
label="售后满意度"
>
<span className={styles['score-star']}>
{`${score}分`}
</span>
</Descriptions.Item>
</Descriptions>
</div>
<div className={styles['score-right']}>
<Gauge
title=""
height={90}
percent={+(score/FULL_SCORE * 100).toFixed(2)}
formatter={() => ''}
formatContent={() => ''}
color={COLOR_MAP[score]}
strokeWidth={5}
/>
</div>
</div>
</Col>
<Col span={16}>
<Descriptions column={1}>
<Descriptions.Item
label="售后评价"
>
{content}
</Descriptions.Item>
</Descriptions>
</Col>
</Row>
</MellowCard>
);
};
......
......@@ -14,20 +14,21 @@ const transforType = {
}
interface BidDetailLayoutProps {
detail?: any
detail?: any,
btnType?: number
}
const BidDetailLayout: React.FC<BidDetailLayoutProps> = (props: any) => {
const { detail } = props;
const { detail, btnType } = props;
const { awardProcess = [], materiels = [] } = detail;
const [showMore, setShowMore] = useState<boolean>(false);
const [activeItem, setActiveItem] = useState<any>(awardProcess[0] || { detailss: [] });
const [activeItem, setActiveItem] = useState<any>(awardProcess?.[0] || { detailss: [] });
const dataSource = showMore ? [...activeItem.detailss].splice(0, 4) : activeItem.detailss;
useEffect(() => {
awardProcess && setActiveItem(awardProcess[0] || { detailss: [] })
},[awardProcess])
awardProcess && setActiveItem(awardProcess?.[0] || { detailss: [] })
}, [detail])
const columns: ColumnType<any>[] = [
{
......@@ -59,7 +60,7 @@ const BidDetailLayout: React.FC<BidDetailLayoutProps> = (props: any) => {
render: (text: any, record: any) => (
<Space direction='vertical'>
<Text type='secondary'>{transforType[text]}</Text>
<Text type='secondary'>{record.taxRate}</Text>
<Text type='secondary'>{`${record.taxRate ? `${record.taxRate}%` : ''}`}</Text>
</Space>
)
},
......@@ -93,17 +94,21 @@ const BidDetailLayout: React.FC<BidDetailLayoutProps> = (props: any) => {
{awardProcess?.map((item, index) => {
return (
<Col span={7} key={item.id} onClick={() => { chooseItem(item) }}>
<BtnItem detail={item} active={item.id === activeItem.id} />
<BtnItem btnType={btnType} detail={item} active={item.id === activeItem.id} />
</Col>
)
})}
</Row>
<Table dataSource={dataSource} columns={columns} pagination={false} />
{!showMore && dataSource.length >4 && <Button type="link" block onClick={() => { setShowMore(true) }}>显示更多</Button>}
{!showMore && dataSource.length > 4 && <Button type="link" block onClick={() => { setShowMore(true) }}>显示更多</Button>}
</Card>
</div>
)
}
BidDetailLayout.defaultProps = {
btnType: 1
}
export default BidDetailLayout
\ No newline at end of file
import React, { useRef, useState } from 'react';
import { Row, Col, Table, Button, Typography, Space } from 'antd';
import { StandardTable } from 'god';
import Card from '../../../card';
import EyePreview from '@/components/EyePreview';
import selfStyles from './index.less';
const { Text } = Typography;
const transforType = {
1: '是',
0: '否'
}
export interface TableCommonLayoutProps {
layoutId?: string,
layoutTitle?: string,
......@@ -21,43 +30,46 @@ const LowestQuotationRecord: React.FC<TableCommonLayoutProps> = (props: any) =>
const columns = [
{
title: '物料编号/名称',
key: 'number',
dataIndex: 'number',
render: (text: any, record: any) => (
<Space direction='vertical'>
<Text type='secondary'>{text}</Text>
<Text type='secondary'>{record.name}</Text>
</Space>
)
},
{
title: '规格型号',
key: 'model',
dataIndex: 'model',
},
{
title: '品类',
key: 'category',
dataIndex: 'category',
},
{
title: '品牌',
key: 'brand',
dataIndex: 'brand',
},
{ title: '规格型号', dataIndex: 'model', },
{ title: '品类', dataIndex: 'category', },
{ title: '品牌', dataIndex: 'brand', },
{
title: '采购数量/单位',
key: 'unit',
dataIndex: 'unit',
render: (text: any, record: any) => (
<Space direction='vertical'>
<Text type='secondary'>{record.purchaseCount}</Text>
<Text type='secondary'>{text}</Text>
</Space>
)
},
{
title: '含税/税率',
key: 'purchaseCount',
dataIndex: 'purchaseCount',
render: (text: any, record: any) => (
<Space direction='vertical'>
<Text type='secondary'>{transforType[text]}</Text>
<Text type='secondary'>{`${record.taxRate ? `${record.taxRate}%` : ''}`}</Text>
</Space>
)
},
{
title: '单价(含税)',
key: 'purchaseCount',
dataIndex: 'purchaseCount',
render: (text: any, record: any) => <Text type='secondary'>¥{text}</Text>
},
{
title: '金额(含税)',
key: 'purchaseCount',
dataIndex: 'purchaseCount',
render: (text: any, record: any) => <Text type='secondary'>¥{text}</Text>
},
];
......
......@@ -284,10 +284,12 @@ const SearchDetail = () => {
const _returnLowestQuotationRecordLayout = () => {
return (
<LowestQuotationRecordLayout
id={id}
number={number}
layoutId='quotationRecordLayout'
layoutTitle='最低报价记录'
fetch={PublicApi.getPurchaseOnlineBiddingMinimumBidding}
extra={<Button type='link' onClick={() => {setProgressVisible(false)}}>查看竞价过程</Button>}
extra={<Button type='link' onClick={() => {setProgressVisible(true)}}>查看竞价过程</Button>}
/>
)
}
......
......@@ -68,7 +68,7 @@ const Detail = () => {
</Col>
</Row>
<Row>
<BidDetailLayout detail={dataSource} />
<BidDetailLayout detail={dataSource} btnType={2} />
</Row>
</div>
</div>
......
......@@ -52,8 +52,7 @@ const SubmitResultModal:React.FC<SubmitResultModalProps> = (props: any) => {
const formSubmit = () => {
form.validateFields().then(res => {
onOk && onOk();
onCancel && onCancel();
onOk && onOk(res.opinion,files);
})
}
......
......@@ -45,11 +45,11 @@ const RankItem: React.FC<RankItemProps> = (props: any) => {
</div>
<Tabs defaultActiveKey="1">
<TabPane tab="报价排名" key="1">
{queryPriceDynamicsData?.map((item, index) => <RankRow detail={item} key={item.id} />)}
{queryPriceDynamicsData?.map((item, index) => <RankRow detail={item} key={`queryPriceDynamicsData_${item.id}`} />)}
<Button type="link" block onClick={() => { setShowMoreQuery(true) }}>显示更多</Button>
</TabPane>
<TabPane tab="报名会员" key="2">
{signupMembersData?.map((item, index) => <RankRow detail={item} key={item.id} rowType={2} />)}
{signupMembersData?.map((item, index) => <RankRow detail={item} key={`signupMembersData_${item.id}`} rowType={2} />)}
<Button type="link" block onClick={() => { setShowMoreSign(true) }}>显示更多</Button>
</TabPane>
</Tabs>
......
import React, { useState, useEffect } from 'react';
import React, { useState, useEffect, useMemo } from 'react';
import { history } from 'umi';
import { Row, Col, Input, Drawer, Table, Space, Typography } from 'antd';
import { ColumnType } from 'antd/lib/table/interface';
......@@ -23,8 +23,11 @@ const DetailBottomDrawer: React.FC<DetailBottomDrawerProps> = (props: any) => {
const [dataSource, setDataSource] = useState<any>(materiels);
const [dataSource2, setDataSource2] = useState<any>(materiels);
useEffect(() => {
setDataSource(materiels)
}, [materiels])
if (visible) {
setDataSource(materiels)
setDataSource2(materiels);
}
}, [visible])
const columns: ColumnType<any>[] = [
{
title: '物料编号/名称',
......@@ -69,7 +72,9 @@ const DetailBottomDrawer: React.FC<DetailBottomDrawerProps> = (props: any) => {
const _changeTax = (record: any, value: any) => {
let _dataSource = [...dataSource2];
const _i = _dataSource.findIndex((item) => item.id === record.id);
_dataSource[_i].taxRate = value;
let _item = { ..._dataSource[_i] };
_item.taxRate = value;
_dataSource[_i] = _item;
setDataSource(_dataSource);
setDataSource2(_dataSource)
}
......@@ -77,19 +82,21 @@ const DetailBottomDrawer: React.FC<DetailBottomDrawerProps> = (props: any) => {
const _changeUnitPrice = (record: any, value: any) => {
let _dataSource = [...dataSource2];
const _i = _dataSource.findIndex((item) => item.id === record.id);
_dataSource[_i].unitPrice = value;
_dataSource[_i].price = _calcTotal(value, _dataSource[_i].purchaseCount);
setDataSource2(_dataSource)
let _item = { ..._dataSource[_i] };
_item.unitPrice = value;
_item.price = _calcTotal(value, _dataSource[_i].purchaseCount);
_dataSource[_i] = _item;
setDataSource(_dataSource);
setDataSource2(_dataSource)
}
const _calcTotal = (price: any, purchaseCount: any) => {
return Number(price) * Number(purchaseCount) || 0;
}
const _calcCurrentTotal = () => {
return dataSource2?.reduce((total, cur) => total + cur.price, 0) || 0;
}
const _calcCurrentTotal = useMemo(() => {
return dataSource2?.reduce((total, cur) => total + (cur.price || 0), 0) || 0;
}, [dataSource2])
const chooseItem = (item?: any) => {
if (item) {
......@@ -127,12 +134,12 @@ const DetailBottomDrawer: React.FC<DetailBottomDrawerProps> = (props: any) => {
closeIcon={<div>取消报价</div>}
>
<Row gutter={[8, 8]} style={{ marginBottom: '10px' }}>
<Col span={7} onClick={() => { chooseItem() }}>
<BtnItem btnType={3} detail={{ sumPice: _calcCurrentTotal(), peportPriceSum: 1 }} active={!activeItem} onOk={bidOk} onCancle={onClose} />
<Col span={7} key={'BtnItem_0'} onClick={() => { chooseItem() }}>
<BtnItem btnType={3} detail={{ sumPice: _calcCurrentTotal, peportPriceSum: dataSource.length + 1 }} active={!activeItem} onOk={bidOk} onCancle={onClose} />
</Col>
{awardProcess?.map((item, index) => {
return (
<Col span={7} key={item.id} onClick={() => { chooseItem(item) }}>
<Col span={7} key={`BtnItem_${item.id}`} onClick={() => { chooseItem(item) }}>
<BtnItem btnType={2} detail={item} active={item.id === activeItem.id} />
</Col>
)
......
import React, { useState } from 'react';
import { Row, Col, Button, Divider } from 'antd';
import { Row, Col, Button, Divider,message } from 'antd';
import { PlusOutlined } from '@ant-design/icons';
import useCountDown from '@/hooks/useCountDown';
......@@ -22,12 +22,21 @@ const StatuBox: React.FC<StatuBoxProps> = (props: any) => {
const { hasBidBtn, detail } = props;
const [hour, minute, second, stillRun] = useCountDown(detail?.biddingEndTime / 1000);
const [visible, setVisible] = useState<boolean>(false);
const _handleBid = () => {
if(detail.allowPurchaseCount > detail.offerCount){
setVisible(true)
}else{
message.error('当前报价次数已超过允许报价次数!');
}
}
return (
<>
<div className='ant-card ant-card-bordered'>
<div className='ant-card-body'>
<div className={styles.statusBox}>
<div className={styles.statusBoxStatus}>当前状态:<span>竞价中</span></div>
<div className={styles.statusBoxStatus}>当前状态:<span>{stillRun ? `竞价中` : '竞价结束'}</span></div>
<p className={styles.statusBoxTips}>距离竞价结束还剩</p>
<div className={styles.statusBoxTime}>
<div className={styles.statusBoxTimeChild}>
......@@ -54,7 +63,7 @@ const StatuBox: React.FC<StatuBoxProps> = (props: any) => {
<div className={styles.statusBoxText}><div>允许报价次数:</div>{detail?.allowPurchaseCount}</div>
<div className={styles.statusBoxText}><div>报价排名:</div>按项目总价排名</div>
{hasBidBtn ? (
<Button type="primary" icon={<PlusOutlined />} block onClick={() => { setVisible(true) }} size={'large'} style={{ margin: '15px 0' }}>我要报价</Button>
<Button disabled={!stillRun} type="primary" icon={<PlusOutlined />} block onClick={_handleBid} size={'large'} style={{ margin: '15px 0' }}>我要报价</Button>
) : (
<>
<div className={styles.statusBoxText}><div>公开最低报价:</div>{transforType[detail?.isOpenPurchase]}</div>
......
......@@ -27,6 +27,7 @@ const Management = () => {
const [dynamic, setDynamic] = useState<any>({});
const [queryPriceDynamics, setQueryPriceDynamics] = useState<any>([]);
const [signupMembers, setSignupMembers] = useState<any>([]);
const [awardProcess, setAwardProcess] = useState<any>([]);
const fetchDataSource = async () => {
const params = {
......@@ -75,6 +76,14 @@ const Management = () => {
const { data } = res;
setSignupMembers(data);
})
PublicApi.getPurchaseBiddingBiddingMateriel({ ..._params }).then(res => {
if (res.code !== 1000) {
history.goBack();
return;
}
const { data } = res;
setAwardProcess(data);
})
}
useEffect(() => {
......@@ -102,7 +111,7 @@ const Management = () => {
</Col>
</Row>
<Row>
<BidDetailLayout detail={dataSource} />
<BidDetailLayout detail={{awardProcess : awardProcess}} />
</Row>
</Col>
</Row>
......
......@@ -45,7 +45,7 @@ const ReadyConfirm = () => {
key: 'createMemberName',
dataIndex: 'createMemberName',
render: (text: any, record: any) => (
<EyePreview url={`/memberCenter/procurementAbility/offter/addOffter/view?id=${record.id}&number=${text}`}>{text}</EyePreview>
<EyePreview url={`/shop?shopId=${btoa(JSON.stringify({ shopId: record.memberShopId, memberId: record.memberId }))}`}>{text}</EyePreview>
)
}, {
title: '竞价开始/结束时间',
......
......@@ -39,7 +39,7 @@ const ReadyExamineResultOne = () => {
key: 'createMemberId',
dataIndex: 'createMemberId',
render: (text: any, record: any) => (
<EyePreview url={`/memberCenter/procurementAbility/offter/addOffter/view?id=${record.id}&number=${text}`}>{record.createMemberName}</EyePreview>
<EyePreview url={`/shop?shopId=${btoa(JSON.stringify({ shopId: record.memberShopId, memberId: record.memberId }))}`}>{record.createMemberName}</EyePreview>
)
}, {
title: '竞价开始/结束时间',
......
......@@ -40,7 +40,7 @@ const ReadyExamineResultTwo = () => {
key: 'createMemberId',
dataIndex: 'createMemberId',
render: (text: any, record: any) => (
<EyePreview url={`/memberCenter/procurementAbility/offter/addOffter/view?id=${record.id}&number=${text}`}>{record.createMemberName}</EyePreview>
<EyePreview url={`/shop?shopId=${btoa(JSON.stringify({ shopId: record.memberShopId, memberId: record.memberId }))}`}>{record.createMemberName}</EyePreview>
)
}, {
title: '竞价开始/结束时间',
......
......@@ -45,7 +45,7 @@ const ReadyExamineSignUp = () => {
dataIndex: 'signUpTime',
render: (text: any, record: any) => (
<Space direction='vertical'>
<EyePreview url={`/memberCenter/procurementAbility/offter/addOffter/view?id=${record.id}&number=${record.biddingNo}`}>{record.createMemberName}</EyePreview>
<EyePreview url={`/shop?shopId=${btoa(JSON.stringify({ shopId: record.memberShopId, memberId: record.memberId }))}`}>{record.createMemberName}</EyePreview>
<Text type='secondary'>{formatTimeString(record.signUpTime)}</Text>
</Space>
)
......
......@@ -40,7 +40,7 @@ const ReadySubmitExamineResult = () => {
key: 'createMemberName',
dataIndex: 'createMemberName',
render: (text: any, record: any) => (
<EyePreview url={`/memberCenter/procurementAbility/offter/addOffter/view?id=${record.id}&number=${record.biddingNo}`}>{text}</EyePreview>
<EyePreview url={`/shop?shopId=${btoa(JSON.stringify({ shopId: record.memberShopId, memberId: record.memberId }))}`}>{text}</EyePreview>
)
}, {
title: '竞价开始/结束时间',
......@@ -77,53 +77,41 @@ const ReadySubmitExamineResult = () => {
</>
}];
/** 批量审核 */
const fetchSubmitBatch = async (id?: number) => {
let res = null;
if (id) {
res = await PublicApi.postPurchaseQuotedPriceSubmit({ id });
} else {
res = await PublicApi.postPurchaseQuotedPriceSubmitBatch({ ids: rowkeys });
}
if (res.code === 1000) {
ref.current.reload();
setRowKeys([])
}
}
const handleSubmit = (id: number) => {
setId(id);
setVisible(true);
}
const _handleBiddingReturn = (signUpIdea: string, urls: any) => {
const _params = {
biddingId: id,
signUpIdea,
urls
}
console.log(_params)
PublicApi.postPurchaseBiddingSubmitExamineBiddingReturn(_params).then(res => {
if (res.code === 1000) {
setVisible(false);
ref.current.reload();
}
})
}
return (
<>
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
schemaType="PURCHASEBIDOSIGNUP_SCHEMA"
columns={columns}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingStaySubmitBiddingList}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量提交
</Button>
</Space>
</Col>
</Row>
}
/>
<SubmitResultModal
title={'提交竞价结果'}
visible={visible}
onOk={_handleBiddingReturn}
onCancel={() => { setVisible(false) }}
/>
</>
......
......@@ -34,17 +34,17 @@ const transforType = {
const TABLINK = [
{ id: 'progressLayout', title: '流转进度' },
{ id: 'bidResultLayout', title: '竞价结果', include: ['search', 'readyAdd','readyBid'] },
{ id: 'bidResultLayout', title: '竞价结果', include: ['search', 'readyAdd', 'readyBid'] },
{ id: 'basicLayout', title: '基本信息' },
{ id: 'materialLayout', title: '采购物料', include: ['search', 'readyAdd', 'readyExamineOne', 'readyExamineTwo', 'readySubmit','readySubmitExamineResult','readyBid','readyExamineResultOne','readyExamineResultTwo','readyConfirm'] },
{ id: 'bidRulesLayout', title: '竞价规则', include: ['search', 'readyAdd', 'readyExamineOne', 'readyExamineTwo', 'readySubmit','readySubmitExamineResult','readyBid','readyExamineResultOne','readyExamineResultTwo','readyConfirm'] },
{ id: 'signUpLayout', title: '报名要求', include: ['search', 'readyAdd', 'readyExamineOne', 'readyExamineTwo', 'readySubmit', 'readyExamineSignUp','readySubmitExamineResult','readyBid','readyExamineResultOne','readyExamineResultTwo','readyConfirm'] },
{ id: 'signUpMsgLayout', title: '报名信息', include: ['search', 'readyAdd', 'readyExamineSignUp','readySubmitExamineResult','readyBid','readyExamineResultOne','readyExamineResultTwo','readyConfirm'] },
{ id: 'materialLayout', title: '采购物料', include: ['search', 'readyAdd', 'readyExamineOne', 'readyExamineTwo', 'readySubmit', 'readySubmitExamineResult', 'readyBid', 'readyExamineResultOne', 'readyExamineResultTwo', 'readyConfirm'] },
{ id: 'bidRulesLayout', title: '竞价规则', include: ['search', 'readyAdd', 'readyExamineOne', 'readyExamineTwo', 'readySubmit', 'readySubmitExamineResult', 'readyBid', 'readyExamineResultOne', 'readyExamineResultTwo', 'readyConfirm'] },
{ id: 'signUpLayout', title: '报名要求', include: ['search', 'readyAdd', 'readyExamineOne', 'readyExamineTwo', 'readySubmit', 'readyExamineSignUp', 'readySubmitExamineResult', 'readyBid', 'readyExamineResultOne', 'readyExamineResultTwo', 'readyConfirm'] },
{ id: 'signUpMsgLayout', title: '报名信息', include: ['search', 'readyAdd', 'readyExamineSignUp', 'readySubmitExamineResult', 'readyBid', 'readyExamineResultOne', 'readyExamineResultTwo', 'readyConfirm'] },
{ id: 'signUpFileLayout', title: '报名文件', include: ['readyExamineSignUp'] },
{ id: 'conditionLayout', title: '交易条件', include: ['search', 'readyAdd', 'readyExamineOne', 'readyExamineTwo', 'readySubmit','readySubmitExamineResult','readyBid','readyExamineResultOne','readyExamineResultTwo','readyConfirm'] },
{ id: 'fileLayout', title: '附件', include: ['search', 'readyAdd','readySubmitExamineResult','readyBid','readyExamineResultOne','readyExamineResultTwo','readyConfirm'] },
{ id: 'demandLayout', title: '需求对接', include: ['search', 'readyAdd','readyBid'] },
{ id: 'resultLayout', title: '授标结果', include: ['search', 'readyAdd', 'readyExamineOne', 'readyExamineTwo', 'readySubmit','readySubmitExamineResult','readyBid','readyExamineResultOne','readyExamineResultTwo','readyConfirm'] },
{ id: 'conditionLayout', title: '交易条件', include: ['search', 'readyAdd', 'readyExamineOne', 'readyExamineTwo', 'readySubmit', 'readySubmitExamineResult', 'readyBid', 'readyExamineResultOne', 'readyExamineResultTwo', 'readyConfirm'] },
{ id: 'fileLayout', title: '附件', include: ['search', 'readyAdd', 'readySubmitExamineResult', 'readyBid', 'readyExamineResultOne', 'readyExamineResultTwo', 'readyConfirm'] },
{ id: 'demandLayout', title: '需求对接', include: ['search', 'readyAdd', 'readyBid'] },
{ id: 'resultLayout', title: '授标结果', include: ['search', 'readyAdd', 'readyExamineOne', 'readyExamineTwo', 'readySubmit', 'readySubmitExamineResult', 'readyBid', 'readyExamineResultOne', 'readyExamineResultTwo', 'readyConfirm'] },
{ id: 'recordLyout', title: '流转记录' },
]
......@@ -236,7 +236,7 @@ const SearchDetail = () => {
pageSize: '1'
}
const _fetch = pathPci === 'readySubmitExaminResult' ? PublicApi.getPurchaseBiddingStaySubmitDetails : PublicApi.getPurchaseBiddingDetails
const _fetch = pathPci === 'readySubmitExaminResult' ? PublicApi.getPurchaseBiddingStaySubmitDetails : PublicApi.getPurchaseBiddingDetails
await _fetch({ ...params }).then(res => {
if (res.code !== 1000) {
......@@ -434,9 +434,9 @@ const SearchDetail = () => {
case 'readyConfirm':
return (<BidCommonLayout layoutId="signUpMsgLayout" title="报名信息" layoutType='msg' effect={dataSource.sginUpInfos || []} />)
case 'readyExamineSignUp':
let _data : any = {};
for(let key in dataSource.sginUpInfos){
if(dataSource.sginUpInfos[key].id = signUpId){
let _data: any = {};
for (let key in dataSource.sginUpInfos) {
if (dataSource.sginUpInfos[key].id = signUpId) {
_data = dataSource.sginUpInfos[key];
}
}
......@@ -560,13 +560,27 @@ const SearchDetail = () => {
layoutType='result'
checkDetailFunc={_openQuotationDetailsDrawer}
effect={awardResult}
extra={<Button type='link' onClick={() => {setProgressVisible(true)}}>查看竞价过程</Button>} />
extra={<Button type='link' onClick={() => { setProgressVisible(true) }}>查看竞价过程</Button>} />
)
default:
return null;
}
}
const _handleBiddingReturn = (signUpIdea: string, urls: any) => {
const _params = {
biddingId: id,
signUpIdea,
urls
}
console.log(_params)
PublicApi.postPurchaseBiddingSubmitExamineBiddingReturn(_params).then(res => {
if(res.code === 1000){
history.goBack()
}
})
}
return (
<Context.Provider value={dataSource}>
<PeripheralLayout
......@@ -610,6 +624,7 @@ const SearchDetail = () => {
<SubmitResultModal
title="提交竞价结果"
visible={uploadBidResultVisible}
onOk={_handleBiddingReturn}
onCancel={() => setUploadBidResultVisible(false)}
/>
<QuotationDetailsDrawer
......@@ -621,7 +636,7 @@ const SearchDetail = () => {
visible={quotationDetailsVisible}
onClose={() => setQuotationDetailsVisible(false)}
/>
<BidProgressDrawer
<BidProgressDrawer
effects='id'
title="竞价过程"
visible={progressVisible}
......
......@@ -94,7 +94,7 @@ export const PURCHASEBIDORDER_SCHEMA: ISchema = {
}
}
/** 采购竞价 - 待新增采购竞价单&待审核(一级)&待审核(二级)&待审核结果(一级)&待审核结果(二级)&待提交&待提交审核结果 */
/** 采购竞价 - 待新增采购竞价单&待审核(一级)&待审核(二级)&待审核结果(一级)&待审核结果(二级)&待提交审核结果 */
export const PURCHASEBIDREADYADD_SCHEMA: ISchema = {
type: 'object',
properties: {
......@@ -132,7 +132,7 @@ export const PURCHASEBIDREADYADD_SCHEMA: ISchema = {
flexWrap: 'nowrap'
},
colStyle: {
marginLeft: 20
marginRight: 16
}
},
properties: {
......@@ -175,7 +175,7 @@ export const PURCHASEBIDREADYADD_SCHEMA: ISchema = {
}
}
/** 采购竞价 - 待审核竞价报名&待确认&待审核报名 */
/** 采购竞价 - 待审核竞价报名&待确认&待审核报名&待提交 */
export const PURCHASEBIDOSIGNUP_SCHEMA: ISchema = {
type: 'object',
properties: {
......
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