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

🦄refactor: 优化采购需求单 需求报价

parent 1ee04843
......@@ -9,6 +9,33 @@ const router = {
component: '@/pages/purchaseAbility/demandBidMgt/offer',
hidePageHeader: true,
},
{
/** 需求单详情 */
path: '/purchase/demandBidMgt/demand/detail',
name: '报价单查询',
component: '@/pages/purchaseAbility/demandBidMgt/demand',
hidePageHeader: true,
hideInMenu: true,
noMargin: true,
},
{
/** 报价详情 */
path: '/purchase/demandBidMgt/offer/preview',
name: '报价单查询',
component: '@/pages/purchaseAbility/demandBidMgt/preview',
hidePageHeader: true,
hideInMenu: true,
noMargin: true,
},
{
/** 报价单详情 */
path: '/purchase/demandBidMgt/offer/quote/detail',
name: '报价单查询',
component: '@/pages/purchaseAbility/demandBidMgt/quote',
hidePageHeader: true,
hideInMenu: true,
noMargin: true,
},
]
}
export default router
......@@ -7,46 +7,46 @@
*/
const router = {
path: '/demand',
path: '/purchase/demand',
name: '采购需求单审核',
routes: [
{
// 采购需求单查询
path: '/demand/demandInquiry',
path: '/purchase/demand/demandInquiry',
name: '采购需求单查询',
hidePageHeader: true,
component: '@/pages/demand/demandInquiry',
component: '@/pages/purchaseAbility/demand/demandInquiry',
},
{
// 采购需求单详情
path: '/demand/demandInquiry/preview',
path: '/purchase/demand/demandInquiry/preview',
name: '采购需求单详情',
component: '@/pages/demand/detail',
component: '@/pages/purchaseAbility/demand/detail',
hidePageHeader: true,
hideInMenu: true,
noMargin: true,
},
{
// 待审核采购需求单
path: '/demand/auditDemandInquiry',
path: '/purchase/demand/auditDemandInquiry',
name: '待审核采购需求单',
hidePageHeader: true,
component: '@/pages/demand/auditDemandInquiry',
component: '@/pages/purchaseAbility/demand/auditDemandInquiry',
},
{
// 采购需求单详情 审核
path: '/demand/auditDemandInquiry/detail',
path: '/purchase/demand/auditDemandInquiry/detail',
name: '待审核采购需求单详情',
component: '@/pages/demand/detail',
component: '@/pages/purchaseAbility/demand/detail',
hidePageHeader: true,
hideInMenu: true,
noMargin: true,
},
{
// 采购需求单详情
path: '/demand/auditDemandInquiry/preview',
path: '/purchase/demand/auditDemandInquiry/preview',
name: '待审核采购需求单详情',
component: '@/pages/demand/detail',
component: '@/pages/purchaseAbility/demand/detail',
hidePageHeader: true,
hideInMenu: true,
noMargin: true,
......
......@@ -12,7 +12,7 @@
// import commodity from './commodityRoute' // 商品审核路由
// import demandRoute from './demandRoute' //需求单审核
// import procurementRoute from './procurementRoute' //招标审核
import demandBidRoute from './demandBidRoute' //需求报价单管理
// import demandBidRoute from './demandBidRoute' //需求报价单管理
// import demandQuoteOrderRoute from './demandQuoteOrderRoute' //需求报价单管理
// import logisticsRoutes from './logisticsRoutes'
// import memberAbility from './memberAbility'
......@@ -59,7 +59,8 @@ const routeList = [
// exchangeManageRoutes,
// returnManageRoute,
// repairManageRoute,
demandBidRoute
// demandRoute,
// demandBidRoute
]
const router = [
......
......@@ -22,6 +22,9 @@ export interface PayPlatformPayConfig {
wayId?: any;
payType: number;
isPitchOn: number;
settlementWay: number;
settlementDays?: any;
settlementDate?: any;
}
export interface PayConfig {
......
......@@ -180,3 +180,8 @@ h6 {
top: 100%;
font-size: 12px;
}
.rate_style {
.ant-rate-star {
margin-right: 0px !important;
}
}
......@@ -32,7 +32,7 @@ const TYPE = {
const Detail: React.FC<{}> = () => {
const ref = useRef({});
const { id, number } = history.location.query;
const { id, number }: any = history.location.query;
const { pathname } = history.location;
const [type] = useState(pathname.split('/')[pathname.split('/').length - 1]);
const [modalVisible, setModalVisible] = useState<boolean>(false);
......
.tableStyle {
:global {
.ant-table-thead {
tr {
th {
padding: 10px;
.ant-space-item {
margin-bottom: 0;
}
}
}
}
.ant-table-expanded-row td {
padding: 0;
}
}
}
.childrenWrap {
background-color: #fff;
.childrenTitle {
height: 100%;
background: linear-gradient(to left, #FFFFFF, #DAF2E7);
color: #00B37A;
p {
padding-left: 16px;
margin: 0;
font-size: 12px;
height: 14px;
line-height: 14px;
}
padding: 12px 0;
}
.childrenContent {
margin-top: 8px;
p {
margin: 0;
span {
height: 12px;
font-size: 12px;
font-weight: 400;
color: #909399;
line-height: 12px;
padding-right: 10px;
}
}
}
}
import React, { useContext, useEffect, useState } from 'react';
import { Tabs, Table, Row, Col, Space, Typography, Button } from 'antd';
import { Context } from '../context';
import Card from '../../../card';
import { PublicApi } from '@/services/api';
import style from './index.less';
import { CaretDownOutlined, CaretRightOutlined } from '@ant-design/icons';
export interface BidInfoProps {
fetch?: () => Promise<unknown>,
effect?: any,
}
const chNum: { [key: number]: string } = {
1: '一',
2: '二',
3: '三',
4: '四',
5: '五',
6: '六',
7: '七',
8: '八',
9: '九',
}
const BidInfoLayout: React.FC<BidInfoProps> = (props: any) => {
const { effect, fetch } = props
const context = useContext(Context);
const [dataSource, setDataSource] = useState<any>([]);
const [turn, setTurn] = useState<Array<number>>([]);
const [totalAmount, setTotalAmount] = useState<number>(0)
/** 轮次 */
const handleTurn = (num: number) => {
let isTurn: Array<number> = [];
for (let i = 0; i < num; i += 1) {
isTurn.push(i + 1)
}
setTurn(isTurn.reverse());
}
const columns = [
{
title: '物料编号/名称',
key: 'number',
dataIndex: 'number'
},
{
title: '规格',
key: 'model',
dataIndex: 'model'
},
{
title: '品类',
key: 'category',
dataIndex: 'category'
},
{
title: '品牌',
key: 'brand',
dataIndex: 'brand'
},
{
title: '采购数量/单位',
key: 'purchaseCount',
dataIndex: 'purchaseCount',
render: (text: any, record: any) => (
<>
<Typography.Text>{text}</Typography.Text>
&nbsp;
<Typography.Text type="secondary">{`(${record.unit})`}</Typography.Text>
</>
)
},
{
title: '含税/税率',
key: 'isTax',
dataIndex: 'isTax'
},
{
title: '单价(含税)',
key: 'taxUnitPrice',
dataIndex: 'taxUnitPrice'
},
{
title: (
<Space direction='vertical'>
<Typography.Text>金额(含税)</Typography.Text>
<Typography.Text>合计: ¥{totalAmount.toFixed(2)}</Typography.Text>
</Space>
),
key: 'taxPrice',
dataIndex: 'taxPrice'
}
]
/** 物料信息 */
const fetchDataSource = (params: any) => {
fetch({ ...params }).then((res: any) => {
if (res.code !== 1000) {
return
}
const { data } = res.data
setDataSource(data)
let total: number = 0;
data.forEach((item) => {
total += item.taxPrice
})
setTotalAmount(total)
})
}
/** 物料信息 */
useEffect(() => {
if (effect.turn) {
fetchDataSource({
id: effect.id,
turn: effect.turn,
current: '1',
pageSize: '10',
})
handleTurn(effect.turn)
}
}, [effect.turn])
return (
<Card
id='bidInfoLayout'
title='报价信息'
>
<Tabs defaultActiveKey="1">
{turn.map((item) => (
<Tabs.TabPane key={`trun${item}`} tab={`第${chNum[item]}轮`}>
<Table
className={style.tableStyle}
columns={columns}
rowKey='id'
expandable={{
expandedRowRender: record => (
<div className={style.childrenWrap}>
<Row>
<Col span={3}>
<div className={style.childrenTitle}>
<p>对应</p>
<p>招标商品</p>
</div>
</Col>
<Col span={6}>
<div className={style.childrenContent}>
<p><span>商品ID:</span>{record.productId}</p>
<p><span>商品名称:</span>{record.productName}</p>
</div>
</Col>
<Col span={6}>
<div className={style.childrenContent}>
<p><span>规格:</span>-</p>
<p><span>品类:</span>-</p>
</div>
</Col>
<Col span={6}>
<div className={style.childrenContent}>
<p><span>品牌:</span>{record.productBrand}</p>
</div>
</Col>
<Col span={3}>
<div
className={style.childrenContent}
>
<Button type='link'>查看</Button>
</div>
</Col>
</Row>
</div>
),
expandIcon: ({ expanded, onExpand, record }) =>
expanded ? (
<CaretDownOutlined onClick={e => onExpand(record, e)} />
) : (
<CaretRightOutlined onClick={e => onExpand(record, e)} />
)
}}
dataSource={dataSource}
pagination={{ size: "small" }}
/>
</Tabs.TabPane>
))}
</Tabs>
</Card>
)
}
export default BidInfoLayout
......@@ -2,10 +2,10 @@ import React, { useContext } from 'react';
import { Row, Col, Checkbox, InputNumber, Divider, Form, Typography } from 'antd';
import style from './index.less';
import { useBidTable } from '../../../effects/useBidTable';
import { BidDetailContext } from '../context'
import level1 from '@/assets/icons/the_first.png';
import level2 from '@/assets/icons/the_second.png';
import level3 from '@/assets/icons/the_third.png';
import { BidDetailContext } from '../context';
import level1 from '@/asserts/icons/the_first.png';
import level2 from '@/asserts/icons/the_second.png';
import level3 from '@/asserts/icons/the_third.png';
import { CheckCircleOutlined } from '@ant-design/icons';
export interface ReduxProps {
......
......@@ -44,7 +44,7 @@ const ContrastLyout: React.FC<ContrastProps> = (props: any) => {
dataIndex: 'quotedPriceNo',
render: (text: any, record: any) => (
<Space direction='vertical'>
<EyePreview>{text}</EyePreview>
<EyePreview url={`/memberCenter/procurementAbility/confirmOffer/quote/detail?id=${record.id}&number=${record.quotedPriceNo}`}>{text}</EyePreview>
<Typography.Text>{record.details}</Typography.Text>
</Space>
)
......
.list {
display: flex;
h5 {
margin-bottom: 2em;
}
.listLable {
flex: 0 0 25%;
color: #909399;
}
}
import React, { useContext } from 'react';
import { Row, Col, Image, Table, Tooltip } from 'antd';
import Card from '../../../card';
import { Context } from '../context';
import style from './index.less';
import { QuestionCircleOutlined } from '@ant-design/icons';
const TYPE = {
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',
}
export interface DemandLayoutIProps {
storeList?: any
}
const DemandLayout: React.FC<DemandLayoutIProps> = (props: any) => {
const { storeList } = props;
const context = useContext(Context);
const columns = [
{
title: '序号',
key: 'number',
dataIndex: 'number',
render: (text: any, record: any, index: number) => <>{index + 1}</>
},
{
title: '会员名称',
key: 'memberName',
dataIndex: 'memberName',
},
{
title: '会员类型',
key: 'memberTypeName',
dataIndex: 'memberTypeName',
},
{
title: '会员角色',
key: 'roleName',
dataIndex: 'roleName',
},
{
title: '会员等级',
key: 'levelTag',
dataIndex: 'levelTag',
},
{
title: '是否归属会员',
key: 'membershipOrNot',
dataIndex: 'membershipOrNot',
},
{
title: (
<>
<span>需求发送</span>
<Tooltip placement="top" title='打开开关,审核通过后,将发送需求至选择的归属会员'>
<QuestionCircleOutlined
style={{
marginLeft: '5px',
fontSize: '14px',
color: '#909399'
}}
/>
</Tooltip>
</>
),
key: 'state',
dataIndex: 'state',
},
{
title: '操作',
key: 'operate',
dataIndex: 'operate',
},
]
return (
<Card
id='demandLayout'
title='需求对接'
>
<div className={style.list}>
<h5 className={style.listLable} style={{ flex: '0 0 100px' }}>发布方式:</h5>
<h5 className={style.listContent}>{TYPE[context.type]}</h5>
</div>
{context.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>
)}
{context.type !== 1
&& (
<Table
dataSource={context.demandMembers}
columns={columns}
rowKey='id'
/>
)}
</Card>
)
}
export default DemandLayout;
import React, { useRef } from 'react';
import { StandardTable } from 'god';
import Card from '../../../card';
import EyePreview from '@/components/EyePreview';
export interface IPROPS {
id?: number,
number?: number,
fetch?: () => Promise<unknown>,
}
const MaterialLayout: React.FC<IPROPS> = (props: any) => {
const { id, number, fetch } = props;
const currentRef = useRef({});
const columns = [
{
title: '物料编号',
key: 'number',
dataIndex: 'number',
},
{
title: '物料名称',
key: 'name',
dataIndex: 'name',
render: (text: any, record: any) => <EyePreview type='button'>{text}</EyePreview>
},
{
title: '规格型号',
key: 'model',
dataIndex: 'model',
},
{
title: '品类',
key: 'category',
dataIndex: 'category',
},
{
title: '品牌',
key: 'brand',
dataIndex: 'brand',
},
{
title: '单位',
key: 'unit',
dataIndex: 'unit',
},
{
title: '采购数量',
key: 'purchaseCount',
dataIndex: 'purchaseCount',
},
];
const productlist = (params: any) => {
return new Promise(resolve => {
fetch({id, number, ...params}).then((res: any) => {
resolve(res.data)
})
})
}
return (
<Card
id='materialLayout'
title='采购材料'
>
<StandardTable
currentRef={currentRef}
columns={columns}
tableProps={{ rowKew: 'id' }}
fetchTableData={(params: any) => productlist(params)}
/>
</Card>
)
}
export default MaterialLayout;
.cell {
display: flex;
h5 { margin-bottom: 2em; }
.label {
flex: 0 0 25%;
color: #909399;
}
}
/** 详情通用 - 基本信息 */
import React from 'react';
import { Row, Col } from 'antd';
import Card from '../../../card';
import style from './index.less';
export interface OtherInfoProps {
effect?: any,
}
const count = 0;
const OtherLayout: React.FC<OtherInfoProps> = (props: any) => {
const { effect } = props;
return (
<Card
id='otherLayout'
title='其他说明'
>
<Row gutter={[8, 8]}>
{effect.length > count && effect.map((item, index) => (
<Col key={`effect_${index + 1}`} span={8}>
{ item.col.map((it, idx) => (
<div className={style.cell} key={`effect_col_${idx + 1}`}>
<h5 className={style.label}>{it.label}: </h5>
<h5 className={style.content}>{it.extra}</h5>
</div>
))}
</Col>
))}
</Row>
</Card>
)
}
export default OtherLayout
......@@ -15,6 +15,8 @@ export type tabLink = {
export interface IProps {
/** 单号 */
no?: string,
/** 详情描述 */
detail?: string,
/** 锚点Link */
tabLink?: Array<tabLink>,
/** 审核操作按钮放这 */
......@@ -26,6 +28,7 @@ export interface IProps {
const PeripheralLayout: React.FC<IProps> = (props: any) => {
const {
no,
detail,
tabLink,
effect,
components,
......@@ -67,8 +70,8 @@ const PeripheralLayout: React.FC<IProps> = (props: any) => {
<div className={style.titleBox}>
<ArrowLeftOutlined className={style.goBack} onClick={() => history.goBack()} />
<span className={style.titleContext}>
{dataSource.details}
|
{detail ? detail : dataSource.details}
&nbsp;|&nbsp;
{no}
</span>
</div>
......
import React, { useEffect } from 'react';
import { Modal } from 'antd';
import {
SchemaForm, SchemaMarkupField as Field,
createFormActions,
FormEffectHooks,
} from '@formily/antd'
import { Input, Radio, DatePicker, Checkbox } from '@formily/antd-components'
import moment from 'moment';
const actions = createFormActions()
const { onFieldChange$ } = FormEffectHooks;
export interface IProps {
title: string,
visible: boolean,
id: number,
modalType: 'audit' | 'abandon' | 'date' | 'next' | 'key',
onCancel?: () => void,
onOk?: () => void,
fetch?: () => Promise<unknown>,
}
const ModalOperate: React.FC<IProps> = (props: any) => {
const {
title,
visible,
id,
onCancel,
onOk,
modalType,
fetch,
} = props;
const useFormEffects = () => {
const { setFieldState } = createFormActions()
if (modalType === 'audit') {
onFieldChange$('state').subscribe(({ value }) => {
setFieldState('auditOpinion', state => {
if (value == 1) {
state.visible = false
} else {
state.visible = true
}
})
})
}
if (modalType === 'date') {
onFieldChange$('checkbox').subscribe(({ value }) => {
if (value && value.length > 0) {
actions.setFieldValue('quotedPriceTime', moment().format());
} else {
actions.setFieldValue('quotedPriceTime', undefined);
}
})
}
}
const disabledDate = (current) => {
return current && current <= moment().startOf('day');
}
const modalText = modalType === 'audit' ? '审核不通过原因' : '作废原因';
const modalNode = () => {
switch (modalType) {
case 'audit':
return <Field
enum={
[
{ label: '审核通过', value: 1 },
{ label: '审核不通过', value: 0 }
]}
name='state'
required
x-component="Radio"
x-component-props={{}}
/>
case 'abandon':
return <Field
title="作废时间"
name="reasonTime"
required
x-component="DatePicker"
x-component-props={{
style: {
width: '100%'
},
format: 'YYYY-MM-DD HH:mm:ss',
disabledDate,
}}
/>
case 'date':
return <>
<Field
title="报价截止时间"
name="quotedPriceTime"
required
x-component="DatePicker"
x-component-props={{
style: {
width: '100%'
},
format: 'YYYY-MM-DD HH:mm:ss',
disabledDate,
}}
/>
<Field
name="checkbox"
x-component="CheckboxGroup"
description="勾选后供应商不能再提交报价单"
enum={[{label: '立即截止报价', value: 1}]}
/>
</>
case 'next':
return <Field
title="下轮报价截止时间"
name="quotedPriceTime"
required
x-component="DatePicker"
x-component-props={{
style: {
width: '100%'
},
format: 'YYYY-MM-DD HH:mm:ss',
disabledDate,
}}
/>
case 'key':
return <Field
title="请输入解密密钥"
x-component="Input"
name="password"
required
x-component-props={{}}
/>
}
}
useEffect(() => {
if (modalType === 'next') {
actions.setFieldValue('quotedPriceTime', moment().format())
}
}, [])
const handleSubmit = (val: any) => {
let value = { ...val }
let params: any = {}
if (modalType === 'audit') {
params.state = value.state;
value.state !== 1 && (params.auditOpinion = value.auditOpinion);
} else if (modalType === 'abandon') {
params.reason = value.reason
params.reasonTime = new Date(value.reasonTime).getTime();
} else if (modalType === 'date') {
params.quotedPriceTime = new Date(value.quotedPriceTime).getTime();
} else if (modalType === 'next') {
params.quotedPriceTime = new Date(value.quotedPriceTime).getTime();
} else {
params.password = value.password;
}
fetch({ id, ...params }).then(res => {
if (res.code === 1000) {
onOk()
}
})
}
const handleClose = () => {
onCancel();
actions.reset();
}
return (
<Modal
width={600}
title={title}
visible={visible}
onCancel={handleClose}
onOk={() => actions.submit()}
afterClose={() => actions.reset()}
>
<SchemaForm
layout="vertical"
labelCol={6}
components={{
Input,
Radio: Radio.Group,
TextArea: Input.TextArea,
DatePicker,
Checkbox,
CheckboxGroup: Checkbox.Group
}}
actions={actions}
effects={() => useFormEffects()}
onSubmit={(values) => handleSubmit(values)}
initialValues={{
state: 1
}}
>
{modalNode()}
{(modalType === 'audit' || modalType === 'abandon')
&& (<Field
title={modalText}
name={modalType === 'audit' ? 'auditOpinion' : 'reason'}
x-component="TextArea"
required
x-component-props={{
placeholder: '在此输入你的内容,最多60个汉字'
}}
x-rules={{
max: 60,
message: '原因最多60个汉字'
}}
/>)}
</SchemaForm>
</Modal>
)
}
export default ModalOperate;
import React, { useRef, useState } from 'react';
import Table from '../../components/table'
import { history } from 'umi';
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, Tag, Typography, Space } from 'antd';
import {
OFFTER_EXTERNALSTATE,
OFFTER_EXTERNALSTATE_COLOR,
} from '../../constants';
const { Text } = Typography;
const AuditInquiryOne = () => {
const ref = useRef<any>({});
const format = (text) => {
return <>{moment(text).format("YYYY-MM-DD HH:mm:ss")}</>
}
const [rowkeys, setRowKeys] = useState<Array<number>>([]);
/** 批量审核 */
const fetchSubmitBatch = async () => {
const res = await PublicApi.postPurchasePlatformPurchaseInquiryExamineBatch({ ids: rowkeys });
if (res.code === 1000) {
ref.current.reload();
}
}
const columns: ColumnType<any>[] = [{
title: '需求单号/摘要',
key: 'purchaseInquiryNo',
dataIndex: 'purchaseInquiryNo',
render: (text: any, record: any) => (
<Space direction='vertical'>
<EyePreview
url={`/purchase/demand/auditDemandInquiry/preview?id=${record.id}&number=${record.purchaseInquiryNo}`}>{text}</EyePreview>
<Text type="secondary">{record.details}</Text>
</Space>
)
}, {
title: '需求会员',
key: 'memberName',
dataIndex: 'memberName',
}, {
title: '交付日期',
key: 'deliveryTime',
dataIndex: 'deliveryTime',
render: (text: any, record: any) => format(text)
}, {
title: '报价截止时间',
key: 'quotationAsTime',
dataIndex: 'quotationAsTime',
render: (text: any, record: any) => format(text)
}, {
title: '单据时间',
key: 'voucherTime',
dataIndex: 'voucherTime',
render: (text: any, record: any) => format(text)
}, {
title: '外部状态',
key: 'externalState',
dataIndex: 'externalState',
render: (text: any, record: any) => <Tag color={OFFTER_EXTERNALSTATE_COLOR[text]}>{OFFTER_EXTERNALSTATE[text]}</Tag>
}, {
title: '操作',
key: 'operate',
dataIndex: 'operate',
render: (text: any, record: any) => (
<>
<Button
type='link'
onClick={() => history.push(`/purchase/demand/auditDemandInquiry/detail?id=${record.id}&number=${record.purchaseInquiryNo}`)}
>
审核
</Button>
</>
)
}];
return (
<Table
selectedRow
reload={ref}
schemaType="PurchaseDemandPublic"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchasePlatformPurchaseInquiryExamineList}
fetchRowkeys={(e) => setRowKeys(e)}
controllerBtns={
<Row>
<Col span={6}>
<Button
disabled={rowkeys.length === 0}
onClick={fetchSubmitBatch}
>
批量提交审核
</Button>
</Col>
</Row>
}
/>
)
}
export default AuditInquiryOne
import React, { useRef } from 'react';
import Table from '../../components/table';
import { Tag, Typography, Space } from 'antd';
import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
import moment from 'moment';
import { PublicApi } from '@/services/api';
import {
OFFTER_EXTERNALSTATE,
OFFTER_EXTERNALSTATE_COLOR,
} from '../../constants';
const { Text } = Typography;
const Inquiry = () => {
const ref = useRef<any>({});
const format = (text) => {
return <>{moment(text).format("YYYY-MM-DD HH:mm:ss")}</>
}
const columns: ColumnType<any>[] = [{
title: '需求单号/摘要',
key: 'purchaseInquiryNo',
dataIndex: 'purchaseInquiryNo',
render: (text: any, record: any) => (
<Space direction='vertical'>
<EyePreview
url={`/purchase/demand/demandInquiry/preview?id=${record.id}&number=${record.purchaseInquiryNo}`}>{text}</EyePreview>
<Text type="secondary">{record.details}</Text>
</Space>
)
}, {
title: '需求会员',
key: 'memberName',
dataIndex: 'memberName',
}, {
title: '交付日期',
key: 'deliveryTime',
dataIndex: 'deliveryTime',
render: (text: any, record: any) => format(text)
}, {
title: '报价截止时间',
key: 'quotationAsTime',
dataIndex: 'quotationAsTime',
render: (text: any, record: any) => format(text)
}, {
title: '单据时间',
key: 'voucherTime',
dataIndex: 'voucherTime',
render: (text: any, record: any) => format(text)
}, {
title: '外部状态',
key: 'externalState',
dataIndex: 'externalState',
render: (text: any, record: any) => <Tag color={OFFTER_EXTERNALSTATE_COLOR[text]}>{OFFTER_EXTERNALSTATE[text]}</Tag>
}];
return (
<>
<Table
schemaType="PurchaseDemand"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchasePlatformPurchaseInquiryList}
reload={ref}
/>
</>
)
}
export default Inquiry
import React, { Fragment, useEffect, useState } from 'react';
import { Tag, Badge, Tooltip, Button } from 'antd';
import { history } from 'umi';
import { PublicApi } from '@/services/api';
import { GlobalConfig } from '@/global/config'
import { Context } from '../../components/detail/components/context';
import PeripheralLayout from '../../components/detail';
import ProgressLayout from '../../components/detail/components/progressLayout';
import BasicLayout from '../../components/detail/components/basicLayout';
import ConditionLayout from '../../components/detail/components/conditionLayout';
import RecordLyout from '../../components/detail/components/recordLyout';
import moment from 'moment';
import {
OFFTER_EXTERNALSTATE,
OFFTER_EXTERNALSTATE_COLOR,
OFFTER_INTERNALSTATE,
OFFTER_INTERNALSTATE_COLOR
} from '../../constants';
import { CheckCircleOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import MaterialLayout from '../../components/detail/components/materialLayout';
import DemandLayout from '../../components/detail/components/demandLayout';
import ModalOperate from '../../components/modalOperate';
const ICON_STYLE: any = {
color: '#C0C4CC',
fontSize: '14px',
marginLeft: '5px'
}
const TABLINK = [
{ id: 'progressLayout', title: '流转进度' },
{ id: 'basicLayout', title: '基本信息' },
{ id: 'materialLayout', title: '采购材料' },
{ id: 'conditionLayout', title: '交易条件' },
{ id: 'demandLayout', title: '需求对接' },
{ id: 'recordLyout', title: '流转记录' },
]
const DemandDetailed = () => {
const format = (text) => {
return <>{moment(text).format("YYYY-MM-DD HH:mm:ss")}</>
}
const {
query: {
id,
number
},
pathname,
}: any = history.location;
const [path] = useState(pathname.split('/')[pathname.split('/').length - 1]);
const [visible, setVisible] = useState<boolean>(false);
const [dataSource, setDataSource] = useState<any>({});
const [basicEffect, setBasicEffect] = useState<any>([]);
const [conditionEffect, setConditionEffect] = useState<any>([]);
const [areas, setAreas] = useState<any>([]);
const [storeList, setStoreList] = useState<Array<any>>([]);
const handleBasicEffect = (data: any) => {
setBasicEffect([
{
col: [
{ label: '需求单号', extra: data.purchaseInquiryNo },
{ 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: format(data.createTime) },
]
},
{
col: [
{ label: '需求摘要', extra: data.details },
{
label: '采购类型', extra: (
<Tooltip placement="top" title='有固定采购金额:采购金额固定,合同期内不可超过采购金额,无固定采购金额:采购金额不固定,可在合同期内按需采购'>
{data.purchaseType === 1 ? '有固定采购金额' : '无固定采购金额'}<QuestionCircleOutlined style={ICON_STYLE} />
</Tooltip>
)
},
{
label: '比价方式', extra: (
<Tooltip placement="top" title='密封比价:只能看到供应商是否有报价,不能看到供应商的报价明细,只能解封后才能看到报价明细,非密封比价:可以在供应商报完价后立即看到报价明细,无须解封'>
{data.priceContrast === 1 ? '密封比价' : '非密封比价'}<QuestionCircleOutlined style={ICON_STYLE} />
</Tooltip>
)
},
{ label: '会员名称', extra: data.memberName },
]
},
{
col: [
{
label: '适用地市', extra: (
<div>
{areas.map((item: any, index: number) => (
<p key={`areas${index + 1}`}>{item}</p>
))}
</div>
)
},
]
},
])
}
const handleConditionEffect = (data: any) => {
setConditionEffect([
{
col: [
{ label: '交付日期', extra: format(data.deliveryTime) },
{ label: '交付地址', extra: data.address },
{ label: '截止日期', extra: format(data.offerEndTime) },
]
},
{
col: [
{ label: '报价要求', extra: data.offer },
{ label: '付款方式', extra: data.paymentType },
{ label: '税费要求', extra: data.taxes },
]
},
{
col: [
{ label: '物流要求', extra: data.logistics },
{ label: '包装要求', extra: data.packRequire },
{ label: '其他要求', extra: data.otherRequire },
]
},
])
}
const fetchDataSource = async () => {
let shopList = GlobalConfig.web.shopInfo.filter(v => v.type == 1).map(
v => v
)
const params = {
id,
number,
current: '1',
pageSize: '1'
}
await PublicApi.getPurchasePlatformPurchaseInquiryDetails({ ...params }).then((res: any) => {
if (res.code !== 1000) {
history.goBack();
return;
}
const { data } = res;
const areas: string[] = [];
if (data.areas) {
data.areas.forEach(item => {
areas.push(`${item.province}/${item.city}`)
})
setAreas(areas);
}
if (data.shopIds) {
const ids = data.shopIds;
const filterStore = shopList.filter(item => ids.indexOf(item.id) !== -1);
setStoreList([...filterStore]);
}
setDataSource(data);
handleBasicEffect(data);
handleConditionEffect(data);
})
}
useEffect(() => {
fetchDataSource();
}, [])
return (
<Context.Provider value={dataSource}>
<PeripheralLayout
no={dataSource.purchaseInquiryNo}
tabLink={TABLINK}
effect={
<>
{path === 'detail'
&& (
<Button
onClick={() => setVisible(true)}
type='primary'
>
<CheckCircleOutlined />
单据审核
</Button>
)}
</>
}
components={
<Fragment>
<ProgressLayout />
<BasicLayout effect={basicEffect} />
<MaterialLayout
id={id}
number={number}
fetch={PublicApi.getPurchasePurchaseInquiryProductlistList}
/>
<ConditionLayout effect={conditionEffect} />
<DemandLayout storeList={storeList} />
<RecordLyout />
</Fragment>
}
/>
<ModalOperate
id={id}
title="单据审核"
modalType="audit"
visible={visible}
fetch={PublicApi.postPurchasePlatformPurchaseInquiryExamine}
onCancel={() => setVisible(false)}
onOk={() => history.goBack()}
/>
</Context.Provider>
)
}
export default DemandDetailed;
import React, { Fragment, useEffect, useState } from 'react';
import { Tag, Badge, Tooltip } from 'antd';
import { history } from 'umi';
import { PublicApi } from '@/services/api';
import { GlobalConfig } from '@/global/config'
import { Context } from '../../components/detail/components/context';
import PeripheralLayout from '../../components/detail';
import ProgressLayout from '../../components/detail/components/progressLayout';
import BasicLayout from '../../components/detail/components/basicLayout';
import ConditionLayout from '../../components/detail/components/conditionLayout';
import RecordLyout from '../../components/detail/components/recordLyout';
import moment from 'moment';
import {
OFFTER_EXTERNALSTATE,
OFFTER_EXTERNALSTATE_COLOR,
OFFTER_INTERNALSTATE,
OFFTER_INTERNALSTATE_COLOR
} from '../../constants';
import { QuestionCircleOutlined } from '@ant-design/icons';
import MaterialLayout from '../../components/detail/components/materialLayout';
import DemandLayout from '../../components/detail/components/demandLayout';
const ICON_STYLE: any = {
color: '#C0C4CC',
fontSize: '14px',
marginLeft: '5px'
}
const TABLINK = [
{ id: 'progressLayout', title: '流转进度' },
{ id: 'basicLayout', title: '基本流程' },
{ id: 'materialLayout', title: '采购材料' },
{ id: 'conditionLayout', title: '交易条件' },
{ id: 'demandLayout', title: '需求对接' },
{ id: 'recordLyout', title: '流转记录' },
]
const DemandDetailed = () => {
const format = (text) => {
return <>{moment(text).format("YYYY-MM-DD HH:mm:ss")}</>
}
const {
query: {
id,
number
},
}: any = history.location;
const [dataSource, setDataSource] = useState<any>({});
const [basicEffect, setBasicEffect] = useState<any>([]);
const [conditionEffect, setConditionEffect] = useState<any>([]);
const [areas, setAreas] = useState<any>([]);
const [storeList, setStoreList] = useState<Array<any>>([]);
const handleBasicEffect = (data: any) => {
setBasicEffect([
{
col: [
{ label: '需求单号', extra: data.purchaseInquiryNo },
{ 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: format(data.createTime) },
]
},
{
col: [
{ label: '需求摘要', extra: data.details },
{
label: '采购类型', extra: (
<Tooltip placement="top" title='有固定采购金额:采购金额固定,合同期内不可超过采购金额,无固定采购金额:采购金额不固定,可在合同期内按需采购'>
{data.purchaseType === 1 ? '有固定采购金额' : '无固定采购金额'}<QuestionCircleOutlined style={ICON_STYLE} />
</Tooltip>
)
},
{
label: '比价方式', extra: (
<Tooltip placement="top" title='密封比价:只能看到供应商是否有报价,不能看到供应商的报价明细,只能解封后才能看到报价明细,非密封比价:可以在供应商报完价后立即看到报价明细,无须解封'>
{data.priceContrast === 1 ? '密封比价' : '非密封比价'}<QuestionCircleOutlined style={ICON_STYLE} />
</Tooltip>
)
},
{ label: '会员名称', extra: data.memberName },
]
},
{
col: [
{
label: '适用地市', extra: (
<div>
{areas.map((item: any, index: number) => (
<p key={`areas${index + 1}`}>{item}</p>
))}
</div>
)
},
]
},
])
}
const handleConditionEffect = (data: any) => {
setConditionEffect([
{
col: [
{ label: '交付日期', extra: format(data.deliveryTime) },
{ label: '交付地址', extra: data.address },
{ label: '截止日期', extra: format(data.offerEndTime) },
]
},
{
col: [
{ label: '报价要求', extra: data.offer },
{ label: '付款方式', extra: data.paymentType },
{ label: '税费要求', extra: data.taxes },
]
},
{
col: [
{ label: '物流要求', extra: data.logistics },
{ label: '包装要求', extra: data.packRequire },
{ label: '其他要求', extra: data.otherRequire },
]
},
])
}
const fetchDataSource = async () => {
let shopList = GlobalConfig.web.shopInfo.filter(v => v.type == 1).map(
v => v
)
const params = {
id,
number,
current: '1',
pageSize: '1'
}
await PublicApi.getPurchasePurchaseInquiryDetails({ ...params }).then(res => {
if (res.code !== 1000) {
history.goBack();
return;
}
const { data } = res;
const areas: string[] = [];
if (data.areas) {
data.areas.forEach(item => {
areas.push(`${item.province}/${item.city}`)
})
setAreas(areas);
}
if (data.shopIds) {
const ids = data.shopIds;
const filterStore = shopList.filter(item => ids.indexOf(item.id) !== -1);
setStoreList([...filterStore]);
}
setDataSource(data);
handleBasicEffect(data);
handleConditionEffect(data);
})
}
useEffect(() => {
fetchDataSource();
}, [])
return (
<Context.Provider value={dataSource}>
<PeripheralLayout
no={dataSource.purchaseInquiryNo}
tabLink={TABLINK}
components={
<Fragment>
<ProgressLayout />
<BasicLayout effect={basicEffect} />
<MaterialLayout
id={id}
number={number}
fetch={PublicApi.getPurchasePurchaseInquiryProductlistList}
/>
<ConditionLayout effect={conditionEffect} />
<DemandLayout storeList={storeList} />
<RecordLyout />
</Fragment>
}
/>
</Context.Provider>
)
}
export default DemandDetailed;
......@@ -26,7 +26,7 @@ const Offter = () => {
key: 'purchaseInquiryNo',
dataIndex: 'purchaseInquiryNo',
render: (text: any, record: any) => (
<EyePreview>{text}</EyePreview>
<EyePreview url={`/purchase/demandBidMgt/demand/detail?id=${record.purchaseInquiryId}&number=${record.purchaseInquiryNo}`}>{text}</EyePreview>
)
}, {
title: '需求摘要',
......@@ -81,20 +81,13 @@ const Offter = () => {
title: '内部状态',
key: 'interiorState',
dataIndex: 'interiorState',
render: (text: any, record: any) => (
<>
{ record.externalState === OFFTER_EXTERNALSTATE_TYPE.WAITSUBMIOFFER_TYPE ?
<Tag color={OFFTER_INTERNALSTATE_COLOR[text]}>{record.interiorStateName}</Tag> :
<Tag color={OFFTER_CONFIRMINTERIORSTATE_COLOR[record.confirmInteriorState]}>{record.confirmInteriorStateName}</Tag>
}
</>
)
render: (text: any, record: any) => <Tag color={OFFTER_INTERNALSTATE_COLOR[text]}>{record.interiorStateName}</Tag>
}, {
title: '操作',
key: 'operate',
dataIndex: 'operate',
render: (text: any, record: any) => (
<Button type='link' onClick={() => history.push(`/memberCenter/procurementAbility/confirmOffer/offerInquire/preview?id=${record.id}&turn=${record.turn}`)}>查看</Button>
<Button type='link' onClick={() => history.push(`/purchase/demandBidMgt/offer/preview?id=${record.id}&number=${record.quotedPriceNo}&turn=${record.turn}`)}>查看</Button>
)
}];
......
import React, { useState, useEffect, Fragment } from 'react';
import { PublicApi } from '@/services/api';
import { Tag, Badge, Tooltip } from 'antd';
import { Context } from '../../components/detail/components/context';
import { history } from 'umi';
import PeripheralLayout from '../../components/detail';
import ProgressLayout from '../../components/detail/components/progressLayout';
import BasicLayout from '../../components/detail/components/basicLayout';
import ConditionLayout from '../../components/detail/components/conditionLayout';
import ContrastLyout from '../../components/detail/components/contrastLyout';
import RecordLyout from '../../components/detail/components/recordLyout';
import {
OFFTER_EXTERNALSTATE,
OFFTER_EXTERNALSTATE_COLOR,
OFFTER_INTERNALSTATE,
OFFTER_INTERNALSTATE_COLOR,
} from '../../constants';
import { QuestionCircleOutlined } from '@ant-design/icons';
import moment from 'moment';
const ICONSTYLE: any = {
color: '#C0C4CC',
fontSize: '14px',
marginLeft: '5px'
}
const TABLINK = [
{ id: 'progressLayout', title: '流转进度' },
{ id: 'basicLayout', title: '基本信息' },
{ id: 'conditionLayout', title: '交易条件' },
{ id: 'contrastLyout', title: '报价信息' },
{ id: 'recordLyout', title: '流转记录' },
]
const ContrastPreview = () => {
const format = (text) => {
return <>{moment(text).format("YYYY-MM-DD HH:mm:ss")}</>
}
const { query: { id, number, turn } }: any = history.location;
const [dataSource, setDataSource] = useState<any>({});
const [basicEffect, setBasicEffect] = useState<any>([]);
const [conditionEffect, setConditionEffect] = useState<any>([]);
const handleBasicEffect = (data: any) => {
setBasicEffect([
{
col: [
{ label: '需求单号', extra: data.purchaseInquiryNo },
{ label: '需求摘要', extra: data.details },
{ 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]} /> },
]
},
{
col: [
{
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 },
]
},
{
col: [
{ label: '单据时间', extra: format(data.createTime) },
{ label: '适用地市', extra: '-' },
]
},
])
}
const handleConditionEffect = (data: any) => {
setConditionEffect([
{
col: [
{ label: '交付日期', extra: format(data.deliveryTime) },
{ label: '交付地址', extra: data.address },
{ label: '报价截止时间', extra: format(data.offerEndTime) },
]
},
{
col: [
{ label: '报价要求', extra: data.offer },
{ label: '付款方式', extra: data.paymentType },
{ label: '税费要求', extra: data.taxes },
]
},
{
col: [
{ label: '物流要求', extra: data.logistics },
{ label: '包装要求', extra: data.packRequire },
{ label: '其他要求', extra: data.otherRequire },
]
},
])
}
const handleGetDataSource = async () => {
const parmas = {
id,
number
}
await PublicApi.getPurchaseQuotedPricePlatformDetails({ ...parmas }).then(res => {
if (res.code === 1000) {
const { data } = res;
setDataSource(data)
handleBasicEffect(data);
handleConditionEffect(data);
}
})
}
useEffect(() => {
handleGetDataSource()
}, [])
return (
<Context.Provider value={dataSource}>
<PeripheralLayout
no={dataSource.purchaseInquiryNo}
tabLink={TABLINK}
components={
<Fragment>
<ProgressLayout />
<BasicLayout effect={basicEffect} />
<ConditionLayout effect={conditionEffect} />
<ContrastLyout preview={true} effect={{ id, turn }} />
<RecordLyout />
</Fragment>
}
/>
</Context.Provider>
)
}
export default ContrastPreview
import React, { useState, useEffect, Fragment, useCallback } from 'react';
import { PublicApi } from '@/services/api';
import { history } from 'umi';
import moment from 'moment';
import { Tag } from 'antd';
import { Context } from '../../components/detail/components/context';
import PeripheralLayout from '../../components/detail';
import BasicLayout from '../../components/detail/components/basicLayout';
import OtherLayout from '../../components/detail/components/otherLayout';
import BidInfoLayout from '../../components/detail/components/bidInfoLayout';
import {
OFFTER_EXTERNALSTATE,
OFFTER_EXTERNALSTATE_COLOR,
} from '../../constants';
const TABLINK = [
{ id: 'basicLayout', title: '基本信息' },
{ id: 'contrastLyout', title: '报价信息' },
{ id: 'otherLyout', title: '其他说明' },
]
const QuoteDetails = () => {
const format = (text) => {
return <>{moment(text).format("YYYY-MM-DD HH:mm:ss")}</>
}
const { query: { id, number }, pathname }: any = history.location;
const [dataSource, setDataSource] = useState<any>({});
const [basicEffect, setBasicEffect] = useState<any>([]);
const [otherEffect, setOtherEffect] = useState<any>([]);
const handleBasicEffect = (data: any) => {
setBasicEffect([
{
col: [
{ label: '报价单号', extra: data.quotedPriceNo },
{ label: '报价摘要', extra: data.quotedDetails },
{ label: '报价会员', extra: data.createMemberName },
{ label: '外部状态', extra: <Tag color={OFFTER_EXTERNALSTATE_COLOR[data.externalState]}>{OFFTER_EXTERNALSTATE[data.externalState]}</Tag> }
]
},
{
col: [
{ label: '对应需求单号', extra: data.purchaseInquiryNo },
{ label: '联系人姓名', extra: '缺少字段' },
{ label: '联系人手机', extra: '缺少字段' },
]
},
{
col: [
{ label: '报价截止时间', extra: format(data.offerEndTime) },
{ label: '单据时间', extra: format(data.createTime) },
]
},
])
}
const handleOtherEffect = (data: any) => {
setOtherEffect([
{
col: [
{ label: '交付说明', extra: '缺少字段' },
{ label: '付款说明', extra: data.payDetails },
{ label: '税费说明', extra: data.taxes },
]
},
{
col: [
{ label: '物流说明', extra: data.logistics },
{ label: '包装说明', extra: data.packRequire },
{ label: '其他说明', extra: data.otherRequire },
]
},
{
col: [
{ label: '附件', extra: '缺少字段' },
]
},
])
}
const fetchDataSource = useCallback(async() => {
await PublicApi.getPurchaseQuotedPricePlatformDetails({id, number, current: '1', pageSize: '1' }).then(res => {
if (res.code !== 1000) {
return;
}
const { data } = res;
setDataSource(data);
handleBasicEffect(data);
handleOtherEffect(data)
})
}, [])
useEffect(() => {
fetchDataSource()
}, [])
return (
<Context.Provider value={dataSource}>
<PeripheralLayout
no={dataSource.quotedPriceNo}
detail={dataSource.quotedDetails}
tabLink={TABLINK}
components={
<Fragment>
<BasicLayout effect={basicEffect} />
<BidInfoLayout
fetch={PublicApi.getPurchaseConfirmQuotedPriceMaterielDetailed}
effect={{turn: dataSource.count, id }}
/>
<OtherLayout effect={otherEffect} />
</Fragment>
}
/>
</Context.Provider>
)
}
export default QuoteDetails;
......@@ -186,7 +186,7 @@ export const PurchaseDemandSchema: ISchema = {
type: 'object',
"x-component": 'mega-layout',
properties: {
requisitionFormNo: {
purchaseInquiryNo: {
type: 'string',
"x-component": "Search",
"x-mega-props": {
......@@ -222,34 +222,44 @@ export const PurchaseDemandSchema: ISchema = {
inline: true
},
properties: {
"[startDocumentsTime,endDocumentsTime]": {
"[startTime,endTime]": {
type: 'string',
"x-component": "dateSelect",
"x-component-props": {
placeholder: '单据时间(全部)',
}
},
externalState: {
memberName: {
type: 'string',
"x-component": 'Select',
"x-component-props": {
placeholder: '外部状态',
className: 'fixed-ant-selected-down', // 该类强制将显示的下拉框出现在s
style: {
width: 160
}
},
placeholder: '需求会员'
}
},
interiorState: {
type: 'string',
"x-component": 'Select',
"x-component-props": {
placeholder: '内部状态',
className: 'fixed-ant-selected-down', // 该类强制将显示的下拉框出现在s
style: {
width: 160
}
externalState:{
type:'string',
"x-component-props":{
placeholder:'外部状态'
},
enum: [
{
label: '作废', value: -1
},
{
label: '已完成', value: 99
},
{
label: '待提交需求单', value: 1
},
{
label: '待审核需求单', value: 2
},
{
label: '待提交报价单', value: 3
},
{
label: '待确认授标结果', value: 4
}
]
},
}
},
......@@ -284,7 +294,7 @@ export const PurchaseDemandPublicSchema: ISchema = {
children: "{{controllerBtns}}"
}
},
requisitionFormNo: {
purchaseInquiryNo: {
type: 'string',
"x-component": "Search",
"x-mega-props": {
......@@ -324,23 +334,17 @@ export const PurchaseDemandPublicSchema: ISchema = {
placeholder: '需求摘要'
}
},
category: {
"[startTime,endTime]": {
type: 'string',
"x-component": 'SearchSelect',
"x-component": "dateSelect",
"x-component-props": {
placeholder: '请选择品类',
className: 'fixed-ant-selected-down', // 该类强制将显示的下拉框出现在select下, 只有这里出现问题, ??
fetchSearch: PublicApi.getProductSelectGetSelectCustomerCategory,
style: {
width: 160
}
placeholder: '单据时间(全部)',
}
},
"[startDocumentsTime,endDocumentsTime]": {
memberName: {
type: 'string',
"x-component": "dateSelect",
"x-component-props": {
placeholder: '单据时间(全部)',
placeholder: '需求会员'
}
},
}
......
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