提交 1241f57a 作者: 翁进城

项目资讯开发

上级 03660a06
export default {
}
\ No newline at end of file
import request, { Response } from '~/api/request';
export interface ListNewTenderInfoParams {
cityCode?: number;
date?: string;
districtCode?: number;
pageNo: number;
pageSize: number;
provinceCode?: number;
}
export interface ListNewTenderInfoResp {
pageNo: number;
pageSize: number;
list: Item[];
totalCount: number;
totalPage: number;
}
export interface Item {
id: number;
tenderNewsId: number;
tenderInfoNo: string;
tenderContent: string;
tenderPrice: number;
createTime: string;
apply: 0 | 1;
}
export default {
/**
* 招投标列表
* @param params
* @returns
*/
listNewTenderInfo(params: ListNewTenderInfoParams, options = {}): Promise<Response<ListNewTenderInfoResp>> {
return request('/release/tender/listNewTenderInfo', 'post', params, options);
}
}
\ No newline at end of file
import { Button } from "antd"; import { Button } from "antd";
import { useState, useEffect } from "react";
import api, { Item } from "./api";
import styles from "./index.module.scss"; import styles from "./index.module.scss";
const list = [ export default function Bids() {
{ const [list, setList] = useState<Array<Item>>([]);
isApply: false, const [pageParams, setPageParams] = useState({
}, pageNo: 1,
{ pageSize: 5,
isApply: true, });
}, const [count, setCount] = useState(0);
]; const [abort, setAbort] = useState<AbortController | null>(null);
useEffect(() => {
//中断前一次请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams]);
useEffect(() => {
api
.listNewTenderInfo(
{
...pageParams,
},
{
signal: abort?.signal,
}
)
.then((res) => {
setList(res.result?.list || []);
setCount(res.result?.totalCount || 0);
});
}, [abort]);
export default function requirements() {
return ( return (
<div className={styles.bids}> <div className={styles.bids}>
{list.map((item, i) => { {list.map((item, i) => {
return ( return (
<div className={styles.item} key={i}> <div className={styles.item} key={i}>
<div className={styles.info}> <div className={styles.info}>
<div className={styles.title}>项目需求:电力巡检需要5名飞手</div> <div className={styles.title}>项目需求:{item.tenderContent}</div>
</div> </div>
{item.isApply ? ( {item.apply ? (
<Button <Button
type="primary" type="primary"
disabled disabled
className={`${styles.btn} ${styles.disabled}`} className={`${styles.btn} ${styles.disabled}`}
> >
<div className={styles.text1}>155W</div> <div className={styles.text1}>{item.tenderPrice}</div>
<div className={styles.text2}>已申请</div> <div className={styles.text2}>已申请</div>
</Button> </Button>
) : ( ) : (
<Button type="primary" className={styles.btn}> <Button type="primary" className={styles.btn}>
<div className={styles.text1}>155W</div> <div className={styles.text1}>{item.tenderPrice}</div>
<div className={styles.text2}>申请合作</div> <div className={styles.text2}>申请合作</div>
</Button> </Button>
)} )}
......
import request, { Response } from '~/api/request';
export interface ListCasePageParams {
cityCode?: number;
date?: string;
districtCode?: number;
pageNo: number;
pageSize: number;
provinceCode?: number;
}
export interface ListCasePageResp {
pageNo: number;
pageSize: number;
list: Item[];
totalCount: number;
totalPage: number;
}
export interface Item {
id: number;
newsTitle: string;
newsAuthor: string;
userAccountId: number;
surfaceImg: string;
newsContents: string;
createTime: string;
updateTime: string;
isApply: 0 | 1
}
export default {
/**
* 案例列表
* @param params
* @returns
*/
listCasePage(params: ListCasePageParams, options = {}): Promise<Response<ListCasePageResp>> {
return request('/release/industry-case/listCasePage', 'post', params, options);
}
}
\ No newline at end of file
import { Button } from "antd"; import { Button } from "antd";
import { useState, useEffect } from "react";
import api, { Item } from "./api";
import styles from "./index.module.scss"; import styles from "./index.module.scss";
const list = [ const list = [
...@@ -10,24 +12,46 @@ const list = [ ...@@ -10,24 +12,46 @@ const list = [
}, },
]; ];
export default function requirements() { export default function Cases() {
const [list, setList] = useState<Array<Item>>([]);
const [pageParams, setPageParams] = useState({
pageNo: 1,
pageSize: 5,
});
const [count, setCount] = useState(0);
const [abort, setAbort] = useState<AbortController | null>(null);
useEffect(() => {
//中断前一次请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams]);
useEffect(() => {
api
.listCasePage(
{
...pageParams,
},
{
signal: abort?.signal,
}
)
.then((res) => {
setList(res.result?.list || []);
setCount(res.result?.totalCount || 0);
});
}, [abort]);
return ( return (
<div className={styles.casas}> <div className={styles.casas}>
{list.map((item, i) => { {list.map((item, i) => {
return ( return (
<div className={styles.item} key={i}> <div className={styles.item} key={i}>
<div className={styles.info}> <div className={styles.info}>
<div className={styles.title}>项目需求:电力巡检需要5名飞手</div> <div className={styles.title}>{item.newsTitle}</div>
</div> </div>
{item.isApply ? ( <Button className={styles.btn}>查看案例</Button>
<Button disabled className={styles.btnDisabled}>
已申请
</Button>
) : (
<Button className={styles.btn}>
申请合作
</Button>
)}
</div> </div>
); );
})} })}
......
import request, { Response } from '~/api/request';
export interface ListNewsPageParams {
cityCode?: number;
date?: string;
districtCode?: number;
pageNo: number;
pageSize: number;
provinceCode?: number;
}
export interface ListNewsPageResp {
pageNo: number;
pageSize: number;
list: Item[];
totalCount: number;
totalPage: number;
}
export interface Item {
id: number;
newsTitle: string;
newsAuthor: string;
userAccountId: number;
surfaceImg: string;
newsContents: string;
createTime: string;
updateTime?: any;
}
export default {
/**
* 新闻列表
* @param params
* @returns
*/
listNewsPage(params: ListNewsPageParams, options = {}): Promise<Response<ListNewsPageResp>> {
return request('/release/industry-news/listNewsPage', 'post', params, options);
}
}
\ No newline at end of file
...@@ -2,8 +2,40 @@ import { RightOutlined } from "@ant-design/icons"; ...@@ -2,8 +2,40 @@ import { RightOutlined } from "@ant-design/icons";
import { Col, Row } from "antd"; import { Col, Row } from "antd";
import styles from "./index.module.scss"; import styles from "./index.module.scss";
import Image from "next/image"; import Image from "next/image";
import { useState, useEffect } from "react";
import api, { Item } from "./api";
export default function News() {
const [rightList, setRightList] = useState<Array<Item>>([]);
const [pageParams, setPageParams] = useState({
pageNo: 1,
pageSize: 5,
});
const [count, setCount] = useState(0);
const [abort, setAbort] = useState<AbortController | null>(null);
useEffect(() => {
//中断前一次请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams]);
useEffect(() => {
api
.listNewsPage(
{
...pageParams,
},
{
signal: abort?.signal,
}
)
.then((res) => {
setRightList(res.result?.list || []);
setCount(res.result?.totalCount || 0);
});
}, [abort]);
export default function requirements() {
return ( return (
<Row justify="space-between"> <Row justify="space-between">
<Col className={styles.new}> <Col className={styles.new}>
...@@ -20,12 +52,20 @@ export default function requirements() { ...@@ -20,12 +52,20 @@ export default function requirements() {
<RightOutlined style={{ fontSize: 16 }} /> <RightOutlined style={{ fontSize: 16 }} />
</div> </div>
<ul className={styles.newList}> <ul className={styles.newList}>
<li className={styles.newItem}> {rightList.map((item) => {
<div className={styles.newItemTitle}> return (
中国超音速无人机雨燕试飞成功好棒呀 <li className={styles.newItem}>
</div> <div className={styles.newItemTitle}>{item.newsTitle}</div>
<Image className={styles.newItemImg} src="" alt=""></Image> <Image
</li> className={styles.newItemImg}
src={item.surfaceImg}
alt=""
width={90}
height={60}
></Image>
</li>
);
})}
</ul> </ul>
</Col> </Col>
</Row> </Row>
......
import request, { Response } from '~/api/request';
export interface ListPublishPageParams {
cityCode?: number;
date?: string;
districtCode?: number;
pageNo: number;
pageSize: number;
provinceCode?: number;
}
export interface ListPublishPageResp {
pageNo: number;
pageSize: number;
list: Item[];
totalCount: number;
totalPage: number;
}
export interface Item {
id: number;
requirementTypeId: number;
userAccountId: number;
publishName: string;
publishPhone: string;
requireDescription: string;
solved?: 0 | 1;
createTime: string;
updateTime?: string;
}
export default {
/**
* 需求发布列表
* @param params
* @returns
*/
listPublishPage(params: ListPublishPageParams, options = {}): Promise<Response<ListPublishPageResp>> {
return request('/release/requirements/listPublishPage', 'post', params, options);
}
}
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import api, { Item } from "./api";
import styles from './index.module.scss'; import styles from './index.module.scss';
export default function requirements(){ export default function Requirements(){
const [list, setList] = useState<Array<Item>>([]);
const [pageParams, setPageParams] = useState({
pageNo: 1,
pageSize: 5,
});
const [count, setCount] = useState(0);
const [abort, setAbort] = useState<AbortController | null>(null);
useEffect(() => {
//中断前一次请求
abort?.abort();
setAbort(new AbortController());
}, [pageParams]);
useEffect(() => {
api
.listPublishPage(
{
...pageParams,
},
{
signal: abort?.signal,
}
)
.then((res) => {
setList(res.result?.list || []);
setCount(res.result?.totalCount || 0);
});
}, [abort]);
return ( return (
<div className={styles.requirements}> <div className={styles.requirements}>
<div className={styles.item}> {list.map(item => {
<div className={styles.logo}></div> return (
<div className={styles.info}> <div
<div className={styles.title}>项目需求:电力巡检需要5名飞手</div> className={`${styles.item} ${!item.solved && styles.noResolve}`}
<div className={styles.desc}> key={item.id}
具体需求:电力巡检需要5名飞手,山东临沂 >
</div> <div className={styles.logo}></div>
</div> <div className={styles.info}>
</div> <div className={styles.title}>项目需求:电力巡检需要5名飞手</div>
<div className={`${styles.item} ${styles.noResolve}`}> <div className={styles.desc}>
<div className={styles.logo}></div> 具体需求:{item.requireDescription}
<div className={styles.info}> </div>
<div className={styles.title}>项目需求:电力巡检需要5名飞手</div> </div>
<div className={styles.desc}>
具体需求:电力巡检需要5名飞手,山东临沂
</div> </div>
</div> );
</div> })}
</div> </div>
); );
} }
\ No newline at end of file
...@@ -9,10 +9,10 @@ import { ...@@ -9,10 +9,10 @@ import {
} from "antd"; } from "antd";
import styles from "./index.module.scss"; import styles from "./index.module.scss";
import Layout from "~/components/layout"; import Layout from "~/components/layout";
import requirements from "./components/requirements"; //项目需求 import Requirements from "./components/requirements"; //项目需求
import bids from "./components/bids"; //招投标项目 import Bids from "./components/bids"; //招投标项目
import cases from "./components/cases"; //业务案例 import Cases from "./components/cases"; //业务案例
import news from "./components/news"; //行业新闻 import News from "./components/news"; //行业新闻
interface Option { interface Option {
value: string | number; value: string | number;
...@@ -84,19 +84,19 @@ const items = ["项目需求", "招投标项目", "业务案例", "行业新闻" ...@@ -84,19 +84,19 @@ const items = ["项目需求", "招投标项目", "业务案例", "行业新闻"
switch (value) { switch (value) {
case "项目需求": case "项目需求":
children = requirements(); children = <Requirements></Requirements>;
break; break;
case "招投标项目": case "招投标项目":
children = bids(); children = <Bids></Bids>;
break; break;
case "业务案例": case "业务案例":
children = cases(); children = <Cases></Cases>;
break; break;
case "行业新闻": case "行业新闻":
children = news(); children = <News></News>;
break; break;
} }
return { return {
...@@ -107,7 +107,7 @@ const items = ["项目需求", "招投标项目", "业务案例", "行业新闻" ...@@ -107,7 +107,7 @@ const items = ["项目需求", "招投标项目", "业务案例", "行业新闻"
} }
); );
export default function Mall() { export default function ProjectInfo() {
return ( return (
<Layout layoutStyle={{ backgroundColor: "#fff" }}> <Layout layoutStyle={{ backgroundColor: "#fff" }}>
<div style={{ backgroundColor: "#fff", minHeight: 820 }}> <div style={{ backgroundColor: "#fff", minHeight: 820 }}>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论