212 lines
6.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { View, ScrollView } from '@tarojs/components'
import { useCallback, forwardRef, useEffect, useMemo, useRef, useState, memo, useImperativeHandle, } from 'react'
import Search from '@/components/search'
import styles from "./index.module.scss"
import classnames from "classnames";
import Popup from '@/components/popup'
import Goods from "@/components/goodsItem"
import BottomCustomer from "@/components/BottomCustomer"
import VirtualList from '@tarojs/components/virtual-list'
import DotLoading from "@/components/dotLoading"
import Divider from '../divider';
interface prosObj {
showPopup?: false | true,
closePopup?: () => void,
goodList?: any[],
typeList?: any[],
handCheck?: (any) => void,
addNums?: (any) => void
reduceNums?: (any) => void
// oninputEvent?: (e: string, res: object) => void,
getSearchData: (any) => void,
handPlus: (any) => void,
handSure: () => void,
obj?: {
code?: string,
name?: string,
},
modeFont: Number | string,
clientName: string,
clientId: Number,
hasBottom?: true | false, //默认不占位底部
onBlur?: (e: string, res: object) => void
}
export default memo(forwardRef((props: prosObj, ref) => {
const {
showPopup = false,
closePopup,
goodList = [],
typeList = [],
handCheck,
addNums,
reduceNums,
// oninputEvent,
getSearchData,
handPlus,
obj = {},
modeFont = 0,
clientName = '',
clientId = -1,
handSure,
hasBottom = true,
onBlur
} = props
useImperativeHandle(ref, () => ({
Object: props,
typeList: typeList
}))
//判断选择的类型
const showModefont = useMemo(() => {
const modeObj = typeList.filter(item => {
return item.checked
})
if (modeObj[0].id === 0) {
return '条'
} else {
return '米'
}
}, [typeList])
//已选的颜色
const selectTotal = useMemo(() => {
const totalArr = goodList.filter(item => {
return item.showInput
})
return totalArr.length
}, [goodList])
//选择的条数或者米数
const selectNums = useMemo(() => {
let arr: any = []
goodList.forEach(item => {
if (item.showInput) {
arr.push(Number(item.nums))
}
})
let hate = sum(arr)
return hate
}, [goodList])
// onInputEven={(e, item) => oninputEvent?.(e, item)}
function sum(arr) {
var s = 0;
for (var i = arr.length - 1; i >= 0; i--) {
s += arr[i];
}
return s;
}
const rows = memo(({ id, index, style, data }: any) => {
let item = data[index]
return (
<>
<Goods
onBlur={(e, id) => onBlur?.(e, id)}
modeFont={(modeFont as number)}
handPlus={(item) => handPlus?.(item)}
value={item || {}}
clickAdd={(item) => addNums?.(item)}
clickReduce={(item) => { reduceNums?.(item) }}
goodList={goodList}
></Goods>
</>
)
})
return (
<Popup showTitle={false} show={showPopup} onClose={() => closePopup?.()}>
<ScrollView className={styles.scrllStyle} scrollY>
<View className={styles.shopcartBox}>
<View className={styles.topTitle}>
{obj?.code}# {obj?.name}
</View>
<View className={styles.selectFont}>
1 {selectTotal} {selectNums} {showModefont}
</View>
<Divider direction='horizontal' customStyles={{ margin: '12px 0' }}></Divider>
<View className={styles.typeFont}></View>
<View className={styles.flexType}>
{typeList.map((item, index) => {
return (
<View
onClick={() => {
handCheck?.(item)
}}
key={index}
className={classnames(item.checked ? styles.activemodeFont : styles.modeFont)}>
{item.name}
</View>
)
})}
</View>
<View style={{position: 'sticky', top: 0, background: 'white',zIndex: '9999'}}>
<Divider direction='horizontal' customStyles={{ margin: '12px 0' }}></Divider>
<View className={styles.flexFonts}>
<View className={styles.kingFont}>({goodList?.length})</View>
<View className={styles.danwei}>
{modeFont == 0 ? '大货' : modeFont == 1 ? '剪版' : '散剪'}{showModefont}
</View>
</View>
<View className={styles.searchBox}>
<Search
cursorSpacing={100}
placeholder='请输入搜索布料'
showBtn={false}
changeOnSearch={getSearchData}
debounceTime={300}
adjustPosition={true}
/>
</View>
</View>
{goodList.length > 0 && (
<>
<View className={styles.scrollviewBig}>
<VirtualList
className={styles.scrollview}
height={300} /* 列表的高度 */
width='100%' /* 列表的宽度 */
itemData={goodList} /* 渲染列表的数据 */
itemCount={goodList.length + 0} /* 渲染列表的长度 */
itemSize={100} /* 列表单项的高度 */
overscanCount={1}>
{rows}
</VirtualList>
</View>
<View className={styles.kongOne}></View>
</>
)}
{goodList.length === 0 && (
<>
<View className={styles.loading_more}>
<DotLoading />
</View>
</>
)}
{!hasBottom && <View style={{ height: '100rpx' }}></View>}
<View className={classnames(hasBottom === true ? styles.posBox : styles.noBottom)}>
<BottomCustomer
clientName={clientName}
clientId={clientId}
isDisabled={selectTotal > 0 && clientName !== '' ? false : true}
handSure={() => {
handSure()
}}></BottomCustomer>
</View>
</View>
</ScrollView>
</Popup>
)
}))