提交 e24a6d20 作者: 18928357778

Merge branch 'master' into caoyun

const config = { const dev = {
baseUrl: ''
}
const prod = {
baseUrl: 'http://120.77.247.178' baseUrl: 'http://120.77.247.178'
} }
export default config; export default process.env.NODE_ENV === 'development' ? dev : prod;
\ No newline at end of file \ No newline at end of file
...@@ -4,6 +4,28 @@ export interface FilterOptionResp { ...@@ -4,6 +4,28 @@ export interface FilterOptionResp {
id: number, id: number,
name: string name: string
} }
export default {
category: (): Promise<Response<Array<FilterOptionResp>>> => {
return request('/pms/webProductMall/category');
},
brand: (): Promise<Response<Array<FilterOptionResp>>> => {
return request('/pms/webDevice/brand');
},
model: (): Promise<Response<Array<FilterOptionResp>>> => {
return request('/pms/webDevice/model');
},
part: (): Promise<Response<Array<FilterOptionResp>>> => {
return request('/pms/webProductMall/parts');
},
quality: (): Promise<Response<Array<FilterOptionResp>>> => {
return request('/pms/webProductMall/quality');
},
region: (): Promise<Response<Array<FilterOptionResp>>> => {
return request('/pms/webDevice/getSecondDistrictInfo');
},
}
//商城接口 //商城接口
export const mallApi = { export const mallApi = {
category: (): Promise<Response<Array<FilterOptionResp>>> => { category: (): Promise<Response<Array<FilterOptionResp>>> => {
......
import { Space, Button, Select } from 'antd'; import { Space, Button, Select } from 'antd';
import styles from '../../index.module.scss'; import styles from '../../index.module.scss';
import { FilterOptionResp } from "../../api"; import api, { FilterOptionResp } from "../../api";
import { useEffect, useState } from "react";
type Props = { type Props = {
data: Array<FilterOptionResp>;
onChange: (id: FilterOptionResp) => void; onChange: (id: FilterOptionResp) => void;
}; };
export default function BrandItem(props: Props) { export default function BrandItem(props: Props) {
const [data, setData] = useState<FilterOptionResp[]>([])
useEffect(() => {
api.brand().then(res => {
setData(res?.result || []);
});
}, [])
const onClick = (item: FilterOptionResp) => { const onClick = (item: FilterOptionResp) => {
props.onChange({ props.onChange({
id: item.id, id: item.id,
...@@ -21,7 +29,7 @@ export default function BrandItem(props: Props) { ...@@ -21,7 +29,7 @@ export default function BrandItem(props: Props) {
<div className={styles.filterItemMain}> <div className={styles.filterItemMain}>
<Space size={40}> <Space size={40}>
{ {
props?.data?.map(item => { data.map(item => {
return <Button type="link" key={item.id} onClick={(e) => onClick(item)}>{item.name}</Button>; return <Button type="link" key={item.id} onClick={(e) => onClick(item)}>{item.name}</Button>;
}) })
} }
......
import { Space, Button, Select } from 'antd'; import { Space, Button, Select } from 'antd';
import styles from '../../index.module.scss'; import styles from '../../index.module.scss';
import { FilterOptionResp } from "../../api"; import api, { FilterOptionResp } from "../../api";
import { useState, useEffect } from 'react';
type Props = { type Props = {
data: Array<FilterOptionResp>;
onChange: (id: FilterOptionResp) => void; onChange: (id: FilterOptionResp) => void;
}; };
export default function CategoryItem(props: Props) { export default function CategoryItem(props: Props) {
const [data, setData] = useState<FilterOptionResp[]>([]);
useEffect(() => {
api.category().then((res) => {
setData(res?.result || []);
});
}, []);
const onClick = (item: FilterOptionResp) => { const onClick = (item: FilterOptionResp) => {
props.onChange({ props.onChange({
id: item.id, id: item.id,
...@@ -21,7 +29,7 @@ export default function CategoryItem(props: Props) { ...@@ -21,7 +29,7 @@ export default function CategoryItem(props: Props) {
<div className={styles.filterItemMain}> <div className={styles.filterItemMain}>
<Space size={40}> <Space size={40}>
{ {
props?.data?.map(item => { data.map(item => {
return <Button type="link" key={item.id} onClick={(e) => onClick(item)}>{item.name}</Button>; return <Button type="link" key={item.id} onClick={(e) => onClick(item)}>{item.name}</Button>;
}) })
} }
......
import { Space, Button, Select } from 'antd'; import { Space, Button, Select } from 'antd';
import styles from '../../index.module.scss'; import styles from '../../index.module.scss';
import { FilterOptionResp } from "../../api"; import api, { FilterOptionResp } from "../../api";
import { useEffect, useState } from 'react';
type Props = { type Props = {
data: Array<FilterOptionResp>;
onChange: (id: FilterOptionResp) => void; onChange: (id: FilterOptionResp) => void;
}; };
export default function ModelItem(props: Props) { export default function ModelItem(props: Props) {
const [data, setData] = useState<FilterOptionResp[]>([]);
useEffect(() => {
api.model().then((res) => {
setData(res?.result || []);
});
}, []);
const onClick = (item: FilterOptionResp) => { const onClick = (item: FilterOptionResp) => {
props.onChange({ props.onChange({
id: item.id, id: item.id,
...@@ -21,7 +29,7 @@ export default function ModelItem(props: Props) { ...@@ -21,7 +29,7 @@ export default function ModelItem(props: Props) {
<div className={styles.filterItemMain}> <div className={styles.filterItemMain}>
<Space size={40}> <Space size={40}>
{ {
props?.data?.map(item => { data?.map(item => {
return <Button type="link" key={item.id} onClick={(e) => onClick(item)}>{item.name}</Button>; return <Button type="link" key={item.id} onClick={(e) => onClick(item)}>{item.name}</Button>;
}) })
} }
......
import { Space, Button, Select } from 'antd'; import { Space, Button, Select } from 'antd';
import styles from '../../index.module.scss'; import styles from '../../index.module.scss';
import { FilterOptionResp } from "../../api"; import api, { FilterOptionResp } from "../../api";
import { useState, useEffect } from 'react';
type Props = { type Props = {
data: Array<FilterOptionResp>;
onChange: (id: FilterOptionResp) => void; onChange: (id: FilterOptionResp) => void;
}; };
export default function PartItem(props: Props) { export default function PartItem(props: Props) {
const [data, setData] = useState<FilterOptionResp[]>([]);
useEffect(() => {
api.part().then((res) => {
setData(res?.result || []);
});
}, []);
const onClick = (item: FilterOptionResp) => { const onClick = (item: FilterOptionResp) => {
props.onChange({ props.onChange({
id: item.id, id: item.id,
...@@ -20,7 +28,7 @@ export default function PartItem(props: Props) { ...@@ -20,7 +28,7 @@ export default function PartItem(props: Props) {
<div className={styles.filterItemTitle}>部件:</div> <div className={styles.filterItemTitle}>部件:</div>
<div className={styles.filterItemMain}> <div className={styles.filterItemMain}>
<Space size={40}> <Space size={40}>
{props?.data?.map((item) => { {data?.map((item) => {
return ( return (
<Button type="link" key={item.id} onClick={(e) => onClick(item)}> <Button type="link" key={item.id} onClick={(e) => onClick(item)}>
{item.name} {item.name}
......
import { Space, Button, Select } from 'antd'; import { Space, Button, Select } from 'antd';
import styles from '../../index.module.scss'; import styles from '../../index.module.scss';
import { FilterOptionResp } from "../../api"; import api, { FilterOptionResp } from "../../api";
import { useState, useEffect } from 'react';
type Props = { type Props = {
data: Array<FilterOptionResp>;
onChange: (id: FilterOptionResp) => void; onChange: (id: FilterOptionResp) => void;
}; };
export default function QualityItem(props: Props) { export default function QualityItem(props: Props) {
const [data, setData] = useState<FilterOptionResp[]>([]);
useEffect(() => {
api.quality().then((res) => {
setData(res?.result || []);
});
}, []);
const onClick = (item: FilterOptionResp) => { const onClick = (item: FilterOptionResp) => {
props.onChange({ props.onChange({
id: item.id, id: item.id,
...@@ -20,7 +28,7 @@ export default function QualityItem(props: Props) { ...@@ -20,7 +28,7 @@ export default function QualityItem(props: Props) {
<div className={styles.filterItemTitle}>成色:</div> <div className={styles.filterItemTitle}>成色:</div>
<div className={styles.filterItemMain}> <div className={styles.filterItemMain}>
<Space size={40}> <Space size={40}>
{props?.data?.map((item) => { {data?.map((item) => {
return ( return (
<Button type="link" key={item.id} onClick={(e) => onClick(item)}> <Button type="link" key={item.id} onClick={(e) => onClick(item)}>
{item.name} {item.name}
......
import { Space, Select } from 'antd'; import { Space, Select } from 'antd';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import styles from '../../index.module.scss'; import styles from '../../index.module.scss';
import api from '../../api';
export default function RegionItem(){ export default function RegionItem(){
const [productList, setProductList] = useState(Array<{}>); const [productList, setProductList] = useState(Array<{}>);
......
...@@ -13,7 +13,7 @@ export default function ResultItem({data, onDel}: Props) { ...@@ -13,7 +13,7 @@ export default function ResultItem({data, onDel}: Props) {
<div className={styles.filterItemMain}> <div className={styles.filterItemMain}>
<Space size={10}> <Space size={10}>
{data && {data &&
Object.keys(data).map((key, i) => { Object.keys(data).map((key) => {
//@ts-ignore //@ts-ignore
let item = data[key]; let item = data[key];
return ( return (
...@@ -22,7 +22,7 @@ export default function ResultItem({data, onDel}: Props) { ...@@ -22,7 +22,7 @@ export default function ResultItem({data, onDel}: Props) {
onClose={(e: React.MouseEvent<HTMLElement, MouseEvent>) => { onClose={(e: React.MouseEvent<HTMLElement, MouseEvent>) => {
onDel(key); onDel(key);
}} }}
key={i} key={key}
> >
{item?.name} {item?.name}
</Tag> </Tag>
......
...@@ -16,14 +16,8 @@ export type FilterResult = { ...@@ -16,14 +16,8 @@ export type FilterResult = {
type itemType = "类目" | "地域" | "品牌" | "部件" | "型号" | "成色"; type itemType = "类目" | "地域" | "品牌" | "部件" | "型号" | "成色";
type Props = { type Props = {
types: [itemType, itemType, itemType, itemType, itemType, itemType]; //需要包含的筛选条件项 types: itemType[]; //需要包含的筛选条件项
showResultItem: Boolean; //显示结果栏 showResultItem: Boolean; //显示结果栏
categoryData?: Array<FilterOptionResp>;
regionData?: Array<FilterOptionResp>;
brandData?: Array<FilterOptionResp>;
modelData?: Array<FilterOptionResp>;
partData?: Array<FilterOptionResp>;
qualityData?: Array<FilterOptionResp>;
onChange: (filterResult: FilterResult) => void; //筛选条件更改事件 onChange: (filterResult: FilterResult) => void; //筛选条件更改事件
}; };
export default function Filter(props: Props) { export default function Filter(props: Props) {
...@@ -59,31 +53,26 @@ export default function Filter(props: Props) { ...@@ -59,31 +53,26 @@ export default function Filter(props: Props) {
<div className={styles.filterWrap}> <div className={styles.filterWrap}>
{props.types.includes("品牌") && ( {props.types.includes("品牌") && (
<BrandItem <BrandItem
data={props.brandData || []}
onChange={(item: FilterOptionResp) => onChange(item, "brand")} onChange={(item: FilterOptionResp) => onChange(item, "brand")}
></BrandItem> ></BrandItem>
)} )}
{props.types.includes("类目") && ( {props.types.includes("类目") && (
<CategoryItem <CategoryItem
data={props.categoryData || []}
onChange={(item: FilterOptionResp) => onChange(item, "category")} onChange={(item: FilterOptionResp) => onChange(item, "category")}
></CategoryItem> ></CategoryItem>
)} )}
{props.types.includes("部件") && ( {props.types.includes("部件") && (
<PartItem <PartItem
data={props.partData || []}
onChange={(item: FilterOptionResp) => onChange(item, "part")} onChange={(item: FilterOptionResp) => onChange(item, "part")}
></PartItem> ></PartItem>
)} )}
{props.types.includes("型号") && ( {props.types.includes("型号") && (
<ModelItem <ModelItem
data={props.modelData || []}
onChange={(item: FilterOptionResp) => onChange(item, "model")} onChange={(item: FilterOptionResp) => onChange(item, "model")}
></ModelItem> ></ModelItem>
)} )}
{props.types.includes("成色") && ( {props.types.includes("成色") && (
<QualityItem <QualityItem
data={props.qualityData || []}
onChange={(item: FilterOptionResp) => onChange(item, "quality")} onChange={(item: FilterOptionResp) => onChange(item, "quality")}
></QualityItem> ></QualityItem>
)} )}
......
...@@ -11,6 +11,14 @@ const nextConfig = { ...@@ -11,6 +11,14 @@ const nextConfig = {
}, },
]; ];
}, },
async rewrites() {
return [
{
source: "/pms/:path*",
destination: "http://120.77.247.178/pms/:path*",
},
];
},
pageExtensions: ["page.tsx", "page.ts", "page.jsx", "page.js"], pageExtensions: ["page.tsx", "page.ts", "page.jsx", "page.js"],
}; };
......
...@@ -9,32 +9,13 @@ import { FilterOptionResp, mallApi } from "~/components/filter/api"; ...@@ -9,32 +9,13 @@ import { FilterOptionResp, mallApi } from "~/components/filter/api";
// 此函数在构建时被调用 // 此函数在构建时被调用
export async function getServerSideProps() { export async function getServerSideProps() {
//获取筛选数据,进行静态渲染
const brand = Filter.mallApi.brand();
const category = Filter.mallApi.category();
const model = Filter.mallApi.model();
const part = Filter.mallApi.part();
const quality = Filter.mallApi.quality();
const res = await Promise.all([brand, category, part, model, quality]);
return { return {
props: { props: {
brandData: res[0].result || [],
categoryData: res[1].result || [],
partData: res[2].result || [],
modelData: res[3].result || [],
qualityData: res[4].result || [],
}, },
}; };
} }
type Props = { type Props = {
brandData: Array<FilterOptionResp>;
categoryData: Array<FilterOptionResp>;
partData: Array<FilterOptionResp>;
modelData: Array<FilterOptionResp>;
qualityData: Array<FilterOptionResp>;
}; };
export default function Mall(props: Props) { export default function Mall(props: Props) {
...@@ -49,11 +30,6 @@ export default function Mall(props: Props) { ...@@ -49,11 +30,6 @@ export default function Mall(props: Props) {
<Filter <Filter
types={["类目", "地域", "品牌", "部件", "型号", "成色"]} types={["类目", "地域", "品牌", "部件", "型号", "成色"]}
showResultItem showResultItem
brandData={props.brandData}
categoryData={props.categoryData}
partData={props.partData}
modelData={props.modelData}
qualityData={props.qualityData}
onChange={onFilterChange} onChange={onFilterChange}
></Filter> ></Filter>
<div className={styles.productList}> <div className={styles.productList}>
......
pages/projectInfo/assets/banner.png

91.2 KB | W: | H:

pages/projectInfo/assets/banner.png

83.2 KB | W: | H:

pages/projectInfo/assets/banner.png
pages/projectInfo/assets/banner.png
pages/projectInfo/assets/banner.png
pages/projectInfo/assets/banner.png
  • 2-up
  • Swipe
  • Onion skin
.bannerWrap{ .bannerWrap{
height: 180px; height: 160px;
position: relative; position: relative;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论