Commit 64dd5050 authored by 前端-黄佳鑫's avatar 前端-黄佳鑫

🐞fix: 修复采购报价Bug

parent 9e24e282
......@@ -5,6 +5,8 @@ import Card from '../../../card';
import { PublicApi } from '@/services/api';
import style from './index.less';
import { CaretDownOutlined, CaretRightOutlined } from '@ant-design/icons';
import CrossSellProducts from '@/pages/transaction/purchaseAbility/offter/addOffter/modal/crossSellProducts';
import { truncate } from 'lodash';
export type effectType = {
/** 报价轮次 */
......@@ -34,7 +36,9 @@ const BidInfoLayout: React.FC<BidInfoProps> = (props: any) => {
const context = useContext(Context);
const [dataSource, setDataSource] = useState<any>([]);
const [turn, setTurn] = useState<Array<number>>([]);
const [totalAmount, setTotalAmount] = useState<number>(0)
const [totalAmount, setTotalAmount] = useState<number>(0);
const [visible, setVisible] = useState<boolean>(false);
const [product, setProduct] = useState<any>({});
/** 轮次 */
const handleTurn = (num: number) => {
......@@ -143,6 +147,14 @@ const BidInfoLayout: React.FC<BidInfoProps> = (props: any) => {
return arr[num]
}
const handleCheck = (item: any) => {
setVisible(true)
setProduct({
...item,
customerCategoryName: splitProductAttributeJson(item.productAttributeJson, 1),
})
}
return (
<Card
id='bidInfoLayout'
......@@ -186,7 +198,7 @@ const BidInfoLayout: React.FC<BidInfoProps> = (props: any) => {
<div
className={style.childrenContent}
>
<Button type='link'>查看</Button>
<Button type='link' onClick={() => handleCheck(record)}>查看</Button>
</div>
</Col>
</Row>
......@@ -205,6 +217,12 @@ const BidInfoLayout: React.FC<BidInfoProps> = (props: any) => {
</Tabs.TabPane>
))}
</Tabs>
<CrossSellProducts
preview
visible={visible}
record={product}
onClose={() => setVisible(false)}
/>
</Card>
)
}
......
......@@ -323,7 +323,7 @@ const ContrastLyout: React.FC<ContrastProps> = (props: any) => {
{context.urls && context.urls.map((item, index) => (
<p key={`urls_${index + 1}`} className={style['card-list_file']}>
<FilePdfOutlined className={style[`card-list_fileicon`]} />
<Typography.Link href={item.url}>{item.name}</Typography.Link>
<Typography.Link href={item.url} target="_blank">{item.name}</Typography.Link>
</p>
))}
</Col>
......
......@@ -321,7 +321,7 @@ const ContrastLyout1: React.FC<IProps> = (props: any) => {
{context.urls && context.urls.map((item, index) => (
<p key={`urls_${index + 1}`} className={style['card-list_file']}>
<FilePdfOutlined className={style[`card-list_fileicon`]} />
<Typography.Link href={item.url}>{item.name}</Typography.Link>
<Typography.Link href={item.url} target="_blank">{item.name}</Typography.Link>
</p>
))}
</Col>
......
......@@ -65,6 +65,27 @@ const OfferInfo: React.FC<IProps> = (props: any) => {
}
setTabs(tabs.reverse())
}
/** 查看 */
const handleCheck = (item: any) => {
setVisible(true)
setRecord({
...item,
customerCategoryName: splitProductAttributeJson(item.productAttributeJson, 1),
})
}
/** 关联 */
const handleRel = (item: any) => {
setVisible(true)
if (item.productAttributeJson) {
setRecord({
...item,
customerCategoryName: splitProductAttributeJson(item.productAttributeJson, 1),
})
return
}
setRecord(item)
}
const columns = [
{
title: '物料编号/名称',
......@@ -171,7 +192,7 @@ const OfferInfo: React.FC<IProps> = (props: any) => {
type='link'
onClick={() => {
setIndex(index);
setRecord(record);
count !== tabs[0] ? handleCheck(record) : handleRel(record);
setVisible(true);
}}
>
......@@ -379,6 +400,8 @@ const OfferInfo: React.FC<IProps> = (props: any) => {
}}
/>
<CrossSellProducts
rel={count === tabs[0] ? true : false}
preview={count !== tabs[0] ? true : false}
visible={visible}
record={record}
onClose={() => setVisible(false)}
......
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import {
Drawer,
Anchor,
......@@ -21,9 +21,9 @@ import { UPLOAD_TYPE } from '@/constants'
const { Sider, Content } = Layout;
const { Text } = Typography;
const { Link } = Anchor;
const { SubMenu } = Menu;
export interface IProps {
rel?: boolean,
preview?: boolean,
visible: boolean,
record: any,
onClose?: () => void,
......@@ -38,6 +38,8 @@ const layout: any = {
const CrossSellProducts: React.FC<IProps> = (props: any) => {
const {
rel,
preview,
visible,
record,
onClose,
......@@ -48,10 +50,16 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
const [attribute, setAttribute] = useState<any>([]);
const [files, setFiles] = useState([]);
const [loading, setloading] = useState(false);
const [productId, setProductId] = useState<number>(0)
const handleAnchorClick = (e) => {
e.preventDefault()
};
const resetValue = () => {
setProduct({});
setAttribute([])
}
/**报价商品属性 */
const GetCommodityAttribute = (id) => {
PublicApi.getProductCommodityGetCommodityAttributeByUnitPriceAndPicId({ unitPriceAndPicId: id }).then(res => {
......@@ -72,6 +80,7 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
/** 关闭 */
const handleClose = () => {
onClose()
resetValue()
}
/** 确定 */
const handleConfirm = () => {
......@@ -80,9 +89,9 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
attribute,
files,
})
resetValue()
}
/**判断文件类型和大小 */
const beforeDocUpload = (file: any) => {
const isLt20M = file.size / 1024 / 1024 < 20;
......@@ -114,6 +123,31 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
setFiles(arr);
}
useEffect(() => {
if (preview && Object.keys(record).length > 0) {
setProduct({
name: record.productName,
brandName: record.productBrand,
customerCategoryName: record.customerCategoryName
})
GetCommodityAttribute(record.productId);
}
}, [preview, record])
useEffect(() => {
if (rel && Object.keys(record).length > 0) {
setProduct({
productId: record.productId,
name: record.productName,
brandName: record.productBrand,
customerCategoryName: record.customerCategoryName
})
if (record.productId) {
GetCommodityAttribute(record.productId);
}
}
}, [rel, record])
return (
<>
<Drawer
......@@ -123,19 +157,25 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
className={style.drawer}
visible={visible}
onClose={handleClose}
destroyOnClose
footer={
<div
style={{
textAlign: 'right',
}}
>
<Button onClick={handleClose} style={{ marginRight: 8 }}>
取消
</Button>
<Button onClick={handleConfirm} type="primary">
确定
</Button>
</div>
<>
{!preview && (
<div
style={{
textAlign: 'right',
}}
>
<Button onClick={handleClose} style={{ marginRight: 8 }}>
取消
</Button>
<Button onClick={handleConfirm} type="primary">
确定
</Button>
</div>
)}
</>
}
>
<Layout>
......@@ -240,10 +280,12 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
</div>
</>
)}
<Button onClick={() => setFlag(true)} block type="dashed" style={{ margin: '16px 0px' }}>
<PlusSquareOutlined />
选择商品
</Button>
{!preview && (
<Button onClick={() => { setFlag(true); setProductId(product.productId); console.log(product) }} block type="dashed" style={{ margin: '16px 0px' }}>
<PlusSquareOutlined />
选择商品
</Button>
)}
</div>
</div>
</div>
......@@ -327,17 +369,19 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
</div>
))}
</div>
<Upload
action="/api/file/file/upload"
data={{ fileType: UPLOAD_TYPE }}
showUploadList={false}
accept='.doc,.docx,.pdf,.ppt,.pptx,.xls,.xlsx'
beforeUpload={beforeDocUpload}
onChange={handleChange}
>
<Button loading={loading} icon={<UploadOutlined />}>上传文件</Button>
<div style={{ marginTop: '8px' }}>一次上传一个文件,每个附件大小不能超过 20M</div>
</Upload>
{!preview && (
<Upload
action="/api/file/file/upload"
data={{ fileType: UPLOAD_TYPE }}
showUploadList={false}
accept='.doc,.docx,.pdf,.ppt,.pptx,.xls,.xlsx'
beforeUpload={beforeDocUpload}
onChange={handleChange}
>
<Button loading={loading} icon={<UploadOutlined />}>上传文件</Button>
<div style={{ marginTop: '8px' }}>一次上传一个文件,每个附件大小不能超过 20M</div>
</Upload>
)}
</Form.Item>
</div>
</Form>
......@@ -345,6 +389,7 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
</Layout>
</Drawer>
<SelectProduct
id={productId}
visible={flag}
onclose={() => setFlag(false)}
confirm={handleSelectPrduct}
......
import React, { useRef } from 'react';
import React, { useEffect, useRef } from 'react';
import {
Drawer,
Button
......@@ -20,6 +20,7 @@ import { ISchema} from '@formily/antd';
const formActions = createFormActions();
interface Iprops {
id?: number,
visible: boolean,
onclose?(),
confirm?(e: any),
......@@ -27,7 +28,7 @@ interface Iprops {
const SelectProduct: React.FC<Iprops> = (props: any) => {
const ref = useRef<any>({});
const { visible, onclose, confirm } = props;
const { id, visible, onclose, confirm } = props;
const [rowSelection, RowCtl] = useRowSelectionTable({ customKey: 'id', type: 'radio' });
const columns: ColumnType<any>[] = [
{
......@@ -157,6 +158,13 @@ const SelectProduct: React.FC<Iprops> = (props: any) => {
ref.current.reload(values);
}
useEffect(() => {
console.log(id)
if (!!id) {
RowCtl.setSelectedRowKeys([id]);
}
}, [id])
return (
<Drawer
visible={visible}
......
import React, { Fragment, useEffect, useState } from 'react';
import { Tag, Badge, Tooltip } from 'antd';
import { Tag, Badge, Tooltip, Typography } from 'antd';
import { history } from 'umi';
import { PublicApi } from '@/services/api';
import { Context } from '../../components/detail/components/context';
......@@ -16,7 +16,7 @@ import {
OFFTER_INTERNALSTATE,
OFFTER_INTERNALSTATE_COLOR
} from '../../constants';
import { QuestionCircleOutlined } from '@ant-design/icons';
import { LinkOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import MaterialLayout from '../../components/detail/components/materialLayout';
import DemandLayout from '../../components/detail/components/demandLayout';
......@@ -101,6 +101,22 @@ const DemandDetailed = () => {
{ label: '交付日期', extra: format(data.deliveryTime) },
{ label: '交付地址', extra: data.address },
{ label: '截止日期', extra: format(data.offerEndTime) },
{
label: '附件',
extra: <>
{data.transactionUurls.map((item: any, index: number) => (
<Typography.Link
style={{ display: 'block', paddingBottom: '8px' }}
key={`link_${index + 1}`}
target="_blank"
href={`/api/order/contractTemplate/downloadContract?contractName=${item.name}&contractUrl=${item.url}`}
>
<LinkOutlined />
{item.name}
</Typography.Link>
))}
</>
},
]
},
{
......
......@@ -90,6 +90,7 @@ const QuoteDetails = () => {
extra: <>
{data.enclosureUrls.map((item: any, index: number) => (
<Typography.Link
target="_blank"
key={`link_${index + 1}`}
href={`/api/order/contractTemplate/downloadContract?contractName=${item.name}&contractUrl=${item.url}`}
>
......
......@@ -58,6 +58,7 @@ const Inquiry = () => {
dataIndex: 'operate',
render: (text: any, record: any) =>
<Button
disabled={!!record.isQuotedPrice}
onClick={() => history.push(`/memberCenter/procurementAbility/offter/quote?id=${record.id}&number=${record.purchaseInquiryNo}`)}
type='link'
>
......
import React, { Fragment, useEffect, useState } from 'react';
import { Tag, Badge, Tooltip, Button } from 'antd';
import { Tag, Badge, Tooltip, Button, Typography } from 'antd';
import { history } from 'umi';
import { PublicApi } from '@/services/api';
import { GlobalConfig } from '@/global/config'
......@@ -17,7 +17,7 @@ import {
OFFTER_INTERNALSTATE,
OFFTER_INTERNALSTATE_COLOR
} from '../../constants';
import { CheckCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { CheckCircleOutlined, LinkOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import MaterialLayout from '../../components/detail/components/materialLayout';
import DemandLayout from '../../components/detail/components/demandLayout';
import ModalOperate from '../../components/modalOperate';
......@@ -108,6 +108,22 @@ const DemandDetailed = () => {
{ label: '交付日期', extra: format(data.deliveryTime) },
{ label: '交付地址', extra: data.address },
{ label: '截止日期', extra: format(data.offerEndTime) },
{
label: '附件',
extra: <>
{data.transactionUurls.map((item: any, index: number) => (
<Typography.Link
style={{ display: 'block', paddingBottom: '8px' }}
key={`link_${index + 1}`}
href={`/api/order/contractTemplate/downloadContract?contractName=${item.name}&contractUrl=${item.url}`}
target="_blank"
>
<LinkOutlined />
{item.name}
</Typography.Link>
))}
</>
},
]
},
{
......
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