🐞 fix(ID1001331色卡图片跟着跳动):
This commit is contained in:
parent
e38fc4e226
commit
aab41c0653
@ -10,7 +10,8 @@ interface ProductItemParamType {
|
|||||||
id: number
|
id: number
|
||||||
name: string
|
name: string
|
||||||
}
|
}
|
||||||
export interface ParamType {
|
|
||||||
|
export interface ProductItemParam {
|
||||||
id: number
|
id: number
|
||||||
affiliation_product: ProductItemParamType[]
|
affiliation_product: ProductItemParamType[]
|
||||||
color_card_name: string
|
color_card_name: string
|
||||||
@ -18,8 +19,12 @@ export interface ParamType {
|
|||||||
lab: { l: number; a: number; b: number }
|
lab: { l: number; a: number; b: number }
|
||||||
rgb: { r: number; g: number; b: number }
|
rgb: { r: number; g: number; b: number }
|
||||||
is_add: boolean
|
is_add: boolean
|
||||||
onSelect?: (val: ParamType, status: boolean) => void
|
|
||||||
count?: number
|
count?: number
|
||||||
|
|
||||||
|
}
|
||||||
|
export interface ParamType {
|
||||||
|
value: ProductItemParam
|
||||||
|
onSelect?: (val: ProductItemParam, status: boolean) => void
|
||||||
selectList?: any[]
|
selectList?: any[]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,32 +32,11 @@ export interface ParamType {
|
|||||||
const limit = 5
|
const limit = 5
|
||||||
|
|
||||||
export default memo((props: ParamType) => {
|
export default memo((props: ParamType) => {
|
||||||
const { affiliation_product, color_card_name = '', texture_url = '', lab, rgb, selectList } = props
|
const { selectList } = props
|
||||||
const [checkStatus, setCheckStatus] = useState(false)
|
|
||||||
const changeSelect = () => {
|
|
||||||
console.log('isDisabled', isDisabled)
|
|
||||||
if (props.is_add) { return false }
|
|
||||||
if (isDisabled) {
|
|
||||||
alert.none('每次最多申请5种面料')
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
setCheckStatus(!checkStatus)
|
|
||||||
props.onSelect?.(props, !checkStatus)
|
|
||||||
}
|
|
||||||
const onSelect = () => {
|
|
||||||
if (props.is_add) { return false }
|
|
||||||
props.onSelect?.(props, true)
|
|
||||||
setCheckStatus(true)
|
|
||||||
}
|
|
||||||
const onClose = () => {
|
|
||||||
props.onSelect?.(props, false)
|
|
||||||
setCheckStatus(false)
|
|
||||||
}
|
|
||||||
|
|
||||||
const isDisabled = useMemo(() => {
|
const isDisabled = useMemo(() => {
|
||||||
const set = new Set(selectList?.map(item => item.id))
|
const set = new Set(selectList?.map(item => item.id))
|
||||||
if (selectList) {
|
if (selectList) {
|
||||||
if (set.has(props.id)) {
|
if (set.has(props.value.id)) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return set.size >= limit
|
return set.size >= limit
|
||||||
@ -62,9 +46,37 @@ export default memo((props: ParamType) => {
|
|||||||
}
|
}
|
||||||
}, [selectList])
|
}, [selectList])
|
||||||
|
|
||||||
|
return <Index value={props.value} onSelect={props.onSelect} isDisabled={isDisabled} />
|
||||||
|
})
|
||||||
|
|
||||||
|
const Index = memo((props: ParamType&{ isDisabled: boolean }) => {
|
||||||
|
console.log('刷新')
|
||||||
|
const { affiliation_product, color_card_name = '', texture_url = '', lab, rgb } = props.value
|
||||||
|
const { isDisabled } = props
|
||||||
|
const [checkStatus, setCheckStatus] = useState(false)
|
||||||
|
const changeSelect = () => {
|
||||||
|
console.log('isDisabled', isDisabled)
|
||||||
|
if (props.value.is_add) { return false }
|
||||||
|
if (isDisabled) {
|
||||||
|
alert.none('每次最多申请5种面料')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
setCheckStatus(!checkStatus)
|
||||||
|
props.onSelect?.(props.value, !checkStatus)
|
||||||
|
}
|
||||||
|
const onSelect = () => {
|
||||||
|
if (props.value.is_add) { return false }
|
||||||
|
props.onSelect?.(props.value, true)
|
||||||
|
setCheckStatus(true)
|
||||||
|
}
|
||||||
|
const onClose = () => {
|
||||||
|
props.onSelect?.(props.value, false)
|
||||||
|
setCheckStatus(false)
|
||||||
|
}
|
||||||
|
|
||||||
const labAndImgObj = useMemo(
|
const labAndImgObj = useMemo(
|
||||||
() => {
|
() => {
|
||||||
return { lab: props.lab, rgb: props.rgb, texture_url: props.texture_url }
|
return { lab: props.value.lab, rgb: props.value.rgb, texture_url: props.value.texture_url }
|
||||||
},
|
},
|
||||||
[props],
|
[props],
|
||||||
)
|
)
|
||||||
@ -80,7 +92,7 @@ export default memo((props: ParamType) => {
|
|||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
<View className={styles.checkBox} onClick={e => e.stopPropagation()}>
|
<View className={styles.checkBox} onClick={e => e.stopPropagation()}>
|
||||||
<Checkbox status={props.is_add ? true : checkStatus} disabled={props.is_add || isDisabled} onSelect={onSelect} onClose={onClose} />
|
<Checkbox status={props.value.is_add ? true : checkStatus} disabled={props.value.is_add || isDisabled} onSelect={onSelect} onClose={onClose} />
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
})
|
})
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import Taro, { getCurrentPages, useDidShow } from '@tarojs/taro'
|
|||||||
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import styles from './index.module.scss'
|
import styles from './index.module.scss'
|
||||||
import type { ParamType } from './components/productItem'
|
import type { ParamType, ProductItemParam } from './components/productItem'
|
||||||
import ProductItem from './components/productItem'
|
import ProductItem from './components/productItem'
|
||||||
import InfiniteScroll from '@/components/infiniteScroll'
|
import InfiniteScroll from '@/components/infiniteScroll'
|
||||||
import Search from '@/components/search'
|
import Search from '@/components/search'
|
||||||
@ -13,7 +13,7 @@ import { alert } from '@/common/common'
|
|||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
const { fetchData, state: cardState } = GetColorCardApi()
|
const { fetchData, state: cardState } = GetColorCardApi()
|
||||||
const [colorCardData, setColorCardData] = useState<{ list: ParamType[]; total: number }>({
|
const [colorCardData, setColorCardData] = useState<{ list: ProductItemParam[]; total: number }>({
|
||||||
list: [],
|
list: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
})
|
})
|
||||||
@ -22,7 +22,7 @@ export default () => {
|
|||||||
size: 10,
|
size: 10,
|
||||||
})
|
})
|
||||||
|
|
||||||
const shopColorCardData = useRef<ParamType[]>([])
|
const shopColorCardData = useRef<ProductItemParam[]>([])
|
||||||
|
|
||||||
// 获取已加入购物车的数据id
|
// 获取已加入购物车的数据id
|
||||||
const getShopId = () => {
|
const getShopId = () => {
|
||||||
@ -56,7 +56,9 @@ export default () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 选择的数据
|
// 选择的数据
|
||||||
const [selectList, setSelectList] = useState<ParamType[]>([])
|
const [selectList, setSelectList] = useState<ProductItemParam[]>([])
|
||||||
|
const selectListRef = useRef<ProductItemParam[]>([])
|
||||||
|
useEffect(() => { selectListRef.current = selectList }, [selectList])
|
||||||
|
|
||||||
// 数据加载状态
|
// 数据加载状态
|
||||||
const statusMore = useMemo(() => {
|
const statusMore = useMemo(() => {
|
||||||
@ -103,21 +105,19 @@ export default () => {
|
|||||||
// 多选
|
// 多选
|
||||||
const multipleSelection = useRef<any[]>([])
|
const multipleSelection = useRef<any[]>([])
|
||||||
|
|
||||||
const onSelectData = (val, status) => {
|
const onSelectData = useCallback((val, status) => {
|
||||||
console.log('onSelectData', val, status)
|
|
||||||
console.log('selectList', selectList)
|
|
||||||
if (status) {
|
if (status) {
|
||||||
multipleSelection.current.push(val)
|
multipleSelection.current.push(val)
|
||||||
setSelectList(e => [val, ...e])
|
setSelectList(e => [val, ...selectListRef.current])
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const res = selectList?.filter((item) => {
|
const res = selectListRef.current?.filter((item) => {
|
||||||
return val.id != item.id
|
return val.id != item.id
|
||||||
})
|
})
|
||||||
multipleSelection.current = res
|
multipleSelection.current = res
|
||||||
setSelectList(res)
|
setSelectList(res)
|
||||||
}
|
}
|
||||||
}
|
}, [])
|
||||||
|
|
||||||
return <View className={styles.main}>
|
return <View className={styles.main}>
|
||||||
<View className={styles.search}>
|
<View className={styles.search}>
|
||||||
@ -135,7 +135,7 @@ export default () => {
|
|||||||
{colorCardData.list?.map((item) => {
|
{colorCardData.list?.map((item) => {
|
||||||
return (
|
return (
|
||||||
<View className={styles.get_card_list} key={item.id}>
|
<View className={styles.get_card_list} key={item.id}>
|
||||||
<ProductItem selectList={selectList} {...item} onSelect={onSelectData} />
|
<ProductItem selectList={selectList} value={item} onSelect={onSelectData} />
|
||||||
</View>
|
</View>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user