Commit 5a5d1f3a authored by 卢均锐's avatar 卢均锐

feat:采购竞价&z在线竞价,静态页面细节,部分逻辑,整理代码

parent cb0cb515
......@@ -8,7 +8,7 @@ export const onlineBidRoute = [
// 在线竞价
{
path: '/memberCenter/procurementAbility/onlineBid',
name: '采购竞价',
name: '在线竞价',
routes: [
// 采购竞价单查询
{
......
......@@ -49,7 +49,7 @@ const BidCommonLayout: React.FC<BidCommonLayoutProps> = (props: any) => {
<div className={selfStyles.baseItem} key={key}>
<h5 className={selfStyles.label}>
{child.tips ? <Tooltip placement="top" title={child.tips}>
{child.label}<QuestionCircleOutlined style={ICON_STYLE} />
{child.label}: <QuestionCircleOutlined style={ICON_STYLE} />
</Tooltip> : `${child.label}: `}
</h5>
<h5 className={selfStyles.content}>{_returnItem(child)}</h5>
......
.colorLabel{
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
font-size: 12px;
color: #606266;
margin-right: 10px;
div {
height: 8px;
width: 8px;
margin-right: 8px;
}
}
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import { Chart, Tooltip, Axis } from 'bizcharts';
import { Radio } from 'antd';
import { Radio, Row } from 'antd';
import Point from 'bizcharts/lib/geometry/Point';
import Line from 'bizcharts/lib/geometry/Line';
import Card from '../../../card';
import styles from '../../index.less';
import selfStyles from './index.less';
interface QuotationDeskProps {
title?: string,
......@@ -14,98 +16,78 @@ interface QuotationDeskProps {
const data = [
{
year: "1991",
year: "10:12:21",
value: 3,
type: 'min'
},
{
year: "1992",
year: "10:32:13",
value: 4,
type: 'min'
},
{
year: "1993",
year: "10:39:53",
value: 3.5,
type: 'min'
},
{
year: "1994",
year: "10:40:21",
value: 5,
type: 'min'
},
{
year: "1995",
year: "10:43:22",
value: 4.9,
type: 'min'
},
{
year: "1996",
year: "10:45:26",
value: 6,
type: 'min'
},
{
year: "1997",
year: "10:52:12",
value: 7,
type: 'min'
},
{
year: "1998",
value: 9,
type: 'min'
},
{
year: "1999",
value: 13,
type: 'min'
},
{
year: "1991",
year: "10:12:21",
value: 4,
type: 'offer'
},
{
year: "1992",
value: 3,
year: "10:32:13",
value: 5,
type: 'offer'
},
{
year: "1993",
year: "10:39:53",
value: 4.5,
type: 'offer'
},
{
year: "1994",
year: "10:40:21",
value: 6,
type: 'offer'
},
{
year: "1995",
year: "10:43:22",
value: 5.9,
type: 'offer'
},
{
year: "1996",
year: "10:45:26",
value: 7,
type: 'offer'
},
{
year: "1997",
year: "10:52:12",
value: 8,
type: 'offer'
},
{
year: "1998",
value: 10,
type: 'offer'
},
{
year: "1999",
value: 14,
type: 'offer'
},
];
const scale = {
......@@ -129,17 +111,24 @@ const QuotationDesk: React.FC<QuotationDeskProps> = (props: any) => {
// })
return (
<div className={styles.wrap}>
<div className={styles.layout} style={{margin: 0}}>
<div className={styles.layout} style={{ margin: 0 }}>
<Card
id={'QuotationDesk'}
title={title}
extra={<Radio.Group
defaultValue={1}
>
<Radio.Button value={1}>最近7次</Radio.Button>
<Radio.Button value={2}>最近15次</Radio.Button>
<Radio.Button value={3}>全部</Radio.Button>
</Radio.Group>
extra={
<Row>
<div className={selfStyles.colorLabel}>
<div style={{ backgroundColor: '#5B8FF9' }}></div>
最低价
</div>
<Radio.Group
defaultValue={1}
>
<Radio.Button value={1}>最近7次</Radio.Button>
<Radio.Button value={2}>最近15次</Radio.Button>
<Radio.Button value={3}>全部</Radio.Button>
</Radio.Group>
</Row>
}
>
<Chart
......@@ -156,8 +145,8 @@ const QuotationDesk: React.FC<QuotationDeskProps> = (props: any) => {
// line={{ style: { stroke: "#ff0000" } }}
tickLine={{ style: { lineWidth: 1 }, length: 5 }}
/>
<Line position="year*value" color={['type',['#5B8FF9','#00B37A']]} />
<Point position="year*value" color={['type',['#5B8FF9','#00B37A']]} shape='circle' />
<Line position="year*value" color={['type', ['#5B8FF9', '#00B37A']]} />
<Point position="year*value" color={['type', ['#5B8FF9', '#00B37A']]} shape='circle' />
<Tooltip shared showCrosshairs />
</Chart>
</Card>
......
......@@ -165,7 +165,7 @@ const ModalOperate: React.FC<IProps> = (props: any) => {
}
fetch({ id, ...params }).then(res => {
if (res.code === 1000) {
onOk()
onOk && onOk()
}
})
}
......
.warp {
.header {
.header {
display: flex;
height: 48px;
font-size: 16px;
background-color: #FFFFFF;
color: #303133;
padding: 0 16px;
align-items: center;
.goBack {
font-size: 14px;
color: #909399;
}
.title {
display: flex;
height: 48px;
line-height: 48px;
font-size: 16px;
background-color: #FFFFFF;
color: #303133;
padding: 0 16px;
align-items: center;
margin-left: 6px;
line-height: 48px;
span{
span {
color: #909399;
font-size: 14px;
margin: 0 10px 0 24px;
}
&::before {
content: " ";
width: 2px;
......@@ -23,17 +33,19 @@
margin-right: 6px;
}
}
.layout {
margin: 24px;
}
:global {
.ant-card-head-wrapper{
padding: 12px 0;
.ant-card-head-wrapper{
padding: 0;
}
}
.layout {
margin: 24px;
}
:global {
.ant-card-head-wrapper {
padding: 12px 0;
.ant-card-head-wrapper {
padding: 0;
}
}
}
\ No newline at end of file
}
import React, { useEffect, useState } from 'react';
import { history } from 'umi';
import { Row, Col, Tooltip, Button } from 'antd';
import { ArrowLeftOutlined } from '@ant-design/icons';
import HistoryItem from './history';
import StatusBox from '../../../purchaseBid/readyBid/management/components/statusBox';
......@@ -12,9 +14,12 @@ import styles from './index.less';
const Detail = () => {
return (
<div className={styles.warp}>
<div className={styles.header}>进口头层黄牛皮荔枝纹竞价<span>温州龙昌手袋有限公司</span><IMBtn /></div>
<div className={styles.header}>
<ArrowLeftOutlined className={styles.goBack} onClick={() => history.goBack()} />
<div className={styles.title}>进口头层黄牛皮荔枝纹竞价<span>温州龙昌手袋有限公司</span><IMBtn func={() => console.log('ok')} /></div>
</div>
<div className={styles.layout}>
<Row gutter={[8,8]}>
<Row gutter={[8, 8]}>
<Col span={6}>
<HistoryItem />
</Col>
......
......@@ -103,7 +103,7 @@ const ReadyBid = () => {
schemaType="ONLINEBIDREADYBID_SCHEMA"
columns={columns}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingList}
fetch={PublicApi.getOnlineBiddingStayBiddingList}
reload={ref}
/>
<ModalOperate
......
......@@ -103,7 +103,7 @@ const ReadySignUp = () => {
schemaType="ONLINEBIDREADYSIGN_SCHEMA"
columns={columns}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingList}
fetch={PublicApi.getOnlineBiddingStayExamineBiddingSignup}
reload={ref}
/>
<ModalOperate
......
......@@ -12,9 +12,6 @@ import { usePageStatus, PageStatus } from '@/hooks/usePageStatus'
import NiceForm from '@/components/NiceForm'
import ReutrnEle from '@/components/ReturnEle';
import Basic from './components/basic';
import Requirement from './components/requirement';
import File from './components/file';
import { formSchema } from './schema'
......@@ -36,22 +33,6 @@ const TabFormErrors = (props) => {
const SignUpForm = () => {
const { number } = history.location.query;
const { memberId, memberRoleId, name } = JSON.parse(localStorage.getItem('auth'));
/** 基本信息 */
const [basic, setBasic] = useState<any>({});
/** 添加采购物料 */
const [material, setMaterial] = useState<any>({});
/** 竞价规则 */
const [rules, setRules] = useState<any>({});
/** 报名需求 */
const [requirement, setRequirement] = useState<any>({});
/** 交易条件 */
const [condition, setCondition] = useState<any>({});
/** 需求对接 */
const [demand, setDemand] = useState<any>({});
/** 附件 */
const [file, setfile] = useState<any>([]);
const [badge, setbadge] = useState<any>([0, 0, 0, 0, 0, 0]);
const [loading, setLoading] = useState<boolean>(false);
const {
id,
......@@ -63,24 +44,6 @@ const SignUpForm = () => {
const [btnLoading, setBtnLoading] = useState(false)
const [initFormValue, setInitFormValue] = useState<any>({})
/** 拿表单数据的 */
const currentBasic = useRef<any>({});
const currentRules = useRef<any>({});
const currentRequirement = useRef<any>({});
const currentMaterial = useRef<any>({});
const currentCondition = useRef<any>({});
const currentDemand = useRef<any>({});
const currentFile = useRef<any>({});
/**必填没填写出现角标 */
const getError = (num: number, idx: number) => {
const data = [...badge];
data[idx] = num;
setbadge(data);
if (num !== 0) {
setLoading(false);
}
}
const getCountryCodeId = async () => {
const res = await PublicApi.getManageCountryAreaGetTelCode()
......@@ -123,7 +86,7 @@ const SignUpForm = () => {
onBack={() => history.goBack()}
backIcon={<ReutrnEle description="返回" />}
extra={
<Button loading={loading} type="primary" onClick={() => addSchemaAction.submit()} loading={btnLoading} icon={<SaveOutlined />}> 保存</Button>
<Button type="primary" onClick={() => addSchemaAction.submit()} loading={btnLoading} icon={<SaveOutlined />}> 保存</Button>
}
>
<Card>
......@@ -142,10 +105,7 @@ const SignUpForm = () => {
$('onFormMount').subscribe(() => {
})
useAsyncInitSelect(
['phoneCode'],
getCountryCodeId,
);
useAsyncInitSelect(['phoneCode'],getCountryCodeId,);
}}
expressionScope={{
beforeUpload,
......
......@@ -93,7 +93,7 @@ const Search = () => {
schemaType="ONLINEBIDORDER_SCHEMA"
columns={columns}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingList}
fetch={PublicApi.getOnlineBiddingList}
reload={ref}
/>
<ModalOperate
......
import React, { useEffect } from 'react';
import React, { useState, useEffect, useMemo } from 'react';
import { Modal, Tabs, Form, Checkbox, Input } from 'antd';
const { TabPane } = Tabs;
......@@ -6,9 +6,69 @@ const { TextArea } = Input;
import styles from './index.less';
const ConfirmBidResultModal = (props: any) => {
interface ConfirmBidResultModalProps {
title: string,
visible: boolean,
onCancel?: Function,
onOk?: Function,
record: any
}
const isForType = {
1: true,
0: false
}
const ConfirmBidResultModal: React.FC<ConfirmBidResultModalProps> = (props: any) => {
const [form] = Form.useForm();
const { title, visible, onCancel } = props;
const { title, visible, onCancel, onOk, record } = props;
// 是否发送中标公示
const [notice, setNotice] = useState<boolean>(record && record.notice ? isForType[record.notice] : true);
// 是否发送中标通知
const [prizeNotice, setPrizeNotice] = useState<boolean>(record && record.prizeNotice ? isForType[record.prizeNotice] : true);
// 是否发送感谢函
const [thank, setThank] = useState<boolean>(record && record.thank ? isForType[record.thank] : true);
// 控制tabkey
const [activeKey, setActiveKey] = useState<string>('1');
const handleOk = () => {
form.validateFields().then(res => {
console.log(res);
onOk && onOk();
})
}
const _returnDefaultAwardResults = useMemo(() => {
return record ? `${record.createMemberName}${record.details}》竞价工作已经结束,中标人已经确定。现将中标结果公布如下:
中标供应商:${record.createMemberName}(中标总金额(含税):${record.sumAwardPrice})。
中标理由:价格最低` : '';
}, [record])
const _returnDefaultContent = useMemo(() => {
return record ? `贵公司参与了我公司《${record.detail}》竞价。在我公司综合各竞价单位的报价情况,并进行充分技术交流后,经评标委员会综合评定,贵公司未能中标。我公司对贵公司的积极参与和支持深表感谢!希望下次合作成功。` : '';
}, [record])
const onCheckboxChange = (e: { target: { checked: boolean } }, func: Function, name: string) => {
func(e.target.checked);
form.setFieldsValue({ [`${name}`]: e.target.checked })
};
useEffect(() => {
form.setFieldsValue({
notice: record && record.notice ? isForType[record.notice] : true,
prizeNotice: record && record.prizeNotice ? isForType[record.prizeNotice] : true,
thank: record && record.thank ? isForType[record.thank] : true,
awardResults: _returnDefaultAwardResults,
offer: '',
content: _returnDefaultContent
})
setNotice(record && record.notice ? isForType[record.notice] : true),
setPrizeNotice(record && record.prizeNotice ? isForType[record.prizeNotice] : true),
setThank(record && record.thank ? isForType[record.thank] : true),
setActiveKey('1')
}, [visible])
return (
<Modal
width={600}
......@@ -16,35 +76,46 @@ const ConfirmBidResultModal = (props: any) => {
visible={visible}
onCancel={onCancel}
wrapClassName={styles.wrap}
// onOk={() => actions.submit()}
// afterClose={() => actions.reset()}
onOk={() => { handleOk() }}
afterClose={() => { form.resetFields() }}
>
<Form
form={form}
>
<Tabs tabPosition='left'>
<TabPane tab="中标公示" key="1">
<Form.Item name="offer">
<Checkbox>发送中标公示</Checkbox>
<Tabs tabPosition='left' activeKey={activeKey} onChange={(key) => {
setActiveKey(key)
}}>
<TabPane tab="中标公示" key="1" forceRender={true}>
<Form.Item name="notice">
<Checkbox checked={notice} onChange={(e) => { onCheckboxChange(e, setNotice, 'notice') }}>发送中标公示</Checkbox>
</Form.Item>
<Form.Item name="offer">
<TextArea rows={3} maxLength={100} placeholder="最长100个字符,50个汉字" />
<Form.Item name="awardResults">
<TextArea
rows={6}
placeholder="请输入中标公示"
/>
</Form.Item>
</TabPane>
<TabPane tab="中标通知" key="2">
<Form.Item name="offer">
<Checkbox>发送中标通知</Checkbox>
<TabPane tab="中标通知" key="2" forceRender={true}>
<Form.Item name="prizeNotice">
<Checkbox checked={prizeNotice} onChange={(e) => { onCheckboxChange(e, setPrizeNotice, 'prizeNotice') }}>发送中标通知</Checkbox>
</Form.Item>
<Form.Item name="offer">
<TextArea rows={3} maxLength={100} placeholder="最长100个字符,50个汉字" />
<TextArea
rows={6}
placeholder="请输入中标通知"
/>
</Form.Item>
</TabPane>
<TabPane tab="感谢函" key="3">
<Form.Item name="offer">
<Checkbox>发送感谢函</Checkbox>
<TabPane tab="感谢函" key="3" forceRender={true}>
<Form.Item name="thank">
<Checkbox checked={thank} onChange={(e) => { onCheckboxChange(e, setThank, 'thank') }}>发送感谢函</Checkbox>
</Form.Item>
<Form.Item name="offer">
<TextArea rows={3} maxLength={100} placeholder="最长100个字符,50个汉字" />
<Form.Item name="content">
<TextArea
rows={6}
placeholder="请输入感谢函"
/>
</Form.Item>
</TabPane>
</Tabs>
......
import React, { useRef, useImperativeHandle } from 'react';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import NiceForm from '@/components/NiceForm';
import { createFormActions, FormEffectHooks } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { Row, Col, Space, Button, Typography, Popconfirm, Badge, Tag, Menu, Drawer } from 'antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import NiceForm from '@/components/NiceForm';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { searchSelectGetSelectCategoryOptionEffect } from '@/pages/transaction/effect/index';
import { PublicApi } from '@/services/api';
import { Row, Col, Space, Button, Typography, Popconfirm, Badge, Tag, Menu, Drawer } from 'antd';
......
.revise_style {
:global {
.ant-form-item-label {
width: 174px;
label {
color:#6B778C
}
}
.ant-form-item-control {
width: 500px;
.ant-form-item-control-input-content {
position: relative;
.ant-btn-link {
position: absolute;
right: -120px;
}
.ant-picker {
width: 100%;
}
}
.ant-input-group-addon {
.ant-input-search-button {
background-color: #6B778C;
border-color: #6B778C;
}
}
}
.ant-radio-group-solid {
.ant-radio-button-wrapper-checked {
background: #6B778C;
border-color: #6B778C;
&:hover {
background: #6B778C;
border-color: #6B778C;
}
}
}
}
.upload_item {
padding: 5px 8px;
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
background-color: #FAFBFC;
.upload_left {
display: flex;
align-items: center;
color: #303133;
:global {
.anticon-file-word {
color: #4279df;
font-size: 20px;
margin-right: 8px;
}
}
}
.upload_right {
color: #00B37A;
cursor: pointer;
:global {
.anticon-delete {
margin-left: 19px;
color: #C0C4CC;
}
}
}
}
}
\ No newline at end of file
import React, { useState } from 'react';
import { Modal, Tabs, Form, Button, Input, Upload, message } from 'antd';
import { Modal, Form, Input, Upload, Button, message } from 'antd';
import { UPLOAD_TYPE } from '@/constants'
import { UploadOutlined } from '@ant-design/icons';
const { TabPane } = Tabs;
const { TextArea } = Input;
import { UploadOutlined, DeleteOutlined, LinkOutlined } from '@ant-design/icons';
import styles from './index.less';
const UploadBidResultModal = (props: any) => {
const { title, visible, onCancel } = props;
const [files, setFiles] = useState<any>([]);
interface SubmitResultModalProps {
title: string,
visible: boolean,
onCancel?: Function,
onOk?: Function,
}
const SubmitResultModal:React.FC<SubmitResultModalProps> = (props: any) => {
const { title, visible, onCancel, onOk } = props;
const [form] = Form.useForm();
const [files, setFiles] = useState([]);
const [loading, setloading] = useState(false);
/**判断文件类型和大小 */
const beforeDocUpload = (file: any) => {
......@@ -36,29 +40,64 @@ const UploadBidResultModal = (props: any) => {
}
}
setFiles([...arr])
form.setFieldsValue({ upload: 'ok' })
}
// 删除附件
const removeFiles = (index: any) => {
const arr = [...files];
arr.splice(index, 1);
setFiles(arr);
arr.length <= 0 && form.setFieldsValue({ upload: '' })
}
const formSubmit = () => {
form.validateFields().then(res => {
onOk && onOk();
onCancel && onCancel();
})
}
return (
<Modal
width={600}
title={title}
visible={visible}
onCancel={onCancel}
wrapClassName={styles.wrap}
// onOk={() => actions.submit()}
// afterClose={() => actions.reset()}
onOk={() => { formSubmit() }}
afterClose={() => {
form.resetFields()
setFiles([])
}}
>
<Form
form={form}
layout="vertical"
layout={'vertical'}
className={styles.revise_style}
>
<Form.Item name="offer" label="授标意见" rules={[{ required: true, message: '请输入授标意见' }]}>
<TextArea rows={3} maxLength={200} placeholder="最长200个字符,100个汉字" />
</Form.Item>
<Form.Item
label="报名要求附件"
name="file"
rules={[{ required: true, message: '请选择报名要求附件' }]}
label='授标意见'
name='opinion'
rules={[{ required: true, message: '请输入授标意见' }]}
>
<Input.TextArea rows={3} maxLength={200} placeholder="最长200个字符,100个汉字" />
</Form.Item>
<Form.Item
label='附件'
name='upload'
rules={[{ required: true, message: '请上传附件' }]}>
<div className={styles.upload_data}>
{files.length > 0 && files.map((v, index) => (
<div key={index} className={styles.upload_item}>
<div className={styles.upload_left}>
<LinkOutlined />
<span>{v.name}</span>
</div>
<div className={styles.upload_right} onClick={() => removeFiles(index)}>
<DeleteOutlined />
</div>
</div>
))}
</div>
<Upload
action="/api/file/file/upload"
data={{ fileType: UPLOAD_TYPE }}
......@@ -76,4 +115,4 @@ const UploadBidResultModal = (props: any) => {
)
}
export default UploadBidResultModal
\ No newline at end of file
export default SubmitResultModal;
\ No newline at end of file
......@@ -13,12 +13,14 @@ import {
Upload,
Space
} from 'antd';
import styles from './index.less';
import { UPLOAD_TYPE } from '@/constants'
import { UploadOutlined, DeleteOutlined, LinkOutlined } from '@ant-design/icons';
import moment from 'moment';
import { PublicApi } from '@/services/api';
import moment from 'moment';
import { UPLOAD_TYPE } from '@/constants'
import styles from './index.less';
const { TextArea } = Input;
const layout: any = {
colon: false,
......
......@@ -16,12 +16,10 @@ import {
import { QuestionCircleOutlined } from '@ant-design/icons';
import moment from 'moment';
import { PublicApi } from '@/services/api';
import styles from './index.less';
const layout: any = {
colon: false,
labelCol: { style: { width: '174px' } },
......@@ -93,13 +91,7 @@ const BidRules: React.FC<Iprops> = (props: any) => {
const onCheckboxChange = (e: { target: { checked: boolean } }, func: Function, name?: string) => {
func(e.target.checked);
if(!e.target.checked && name){
if(name === 'startingPrice'){
form.setFieldsValue({startingPrice : ''})
}else if(name === 'targetPrice'){
form.setFieldsValue({targetPrice : ''})
}else{
form.setFieldsValue({minPrice : ''})
}
form.setFieldsValue({[`${name}`] : ''})
}
};
......
import React, { useState, useEffect } from 'react';
import { Form, Row, Col, Input, DatePicker, Select } from 'antd';
import { PublicApi } from '@/services/api';
import moment from 'moment';
import { PublicApi } from '@/services/api';
import style from './index.less';
const { TextArea } = Input;
......
import React, { useState, useEffect } from 'react';
import { Form, Button, Upload, message } from 'antd';
import { UploadOutlined, DeleteOutlined, LinkOutlined } from '@ant-design/icons';
import { UPLOAD_TYPE } from '@/constants'
import styles from './index.less';
import { UploadOutlined, DeleteOutlined, LinkOutlined } from '@ant-design/icons';
const layout: any = {
colon: false,
......
......@@ -70,7 +70,7 @@ const ReadyAdd = () => {
</Button>
</Popconfirm>
<Dropdown overlay={() => (
<Menu onClick={(e) => handleMenuClick(e)}>
<Menu onClick={(e) => handleMenuClick(e, record.id)}>
<Menu.Item key="1">
修改
</Menu.Item>
......@@ -95,74 +95,82 @@ const ReadyAdd = () => {
</>
}];
/** 批量审核 */
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 handleMenuClick = (e: any, id: number) => {
if(e.key === 1){
}else{
fetchDeleteBatch(id);
}
}
/** 批量审核 */
const fetchSubmitBatch = async (id?: number) => {
let res = null;
if (id) {
res = await PublicApi.postPurchaseBiddingExamine({ id });
} else {
res = await PublicApi.postPurchaseBiddingExamineBatch({ ids: rowkeys });
}
if (res.code === 1000) {
ref.current.reload();
setRowKeys([])
}
}
/**
* 删除或批量删除
* @type: 1: 单个删除, 2: 批量删除
* */
const fetchDeleteBatch = async (id?: number) => {
let res = null;
if (id) {
res = await PublicApi.postPurchaseQuotedPriceDelete({ id });
} else {
res = await PublicApi.postPurchaseQuotedPriceDeleteBatch({ ids: rowkeys });
}
if (res.code === 1000) {
ref.current.reload();
setRowKeys([])
}
/**
* 删除或批量删除
* @type: 1: 单个删除, 2: 批量删除
* */
const fetchDeleteBatch = async (id?: number) => {
let res = null;
if (id) {
res = await PublicApi.postPurchaseBiddingDelete({ id });
} else {
res = await PublicApi.postPurchaseBiddingDeleteBatch({ ids: rowkeys });
}
if (res.code === 1000) {
ref.current.reload();
setRowKeys([])
}
}
return (
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => history.push('/memberCenter/procurementAbility/purchaseBid/readyAdd/add')}
type="primary"
icon={<PlusOutlined />}
>
新建
return (
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingAwaitNewList}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => history.push('/memberCenter/procurementAbility/purchaseBid/readyAdd/add')}
type="primary"
icon={<PlusOutlined />}
>
新建
</Button>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量提交审核
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量提交审核
</Button>
<Button
onClick={() => fetchDeleteBatch()}
disabled={rowkeys.length === 0}
>
批量删除
<Button
onClick={() => fetchDeleteBatch()}
disabled={rowkeys.length === 0}
>
批量删除
</Button>
</Space>
</Col>
</Row>
}
/>
)
</Space>
</Col>
</Row>
}
/>
)
}
export default ReadyAdd
......@@ -66,25 +66,20 @@ const ReadyBid = () => {
key: 'operate',
dataIndex: 'operate',
align: 'center',
render: (text: any, record: any) => <>
{
<>
<Button
onClick={() => history.push(`/memberCenter/procurementAbility/offter/edit?id=${record.id}&number=${record.quotedPriceNo}`)}
type='link'
>竞价管理</Button>
</>
}
</>
render: (text: any, record: any) => <Button disabled={isOpenManage(record.biddingStartTime)} onClick={() => history.push(`/memberCenter/procurementAbility/readyBid/management?id=${record.id}&number=${record.quotedPriceNo}`)} type='link'>竞价管理</Button>
}];
const isOpenManage = (timeStamp) => {
return new Date().getTime() > timeStamp;
}
return (
<Table
reload={ref}
schemaType="PURCHASEBIDOSIGNUP_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingStayBiddingList}
/>
)
}
......
......@@ -5,11 +5,11 @@ 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 styles from './index.less';
import TriangleTag from '../triangleTag';
import RankRow from '../rankRow';
import styles from './index.less';
const { TabPane } = Tabs;
const RankItem = () => {
......
......@@ -4,8 +4,9 @@ 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 TriangleTag from '../triangleTag';
import IMBtn from '../../../../../components/detail/components/iMBtn';
import TriangleTag from '../triangleTag';
import styles from './index.less';
interface RankRowProps {
......
......@@ -12,7 +12,7 @@ interface StatuBoxProps {
const StatuBox: React.FC<StatuBoxProps> = (props: any) => {
const { hasBidBtn } = props;
const [hour, minute, second, stillRun] = useCountDown(1627282562);
const [hour, minute, second, stillRun] = useCountDown(1619514793947/1000);
return (
<div className='ant-card ant-card-bordered'>
<div className='ant-card-body'>
......
......@@ -2,19 +2,29 @@
.header {
display: flex;
height: 48px;
line-height: 48px;
font-size: 16px;
background-color: #FFFFFF;
color: #303133;
padding: 0 16px;
align-items: center;
flex-direction: row;
.goBack {
font-size: 14px;
color: #909399;
}
&::before {
content: " ";
width: 2px;
height: 16px;
background: @primary-color;
margin-right: 6px;
.title{
display: flex;
align-items: center;
margin-left: 6px;
line-height: 48px;
&::before {
content: " ";
width: 2px;
height: 16px;
background: @primary-color;
margin-right: 6px;
}
}
}
......
import React, { useEffect, useState } from 'react';
import { history } from 'umi';
import { Row, Col, Tooltip, Button } from 'antd';
import { ArrowLeftOutlined } from '@ant-design/icons';
import RankItem from './components/rank';
import StatusBox from './components/statusBox';
import QuotationDeskLayout from '../../../components/detail/components/quotationDeskLayout';
import BidDetailLayout from '../../../components/detail/components/bidDetailLayout';
import RankItem from './components/rank';
import StatusBox from './components/statusBox';
import styles from './index.less';
const Management = () => {
return (
<div className={styles.warp}>
<div className={styles.header}>进口头层黄牛皮荔枝纹竞价</div>
<div className={styles.header}>
<ArrowLeftOutlined className={styles.goBack} onClick={() => history.goBack()} />
<div className={styles.title}>进口头层黄牛皮荔枝纹竞价</div>
</div>
<div className={styles.layout}>
<Row gutter={[8,8]}>
<Row gutter={[8, 8]}>
<Col span={6}>
<RankItem />
</Col>
<Col span={18}>
<Row gutter={[8,8]} style={{marginBottom: '8px'}}>
<Row gutter={[8, 8]} style={{ marginBottom: '8px' }}>
<Col span={16}>
<QuotationDeskLayout />
</Col>
......
......@@ -8,6 +8,7 @@ import EyePreview from '@/components/EyePreview';
import { PublicApi } from '@/services/api';
import { formatTimeString } from '@/utils'
import ConfirmBidResultModal from '../components/confirmBidResultModal';
import Table from '../../components/table'
......@@ -20,13 +21,16 @@ const { Text } = Typography;
const ReadyConfirm = () => {
const ref = useRef<any>({});
// 确认竞价结果
const [confirmBidResultVisible, setConfirmBidResultVisible] = useState<boolean>(false);
const [confirmRecord, setConfirmRecord] = useState<any>();
const columns: ColumnType<any>[] = [{
title: '序号',
align: 'center',
dataIndex: 'id',
key: 'id',
render: (t, r, i) => ++i
}, {
}, {
title: '竞价单号/摘要',
key: 'biddingNo',
dataIndex: 'biddingNo',
......@@ -73,26 +77,31 @@ const ReadyConfirm = () => {
key: 'operate',
dataIndex: 'operate',
align: 'center',
render: (text: any, record: any) => <>
{
<>
<Button
onClick={() => history.push(`/memberCenter/procurementAbility/offter/edit?id=${record.id}&number=${record.quotedPriceNo}`)}
type='link'
>确认</Button>
</>
}
</>
render: (text: any, record: any) => <Button onClick={() => {handleConfirm(record)}} type='link'>确认</Button>
}];
const handleConfirm = (record: any) => {
setConfirmRecord(record);
setConfirmBidResultVisible(true);
}
return (
<Table
reload={ref}
schemaType="PURCHASEBIDOSIGNUP_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
/>
<>
<Table
reload={ref}
schemaType="PURCHASEBIDOSIGNUP_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
/>
<ConfirmBidResultModal
record={confirmRecord}
title="确认竞价结果"
visible={confirmBidResultVisible}
onCancel={() => setConfirmBidResultVisible(false)}
onOk={() => {ref.current.reload()}}
/>
</>
)
}
export default ReadyConfirm
......@@ -8,6 +8,7 @@ import EyePreview from '@/components/EyePreview';
import { PublicApi } from '@/services/api';
import { formatTimeString } from '@/utils'
import ModalOperate from '../../components/modalOperate';
import Table from '../../components/table'
......@@ -23,6 +24,8 @@ const ReadyExamineOne = () => {
/** 多选操作 */
const ref = useRef<any>({});
const [rowkeys, setRowKeys] = useState<Array<number>>([]);
const [id, setId] = useState<any>();
const [visible, setVisible] = useState<boolean>(false);
const columns: ColumnType<any>[] = [{
title: '竞价单号/摘要',
key: 'biddingNo',
......@@ -63,25 +66,16 @@ const ReadyExamineOne = () => {
key: 'operate',
dataIndex: 'operate',
align: 'center',
render: (text: any, record: any) => <>
{
<>
<Button
onClick={() => history.push(`/memberCenter/procurementAbility/offter/edit?id=${record.id}&number=${record.quotedPriceNo}`)}
type='link'
>审核</Button>
</>
}
</>
render: (text: any, record: any) => <Button onClick={() => { handleExamine(record.id) }} type='link'>审核</Button>
}];
/** 批量审核 */
const fetchSubmitBatch = async (id?: number) => {
let res = null;
if (id) {
res = await PublicApi.postPurchaseQuotedPriceSubmit({ id });
res = await PublicApi.postPurchaseBiddingExamine1({ id, state: 1 });
} else {
res = await PublicApi.postPurchaseQuotedPriceSubmitBatch({ ids: rowkeys });
res = await PublicApi.postPurchaseBiddingExamine1Batch({ ids: rowkeys });
}
if (res.code === 1000) {
ref.current.reload();
......@@ -89,30 +83,45 @@ const ReadyExamineOne = () => {
}
}
const handleExamine = (id: number) => {
setId(id);
setVisible(!visible);
}
return (
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量审核通过
</Button>
</Space>
</Col>
</Row>
}
/>
<>
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingStayExamineList1}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量审核通过
</Button>
</Space>
</Col>
</Row>
}
/>
<ModalOperate
id={id}
title="单据审核"
modalType="audit"
visible={visible}
fetch={PublicApi.postPurchaseBiddingExamine1}
onCancel={() => setVisible(false)}
/>
</>
)
}
export default ReadyExamineOne
......@@ -8,6 +8,7 @@ import EyePreview from '@/components/EyePreview';
import { PublicApi } from '@/services/api';
import { formatTimeString } from '@/utils'
import ModalOperate from '../../components/modalOperate';
import Table from '../../components/table'
......@@ -21,6 +22,8 @@ const { Text } = Typography;
const ReadyExamineResultOne = () => {
const ref = useRef<any>({});
const [rowkeys, setRowKeys] = useState<Array<number>>([]);
const [id, setId] = useState<any>();
const [visible, setVisible] = useState<boolean>(false);
const columns: ColumnType<any>[] = [{
title: '竞价单号/摘要',
key: 'biddingNo',
......@@ -68,16 +71,7 @@ const ReadyExamineResultOne = () => {
key: 'operate',
dataIndex: 'operate',
align: 'center',
render: (text: any, record: any) => <>
{
<>
<Button
onClick={() => history.push(`/memberCenter/procurementAbility/offter/edit?id=${record.id}&number=${record.quotedPriceNo}`)}
type='link'
>审核</Button>
</>
}
</>
render: (text: any, record: any) => <Button onClick={() => { handleExamine(record.id) }} type='link'>审核</Button>
}];
/** 批量审核 */
......@@ -94,30 +88,45 @@ const ReadyExamineResultOne = () => {
}
}
const handleExamine = (id: number) => {
setId(id);
setVisible(!visible);
}
return (
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量审核通过
<>
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingStayExamineList2}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量审核通过
</Button>
</Space>
</Col>
</Row>
}
/>
</Space>
</Col>
</Row>
}
/>
<ModalOperate
id={id}
title="单据审核"
modalType="audit"
visible={visible}
fetch={PublicApi.postPurchaseBiddingExamine1}
onCancel={() => setVisible(false)}
/>
</>
)
}
export default ReadyExamineResultOne
......@@ -8,6 +8,7 @@ import EyePreview from '@/components/EyePreview';
import { PublicApi } from '@/services/api';
import { formatTimeString } from '@/utils'
import ModalOperate from '../../components/modalOperate';
import Table from '../../components/table'
......@@ -22,6 +23,8 @@ const { Text } = Typography;
const ReadyExamineResultTwo = () => {
const ref = useRef<any>({});
const [rowkeys, setRowKeys] = useState<Array<number>>([]);
const [id, setId] = useState<any>();
const [visible, setVisible] = useState<boolean>(false);
const columns: ColumnType<any>[] = [{
title: '竞价单号/摘要',
key: 'biddingNo',
......@@ -69,16 +72,7 @@ const ReadyExamineResultTwo = () => {
key: 'operate',
dataIndex: 'operate',
align: 'center',
render: (text: any, record: any) => <>
{
<>
<Button
onClick={() => history.push(`/memberCenter/procurementAbility/offter/edit?id=${record.id}&number=${record.quotedPriceNo}`)}
type='link'
>审核</Button>
</>
}
</>
render: (text: any, record: any) => <Button onClick={() => { handleExamine(record.id) }} type='link'>审核</Button>
}];
/** 批量审核 */
......@@ -95,30 +89,45 @@ const ReadyExamineResultTwo = () => {
}
}
const handleExamine = (id: number) => {
setId(id);
setVisible(!visible);
}
return (
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量审核通过
<>
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量审核通过
</Button>
</Space>
</Col>
</Row>
}
/>
</Space>
</Col>
</Row>
}
/>
<ModalOperate
id={id}
title="单据审核"
modalType="audit"
visible={visible}
fetch={PublicApi.postPurchaseBiddingExamine1}
onCancel={() => setVisible(false)}
/>
</>
)
}
export default ReadyExamineResultTwo
......@@ -9,6 +9,7 @@ import { PublicApi } from '@/services/api';
import { formatTimeString } from '@/utils'
import Table from '../../components/table'
import ModalOperate from '../../components/modalOperate';
import {
......@@ -20,6 +21,8 @@ const { Text } = Typography;
const ReadyExamineSignUp = () => {
const ref = useRef<any>({});
const [id, setId] = useState<any>();
const [visible, setVisible] = useState<boolean>(false);
const columns: ColumnType<any>[] = [{
title: '序号',
align: 'center',
......@@ -76,26 +79,32 @@ const ReadyExamineSignUp = () => {
key: 'operate',
dataIndex: 'operate',
align: 'center',
render: (text: any, record: any) => <>
{
<>
<Button
onClick={() => history.push(`/memberCenter/procurementAbility/offter/edit?id=${record.id}&number=${record.quotedPriceNo}`)}
type='link'
>审核</Button>
</>
}
</>
render: (text: any, record: any) => <Button onClick={() => { handleExamine(record.id) }} type='link'>审核</Button>
}];
const handleExamine = (id: number) => {
setId(id);
setVisible(!visible);
}
return (
<Table
reload={ref}
schemaType="PURCHASEBIDOSIGNUP_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
/>
<>
<Table
reload={ref}
schemaType="PURCHASEBIDOSIGNUP_SCHEMA"
columns={columns}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingStayExaminBiddingList}
/>
<ModalOperate
id={id}
title="单据审核"
modalType="audit"
visible={visible}
fetch={PublicApi.postPurchaseBiddingExaminBiddingSignup}
onCancel={() => setVisible(false)}
/>
</>
)
}
export default ReadyExamineSignUp
......@@ -8,6 +8,7 @@ import EyePreview from '@/components/EyePreview';
import { PublicApi } from '@/services/api';
import { formatTimeString } from '@/utils'
import ModalOperate from '../../components/modalOperate';
import Table from '../../components/table'
......@@ -22,6 +23,8 @@ const ReadyExamineTwo = () => {
/** 多选操作 */
const ref = useRef<any>({});
const [rowkeys, setRowKeys] = useState<Array<number>>([]);
const [id, setId] = useState<any>();
const [visible, setVisible] = useState<boolean>(false);
const columns: ColumnType<any>[] = [{
title: '竞价单号/摘要',
key: 'biddingNo',
......@@ -62,25 +65,16 @@ const ReadyExamineTwo = () => {
key: 'operate',
dataIndex: 'operate',
align: 'center',
render: (text: any, record: any) => <>
{
<>
<Button
onClick={() => history.push(`/memberCenter/procurementAbility/offter/edit?id=${record.id}&number=${record.quotedPriceNo}`)}
type='link'
>审核</Button>
</>
}
</>
render: (text: any, record: any) => <Button onClick={() => { handleExamine(record.id) }} type='link'>审核</Button>
}];
/** 批量审核 */
const fetchSubmitBatch = async (id?: number) => {
let res = null;
if (id) {
res = await PublicApi.postPurchaseQuotedPriceSubmit({ id });
res = await PublicApi.postPurchaseBiddingExamine2({ id, state: 1 });
} else {
res = await PublicApi.postPurchaseQuotedPriceSubmitBatch({ ids: rowkeys });
res = await PublicApi.postPurchaseBiddingExamine2Batch({ ids: rowkeys });
}
if (res.code === 1000) {
ref.current.reload();
......@@ -88,30 +82,45 @@ const ReadyExamineTwo = () => {
}
}
const handleExamine = (id: number) => {
setId(id);
setVisible(!visible);
}
return (
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量审核通过
<>
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingStayExamineList2}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量审核通过
</Button>
</Space>
</Col>
</Row>
}
/>
</Space>
</Col>
</Row>
}
/>
<ModalOperate
id={id}
title="单据审核"
modalType="audit"
visible={visible}
fetch={PublicApi.postPurchaseBiddingExamine2}
onCancel={() => setVisible(false)}
/>
</>
)
}
export default ReadyExamineTwo
......@@ -62,25 +62,16 @@ const ReadySubmit = () => {
key: 'operate',
dataIndex: 'operate',
align: 'center',
render: (text: any, record: any) => <>
{
<>
<Button
onClick={() => history.push(`/memberCenter/procurementAbility/offter/edit?id=${record.id}&number=${record.quotedPriceNo}`)}
type='link'
>提交</Button>
</>
}
</>
render: (text: any, record: any) => <Button onClick={() => {fetchSubmitBatch(record.id)}} type='link'>提交</Button>
}];
/** 批量审核 */
const fetchSubmitBatch = async (id?: number) => {
let res = null;
if (id) {
res = await PublicApi.postPurchaseQuotedPriceSubmit({ id });
res = await PublicApi.postPurchaseBiddingSubmit({ id,state: 1 });
} else {
res = await PublicApi.postPurchaseQuotedPriceSubmitBatch({ ids: rowkeys });
res = await PublicApi.postPurchaseBiddingSubmitBatch({ ids: rowkeys });
}
if (res.code === 1000) {
ref.current.reload();
......@@ -95,8 +86,8 @@ const ReadySubmit = () => {
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
effects="biddingNo"
fetch={PublicApi.getPurchaseBiddingStaySubmitList}
controllerBtns={
<Row>
<Col span={24}>
......
......@@ -9,6 +9,7 @@ import { PublicApi } from '@/services/api';
import { formatTimeString } from '@/utils'
import Table from '../../components/table'
import SubmitResultModal from '../components/submitResultModal'
import {
......@@ -22,6 +23,8 @@ const ReadySubmitExamineResult = () => {
/** 多选操作 */
const ref = useRef<any>({});
const [rowkeys, setRowKeys] = useState<Array<number>>([]);
const [id, setId] = useState<number>();
const [visible, setVisible] = useState<boolean>(false);
const columns: ColumnType<any>[] = [{
title: '竞价单号/摘要',
key: 'biddingNo',
......@@ -70,14 +73,7 @@ const ReadySubmitExamineResult = () => {
dataIndex: 'operate',
align: 'center',
render: (text: any, record: any) => <>
{
<>
<Button
onClick={() => history.push(`/memberCenter/procurementAbility/offter/edit?id=${record.id}&number=${record.quotedPriceNo}`)}
type='link'
>提交审核</Button>
</>
}
<Button onClick={() => handleSubmit(record.id)} type='link'>提交审核</Button>
</>
}];
......@@ -95,30 +91,42 @@ const ReadySubmitExamineResult = () => {
}
}
const handleSubmit = (id: number) => {
setId(id);
setVisible(true);
}
return (
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量提交
<>
<Table
selectedRow
reload={ref}
fetchRowkeys={(e) => setRowKeys(e)}
schemaType="PURCHASEBIDREADYADD_SCHEMA"
columns={columns}
effects="purchaseInquiryNo"
fetch={PublicApi.getPurchaseQuotedPriceAddList}
controllerBtns={
<Row>
<Col span={24}>
<Space size={16}>
<Button
onClick={() => fetchSubmitBatch()}
disabled={rowkeys.length === 0}
>
批量提交
</Button>
</Space>
</Col>
</Row>
}
/>
</Space>
</Col>
</Row>
}
/>
<SubmitResultModal
title={'提交竞价结果'}
visible={visible}
onCancel={() => { setVisible(false) }}
/>
</>
)
}
export default ReadySubmitExamineResult
......@@ -7,7 +7,7 @@ import { PublicApi } from '@/services/api';
import { GlobalConfig } from '@/global/config'
import { formatTimeString } from '@/utils'
import { PurchaseBidContext } from '../../components/detail/components/context';
import { Context } from '../../components/detail/components/context';
import PeripheralLayout from '../../components/detail';
import ProgressLayout from '../../components/detail/components/progressLayout';
import RecordLyout from '../../components/detail/components/recordLyout';
......@@ -24,7 +24,7 @@ import {
} from '../../constants/purchaseBid';
import ConfirmBidResultModal from '../components/confirmBidResultModal';
import UploadBidResultModal from '../components/uploadBidResultModal';
import SubmitResultModal from '../components/submitResultModal';
import QuotationDetailsDrawer from '../components/quotationDetailsDrawer';
const transforType = {
......@@ -232,7 +232,7 @@ const SearchDetail = () => {
}
return (
<PurchaseBidContext.Provider value={dataSource}>
<Context.Provider value={dataSource}>
<PeripheralLayout
no={dataSource.biddingNo}
tabLink={TABLINK}
......@@ -438,10 +438,11 @@ const SearchDetail = () => {
/>
<ConfirmBidResultModal
title="确认竞价结果"
record={dataSource}
visible={confirmBidResultVisible}
onCancel={() => setConfirmBidResultVisible(false)}
/>
<UploadBidResultModal
<SubmitResultModal
title="提交竞价结果"
visible={uploadBidResultVisible}
onCancel={() => setUploadBidResultVisible(false)}
......@@ -451,7 +452,7 @@ const SearchDetail = () => {
visible={quotationDetailsVisible}
onClose={() => setQuotationDetailsVisible(false)}
/>
</PurchaseBidContext.Provider>
</Context.Provider>
)
}
export default SearchDetail;
......@@ -11,7 +11,7 @@ export const ONLINEBIDORDER_SCHEMA: ISchema = {
type: 'object',
"x-component": 'mega-layout',
properties: {
purchaseInquiryNo: {
biddingNo: {
type: 'string',
"x-component": "Search",
"x-mega-props": {
......
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