Commit 29cb0d30 authored by XieZhiXiong's avatar XieZhiXiong
parents 45967a9f 5e72f8b3
...@@ -37,6 +37,10 @@ export enum LAYOUT_TYPE { ...@@ -37,6 +37,10 @@ export enum LAYOUT_TYPE {
* 渠道商城-积分兑换 * 渠道商城-积分兑换
*/ */
channelScoreMall = 'channelScoreMall', channelScoreMall = 'channelScoreMall',
/**
* 店铺列表
*/
shopList = 'shopList'
} }
// 本地环境跳过权限校验 // 本地环境跳过权限校验
...@@ -166,7 +170,11 @@ export enum FILTER_TYPE { ...@@ -166,7 +170,11 @@ export enum FILTER_TYPE {
/** /**
* 属性筛选 * 属性筛选
*/ */
attribute = 'attribute' attribute = 'attribute',
/**
* 店铺地区筛选
*/
shopArea = 'shopArea'
} }
// 商城类型 // 商城类型
...@@ -645,7 +653,7 @@ export enum SaleOrderInsideWorkState { ...@@ -645,7 +653,7 @@ export enum SaleOrderInsideWorkState {
* 提交二级审核订单不通过 * 提交二级审核订单不通过
*/ */
TWO_LEVEL_AUDIT_ORDER_NOT_ALLOWED, TWO_LEVEL_AUDIT_ORDER_NOT_ALLOWED,
/** /**
* 不接受订单 * 不接受订单
*/ */
...@@ -665,7 +673,7 @@ export enum SaleOrderInsideWorkState { ...@@ -665,7 +673,7 @@ export enum SaleOrderInsideWorkState {
* 订单销售,发货单创建 * 订单销售,发货单创建
*/ */
SALE_CREATE_DELIVED_ORDER, SALE_CREATE_DELIVED_ORDER,
/** /**
* 新增物流单 * 新增物流单
*/ */
......
...@@ -86,6 +86,7 @@ const Commodity: React.FC<CommodityPropsType> = (props) => { ...@@ -86,6 +86,7 @@ const Commodity: React.FC<CommodityPropsType> = (props) => {
}, [props.location.query]) }, [props.location.query])
useEffect(() => { useEffect(() => {
setCurrent(1)
fetchCommodityList(1) fetchCommodityList(1)
}, [filterParam]) }, [filterParam])
......
...@@ -61,9 +61,9 @@ const CommoditySearch: React.FC<CommodityPropsType> = (props) => { ...@@ -61,9 +61,9 @@ const CommoditySearch: React.FC<CommodityPropsType> = (props) => {
// const filterConfig = [FILTER_TYPE.commonlyUsed, FILTER_TYPE.category, FILTER_TYPE.brand, FILTER_TYPE.price, FILTER_TYPE.useArea, FILTER_TYPE.commodityType] // const filterConfig = [FILTER_TYPE.commonlyUsed, FILTER_TYPE.category, FILTER_TYPE.brand, FILTER_TYPE.price, FILTER_TYPE.useArea, FILTER_TYPE.commodityType]
useEffect(() => { useEffect(() => {
fetchCommodityList() setCurrent(1)
fetchCommodityList(1)
}, [filterParam, current, search]) }, [filterParam, search])
useEffect(() => { useEffect(() => {
if (!isEmpty(filterList) || filterUpdate) { if (!isEmpty(filterList) || filterUpdate) {
...@@ -82,9 +82,9 @@ const CommoditySearch: React.FC<CommodityPropsType> = (props) => { ...@@ -82,9 +82,9 @@ const CommoditySearch: React.FC<CommodityPropsType> = (props) => {
}) })
}, [layoutType]) }, [layoutType])
const fetchCommodityList = () => { const fetchCommodityList = (currentParam?: number) => {
let param: filterQuery = { let param: filterQuery = {
current, current: currentParam ? currentParam : current,
pageSize pageSize
} }
if (!!search) { if (!!search) {
...@@ -146,6 +146,7 @@ const CommoditySearch: React.FC<CommodityPropsType> = (props) => { ...@@ -146,6 +146,7 @@ const CommoditySearch: React.FC<CommodityPropsType> = (props) => {
const handlePageChange = (page) => { const handlePageChange = (page) => {
setCurrent(page) setCurrent(page)
fetchCommodityList(page)
} }
/** /**
......
...@@ -518,9 +518,9 @@ const CommodityDetail = (props) => { ...@@ -518,9 +518,9 @@ const CommodityDetail = (props) => {
} }
const handleSelectAttrVal = (attrId: number, attrValId: number) => { const handleSelectAttrVal = (attrId: number, attrValId: number) => {
if (!judgeHasAttr(attrId, attrValId)) { // if (!judgeHasAttr(attrId, attrValId)) {
return // return
} // }
if (judgeSelectAttrInList(selectAttrVal, attrId, 'attrId')) { if (judgeSelectAttrInList(selectAttrVal, attrId, 'attrId')) {
let result = [] let result = []
for (let item of selectAttrVal) { for (let item of selectAttrVal) {
...@@ -696,7 +696,8 @@ const CommodityDetail = (props) => { ...@@ -696,7 +696,8 @@ const CommodityDetail = (props) => {
key={`product_info_line_list_item_${childItem.id}_${index}`} key={`product_info_line_list_item_${childItem.id}_${index}`}
className={cx(styles.product_info_line_list_item, className={cx(styles.product_info_line_list_item,
judgeSelectAttrInList(selectAttrVal, childItem.id, 'attrValId') ? styles.active : '', judgeSelectAttrInList(selectAttrVal, childItem.id, 'attrValId') ? styles.active : '',
judgeHasAttr(item.customerAttribute.id, childItem.id) ? '' : styles.disabled)} // judgeHasAttr(item.customerAttribute.id, childItem.id) ? '' : styles.disabled
)}
onClick={() => handleSelectAttrVal(item.customerAttribute.id, childItem.id)} > onClick={() => handleSelectAttrVal(item.customerAttribute.id, childItem.id)} >
{ {
childItem.commodityPic && ( childItem.commodityPic && (
......
...@@ -47,6 +47,9 @@ const Category: React.FC<CategoryPropsType> = (props) => { ...@@ -47,6 +47,9 @@ const Category: React.FC<CategoryPropsType> = (props) => {
useEffect(() => { useEffect(() => {
let getCategoryListFn let getCategoryListFn
let param: any = {} let param: any = {}
/**
* 根据不通过的页面类型,请求不同的品类接口
*/
switch (layoutType) { switch (layoutType) {
case LAYOUT_TYPE.mall: case LAYOUT_TYPE.mall:
getCategoryListFn = PublicApi.getSearchShopEnterpriseGetCategoryTree getCategoryListFn = PublicApi.getSearchShopEnterpriseGetCategoryTree
...@@ -66,6 +69,8 @@ const Category: React.FC<CategoryPropsType> = (props) => { ...@@ -66,6 +69,8 @@ const Category: React.FC<CategoryPropsType> = (props) => {
param.storeId = shopId param.storeId = shopId
getCategoryListFn = PublicApi.getSearchShopScoreGetCategoryTree getCategoryListFn = PublicApi.getSearchShopScoreGetCategoryTree
break break
case LAYOUT_TYPE.shopList:
getCategoryListFn = PublicApi.getProductPlatformGetCategoryTree
default: default:
break break
} }
......
...@@ -3,10 +3,11 @@ ...@@ -3,10 +3,11 @@
* @Author: ghua * @Author: ghua
* @Date: 2020-08-20 16:23:39 * @Date: 2020-08-20 16:23:39
* @Last Modified by: ghua * @Last Modified by: ghua
* @Last Modified time: 2020-08-20 16:49:11 * @Last Modified time: 2020-09-23 19:49:12
*/ */
import React from 'react' import React, { useState, useEffect } from 'react'
import { PublicApi } from '@/services/api'
import styles from './index.less' import styles from './index.less'
interface NewJoinPropsType { interface NewJoinPropsType {
...@@ -15,44 +16,40 @@ interface NewJoinPropsType { ...@@ -15,44 +16,40 @@ interface NewJoinPropsType {
const NewJoin: React.FC<NewJoinPropsType> = (props) => { const NewJoin: React.FC<NewJoinPropsType> = (props) => {
const [newJoinShopList, setNewJoinShopList] = useState([])
useEffect(() => {
fetchNewJoinShopList()
}, [])
const fetchNewJoinShopList = () => {
PublicApi.getTemplateShopFindNewAddShop().then(res => {
if (res.code === 1000) {
setNewJoinShopList(res.data)
}
})
}
return ( return (
<div className={styles.new_join}> <div className={styles.new_join}>
<div className={styles.new_join_title}> <div className={styles.new_join_title}>
<label>最新加入</label> <label>最新加入</label>
</div> </div>
<div className={styles.new_join_list}> <div className={styles.new_join_list}>
{
<div className={styles.new_join_list_item}> newJoinShopList && newJoinShopList.map(item => (
<div className={styles.new_join_logo}> <div className={styles.new_join_list_item} key={`new_join_list_item_${item.id}`}>
<img src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3381279230,433852972&fm=26&gp=0.jpg" /> <div className={styles.new_join_logo}>
</div> <img src={item.logo} />
<div className={styles.new_join_name}> <a href="/">无锡市群明钢业有限公司</a></div> </div>
</div> <div className={styles.new_join_name}>
<a href={`/shop?shopId=${btoa(JSON.stringify({ shopId: item.id, memberId: item.memberId }))}`}>
<div className={styles.new_join_list_item}> {item.memberName}
<div className={styles.new_join_logo}> </a>
<img src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3381279230,433852972&fm=26&gp=0.jpg" /> </div>
</div> </div>
<div className={styles.new_join_name}>无锡市群明钢业有限公司</div> ))
</div> }
<div className={styles.new_join_list_item}>
<div className={styles.new_join_logo}>
<img src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3381279230,433852972&fm=26&gp=0.jpg" />
</div>
<div className={styles.new_join_name}>无锡市群明钢业有限公司</div>
</div>
<div className={styles.new_join_list_item}>
<div className={styles.new_join_logo}>
<img src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3381279230,433852972&fm=26&gp=0.jpg" />
</div>
<div className={styles.new_join_name}>无锡市群明钢业有限公司</div>
</div>
<div className={styles.new_join_list_item}>
<div className={styles.new_join_logo}>
<img src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3381279230,433852972&fm=26&gp=0.jpg" />
</div>
<div className={styles.new_join_name}>无锡市群明钢业有限公司</div>
</div>
</div> </div>
</div> </div>
) )
......
...@@ -50,14 +50,16 @@ const UseArea: React.FC<UseAreaPropsType> = (props) => { ...@@ -50,14 +50,16 @@ const UseArea: React.FC<UseAreaPropsType> = (props) => {
setSelectCity([]) setSelectCity([])
} else { } else {
let initKeys = [] let initKeys = []
for (let item of filterList) { if (layoutType !== LAYOUT_TYPE.shopList) {
if (item.type === FILTER_TYPE.province) { for (let item of filterList) {
initKeys.push(item.key) if (item.type === FILTER_TYPE.province) {
} else if (item.type === FILTER_TYPE.city) { initKeys.push(item.key)
initKeys.push(item.key) } else if (item.type === FILTER_TYPE.city) {
initKeys.push(item.key)
}
} }
setSelectCity(initKeys)
} }
setSelectCity(initKeys)
} }
}, [filterList]) }, [filterList])
...@@ -66,6 +68,7 @@ const UseArea: React.FC<UseAreaPropsType> = (props) => { ...@@ -66,6 +68,7 @@ const UseArea: React.FC<UseAreaPropsType> = (props) => {
let param: any = {} let param: any = {}
switch (layoutType) { switch (layoutType) {
case LAYOUT_TYPE.mall: case LAYOUT_TYPE.mall:
case LAYOUT_TYPE.shopList:
getAreaFn = PublicApi.getSearchShopEnterpriseGetArea getAreaFn = PublicApi.getSearchShopEnterpriseGetArea
break break
case LAYOUT_TYPE.shop: case LAYOUT_TYPE.shop:
...@@ -109,30 +112,46 @@ const UseArea: React.FC<UseAreaPropsType> = (props) => { ...@@ -109,30 +112,46 @@ const UseArea: React.FC<UseAreaPropsType> = (props) => {
const handleSelect = (item: any, type: FILTER_TYPE) => { const handleSelect = (item: any, type: FILTER_TYPE) => {
if (type === FILTER_TYPE.province) { if (type === FILTER_TYPE.province) {
setSelectCity([item.value]) setSelectCity([item.value])
onFilter({ if (layoutType === LAYOUT_TYPE.shopList) {
type: FILTER_TYPE.province,
title: item.label,
key: item.value
})
if (selectCity.length > 1 && selectCity[0] !== item.value) {
onFilter({ onFilter({
type: FILTER_TYPE.city, type: FILTER_TYPE.shopArea,
title: item.label,
key: item.value
})
} else {
onFilter({
type: FILTER_TYPE.province,
title: item.label, title: item.label,
key: null key: item.value
}) })
if (selectCity.length > 1 && selectCity[0] !== item.value) {
onFilter({
type: FILTER_TYPE.city,
title: item.label,
key: null
})
}
} }
} else { } else {
setSelectCity([selectCity[0], item.value]) setSelectCity([selectCity[0], item.value])
onFilter({ if (layoutType === LAYOUT_TYPE.shopList) {
type: FILTER_TYPE.province, onFilter({
title: getProvinceText(selectCity[0]), type: FILTER_TYPE.shopArea,
key: selectCity[0] title: item.label,
}) key: item.value
onFilter({ })
type: FILTER_TYPE.city, } else {
title: item.label, onFilter({
key: item.value type: FILTER_TYPE.province,
}) title: getProvinceText(selectCity[0]),
key: selectCity[0]
})
onFilter({
type: FILTER_TYPE.city,
title: item.label,
key: item.value
})
}
} }
} }
......
...@@ -2,11 +2,12 @@ import React from 'react' ...@@ -2,11 +2,12 @@ import React from 'react'
import styles from './index.less' import styles from './index.less'
interface NoResultPropsType { interface NoResultPropsType {
search?: string search?: string,
type?: number, // 1:商品, 2:店铺
} }
const SearchNoResult: React.FC<NoResultPropsType> = (props) => { const SearchNoResult: React.FC<NoResultPropsType> = (props) => {
const { search } = props const { search, type = 1 } = props
return ( return (
<div className={styles.no_result}> <div className={styles.no_result}>
<div className={styles.no_result_tip}> <div className={styles.no_result_tip}>
...@@ -17,11 +18,11 @@ const SearchNoResult: React.FC<NoResultPropsType> = (props) => { ...@@ -17,11 +18,11 @@ const SearchNoResult: React.FC<NoResultPropsType> = (props) => {
<> <>
抱歉,没有找到与“ 抱歉,没有找到与“
<span className={styles.no_result_tip_search}>{search}</span> <span className={styles.no_result_tip_search}>{search}</span>
”相关的商品 ”相关的{type === 1 ? '商品' : '店铺'}
</> </>
) : ( ) : (
<> <>
抱歉,没有找到相关的商品 抱歉,没有找到相关的{type === 1 ? '商品' : '店铺'}
</> </>
) )
} }
......
...@@ -53,6 +53,7 @@ const PointsMall: React.FC<CommodityPropsType> = (props) => { ...@@ -53,6 +53,7 @@ const PointsMall: React.FC<CommodityPropsType> = (props) => {
const filterConfig = [FILTER_TYPE.category, FILTER_TYPE.points] const filterConfig = [FILTER_TYPE.category, FILTER_TYPE.points]
useEffect(() => { useEffect(() => {
setCurrent(1)
fetchCommodityList(1) fetchCommodityList(1)
}, [filterParam]) }, [filterParam])
......
...@@ -120,7 +120,7 @@ const PurchaseOnline: React.FC<PurchaseOnlinePropsType> = (props) => { ...@@ -120,7 +120,7 @@ const PurchaseOnline: React.FC<PurchaseOnlinePropsType> = (props) => {
<div className={styles.purchaseOnline}> <div className={styles.purchaseOnline}>
<div className={styles.mall_container}> <div className={styles.mall_container}>
<div className={styles.commodity_container}> <div className={styles.commodity_container}>
<Filter filterConfig={filterConfig} /> <Filter filterConfig={filterConfig} {...props} />
<div className={styles.commodity_main}> <div className={styles.commodity_main}>
{/* <div className="banner"> {/* <div className="banner">
<img src={bannerImg} /> <img src={bannerImg} />
......
...@@ -35,7 +35,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -35,7 +35,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
let countState = true let countState = true
useEffect(() => { useEffect(() => {
fetchPurchaseList(true) fetchPurchaseList()
}, []) }, [])
const fetchPurchaseList = (initState = false) => { const fetchPurchaseList = (initState = false) => {
...@@ -109,7 +109,6 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -109,7 +109,6 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
defaultCheckedList: item.orderList.map(item => item.id) defaultCheckedList: item.orderList.map(item => item.id)
}) })
}) })
console.log(result)
setOrderList(result) setOrderList(result)
// !initChecked && setCheckedList(result.map(item => item.id)) // !initChecked && setCheckedList(result.map(item => item.id))
} }
...@@ -136,7 +135,6 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -136,7 +135,6 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
let temp = [...checkedList, id] let temp = [...checkedList, id]
setCheckedList(temp) setCheckedList(temp)
if (temp.length === getAllKeys().length) { if (temp.length === getAllKeys().length) {
console.log(`temp.length === getAllKeys().length`)
setIndeterminate(false) setIndeterminate(false)
setCheckAll(true) setCheckAll(true)
} }
...@@ -249,7 +247,8 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -249,7 +247,8 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
PublicApi.postProductPurchaseDeletePurchase({ idList: [id] }).then(res => { PublicApi.postProductPurchaseDeletePurchase({ idList: [id] }).then(res => {
if (res.code === 1000) { if (res.code === 1000) {
fetchPurchaseList() // fetchPurchaseList()
deleteListItems([id])
resolve() resolve()
} else { } else {
reject() reject()
...@@ -282,7 +281,8 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -282,7 +281,8 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
PublicApi.postProductPurchaseDeletePurchase({ idList: idList }).then(res => { PublicApi.postProductPurchaseDeletePurchase({ idList: idList }).then(res => {
if (res.code === 1000) { if (res.code === 1000) {
fetchPurchaseList() // fetchPurchaseList()
deleteListItems(idList)
resolve() resolve()
} else { } else {
reject() reject()
...@@ -296,6 +296,23 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -296,6 +296,23 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
} }
/** /**
* 删除指定id的商品
* @param ids
*/
const deleteListItems = (ids: number[]) => {
let newOrderList = JSON.parse(JSON.stringify(orderList))
let result = []
for (let item of newOrderList) {
let newItem = item
newItem.orderList = newItem.orderList.filter(orderItem => !ids.includes(orderItem.id))
if (newItem.orderList.length > 0) {
result.push(newItem)
}
}
setOrderList(result)
}
/**
* 计算已选商品数量 * 计算已选商品数量
*/ */
const handleComputeSelectCount = () => { const handleComputeSelectCount = () => {
...@@ -311,7 +328,6 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -311,7 +328,6 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
return count return count
} }
/** /**
* 计算已选商品价格 * 计算已选商品价格
*/ */
...@@ -401,12 +417,11 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -401,12 +417,11 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
return result return result
} }
/** /**
* 结算 * 结算
*/ */
const handleSettlement = async () => { const handleSettlement = async () => {
if (orderList.every(item => item.checkedList.length > 1)) { if (orderList.length > 1 && orderList.every(item => item.checkedList.length > 0)) {
message.info("暂不支持多个供应商商品生成订单,请选择相同供应商的商品") message.info("暂不支持多个供应商商品生成订单,请选择相同供应商的商品")
return return
} else if (orderList.every(item => item.checkedList.length === 0)) { } else if (orderList.every(item => item.checkedList.length === 0)) {
...@@ -420,7 +435,9 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => { ...@@ -420,7 +435,9 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
let buyOrderlist = [] let buyOrderlist = []
const selectOrderList = selectItem.orderList.filter(item => selectItem.checkedList.includes(item.id)) const selectOrderList = selectItem.orderList.filter(item => selectItem.checkedList.includes(item.id))
let commonLogistics = {} let commonLogistics = {}
setConfirmLoading(true) setConfirmLoading(true)
for (let item of selectOrderList) { for (let item of selectOrderList) {
productIds.push(item.commodityUnitPrice.id) productIds.push(item.commodityUnitPrice.id)
commonLogistics = item.commodityUnitPrice.commodity.logistics commonLogistics = item.commodityUnitPrice.commodity.logistics
......
import React, { useState } from 'react' import React, { useState, useEffect } from 'react'
import { CaretUpOutlined, CaretDownOutlined, UnorderedListOutlined, AppstoreOutlined, CloseOutlined } from '@ant-design/icons' import { CaretUpOutlined, CaretDownOutlined, CloseOutlined } from '@ant-design/icons'
import Filter from '../components/Filter' import Filter from '../components/Filter'
import { FILTER_TYPE } from '@/constants' import { FILTER_TYPE, LAYOUT_TYPE } from '@/constants'
import cx from 'classnames' import cx from 'classnames'
import { Pagination } from 'antd' import { history } from 'umi'
import { Pagination, Spin } from 'antd'
import CommodityList from './list' import CommodityList from './list'
import NoResult from './noResult' import SearchNoResult from '../components/SearchNoResult'
import { useLocalStore, observer } from 'mobx-react' import { useLocalStore, observer } from 'mobx-react'
import { store } from '@/store' import { store } from '@/store'
import isEmpty from 'lodash/isEmpty'
import styles from './index.less' import styles from './index.less'
import { PublicApi } from '@/services/api'
interface filterValueType { import { GetTemplateShopFindShopListResponseDetail } from '@/services/TemplateApi'
key: string;
title: string;
type: FILTER_TYPE;
}
interface ShopListPropsType { interface ShopListPropsType {
location: any location: any
...@@ -25,15 +23,64 @@ const ShopList: React.FC<ShopListPropsType> = (props) => { ...@@ -25,15 +23,64 @@ const ShopList: React.FC<ShopListPropsType> = (props) => {
const { filterList, filterUpdate, filterParam, onDeleteFilterItem, onResetFilter, onFilter, onFilterParamChange } = FilterStore const { filterList, filterUpdate, filterParam, onDeleteFilterItem, onResetFilter, onFilter, onFilterParamChange } = FilterStore
const { query: { search = "" } } = props.location const { query: { search = "" } } = props.location
const [showType, setShowType] = useState<number>(1) // 展示方式:1:矩阵排列; 2:列表排列 const [showType, setShowType] = useState<number>(1) // 展示方式:1:矩阵排列; 2:列表排列
const [current, setCurrent] = useState<number>(1)
const [pageSize] = useState<number>(10)
const [loading, setLoading] = useState<boolean>(true)
const [shopList, setShopList] = useState<GetTemplateShopFindShopListResponseDetail[]>([])
const [totalCount, setTotalCount] = useState<number>(0)
const filterConfig = [FILTER_TYPE.category, FILTER_TYPE.useArea, FILTER_TYPE.activeStores, FILTER_TYPE.newJoin] const filterConfig = [FILTER_TYPE.category, FILTER_TYPE.useArea, FILTER_TYPE.activeStores, FILTER_TYPE.newJoin]
useEffect(() => {
setCurrent(1)
fetchShopList(1)
}, [filterParam, search])
useEffect(() => {
if (!isEmpty(filterList) || filterUpdate) {
handleFilterChange(filterList)
}
}, [filterList])
const fetchShopList = (currentParam?: number) => {
let param: any = {
current: currentParam ? currentParam : current,
pageSize
}
if (!!search) {
param.memberName = search
}
if (!isEmpty(filterParam)) {
param = Object.assign(param, filterParam)
}
setLoading(true)
PublicApi.getTemplateShopFindShopList(param).then(res => {
setLoading(false)
if (res.code === 1000) {
setShopList(res.data.data)
setTotalCount(res.data.totalCount)
}
})
}
const handleFilterChange = (newFilterList: any) => {
onFilterParamChange(newFilterList)
}
/** /**
* 重置筛选 * 重置筛选
*/ */
const handleResetFilter = () => { const handleResetFilter = () => {
onResetFilter() if (search) {
onResetFilter()
handleClearSearch()
} else {
onResetFilter()
}
} }
const handleDeleteFilterItem = (item: any) => { const handleDeleteFilterItem = (item: any) => {
...@@ -84,12 +131,24 @@ const ShopList: React.FC<ShopListPropsType> = (props) => { ...@@ -84,12 +131,24 @@ const ShopList: React.FC<ShopListPropsType> = (props) => {
} }
} }
const handlePageChange = (page) => {
setCurrent(page)
fetchShopList(page)
}
/**
* 清除搜索
*/
const handleClearSearch = () => {
history.push('/shops')
}
return ( return (
<div className={styles.commodity}> <div className={styles.commodity}>
<div className={styles.mall_container}> <div className={styles.mall_container}>
<div className={styles.commodity_container}> <div className={styles.commodity_container}>
<Filter filterConfig={filterConfig} /> <Filter filterConfig={filterConfig} {...props} layoutType={LAYOUT_TYPE.shopList} />
<div className={styles.commodity_main}> <div className={styles.commodity_main}>
<div className={styles.tool_bar}> <div className={styles.tool_bar}>
<div className={styles.tool_bar_left}> <div className={styles.tool_bar_left}>
...@@ -104,19 +163,28 @@ const ShopList: React.FC<ShopListPropsType> = (props) => { ...@@ -104,19 +163,28 @@ const ShopList: React.FC<ShopListPropsType> = (props) => {
<div className={styles.tool_bar_right}> <div className={styles.tool_bar_right}>
<div className={styles.count}> <div className={styles.count}>
<span></span> <span></span>
<label>43</label> <label>{totalCount}</label>
<span>个店铺</span> <span>个店铺</span>
</div> </div>
</div> </div>
</div> </div>
{ {
filterList && filterList.length > 0 && ( (filterList && filterList.length > 0 || search) && (
<div className={styles.filter_bar}> <div className={styles.filter_bar}>
<div className={styles.filter_bar_left}> <div className={styles.filter_bar_left}>
<div className={styles.filter_bar_left_text} onClick={handleResetFilter}>重置</div> <div className={styles.filter_bar_left_text} onClick={handleResetFilter}>重置</div>
</div> </div>
<div className={styles.filter_bar_list}> <div className={styles.filter_bar_list}>
{ {
search && (
<div className={styles.filter_bar_list_item}>
<span className={styles.filter_bar_list_item_text}>{search}</span>
<CloseOutlined className={styles.filter_bar_list_item_icon} onClick={() => handleClearSearch()} />
</div>
)
}
{
filterList.map(item => ( filterList.map(item => (
<div className={styles.filter_bar_list_item} key={item.key}> <div className={styles.filter_bar_list_item} key={item.key}>
<span className={styles.filter_bar_list_item_text}>{item.title}</span> <span className={styles.filter_bar_list_item_text}>{item.title}</span>
...@@ -129,11 +197,13 @@ const ShopList: React.FC<ShopListPropsType> = (props) => { ...@@ -129,11 +197,13 @@ const ShopList: React.FC<ShopListPropsType> = (props) => {
) )
} }
{ {
!!search ? <NoResult search={search} /> : ( (shopList.length === 0 || !shopList) ? !loading && <SearchNoResult search="" type={2} /> : (
<> <>
<CommodityList showType={showType} /> <Spin spinning={loading}>
<CommodityList showType={showType} shopList={shopList} />
</Spin>
<div className={styles.pagination_wrap}> <div className={styles.pagination_wrap}>
<Pagination showQuickJumper showSizeChanger={false} defaultCurrent={1} total={100} /> <Pagination showQuickJumper showSizeChanger={false} onChange={handlePageChange} current={current} pageSize={pageSize} total={totalCount} />
</div> </div>
</> </>
) )
......
...@@ -35,6 +35,10 @@ ...@@ -35,6 +35,10 @@
&_name { &_name {
display: flex; display: flex;
&>a {
color: #333333;
}
} }
&_city { &_city {
......
...@@ -4,90 +4,99 @@ import { Link } from 'umi' ...@@ -4,90 +4,99 @@ import { Link } from 'umi'
import { Rate } from 'antd' import { Rate } from 'antd'
import shop_icon from '@/assets/imgs/shop_icon.png' import shop_icon from '@/assets/imgs/shop_icon.png'
import credit_icon from '@/assets/imgs/credit_icon.png' import credit_icon from '@/assets/imgs/credit_icon.png'
import shop_logo from '@/assets/imgs/shop_logo.png' import { priceFormat } from '@/utils/numberFomat'
import './list.less' import styles from './list.less'
interface CommodityListPropsType { interface CommodityListPropsType {
showType: number showType: number,
shopList: any
} }
const CommodityList: React.FC<CommodityListPropsType> = (props) => { const CommodityList: React.FC<CommodityListPropsType> = (props) => {
const { showType } = props const { shopList } = props
let dataList = [] const renderCommodityPrice = (unitPrice) => {
for (let i = 0; i < 10; i++) { let price = 0
dataList.push(i) if (unitPrice) {
let priceArr = []
Object.keys(unitPrice).forEach(key => {
priceArr.push(unitPrice[key])
})
price = priceArr[0] || 0
}
return <div className={styles.shop_list_goods_item_price}>
<span className={styles.unit}></span>
<span>{priceFormat(price)}</span>
</div>
}
const renderArea = (shopAreaList) => {
if (shopAreaList) {
return shopAreaList.map(item => `${item.province}/${item.city}`).join(" ")
} else {
return '所有地区'
}
} }
return ( return (
<div className={cx("shop_list")}> <div className={cx(styles.shop_list)}>
{ {
dataList.map((item, index) => ( shopList.map((item, index) => (
<div key={item} className="shop_list_item row"> <div key={`${item.id}_${index}`} className={cx(styles.shop_list_item, styles.row)}>
<div className="shop_list_left"> <div className={styles.shop_list_left}>
<div className="shop_list_info"> <div className={styles.shop_list_info}>
<div className="shop_list_info_imgbox"> <div className={styles.shop_list_info_imgbox}>
<div className="shop_list_info_imgbox_img" style={{ backgroundImage: `url(${shop_logo})` }}></div> <div className={styles.shop_list_info_imgbox_img} style={{ backgroundImage: `url(${item.logo})` }}></div>
</div> </div>
<div className="shop_list_info_box"> <div className={styles.shop_list_info_box}>
<div className="shop_list_info_name"> <div className={styles.shop_list_info_name}>
<span>温州市龙昌皮业有限公司</span> <Link to={`/shop?shopId=${btoa(JSON.stringify({ shopId: item.id, memberId: item.memberId }))}`}>{item.memberName}</Link>
<span className={styles.shop_list_info_city}>{item.memberShopAreas}</span>
<span className="shop_list_info_city">广东/广州</span>
</div> </div>
<div className="shop_list_info_about"> <div className={styles.shop_list_info_about}>
<div className="shop_list_info_about_item"> <div className={styles.shop_list_info_about_item}>
<i className="icon"><img src={credit_icon} /></i> <i className={styles.icon}><img src={credit_icon} /></i>
<span>1288</span> <span>{item.integral}</span>
</div> </div>
<div className="shop_list_info_about_item"> <div className={styles.shop_list_info_about_item}>
<i className="icon"><img src={shop_icon} /></i> <i className={styles.icon}><img src={shop_icon} /></i>
<span className="red">2</span> <span className={styles.red}>{item.registerYears}</span>
<span></span> <span></span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div className="shop_satisfaction"> <div className={styles.shop_satisfaction}>
<label>满意度:</label> <label>满意度:</label>
<Rate className="shop_satisfaction_rate" disabled defaultValue={2} /> <Rate className={styles.shop_satisfaction_rate} disabled defaultValue={item.satisfied || 0} />
</div> </div>
<div className="shop_list_line"> <div className={styles.shop_list_line}>
<label>主营</label> <label>主营</label>
<span className="shop_list_line_brief">全粒面牛皮|修面皮|漆色皮|打腊皮|水腊皮|疯马皮|珠光变色|水腊皮|疯马皮|珠光变色|珠光变色</span> <span className={styles.shop_list_line_brief}>{item.customerCategoryName}</span>
</div> </div>
<div className="shop_list_line"> <div className={styles.shop_list_line}>
<label>以上信息已通过会员认证|</label> <label>以上信息已通过会员认证|</label>
<Link to="/shop?id=12" className="shop_list_line_link">资质证书 &gt;</Link> <Link to={`/shop/about?shopId=${btoa(JSON.stringify({ shopId: item.id, memberId: item.memberId }))}`} className={styles.shop_list_line_link}>资质证书 &gt;</Link>
<Link to="/shop?id=12" className="shop_list_line_link">公司信息 &gt;</Link> <Link to={`/shop/about?shopId=${btoa(JSON.stringify({ shopId: item.id, memberId: item.memberId }))}`} className={styles.shop_list_line_link}>公司信息 &gt;</Link>
</div> </div>
</div> </div>
<div className="shop_list_goods"> <div className={styles.shop_list_goods}>
<Link to={`/shop/commodity/detail?id=asdjflewjfe&type=prompt`}> {
<div className="shop_list_goods_item"> item.commodityList && item.commodityList.map((commodityItem, commodityIndex) => commodityIndex < 2 && (
<div className="shop_list_goods_item_imgbox"> <Link to={`/shop/commodity/detail?id=${commodityItem.id}&shopId=${btoa(JSON.stringify({ shopId: item.id, memberId: item.memberId }))}`} key={commodityItem.id} target="_blank">
<div className="shop_list_goods_item_imgbox_img" style={{ backgroundImage: `url(https://woodmartcdn-cec2.kxcdn.com/wp-content/uploads/2016/09/product-furniture-1.jpg)` }}></div> <div className={styles.shop_list_goods_item}>
</div> <div className={styles.shop_list_goods_item_imgbox}>
<div className="shop_list_goods_item_price"> <div className={styles.shop_list_goods_item_imgbox_img} style={{ backgroundImage: `url(${commodityItem.mainPic})` }}></div>
<span className="unit"></span> </div>
<span>79.00</span> {
</div> renderCommodityPrice(commodityItem.unitPrice)
</div> }
</Link> </div>
<Link to={`/shop/commodity/detail?id=asdjflewjfe&type=prompt`}> </Link>
<div className="shop_list_goods_item"> ))
<div className="shop_list_goods_item_imgbox"> }
<div className="shop_list_goods_item_imgbox_img" style={{ backgroundImage: `url(https://woodmartcdn-cec2.kxcdn.com/wp-content/uploads/2016/09/product-furniture-1.jpg)` }}></div>
</div>
<div className="shop_list_goods_item_price">
<span className="unit"></span>
<span>79.00</span>
</div>
</div>
</Link>
</div> </div>
</div> </div>
)) ))
} }
</div> </div>
......
...@@ -12,7 +12,7 @@ const NoResult: React.FC<NoResultPropsType> = (props) => { ...@@ -12,7 +12,7 @@ const NoResult: React.FC<NoResultPropsType> = (props) => {
<div className={styles.no_result_tip}> <div className={styles.no_result_tip}>
<div className={styles.no_result_tip_img}></div> <div className={styles.no_result_tip_img}></div>
<div className={styles.no_result_tip_text}> <div className={styles.no_result_tip_text}>
暂无求购信息 暂无店铺信息
</div> </div>
</div> </div>
</div> </div>
......
...@@ -5,11 +5,43 @@ import { StarFilled } from '@ant-design/icons' ...@@ -5,11 +5,43 @@ import { StarFilled } from '@ant-design/icons'
import shop_icon from '@/assets/imgs/shop_icon.png' import shop_icon from '@/assets/imgs/shop_icon.png'
import credit_icon from '@/assets/imgs/credit_icon.png' import credit_icon from '@/assets/imgs/credit_icon.png'
import styles from './index.less' import styles from './index.less'
import { COMMODITY_TYPE } from '@/constants'
const Commodity: React.FC = () => { const Commodity: React.FC = () => {
let CommodityList = Array.apply({}, new Array(7)) let CommodityList = Array.apply({}, new Array(7))
const renderBtn = (priceType) => {
switch (priceType) {
case COMMODITY_TYPE.prompt:
return <Button className={styles.collection_state_wrap_btn} type="primary">再次购买</Button>
case COMMODITY_TYPE.integral:
return <Button className={styles.collection_state_wrap_btn} type="primary">立即兑换</Button>
case COMMODITY_TYPE.inquiry:
return <Button className={styles.collection_state_wrap_btn} type="primary">立即询价</Button>
}
}
const renderPrice = (priceType) => {
switch (priceType) {
case COMMODITY_TYPE.prompt:
return (
<div className={styles.commodity_price}>
<span></span>
<label>79.00</label>
</div>
)
case COMMODITY_TYPE.integral:
return (
<div className={styles.commodity_point}>
2,000~3,000积分
</div>
)
case COMMODITY_TYPE.inquiry:
return <div className={styles.commodity_tag}>在线询价</div>
}
}
return ( return (
<> <>
<div className={styles.commodity_list}> <div className={styles.commodity_list}>
...@@ -24,9 +56,9 @@ const Commodity: React.FC = () => { ...@@ -24,9 +56,9 @@ const Commodity: React.FC = () => {
<div className={styles.shop_header_info_content}> <div className={styles.shop_header_info_content}>
<p className={styles.commodity_name}>0.8-1.0mm黑色手折纹胎水牛皮</p> <p className={styles.commodity_name}>0.8-1.0mm黑色手折纹胎水牛皮</p>
<ul className={styles.tags_list}> <ul className={styles.tags_list}>
<li className={styles.tags_list_item} key={`tags_list_item`}>黄牛头皮层自然摔纹</li> <li className={styles.tags_list_item} key={`tags_list_item_1`}>黄牛头皮层自然摔纹</li>
<li className={styles.tags_list_item} key={`tags_list_item`}>硬度适中偏软</li> <li className={styles.tags_list_item} key={`tags_list_item_2`}>硬度适中偏软</li>
<li className={styles.tags_list_item} key={`tags_list_item`}>手感舒适</li> <li className={styles.tags_list_item} key={`tags_list_item_3`}>手感舒适</li>
</ul> </ul>
</div> </div>
</div> </div>
...@@ -39,14 +71,7 @@ const Commodity: React.FC = () => { ...@@ -39,14 +71,7 @@ const Commodity: React.FC = () => {
<div className={styles.commodity_shopname}>温州市龙昌皮业有限公司</div> <div className={styles.commodity_shopname}>温州市龙昌皮业有限公司</div>
</div> </div>
<div className={cx(styles.commodity_list_item_item)}> <div className={cx(styles.commodity_list_item_item)}>
{/* <div className={styles.commodity_price}> {renderPrice(1)}
<span>¥</span>
<label>79.00</label>
</div> */}
{/* <div className={styles.commodity_tag}>在线询价</div> */}
<div className={styles.commodity_point}>
2,000~3,000积分
</div>
</div> </div>
<div className={cx(styles.commodity_list_item_item)}> <div className={cx(styles.commodity_list_item_item)}>
<span className={styles.date}>2020-10-25 10:58</span> <span className={styles.date}>2020-10-25 10:58</span>
...@@ -57,7 +82,7 @@ const Commodity: React.FC = () => { ...@@ -57,7 +82,7 @@ const Commodity: React.FC = () => {
<StarFilled /> <StarFilled />
<label>收藏</label> <label>收藏</label>
</div> </div>
<Button className={styles.collection_state_wrap_btn} type="primary">再次购买</Button> {renderBtn(1)}
</div> </div>
</div> </div>
</div> </div>
......
...@@ -160,6 +160,9 @@ class FilterStore { ...@@ -160,6 +160,9 @@ class FilterStore {
case FILTER_TYPE.attribute: case FILTER_TYPE.attribute:
tempFilterParam.customerAttributeList = filterItem.key tempFilterParam.customerAttributeList = filterItem.key
break break
case FILTER_TYPE.shopArea:
tempFilterParam.areaCode = filterItem.key
break
default: default:
break break
} }
......
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