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

采购询价搜索修改

parent cd175d3d
......@@ -23,6 +23,14 @@ export const confirmOfferRoute = [
component: '@/pages/transaction/purchaseAbility/confirmOffer/toComparePrices'
},
{
/** 比价 */
path: '/memberCenter/procurementAbility/confirmOffer/detail',
name: '待比价',
component: '@/pages/transaction/purchaseAbility/confirmOffer/detail',
hideInMenu: true,
noMargin: true,
},
{
/** 待审核授标结果(一级) */
path: '/memberCenter/procurementAbility/confirmOffer/auditResultsOne',
name: '待审核授标结果(一级)',
......
......@@ -15,16 +15,16 @@ const EyePreview:React.FC<EyePreviewProps> = (props) => {
<Link to={props.url || ''}>
{props.children} <EyeOutlined />
</Link>
:
:
<Button onClick={props.handleClick} type='link'>
{props.children} <EyeOutlined />
</Button>
)
}
EyePreview.defaultProps = {
type: 'link'
}
export default EyePreview
\ No newline at end of file
export default EyePreview
......@@ -375,3 +375,9 @@ a {
// width: 100%;
// z-index: 8;
// }
.rate_style {
.ant-rate-star {
margin-right: 0px !important;
}
}
import React from 'react';
import { Drawer, Anchor, Row, Col, Divider } from 'antd';
import { Drawer, Anchor, Row, Col, Divider, Typography } from 'antd';
import style from './index.less';
import { LinkOutlined } from '@ant-design/icons';
const { Link } = Anchor;
......@@ -49,7 +50,23 @@ const DetailDrawer: React.FC<IProps> = (props: any) => {
{ item.linkContent.map((items, keys) => (
<div key={`content${keys + 1}`} className={style.list}>
<h5 className={style.listLable} style={{ flex: '0 0 100px' }}>{items.label}</h5>
<h5 className={style.listContent}>{items.content}</h5>
{ !items.file && <h5 className={style.listContent}>{items.content}</h5>}
{
items.file
&& (
<div className={style.upload_data}>
{items.content.length > 0 && items.content.map((v, index) => (
<div key={index} className={style.upload_item}>
<div className={style.upload_left}>
<Typography.Link href={v.url} target="_blank">
<LinkOutlined />
{v.name}
</Typography.Link>
</div>
</div>
))}
</div>
)}
</div>
))}
</div>
......
......@@ -11,6 +11,8 @@ import { searchSelectGetSelectCategoryOptionEffect } from '@/pages/transaction/e
import {
PurchaseDemandSchema,
PurchaseDemandPublicSchema,
INQUIRYDEMANDORDER_SCHEMA,
INQUIRYWAITORDER_SCHEMA,
CONFIRMOFFERSERAH_SCHEMA,
CONFIRMOFFERSUBMITAPRICE_SCHEMA,
CONFIRMOFFERAUDIT_SCHEMA,
......@@ -23,6 +25,8 @@ interface Iprops {
schemaType?:
'PurchaseDemand' |
'PurchaseDemandPublic' |
'INQUIRYDEMANDORDER_SCHEMA' |
'INQUIRYWAITORDER_SCHEMA' |
'CONFIRMOFFERSERAH_SCHEMA' |
'CONFIRMOFFERSUBMITAPRICE_SCHEMA' |
'CONFIRMOFFERAUDIT_SCHEMA',
......@@ -51,6 +55,10 @@ const Table: React.FC<Iprops> = (props:any) => {
return PurchaseDemandSchema
case 'PurchaseDemandPublic':
return PurchaseDemandPublicSchema
case 'INQUIRYDEMANDORDER_SCHEMA':
return INQUIRYDEMANDORDER_SCHEMA;
case 'INQUIRYWAITORDER_SCHEMA':
return INQUIRYWAITORDER_SCHEMA;
case 'CONFIRMOFFERSERAH_SCHEMA':
return CONFIRMOFFERSERAH_SCHEMA;
case 'CONFIRMOFFERSUBMITAPRICE_SCHEMA':
......
......@@ -4,7 +4,7 @@ import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
import moment from 'moment';
import { PublicApi } from '@/services/api';
import { Row, Col, Button, Badge, Tag, Space, Typography } from 'antd';
import { Row, Col, Button, Tag, Space, Typography, Rate } from 'antd';
import {
OFFTER_EXTERNALSTATE,
OFFTER_EXTERNALSTATE_COLOR,
......@@ -25,8 +25,7 @@ const AuditResultsOne = () => {
dataIndex: 'purchaseInquiryNo',
render: (text: any, record: any) => (
<Space direction='vertical'>
<EyePreview
url={`/memberCenter/procurementAbility/offter/inquiry/preview?id=${record.id}&number=${record.purchaseInquiryNo}`}>{text}</EyePreview>
<EyePreview>{text}</EyePreview>
<Text type='secondary'>{record.details}</Text>
</Space>
)
......@@ -49,7 +48,23 @@ const AuditResultsOne = () => {
title: '报价轮次',
key: 'turn',
dataIndex: 'turn',
render: (text: any, record: any) => <Text strong>{CHNUM_TYPE[text]}</Text>
render: (text: any, record: any) => (
<>
<Rate
count={3}
character='▌'
disabled
className='rate_style'
style={{
fontSize: '12px',
color: '#00B37A',
}}
value={text}
allowHalf
/>
<Text>{CHNUM_TYPE[text]}</Text>
</>
)
}, {
title: '有效报价数',
key: 'count',
......
......@@ -4,7 +4,7 @@ import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
import moment from 'moment';
import { PublicApi } from '@/services/api';
import { Row, Col, Button, Badge, Tag, Space, Typography } from 'antd';
import { Row, Col, Button, Tag, Space, Typography, Rate } from 'antd';
import {
OFFTER_EXTERNALSTATE,
OFFTER_EXTERNALSTATE_COLOR,
......@@ -25,8 +25,7 @@ const AuditResultsTwo = () => {
dataIndex: 'purchaseInquiryNo',
render: (text: any, record: any) => (
<Space direction='vertical'>
<EyePreview
url={`/memberCenter/procurementAbility/offter/inquiry/preview?id=${record.id}&number=${record.purchaseInquiryNo}`}>{text}</EyePreview>
<EyePreview>{text}</EyePreview>
<Text type='secondary'>{record.details}</Text>
</Space>
)
......@@ -49,7 +48,23 @@ const AuditResultsTwo = () => {
title: '报价轮次',
key: 'turn',
dataIndex: 'turn',
render: (text: any, record: any) => <Text strong>{CHNUM_TYPE[text]}</Text>
render: (text: any, record: any) => (
<>
<Rate
count={3}
character='▌'
disabled
className='rate_style'
style={{
fontSize: '12px',
color: '#00B37A',
}}
value={text}
allowHalf
/>
<Text>{CHNUM_TYPE[text]}</Text>
</>
)
}, {
title: '有效报价数',
key: 'count',
......
import React from 'react';
import Table from '../../components/table';
import { history } from 'umi';
import { Button, Space, Typography, Tag } from 'antd';
import { Button, Space, Typography, Tag, Rate } from 'antd';
import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
import moment from 'moment';
......@@ -26,8 +26,7 @@ const ConfirmResults = () => {
dataIndex: 'purchaseInquiryNo',
render: (text: any, record: any) => (
<Space direction='vertical'>
<EyePreview
url={`/memberCenter/procurementAbility/offter/inquiry/preview?id=${record.id}&number=${record.purchaseInquiryNo}`}>{text}</EyePreview>
<EyePreview>{text}</EyePreview>
<Text type='secondary'>{record.details}</Text>
</Space>
)
......@@ -50,7 +49,23 @@ const ConfirmResults = () => {
title: '报价轮次',
key: 'turn',
dataIndex: 'turn',
render: (text: any, record: any) => <Text strong>{CHNUM_TYPE[text]}</Text>
render: (text: any, record: any) => (
<>
<Rate
count={3}
character='▌'
disabled
className='rate_style'
style={{
fontSize: '12px',
color: '#00B37A',
}}
value={text}
allowHalf
/>
<Text>{CHNUM_TYPE[text]}</Text>
</>
)
}, {
title: '有效报价数',
key: 'count',
......
.anchorWrap {
:global {
.ant-anchor {
display: flex;
.ant-anchor-ink {
display: none;
}
.ant-anchor-link {
padding: 14px 0 !important;
margin: 0 16px;
.ant-anchor-link-title {
font-size: 14px;
color: #909399;
}
}
.ant-anchor-link-active {
position: relative;
border-bottom: 2px solid #00B37A;
box-sizing: border-box;
.ant-anchor-link-title {
font-weight: 500;
color: #303133;
}
}
}
}
.titleBox {
padding: 8px 16px;
}
.anchorBox {
display: flex;
padding: 0 16px;
}
}
/** 卡片样式 */
.card {
margin: 24px;
:global {
.ant-card {
margin-bottom: 24px;
.ant-card-head {
> .ant-card-head-wrapper {
padding: 12px 0;
}
}
.ant-card-extra {
padding: 0 0;
.ant-radio-button-wrapper {
height: 24px;
line-height: 23px;
}
.ant-radio-button-wrapper:hover {
color: #606266;
}
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
color: #fff;
background: #6B778C;
border-color: #6B778C;
}
}
}
.god-table-control {
margin-bottom: 0;
}
}
.list {
display: flex;
h5 {
margin-bottom: 2em;
}
.listLable {
flex: 0 0 25%;
color: #909399;
}
}
}
import React, { useRef, useState } from 'react';
import Table from '../../components/table';
import { history } from 'umi';
import { Button, Typography, Tag } from 'antd';
import { Button, Typography, Tag, Rate } from 'antd';
import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
import moment from 'moment';
......@@ -18,6 +18,7 @@ import ModalOperate from '../../components/modalOperate';
const { Text } = Typography
const OfferInquire = () => {
const ref = useRef<any>({});
const [id, setId] = useState<number>();
......@@ -30,8 +31,7 @@ const OfferInquire = () => {
key: 'purchaseInquiryNo',
dataIndex: 'purchaseInquiryNo',
render: (text: any, record: any) => (
<EyePreview
url={`/memberCenter/procurementAbility/offter/inquiry/preview?id=${record.id}&number=${record.purchaseInquiryNo}`}>{text}</EyePreview>
<EyePreview>{text}</EyePreview>
)
}, {
title: '需求摘要',
......@@ -56,7 +56,23 @@ const OfferInquire = () => {
title: '报价轮次',
key: 'turn',
dataIndex: 'turn',
render: (text: any, record: any) => <Text strong>{CHNUM_TYPE[text]}</Text>
render: (text: any, record: any) => (
<>
<Rate
count={3}
character='▌'
disabled
className='rate_style'
style={{
fontSize: '12px',
color: '#00B37A',
}}
value={text}
allowHalf
/>
<Text>{CHNUM_TYPE[text]}</Text>
</>
)
}, {
title: '有效报价数',
key: 'count',
......
import React from 'react';
import Table from '../../components/table';
import { history } from 'umi';
import { Button, Space, Typography, Tag } from 'antd';
import { Button, Space, Typography, Tag, Rate } from 'antd';
import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
import moment from 'moment';
......@@ -26,8 +26,7 @@ const ToComparePrices = () => {
dataIndex: 'purchaseInquiryNo',
render: (text: any, record: any) => (
<Space direction='vertical'>
<EyePreview
url={`/memberCenter/procurementAbility/offter/inquiry/preview?id=${record.id}&number=${record.purchaseInquiryNo}`}>{text}</EyePreview>
<EyePreview>{text}</EyePreview>
<Text type='secondary'>{record.details}</Text>
</Space>
)
......@@ -50,7 +49,23 @@ const ToComparePrices = () => {
title: '报价轮次',
key: 'turn',
dataIndex: 'turn',
render: (text: any, record: any) => <Text strong>{CHNUM_TYPE[text]}</Text>
render: (text: any, record: any) => (
<>
<Rate
count={3}
character='▌'
disabled
className='rate_style'
style={{
fontSize: '12px',
color: '#00B37A',
}}
value={text}
allowHalf
/>
<Text>{CHNUM_TYPE[text]}</Text>
</>
)
}, {
title: '有效报价数',
key: 'count',
......@@ -71,7 +86,12 @@ const ToComparePrices = () => {
dataIndex: 'operate',
render: (text: any, record: any) =>
<>
<Button type='link'>比价</Button>
<Button
type='link'
onClick={() => history.push(`/memberCenter/procurementAbility/confirmOffer/detail?id=${record.id}&turn=${record.turn}`)}
>
比价
</Button>
<Button type='link'>修改授标结果</Button>
</>
......
import React from 'react';
import { ColumnType } from 'antd/lib/table/interface';
import { Typography, Tag } from 'antd';
import moment from 'moment';
import {
OFFTER_EXTERNALSTATE,
OFFTER_EXTERNALSTATE_COLOR,
OFFTER_INTERNALSTATE,
OFFTER_INTERNALSTATE_COLOR,
} from '../constants';
const format = (text) => {
return <>{moment(text).format("YYYY-MM-DD HH:mm")}</>
}
const { Text } = Typography;
/** 外部流转记录 */
export const EXTERNALLOGS: ColumnType<any>[] = [
{
title: '流转顺序号',
key: 'index',
dataIndex: 'index',
render: (_text: any, _record: any, index: number) => <Text>{index + 1}</Text>
},
{
title: '操作角色',
key: 'roleName',
dataIndex: 'roleName',
},
{
title: '状态',
key: 'state',
dataIndex: 'state',
render: (_text: any, _record: any) => <Tag color={OFFTER_EXTERNALSTATE_COLOR[_text]}>{OFFTER_EXTERNALSTATE[_text]}</Tag>
},
{
title: '操作',
key: 'operation',
dataIndex: 'operation',
},
{
title: '操作时间',
key: 'createTime',
dataIndex: 'createTime',
render: (_text: any, _record: any) => <Text>{format(_text)}</Text>
},
{
title: '审核意见',
key: 'auditOpinion',
dataIndex: 'auditOpinion',
},
]
/** 内部流转记录 */
export const INTERNALLOGS: ColumnType<any>[] = [
{
title: '流转顺序号',
key: 'index',
dataIndex: 'index',
render: (_text: any, _record: any, index: number) => <Text>{index + 1}</Text>
},
{
title: '操作人',
key: 'roleName',
dataIndex: 'roleName',
},
{
title: '部门',
key: 'department',
dataIndex: 'department',
},
{
title: '职位',
key: 'position',
dataIndex: 'position',
},
{
title: '状态',
key: 'state',
dataIndex: 'state',
render: (_text: any, _record: any) => <Tag color={OFFTER_INTERNALSTATE_COLOR[_text]}>{OFFTER_INTERNALSTATE[_text]}</Tag>
},
{
title: '操作',
key: 'operation',
dataIndex: 'operation',
},
{
title: '操作时间',
key: 'createTime',
dataIndex: 'createTime',
render: (_text: any, _record: any) => <Text>{format(_text)}</Text>
},
{
title: '审核意见',
key: 'auditOpinion',
dataIndex: 'auditOpinion',
},
]
......@@ -14,7 +14,9 @@ export const INQUIRY_EXTERNALSTATE_COLOR = {
1: 'default',
2: 'warning',
3: 'warning',
4: 'warning'
4: 'warning',
5: 'error',
6: 'warning',
}
/** 询价内部状态 */
export const INQUIRY_INTERNALSTATE = {
......@@ -31,6 +33,7 @@ export const INQUIRY_INTERNALSTATE = {
}
/** 询价内部状态颜色 */
export const INQUIRY_INTERNALSTATE_COLOR = {
'-1': 'error',
99: 'success',
1: 'default',
2: 'warning',
......@@ -50,7 +53,9 @@ export const OFFTER_EXTERNALSTATE = {
1: '待提交需求单',
2: '待审核需求单',
3: '待提交报价单',
4: '待确认授标结果'
4: '待确认授标结果',
5: '审核不通过需求单',
6: '发下轮报价',
}
/** 报价外部状态颜色 */
export const OFFTER_EXTERNALSTATE_COLOR = {
......@@ -59,12 +64,14 @@ export const OFFTER_EXTERNALSTATE_COLOR = {
1: 'default',
2: 'warning',
3: 'warning',
4: 'warning'
4: 'warning',
5: 'error',
6: 'warning',
}
/** 报价内部状态 */
export const OFFTER_INTERNALSTATE = {
'-1': '作废',
99: '已完成',
99: '已提交审核采购需求单',
1: '待提交审核',
2: '待审核(一级)',
3: '待审核(二级)',
......@@ -101,6 +108,10 @@ export enum OFFTER_EXTERNALSTATE_TYPE {
WAITSUBMIOFFER_TYPE,
/** 待确认授标结果 */
WAITCONFIRMRESULTS_TYPE,
/** 审核不通过需求单 */
WAITNOPASSINQUIRY_TYPE,
/** 发下轮报价 */
NEXTOFFER_TYPE,
/** 已完成 */
SUCCESS_TYPE = 99,
}
......@@ -161,6 +172,9 @@ export const FILTEREXTERNALSTATE = [
label: '待确认授标结果', value: 4
},
{
label: '审核不通过需求单', value: 5
},
{
label: '已完成', value: 99
},
]
......@@ -195,6 +209,7 @@ export const FILTERINTERNALSTATE = [
label: '审核不通过(二级)', value: 9
},
{
label: '已完成', value: 99
label: '已提交审核采购需求单', value: 99
},
]
......@@ -285,7 +285,7 @@ const Detail = () => {
marginLeft: '8px',
}}
>
进口头层黄牛皮荔枝纹 | SPTY12
{data.quotedDetails} | {data.quotedPriceNo}
</span>
</div>
{path === 'detail'
......
......@@ -56,6 +56,7 @@ const AddForm = () => {
memberRoleId,
memberName: name,
details: basicRef.data.details,
areas: basicRef.data.requisitionFormAddress,
priceContrast: basicRef.data.priceContrast,
purchaseType: basicRef.data.purchaseType,
...materialRef.data,
......@@ -116,7 +117,7 @@ const AddForm = () => {
basicInfo.externalState = params.externalState
basicInfo.interiorState = params.interiorState;
setBasic(basicInfo);
materialInfo.addMaterielMode = params.addMaterielMode;
materialInfo.materielMode = params.materielMode;
materialInfo.materiels = params.materiels;
setMaterial(materialInfo);
conditionInfo.deliveryTime = params.deliveryTime;
......
......@@ -206,18 +206,14 @@ const BasicInfo: React.FC<Iprops> = (props: any) => {
citydata: res.data
}
city[index] = { ...citydata }
Promise.resolve().then(() => {
setTimeout(() => {
setcity([...city])
setcode([...code, item.cityCode])
form.setFieldsValue({
details: fetchdata.details,
purchaseType: fetchdata.purchaseType,
priceContrast: fetchdata.priceContrast,
['province_' + index]: item.provinceCode,
['city_' + index]: item.cityCode,
});
}, 550);
setcity([...city])
setcode([...code, item.cityCode])
form.setFieldsValue({
details: fetchdata.details,
purchaseType: fetchdata.purchaseType,
priceContrast: fetchdata.priceContrast,
['province_' + index]: item.provinceCode,
['city_' + index]: item.cityCode,
});
}
})
......
import React, { useEffect, useState } from 'react';
import { Form, Radio, Tooltip, Row, Col, Image, Table, Button } from 'antd';
import { Form, Radio, Tooltip, Row, Col, Image, Table, Button, Switch, Typography } from 'antd';
import { GlobalConfig } from '@/global/config'
import { PlusOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { ColumnType } from 'antd/lib/table/interface';
......@@ -35,7 +35,9 @@ interface Iprops {
onBadge?: Function,
}
const Demand: React.FC<Iprops> = (props:any) => {
const { Link } = Typography
const Demand: React.FC<Iprops> = (props: any) => {
const [form] = Form.useForm();
const {
currentRef,
......@@ -47,7 +49,7 @@ const Demand: React.FC<Iprops> = (props:any) => {
const [shopIds, setShopIds] = useState<Array<number>>([]);
const [storeList, setStoreList] = useState<Array<any>>([]);
const [visible, setVisible] = useState<boolean>(false);
const [menberVisible, setMenberVidible ] = useState<boolean>(false);
const [menberVisible, setMenberVidible] = useState<boolean>(false);
const [rowCtl, setRowCtl] = useState<any>([])
/** 表头 */
const columns: ColumnType<any>[] = [
......@@ -80,11 +82,30 @@ const Demand: React.FC<Iprops> = (props:any) => {
title: '是否归属会员',
key: 'membershipOrNot',
dataIndex: 'membershipOrNot',
render: (_text: any, _record: any) => <span></span>
},
{
title: '状态',
key: 'state',
dataIndex: 'state',
render: (_text: any, _record: any) => (
<Form.Item
style={{ marginBottom: 0 }}
initialValue={_text}
>
<Switch />
</Form.Item>
)
},
{
title: '操作',
key: 'operate',
dataIndex: 'operate',
render: (_text: any, _record: any) => (
<Link href={`/shop?shopId=${btoa(JSON.stringify({ shopId: _record.id, memberId: _record.memberId }))}`} target="_blank">
进入店铺
</Link>
)
},
]
/** 切换需求模式 */
......@@ -115,11 +136,24 @@ const Demand: React.FC<Iprops> = (props:any) => {
})
}
/** 获取会员列表 */
const handleMenberList = (e:any) => {
const handleMenberList = (e: any) => {
const RowCtl = e.selectRow;
if (RowCtl.length > 0) {
setMenberVidible(false)
setRowCtl(RowCtl);
const data: any = []
RowCtl.forEach(item => {
data.push({
memberId: item.memberId,
memberName: item.name,
memberTypeName: item.memberTypeName,
roleId: item.roleId,
roleName: item.roleName,
levelTag: item.levelTag,
state: false,
type: 2,
})
})
setRowCtl(data);
}
}
......@@ -236,6 +270,7 @@ const Demand: React.FC<Iprops> = (props:any) => {
</Button>
<Table
columns={columns}
dataSource={rowCtl}
/>
</Form.Item>
)}
......
......@@ -243,9 +243,9 @@ const Material: React.FC<Iprops> = (props: any) => {
console.log(fetchdata, 10086)
if (fetchdata) {
form.setFieldsValue({
materielMode: fetchdata.addMaterielMode
materielMode: fetchdata.materielMode
})
setMaterielMode(fetchdata.addMaterielMode)
setMaterielMode(fetchdata.materielMode)
setDataSource(fetchdata.materiels)
}
}, [fetchdata])
......@@ -299,6 +299,7 @@ const Material: React.FC<Iprops> = (props: any) => {
&& (
<Import
flag={flag}
onClose={() => setFlag(false)}
/>
)}
</Form>
......
......@@ -8,10 +8,9 @@ import { PublicApi } from '@/services/api';
import { Row, Col, Space, Button, Dropdown, Menu, Tag, Badge, Popconfirm, Typography } from 'antd';
import { DeleteOutlined, DownOutlined, PlusOutlined } from '@ant-design/icons';
import {
INQUIRY_EXTERNALSTATE,
INQUIRY_EXTERNALSTATE_COLOR,
INQUIRY_INTERNALSTATE,
INQUIRY_INTERNALSTATE_COLOR,
OFFTER_EXTERNALSTATE_TYPE,
OFFTER_INTERNALSTATE_TYPE
} from '../../constants';
const { Text } = Typography;
......@@ -50,19 +49,24 @@ const AddInquiry = () => {
title: '外部状态',
key: 'externalState',
dataIndex: 'externalState',
render: (text: any, record: any) => <Tag color={INQUIRY_EXTERNALSTATE_COLOR[text]}>{INQUIRY_EXTERNALSTATE[text]}</Tag>
render: (text: any, record: any) => <Tag color={INQUIRY_EXTERNALSTATE_COLOR[text]}>{record.externalStateName}</Tag>
}, {
title: '内部状态',
key: 'interiorState',
dataIndex: 'interiorState',
render: (text: any, record: any) => <Badge status={INQUIRY_INTERNALSTATE_COLOR[text]} text={INQUIRY_INTERNALSTATE[text]} />
render: (text: any, record: any) => <Badge status={INQUIRY_INTERNALSTATE_COLOR[text]} text={record.interiorStateName} />
}, {
title: '操作',
key: 'operate',
dataIndex: 'operate',
render: (text: any, record: any) => (
<>
<Button type='link' onClick={() => history.push(`/memberCenter/procurementAbility/purchaseInquiry/addInquiry/detail?id=${record.id}&number=${record.purchaseInquiryNo}`)}>提交审核</Button>
{ (record.externalState !== OFFTER_EXTERNALSTATE_TYPE.WAITNOPASSINQUIRY_TYPE &&
(record.interiorState !== OFFTER_INTERNALSTATE_TYPE.AUDITNOPASS1_TYPE &&
record.interiorState !== OFFTER_INTERNALSTATE_TYPE.AUDITNOPASS2_TYPE ))
&& (
<Button type='link' onClick={() => history.push(`/memberCenter/procurementAbility/purchaseInquiry/addInquiry/detail?id=${record.id}&number=${record.purchaseInquiryNo}`)}>提交审核</Button>
)}
<Button type='link' onClick={() => history.push(`/memberCenter/procurementAbility/purchaseInquiry/edit?id=${record.id}&number=${record.purchaseInquiryNo}`)}>修改</Button>
{ record.interiorState === OFFTER_INTERNALSTATE_TYPE.WAITSUBMITAUDIT_TYPE
&& (
......@@ -105,9 +109,9 @@ const AddInquiry = () => {
<Table
selectedRow
reload={ref}
schemaType="PurchaseDemandPublic"
schemaType="INQUIRYWAITORDER_SCHEMA"
columns={columns}
effects="requisitionFormNo"
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchasePurchaseInquiryAddList}
fetchRowkeys={(e) => setRowKeys(e)}
controllerBtns={
......
......@@ -103,7 +103,8 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
brand: res.brand,
model: res.model,
purchaseCount: res.purchaseCount,
unit: res.unit
unit: res.unit,
urls: files
}
onConfirm(data)
form.resetFields();
......@@ -116,6 +117,38 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
form.resetFields();
onClose()
}
/**判断文件类型和大小 */
const beforeDocUpload = (file: any) => {
const isLt20M = file.size / 1024 / 1024 < 20;
if (!isLt20M) {
message.error('上传文件大小不超过 20M!');
}
return isLt20M;
}
// 上传回调
const handleChange = ({ file }) => {
const arr: any = files;
setloading(true);
if (file.response) {
if (file.response.code === 1000) {
arr.push({
name: file.name,
url: file.response.data
})
setloading(false);
}
}
setFiles([...arr])
}
// 删除附件
const removeFiles = (index: any) => {
const arr = [...files];
arr.splice(index, 1);
setFiles(arr);
}
useEffect(() => {
searchCategoryTree('0');
}, [])
......@@ -323,6 +356,8 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
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>
......
......@@ -12,15 +12,17 @@ import excelIcon from '@/assets/imgs/excel.png'
interface Iprops {
flag: boolean,
onClose: () => void,
}
const Import: React.FC<Iprops> = (props: any) => {
const { flag } = props;
const { flag, onClose } = props;
return (
<Modal
width={400}
title='导入'
visible={flag}
onCancel={onClose}
footer={
<Button type='primary'>导入</Button>
}
......
......@@ -7,9 +7,7 @@ import moment from 'moment';
import { PublicApi } from '@/services/api';
import { Row, Col, Button, Tag, Badge, Typography, Space } from 'antd';
import {
INQUIRY_EXTERNALSTATE,
INQUIRY_EXTERNALSTATE_COLOR,
INQUIRY_INTERNALSTATE,
INQUIRY_INTERNALSTATE_COLOR
} from '../../constants';
const { Text } = Typography;
......@@ -56,12 +54,12 @@ const AuditInquiryOne = () => {
title: '外部状态',
key: 'externalState',
dataIndex: 'externalState',
render: (text: any, record: any) => <Tag color={INQUIRY_EXTERNALSTATE_COLOR[text]}>{INQUIRY_EXTERNALSTATE[text]}</Tag>
render: (text: any, record: any) => <Tag color={INQUIRY_EXTERNALSTATE_COLOR[text]}>{record.externalStateName}</Tag>
}, {
title: '内部状态',
key: 'interiorState',
dataIndex: 'interiorState',
render: (text: any, record: any) => <Badge status={INQUIRY_INTERNALSTATE_COLOR[text]} text={INQUIRY_INTERNALSTATE[text]} />
render: (text: any, record: any) => <Badge status={INQUIRY_INTERNALSTATE_COLOR[text]} text={record.interiorStateName} />
}, {
title: '操作',
key: 'operate',
......@@ -81,9 +79,9 @@ const AuditInquiryOne = () => {
<Table
selectedRow
reload={ref}
schemaType="PurchaseDemandPublic"
schemaType="INQUIRYWAITORDER_SCHEMA"
columns={columns}
effects="requisitionFormNo"
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchasePurchaseInquiryStayExamineList1}
fetchRowkeys={(e) => setRowKeys(e)}
controllerBtns={
......
......@@ -56,12 +56,12 @@ const AuditInquiryTwo = () => {
title: '外部状态',
key: 'externalState',
dataIndex: 'externalState',
render: (text: any, record: any) => <Tag color={INQUIRY_EXTERNALSTATE_COLOR[text]}>{INQUIRY_EXTERNALSTATE[text]}</Tag>
render: (text: any, record: any) => <Tag color={INQUIRY_EXTERNALSTATE_COLOR[text]}>{record.externalStateName}</Tag>
}, {
title: '内部状态',
key: 'interiorState',
dataIndex: 'interiorState',
render: (text: any, record: any) => <Badge status={INQUIRY_INTERNALSTATE_COLOR[text]} text={INQUIRY_INTERNALSTATE[text]} />
render: (text: any, record: any) => <Badge status={INQUIRY_INTERNALSTATE_COLOR[text]} text={record.interiorStateName} />
}, {
title: '操作',
key: 'operate',
......@@ -81,9 +81,9 @@ const AuditInquiryTwo = () => {
<Table
selectedRow
reload={ref}
schemaType="PurchaseDemandPublic"
schemaType="INQUIRYWAITORDER_SCHEMA"
columns={columns}
effects="requisitionFormNo"
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchasePurchaseInquiryStayExamineList2}
fetchRowkeys={(e) => setRowKeys(e)}
controllerBtns={
......
import React, { useEffect, useState, useRef } from 'react';
import { Anchor, Radio, Steps, Row, Col, Table, Tooltip, Switch, Button } from 'antd';
import {
Anchor,
Radio,
Steps,
Row,
Col,
Table,
Tooltip,
Switch,
Button,
Tag,
Badge,
Image
} from 'antd';
import { history } from 'umi';
import { GlobalConfig } from '@/global/config'
import style from './index.less';
import { ArrowLeftOutlined, CheckCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { StandardTable } from 'god';
......@@ -9,6 +23,17 @@ import { PublicApi } from '@/services/api';
import DetailDrawer from '../../components/detailDrawer';
import EyePreview from '@/components/EyePreview';
import ModalOperate from '../../components/modalOperate';
import {
OFFTER_EXTERNALSTATE,
OFFTER_EXTERNALSTATE_COLOR,
OFFTER_INTERNALSTATE,
OFFTER_INTERNALSTATE_COLOR
} from '../../constants';
import {
EXTERNALLOGS,
INTERNALLOGS,
} from '../../constants/columns';
const { Link } = Anchor;
const { Step } = Steps;
......@@ -26,8 +51,28 @@ const LogStatesType = {
}
const TYPE = {
1: '系统匹配',
2: '指定会员',
1: '发布至平台',
2: '系统匹配',
3: '指定会员',
}
const ColStyle = {
display: 'flex',
alignItems: 'center',
border: '1px solid #1fbf87',
paddingTop: ' 6px',
paddingBottom: '6px',
margin: '5px',
borderRadius: '4px',
}
const TextStyle = {
color: '#1fbf87',
marginLeft: '10px',
}
const iconStyle: any = {
color: '#C0C4CC',
fontSize: '14px',
marginLeft: '5px'
}
const Detail: React.FC<{}> = () => {
......@@ -51,9 +96,15 @@ const Detail: React.FC<{}> = () => {
const [logStatesStatus, setLogStatesStatus] = useState<number>(LogStatesType.externalLogStates);
const [logStatus, setLogStatus] = useState<number>(LogType.externalLogs);
const [visible, setVisible] = useState<boolean>(false);
const [dataSource, setDataSource] = useState<any>([])
const [dataSource, setDataSource] = useState<any>([]);
const [areas, setAreas] = useState<any>([])
const [storeList, setStoreList] = useState<Array<any>>([]);
useEffect(() => {
setTargetOffset(window.innerHeight / 8);
let shopList = GlobalConfig.web.shopInfo.filter(v => v.type == 1).map(
v => v
)
const parmas = {
id,
number,
......@@ -63,8 +114,19 @@ const Detail: React.FC<{}> = () => {
PublicApi.getPurchasePurchaseInquiryDetails(parmas).then(res => {
if (res.code === 1000) {
setData(res.data)
const area: string[] = [];
if (res.data.areas) {
res.data.areas.forEach(item => {
area.push(`${item.province}/${item.city}`)
})
setAreas(area)
}
const ids = res.data.shopIds;
const filterStore = shopList.filter(item => ids.indexOf(item.id) !== -1);
setStoreList([...filterStore]);
}
})
}, []);
const handleAnchorClick = (e) => {
e.preventDefault()
......@@ -122,6 +184,7 @@ const Detail: React.FC<{}> = () => {
linkContent: [
{
label: '附件',
file: item.urls ? true : false,
content: item.urls
},
]
......@@ -181,18 +244,41 @@ const Detail: React.FC<{}> = () => {
const basicInfo = {
col1: [
{ label: '需求单号', extra: data.purchaseInquiryNo },
{ label: '外部状态', extra: data.externalState },
{ label: '内部状态', extra: data.interiorState },
{ label: '外部状态', extra: <Tag color={OFFTER_EXTERNALSTATE_COLOR[data.externalState]}>{OFFTER_EXTERNALSTATE[data.externalState]}</Tag> },
{ label: '内部状态', extra: <Badge status={OFFTER_INTERNALSTATE_COLOR[data.interiorState]} text={OFFTER_INTERNALSTATE[data.interiorState]} /> },
{ label: '单据时间', extra: data.createTime },
],
col2: [
{ label: '需求摘要', extra: data.details },
{ label: '招标采购类型', extra: data.purchaseType },
{ label: '比价方式', extra: data.priceContrast },
{
label: '采购类型',
extra: (
<Tooltip placement="top" title='有固定采购金额:采购金额固定,合同期内不可超过采购金额,无固定采购金额:采购金额不固定,可在合同期内按需采购'>
{data.purchaseType === 1 ? '有固定采购金额' : '无固定采购金额'}<QuestionCircleOutlined style={iconStyle} />
</Tooltip>
)
},
{
label: '比价方式',
extra: (
<Tooltip placement="top" title='密封比价:只能看到供应商是否有报价,不能看到供应商的报价明细,只能解封后才能看到报价明细,非密封比价:可以在供应商报完价后立即看到报价明细,无须解封'>
{data.priceContrast === 1 ? '密封比价' : '非密封比价'}<QuestionCircleOutlined style={iconStyle} />
</Tooltip>
)
},
{ label: '会员名称', extra: data.memberName },
],
col3: [
{ label: '适用地市', extra: '进口头层黄牛皮荔枝纹' },
{
label: '适用地市',
extra: (
<div>
{areas.map((item: any, index: number) => (
<p key={`areas${index + 1}`}>{item}</p>
))}
</div>
)
},
],
};
/** 交易条件 */
......@@ -525,7 +611,7 @@ const Detail: React.FC<{}> = () => {
</Row>
</div>
</div>
{/* 交易条件 */}
{/* 需求对接 */}
<div id='docking' className='ant-card ant-card-bordered'>
<div className='ant-card-head'>
<div className='ant-card-head-wrapper'>
......@@ -539,11 +625,29 @@ const Detail: React.FC<{}> = () => {
<h5 className={style.listLable} style={{ flex: '0 0 100px' }}>发布方式:</h5>
<h5 className={style.listContent}>{TYPE[data.type]}</h5>
</div>
<Table
dataSource={data.demandMembers}
columns={demandColums}
rowKey='id'
/>
{data.type === 1
&& (
<Row gutter={[16, 16]}>
{storeList.map(item => (
<Col
span={6}
key={item.id}
style={ColStyle}
>
<Image width={32} height={32} src={item.logoUrl} />
<span style={TextStyle}>{item.name}</span>
</Col>
))}
</Row>
)}
{data.type !== 1
&& (
<Table
dataSource={data.demandMembers}
columns={demandColums}
rowKey='id'
/>
)}
</div>
</div>
{/* 流转记录 */}
......@@ -557,21 +661,24 @@ const Detail: React.FC<{}> = () => {
<Radio.Group
onChange={(e) => setLogStatus(e.target.value)}
defaultValue={LogType.externalLogs}>
<Radio.Button value={LogType.externalLogs}>外部流转</Radio.Button>
<Radio.Button value={LogType.interiorLogs}>内部流转</Radio.Button>
{data.externalLogs && <Radio.Button value={LogType.externalLogs}>外部流转</Radio.Button>}
{data.interiorLogs && <Radio.Button value={LogType.interiorLogs}>内部流转</Radio.Button>}
</Radio.Group>
</div>
</div>
</div>
<div className='ant-card-body'>
<Table
columns={logColums}
columns={logStatus === LogType.externalLogs ? EXTERNALLOGS : INTERNALLOGS}
dataSource={
logStatus === LogType.externalLogs ?
data.externalLogs :
data.interiorLogs
}
rowKey={(record) => record.id}
pagination={{
hideOnSinglePage: true
}}
/>
</div>
</div>
......
......@@ -6,9 +6,7 @@ import EyePreview from '@/components/EyePreview';
import moment from 'moment';
import { PublicApi } from '@/services/api';
import {
INQUIRY_EXTERNALSTATE,
INQUIRY_EXTERNALSTATE_COLOR,
INQUIRY_INTERNALSTATE,
INQUIRY_INTERNALSTATE_COLOR
} from '../../constants';
import ModalOperate from '../../components/modalOperate';
......@@ -52,12 +50,12 @@ const Inquiry = () => {
title: '外部状态',
key: 'externalState',
dataIndex: 'externalState',
render: (text: any, record: any) => <Tag color={INQUIRY_EXTERNALSTATE_COLOR[text]}>{INQUIRY_EXTERNALSTATE[text]}</Tag>
render: (text: any, record: any) => <Tag color={INQUIRY_EXTERNALSTATE_COLOR[text]}>{record.externalStateName}</Tag>
}, {
title: '内部状态',
key: 'interiorState',
dataIndex: 'interiorState',
render: (text: any, record: any) => <Badge status={INQUIRY_INTERNALSTATE_COLOR[text]} text={INQUIRY_INTERNALSTATE[text]} />
render: (text: any, record: any) => <Badge status={INQUIRY_INTERNALSTATE_COLOR[text]} text={record.interiorStateName} />
}, {
title: '操作',
key: 'operate',
......@@ -86,9 +84,9 @@ const Inquiry = () => {
return (
<>
<Table
schemaType="PurchaseDemand"
schemaType="INQUIRYDEMANDORDER_SCHEMA"
columns={columns}
effects="requisitionFormNo"
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchasePurchaseInquiryList}
reload={ref}
/>
......
......@@ -7,9 +7,7 @@ import moment from 'moment';
import { PublicApi } from '@/services/api';
import { Row, Col, Button, Tag, Badge, Typography, Space } from 'antd';
import {
INQUIRY_EXTERNALSTATE,
INQUIRY_EXTERNALSTATE_COLOR,
INQUIRY_INTERNALSTATE,
INQUIRY_INTERNALSTATE_COLOR
} from '../../constants';
const { Text } = Typography;
......@@ -56,12 +54,12 @@ const SubmitInquiry = () => {
title: '外部状态',
key: 'externalState',
dataIndex: 'externalState',
render: (text: any, record: any) => <Tag color={INQUIRY_EXTERNALSTATE_COLOR[text]}>{INQUIRY_EXTERNALSTATE[text]}</Tag>
render: (text: any, record: any) => <Tag color={INQUIRY_EXTERNALSTATE_COLOR[text]}>{record.externalStateName}</Tag>
}, {
title: '内部状态',
key: 'interiorState',
dataIndex: 'interiorState',
render: (text: any, record: any) => <Badge status={INQUIRY_INTERNALSTATE_COLOR[text]} text={INQUIRY_INTERNALSTATE[text]} />
render: (text: any, record: any) => <Badge status={INQUIRY_INTERNALSTATE_COLOR[text]} text={record.interiorStateName} />
}, {
title: '操作',
key: 'operate',
......@@ -81,9 +79,9 @@ const SubmitInquiry = () => {
<Table
selectedRow
reload={ref}
schemaType="PurchaseDemandPublic"
schemaType="INQUIRYWAITORDER_SCHEMA"
columns={columns}
effects="requisitionFormNo"
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchasePurchaseInquiryStayCommitList}
fetchRowkeys={(e) => setRowKeys(e)}
controllerBtns={
......
......@@ -3,6 +3,181 @@ import { FORM_FILTER_PATH } from '@/formSchema/const'
import { PublicApi } from '@/services/api'
import { FILTEREXTERNALSTATE, FILTERINTERNALSTATE } from '../constants'
/** 采购询价 - 需求单查询 */
export const INQUIRYDEMANDORDER_SCHEMA: ISchema = {
type: 'object',
properties: {
megalayout: {
type: 'object',
"x-component": 'mega-layout',
properties: {
purchaseInquiryNo: {
type: 'string',
"x-component": "Search",
"x-mega-props": {
},
"x-component-props": {
placeholder: '需求单号',
align: 'flex-left',
}
}
}
},
[FORM_FILTER_PATH]: {
type: 'object',
"x-component": "flex-layout",
"x-component-props": {
rowStyle: {
justifyContent: 'flex-start',
flexWrap: 'nowrap'
},
colStyle: {//改变间隔
marginRight: 20
}
},
properties: {
PRO_LAYOUT: {
type: 'object',
"x-component": 'mega-layout',
"x-mega-props": {
span: 5
},
"x-component-props": {
inline: true
},
properties: {
details: {
type: 'string',
"x-component-props": {
placeholder: '需求摘要',
}
},
"[startTime,endTime]": {
type: 'string',
"x-component": "dateSelect",
"x-component-props": {
placeholder: '单据时间(全部)',
}
},
externalState: {
type: 'string',
"x-component-props": {
placeholder: '外部状态',
style: {
width: 160
}
},
enum: FILTEREXTERNALSTATE
},
interiorState: {
type: 'string',
"x-component-props": {
placeholder: '内部状态',
style: {
width: 160
}
},
enum: FILTERINTERNALSTATE
},
}
},
sumbit: {
"x-component": 'Submit',
"x-mega-props": {
span: 1
},
"x-component-props": {
children: '查询'
}
}
}
}
}
}
/** 采购询价 - 待新建需求单&待审核需求单一级&待审核需求单二级&待提交需求单 */
export const INQUIRYWAITORDER_SCHEMA: ISchema = {
type: 'object',
properties: {
megalayout: {
type: 'object',
"x-component": 'mega-layout',
"x-component-props": {
grid: true
},
properties: {
ctl: {
type: 'object',
"x-component": "Children",
"x-component-props": {
children: "{{controllerBtns}}"
}
},
purchaseInquiryNo: {
type: 'string',
"x-component": "Search",
"x-mega-props": {
},
"x-component-props": {
placeholder: '需求单号'
}
}
}
},
[FORM_FILTER_PATH]: {
type: 'object',
"x-component": "flex-layout",
"x-component-props": {
rowStyle: {
flexWrap: 'nowrap'
},
colStyle: {
marginLeft: 20
}
},
properties: {
PRO_LAYOUT: {
type: 'object',
"x-component": 'mega-layout',
"x-mega-props": {
span: 5
},
"x-component-props": {
inline: true
},
properties: {
details: {
type: 'string',
"x-component-props": {
placeholder: '需求摘要'
}
},
"[startTime,endTime]": {
type: 'string',
"x-component": "dateSelect",
"x-component-props": {
placeholder: '单据时间(全部)',
}
},
}
},
sumbit: {
"x-component": 'Submit',
"x-mega-props": {
span: 1
},
"x-component-props": {
children: '查询'
}
}
}
}
}
}
/** 采购需求单查询 */
export const PurchaseDemandSchema: ISchema = {
type: 'object',
......@@ -613,3 +788,4 @@ export const CONFIRMOFFERAUDIT_SCHEMA: ISchema = {
}
}
}
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