2022-10-25 17:39:37 +08:00

420 lines
14 KiB
TypeScript

import { View } from '@tarojs/components'
import React, { useCallback, memo, useEffect, useMemo, useRef, useState } from 'react'
import Search from '@/components/search'
import styles from "./index.module.scss"
import classnames from "classnames";
import Empty from './components/empty'
import Taro, { useDidShow } from '@tarojs/taro';
import Goods from './components/goods'
import { mpproductlist } from "@/api/search"
import { debounce } from "@/common/util";
import ShopCart from '@/components/shoppingCart'
import {
mpproductcolorlist,
mpshoppingCartproductColorlist,
mpsearchHistorylist,
mpsearchHistory
} from "@/api/order"
import { getFilterData } from '@/common/util'
import { ClientListApi } from '@/api/order'
export default memo(() => {
useEffect(() => {
getClient()
}, [])
const [clientObj, setclientObj] = useState({
clientId: -1,
clientName: ''
})
//获取客户
const [clienList, setclienList] = useState<any[]>([])
const { fetchData: listFetchData } = ClientListApi()
const getClient = async () => {
const res = await listFetchData({
page: 1, size: 10
})
setclientObj({
clientId: res.data.list.length > 0 ? res.data.list[0]?.id : -1,
clientName: res.data.list.length > 0 ? res.data.list[0]?.name : '',
})
setclienList([...res.data.list])
}
useDidShow(() => {
//获取选择的客户
let pages = Taro.getCurrentPages();
let currPage = pages[pages.length - 1]; // 获取当前页面
//判断是否有跳转选择客户
if (currPage.data?.clientId && currPage.data?.clientId !== '') {
setclientObj({
clientId: currPage.data?.clientId,
clientName: currPage.data?.clientName,
})
}
//默认客户
if (currPage.data?.clientId == null) {
setclientObj({
clientId: clienList.length > 0 ? clienList[0]?.id : - 1,
clientName: clienList.length > 0 ? clienList[0]?.name : '',
})
}
})
//选择的类型
const [typeList, setTypeList] = useState<any[]>([{ id: 0, name: '大货', checked: true }, { id: 1, name: '剪版', checked: false }, { id: 2, name: '散剪', checked: false }])
const [goodList, setGoodlist] = useState<any[]>([])
const onj = JSON.parse(Taro.getStorageSync('userInfo'))
const [search, setSearchObj] = useState({
modeId: 0,
goodsId: null,
code_or_name: '',
physical_warehouse: onj.physical_warehouse
})
const [showShopCart, setShowShopCart] = useState(false)
//监听选择的类型
useEffect(() => {
setSearchObj(search)
if (search.goodsId) getGoodList()
}, [search])
//获取商品
const { fetchData: colorlistFetch } = mpproductcolorlist()
const getGoodList = async () => {
const res = await colorlistFetch({ product_id: search.goodsId, sale_mode: search.modeId, code_or_name: search.code_or_name, physical_warehouse: 1 })
res.data.list.map((item) => {
item.showInput = false
if (search.modeId == 0) {
item.nums = 1
item.buyNums = 1
}
if (search.modeId == 1) {
item.nums = 0.5
item.buyNums = 0.5
}
if (search.modeId == 2) {
item.nums = 3
item.buyNums = 3
}
return item
})
setGoodlist([...res.data.list])
}
//加入购物车
const { fetchData: preViewFetch, } = mpshoppingCartproductColorlist()
const handSure = async () => {
const arr = goodList.filter(item => {
return item.showInput
})
const list: any[] = []
arr.forEach(it => {
list.push({
roll: search.modeId === 0 ? it.nums : 0,
length: search.modeId !== 0 ? it.nums * 100 : 0,
product_color_id: Number(it.id)
})
})
const query = {
purchaser_id: clientObj.clientId,
sale_mode: search.modeId,
color_list: list,
sale_offect: 0
}
let res = await preViewFetch(getFilterData(query))
Taro.showLoading({
mask: true,
title: '请稍等...'
})
if (res.data) {
Taro.showToast({
title: "加入成功",
duration: 2000,
});
setShowShopCart(false)
goodList.map(item => {
item.showInput = false
return item
})
setGoodlist([...goodList])
console.log(search, '000000.0.0.')
Taro.hideLoading()
} else {
Taro.hideLoading()
Taro.showToast({
title: res.msg,
duration: 2000,
});
}
}
//点击输入框的加
const handPlus = useCallback((item) => {
goodList.map((it) => {
if (item.id === it.id) {
// if (it.nums > item.buyNums) {
it.nums++
// }
}
return item
})
setGoodlist([...goodList])
}, [goodList])
//输入了搜索关键字
const getSearchDataInput = useCallback((eq) => {
setSearchObj((e) => ({ ...e, code_or_name: eq }))
}, [])
const [goodObj, setGoodsobj] = useState({})
//点击对应商品显示购物车
const showCart = async (item) => {
setSearchObj((e) => ({ ...e, goodsId: item.id }))
setShowShopCart(true)
setGoodsobj(item)
}
//点击加展示输入框
const handAdd = useCallback((item) => {
goodList.map((it) => {
if (item.id === it.id) {
it.showInput = true
}
return item
})
setGoodlist([...goodList])
}, [goodList])
//点击减
const reduceNums = useCallback((item) => {
goodList.map((it) => {
if (item.id === it.id) {
item.nums--
if (search.modeId == 0) {
if (item.nums < 1) it.showInput = false, it.nums = 1
}
if (search.modeId == 1) {
if (item.nums < 0.5) it.showInput = false, it.nums = 0.5
}
if (search.modeId == 2) {
if (item.nums < 3) it.showInput = false, it.nums = 3
}
}
return item
})
setGoodlist([...goodList])
}, [goodList])
//选择类型
const handCheckMode = (item) => {
typeList.map(it => {
if (it.id === item.id) {
it.checked = true
setSearchObj((e) => ({ ...e, modeId: it.id }))
} else {
it.checked = false
}
return it
})
setTypeList([...typeList])
setGoodlist([])
}
//关闭弹窗
const closePoup = () => {
setShowShopCart(false)
}
//获取关键字数据
const [histroyList, setHistroyList] = useState<any[]>([])
const { fetchData: historyFetch } = mpsearchHistorylist()
const getHistory = async () => {
Taro.showLoading({
title: '加载中...',
mask: true
})
const res = await historyFetch()
if (res.data) {
setHistroyList([...res?.data?.list])
Taro.hideLoading()
}
}
//搜索商品的数组
const [searchList, setSearchList] = useState<any[]>([])
//是否有值输入框
const [hasFonts, setHasFonts] = useState(false)
useEffect(() => {
getHistory()
}, [])
//输入了搜索关键字
const getSearchData = useCallback((e) => {
if (e) {
setHasFonts(true)
getProduct(e)
} else {
setHasFonts(false)
setSearchList([])
}
}, [])
//搜索获取商品数据
const { fetchData: productFetch } = mpproductlist()
const { fetchData: historyputFetch } = mpsearchHistory()
const getProduct = debounce(async (e) => {
Taro.showLoading({
title: '加载中...',
mask: true
})
await historyputFetch({ key: e, scene: 0 }).then((res) => {
if (res.data) {
getHistory()
}
})
productFetch({ code_or_name: e }).then((res) => {
if (res.data) {
Taro.hideLoading()
setSearchList([...res?.data?.list])
}
})
}, 300)
//返回
const back = () => {
Taro.navigateBack({
delta: 1
})
}
//输入框失焦
const onBlur = (e, id) => {
goodList.map(item => {
if (item.id == id) {
if (search.modeId == 0 && (e.detail.value == '' || Number(e.detail.value) == 0)) {
item.showInput = false
item.nums = 1
} else if (search.modeId == 0 && (e.detail.value != '' || Number(e.detail.value) > 0)) {
item.nums = e.detail.value
}
if (search.modeId == 1 && Number(e.detail.value) < 0.5) {
item.nums = 0.5
item.showInput = false
} else if (search.modeId == 1 && Number(e.detail.value) >= 0.5) {
item.nums = e.detail.value
}
if (search.modeId == 2 && Number(e.detail.value) < 3) {
item.nums = 3
item.showInput = false
} else if (search.modeId == 2 && Number(e.detail.value) >= 3) {
item.nums = e.detail.value
}
}
return item
})
setGoodlist([...goodList])
}
//选择中后的值到输入框
const [defaultvalue, setdefaultvalue] = useState('')
//点击关键字搜索内容
const handItem = (item) => {
Taro.showLoading({
title: '加载中...',
mask: true
})
productFetch({ code_or_name: item.search_key }).then((res) => {
if (res.data) {
setHasFonts(true)
setSearchList([...res.data.list])
Taro.hideLoading()
}
})
setdefaultvalue(item.search_key)
}
//点击返回文字
const handBack = () => {
setHasFonts(false)
setSearchList([])
}
return (
<View className={styles.main}>
<Search placeholder='请输入搜索布料' defaultValue={defaultvalue} showBtn={false} changeOnSearch={getSearchData} debounceTime={300} >
<View className={styles.cancelFont} onClick={() => back()}></View>
</Search>
<View className={styles.line}></View>
{
!hasFonts && <>
<View className={styles.topBox}>
<View className={styles.histroyFonts}></View>
<View className={classnames('iconfont', 'icon-shaixuan', styles.icon_delect)}></View>
</View>
{!!histroyList.length &&
<View className={styles.bigBox}>
{histroyList.map((item, index) => {
return (
<View onClick={() => handItem(item)} key={index} className={styles.itemBox}>{item.search_key}</View>
)
})}
</View>
}
{
!histroyList.length && <Empty picUrl='https://cdn.zzfzyc.com/empty.png' fonst={'无搜索历史'}></Empty>
}
</>
}
{
hasFonts && <>
<View className={styles.topBox}>
<View className={styles.histroyLeft}>
<View className={styles.histroyFonts}></View>
<View className={styles.back} onClick={() => handBack()}></View>
</View>
</View>
{
!!searchList.length && searchList.map((item, index) => {
return (
<Goods clickItem={() => showCart(item)} key={index} data={item}></Goods>
)
})
}
{
!searchList.length && <Empty picUrl='https://cdn.zzfzyc.com/empty.png' fonst={'暂无数据'}></Empty>
}
</>
}
<ShopCart handSure={() => handSure()}
clientName={clientObj?.clientName}
clientId={clientObj?.clientId}
modeFont={search.modeId}
handPlus={(item) => handPlus(item)}
obj={goodObj}
getSearchData={(e) => { getSearchDataInput(e) }}
hasBottom={false}
reduceNums={(item) => { reduceNums(item) }}
addNums={(item) => { handAdd(item) }}
showPopup={showShopCart}
handCheck={(item) => { handCheckMode(item) }}
closePopup={() => closePoup()}
goodList={goodList}
typeList={typeList}
onBlur={(e, id) => onBlur(e, id)}
></ShopCart>
</View>
)
})
// oninputEvent={(e, item) => { onInputEven?.(e, item) }}