4.17 标段信息增加布局,固钉,锚点跳转

This commit is contained in:
jl-zhoujl2
2022-04-17 21:05:11 +08:00
parent 78f1b2e2a3
commit 0595d4e339
2 changed files with 201 additions and 65 deletions

View File

@ -1,5 +1,7 @@
import { Form, Input, InputNumber, Button, Card } from 'antd';
import React from 'react';
import { scrollToAnchor } from '@/utils/CommonUtils';
import ProCard from '@ant-design/pro-card';
import { Form, Input, InputNumber, Button, Card, Row, Col, Typography, Tooltip, Space, Radio, Affix, List, Tag } from 'antd';
import React, { useState } from 'react';
interface PublicPlatformProps {
modalVisible: boolean;
@ -11,9 +13,44 @@ const layout = {
span: 6,
},
wrapperCol: {
span: 16,
span: 17,
},
};
const bidLayout = {
labelCol: {
span: 4,
},
wrapperCol: {
span: 20,
},
};
const candidateLayout = {
labelCol: {
span: 7,
},
wrapperCol: {
span: 17,
},
};
const data = [
{
title: '标段一',
description: 'XY92632011202',
},
{
title: '标段二',
description: 'XY92632011202',
},
{
title: '标段三',
description: 'XY92632011202',
},
{
title: '标段四',
description: 'XY92632011202',
},
];
/* eslint-disable no-template-curly-in-string */
const validateMessages = {
@ -30,57 +67,144 @@ const validateMessages = {
const PublicPlatform: React.FC<PublicPlatformProps> = (props) => {
// const { modalVisible, onCancel } = props;
const { Text } = Typography;
const { TextArea } = Input;
const [container, setContainer] = useState<HTMLDivElement | null>(null);
const onFinish = (values: any) => {
console.log(values);
};
return (
<Card>
<Form {...layout} name="nest-messages" onFinish={onFinish} validateMessages={validateMessages}>
<div ref={setContainer} className="zjl-entrust" style={{ height: '100%', overflowY: 'auto', padding: '24px' }}>
<Form {...layout} name="public-platform" onFinish={onFinish} validateMessages={validateMessages}>
<h3 className="first-title"></h3>
<Form.Item name={['user', 'Projectsize']} label="项目规模">
<Input.TextArea />
<TextArea autoSize />
</Form.Item>
<Form.Item name={['user', 'introduction']} label="招标内容与范围及招标方案说明">
<Input.TextArea />
<TextArea autoSize />
</Form.Item>
<h3 className="first-title"></h3>
<h3 className="first-title"></h3>
<h3 className="first-title"></h3>
<Form.Item name={['user', 'website']} label="标段(包)内容">
<Input.TextArea />
</Form.Item>
<Form.Item name={['user', 'website']} label="投标人资格条件">
<Input.TextArea />
</Form.Item>
<h3 className="first-title"></h3>
<Form.Item name={['user', 'website']} label="质量">
<Input.TextArea />
</Form.Item>
<Form.Item name={['user', 'website']} label="评标情况">
<Input.TextArea />
</Form.Item>
<Form.Item name={['user', 'website']} label="中标候选人响应招标文件的资格能力条件">
<Input.TextArea />
</Form.Item>
<Form.Item name={['user', 'age']} label="工期/交货期/服务期" rules={[{ type: 'number', min: 0, max: 99 }]}>
<InputNumber />
</Form.Item>
<Form.Item name={['user', 'website']} label="项目负责人姓名">
<Input />
</Form.Item>
<Form.Item name={['user', 'website']} label="项目负责人证件号码">
<Input />
</Form.Item>
<Form.Item name={['user', 'website']} label="项目负责人相关证书和编号">
<Input />
</Form.Item>
<ProCard split="vertical">
<ProCard colSpan="15%" bodyStyle={{ padding: 0 }}>
<Affix target={() => container}>
<div style={{ height: innerHeight - 240, overflow: 'auto', }}>
<List
itemLayout="horizontal"
dataSource={data}
renderItem={item => (
<List.Item>
<List.Item.Meta
title={
<Space>
<a onClick={() => scrollToAnchor("name1")}>{item.title}</a>
<Tag color="success"></Tag>
</Space>
}
description={item.description}
/>
</List.Item>
)}
/>
</div>
</Affix>
</ProCard>
<ProCard bodyStyle={{ padding: 8 }}>
<Space direction="vertical" style={{ display: 'flex' }}>
<Card
title={
<Space>
<Tooltip title="标段标段标段标段标段标段标段标段标段标段标段标段标段标段标段标段标段标段标段标段标段1">
<span>XY92632011202</span>
</Tooltip>
<Text></Text>
<Tag color="success"></Tag>
</Space>
}
id="name1"
>
<Form {...bidLayout}>
<Form.Item name={['user', 'website']} label="标段(包)名称">
<TextArea autoSize />
</Form.Item>
<Form.Item name={['user', 'website']} label="标段(包)编号">
<Input />
</Form.Item>
<Form.Item name={['user', 'website']} label="标段(包)内容">
<TextArea autoSize />
</Form.Item>
<Form.Item name={['user', 'website']} label="投标人资格条件">
<TextArea autoSize />
</Form.Item>
<Form.Item label="中标候选人信息">
<Space direction="vertical" style={{ display: 'flex' }}>
<Card type="inner" title="中国邮政速递物流股份有限公司大连市分公司">
<Form {...candidateLayout}>
<Form.Item name={['user', 'website']} label="质量">
<TextArea autoSize />
</Form.Item>
<Form.Item name={['user', 'website']} label="评标情况">
<TextArea autoSize />
</Form.Item>
<Form.Item name={['user', 'website']} label="中标候选人响应招标文件的资格能力条件">
<TextArea rows={2} />
</Form.Item>
<Form.Item name={['user', 'age']} label="工期/交货期/服务期" rules={[{ type: 'number', min: 0, max: 99 }]}>
<InputNumber />
</Form.Item>
<Form.Item name={['user', 'website']} label="项目负责人姓名">
<Input />
</Form.Item>
<Form.Item name={['user', 'website']} label="项目负责人证件号码">
<Input />
</Form.Item>
<Form.Item name={['user', 'website']} label="项目负责人相关证书和编号">
<Input />
</Form.Item>
</Form>
</Card>
<Card type="inner" title="北京人大金仓信息技术股份有限公司">
<Form {...candidateLayout}>
<Form.Item name={['user', 'website']} label="质量">
<TextArea autoSize />
</Form.Item>
<Form.Item name={['user', 'website']} label="评标情况">
<TextArea autoSize />
</Form.Item>
<Form.Item name={['user', 'website']} label="中标候选人响应招标文件的资格能力条件">
<TextArea rows={2} />
</Form.Item>
<Form.Item name={['user', 'age']} label="工期/交货期/服务期" rules={[{ type: 'number', min: 0, max: 99 }]}>
<InputNumber />
</Form.Item>
<Form.Item name={['user', 'website']} label="项目负责人姓名">
<Input />
</Form.Item>
<Form.Item name={['user', 'website']} label="项目负责人证件号码">
<Input />
</Form.Item>
<Form.Item name={['user', 'website']} label="项目负责人相关证书和编号">
<Input />
</Form.Item>
</Form>
</Card>
</Space>
</Form.Item>
</Form>
</Card>
</Space>
</ProCard>
</ProCard>
{/* <Form.Item wrapperCol={{ ...layout.wrapperCol, offset: 8 }}>
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item> */}
</Form>
</Card>
</div>
);
};

View File

@ -11,7 +11,7 @@
* 判断是否等于空
* @param value
*/
export function isEmpty(value: any) {
export function isEmpty(value: any) {
return value === null || value === void 0 || value === '';
}
/**
@ -223,7 +223,7 @@ projectTypeCodeMaps.set("/Comparison", ["procurement_mode_3"]);
//招募
projectTypeCodeMaps.set("/Recruit", ["procurement_mode_4"]);
//谈判
projectTypeCodeMaps.set("/Negotiation", ["procurement_mode_5", "procurement_mode_6", ]);
projectTypeCodeMaps.set("/Negotiation", ["procurement_mode_5", "procurement_mode_6",]);
//询价
projectTypeCodeMaps.set("/Inquiry", ["procurement_mode_7"]);
@ -265,40 +265,52 @@ export const numberToChinese = (num: any) => {
var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十");
var BB = new Array("", "十", "百", "仟", "萬", "億", "点", "");
var a = ("" + num).replace(/(^0*)/g, "").split("."),
k = 0,
re = "";
k = 0,
re = "";
for (var i = a[0].length - 1; i >= 0; i--) {
switch (k) {
case 0:
re = BB[7] + re;
break;
case 4:
if (!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$")
.test(a[0]))
re = BB[4] + re;
break;
case 8:
re = BB[5] + re;
BB[7] = BB[5];
k = 0;
break;
}
if (k % 4 == 2 && a[0].charAt(i + 2) != '0' && a[0].charAt(i + 1) == '0')
re = AA[0] + re;
if (a[0].charAt(i) != '0')
re = AA[a[0].charAt(i)] + BB[k % 4] + re;
k++;
switch (k) {
case 0:
re = BB[7] + re;
break;
case 4:
if (!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$")
.test(a[0]))
re = BB[4] + re;
break;
case 8:
re = BB[5] + re;
BB[7] = BB[5];
k = 0;
break;
}
if (k % 4 == 2 && a[0].charAt(i + 2) != '0' && a[0].charAt(i + 1) == '0')
re = AA[0] + re;
if (a[0].charAt(i) != '0')
re = AA[a[0].charAt(i)] + BB[k % 4] + re;
k++;
}
if (a.length > 1) // 加上小数部分(如果有小数部分)
{
re += BB[6];
for (var i = 0; i < a[1].length; i++)
re += AA[a[1].charAt(i)];
re += BB[6];
for (var i = 0; i < a[1].length; i++)
re += AA[a[1].charAt(i)];
}
if (re == '一十')
re = "十";
re = "十";
if (re.match(/^一/) && re.length == 3)
re = re.replace("一", "");
re = re.replace("一", "");
return re;
}
/**
* 页面内锚点滚动方法
* @param anchorName
*/
export const scrollToAnchor = (anchorName: string) => {
if (anchorName) {
// 找到锚点
let anchorElement = document.getElementById(anchorName);
// 如果对应id的锚点存在就跳转到锚点
if (anchorElement) { anchorElement.scrollIntoView({ block: 'start', behavior: 'smooth' }); }
}
}