feat(1):

This commit is contained in:
czm 2022-09-05 18:00:01 +08:00
parent 8c7f25e7f9
commit 133e6414fa
2 changed files with 140 additions and 172 deletions

View File

@ -1,38 +1,37 @@
import { alert, retrieval } from '@/common/common'
import Address from '@/components/address'
import FromList from '@/components/FromList'
import { Button, Input, Text, Textarea, View } from '@tarojs/components'
import Taro, { setNavigationBarTitle, useRouter } from '@tarojs/taro'
import { useEffect, useState } from 'react'
import './index.scss'
import { addressAddApi, addressDetailApi, addressEditApi } from '@/api/addressManager'
import useLogin from '@/use/useLogin'
import { alert, retrieval } from "@/common/common"
import Address from "@/components/address"
import FromList from "@/components/FromList"
import { Button, Input, Text, Textarea, View } from "@tarojs/components"
import Taro, { setNavigationBarTitle, useRouter } from "@tarojs/taro"
import { useEffect, useState } from "react"
import "./index.scss"
import {addressAddApi, addressDetailApi,addressEditApi} from "@/api/addressManager"
import useLogin from "@/use/useLogin"
export default ()=>{
export default () => {
useLogin()
const [showSiteModal, setShowSiteModal] = useState(false);
const {type,id} = useRouter().params;
useEffect(()=>{
if(type=="add"){
setNavigationBarTitle({title:"新增收货地址"})
}else{
initalFormData();
setNavigationBarTitle({title:"编辑收货地址"})
const [showSiteModal, setShowSiteModal] = useState(false)
const { type, id } = useRouter().params
useEffect(() => {
if (type == 'add') {
setNavigationBarTitle({ title: '新增收货地址' })
} else {
initalFormData()
setNavigationBarTitle({ title: '编辑收货地址' })
}
},[])
}, [])
// 获取编辑地址信息
const {fetchData: getFromData} = addressDetailApi()
const initalFormData = async ()=>{
const detail = await getFromData({id});
const { province_id,province_name,city_id,city_name,district_id,district_name } = detail.data;
const siteArray = [{id: province_id, name: province_name}];
city_id&&siteArray.push({id: city_id, name: city_name});
district_id&&siteArray.push({id: district_id, name: district_name});
const { fetchData: getFromData } = addressDetailApi()
const initalFormData = async () => {
const detail = await getFromData({ id })
const { province_id, province_name, city_id, city_name, district_id, district_name } = detail.data
const siteArray = [{ id: province_id, name: province_name }]
city_id && siteArray.push({ id: city_id, name: city_name })
district_id && siteArray.push({ id: district_id, name: district_name })
setFormData({
name: detail.data.name,
phone: detail.data.phone,
site: siteArray.map(item=>item.name).join(" "),
site: siteArray.map((item) => item.name).join(' '),
siteArray: siteArray as any,
district_id: detail.data.district_id,
address_detail: detail.data.address_detail,
@ -41,104 +40,140 @@ export default ()=>{
})
}
const {fetchData} = addressAddApi()
const {fetchData: editFetch} = addressEditApi()
const { fetchData } = addressAddApi()
const { fetchData: editFetch } = addressEditApi()
// 保存
const [formData, setFormData] = useState({
name: "",
phone:"",
site:"",
name: '',
phone: '',
site: '',
siteArray: [],
district_id:"",
address_detail: "",
district_id: '',
address_detail: '',
is_default: false,
id: 0
id: 0,
})
const rules = {
name: [{
message: "请输入正确收货人姓名",
name: [
{
message: '请输入正确收货人姓名',
// validator: (value:any, rule:any)=>{ // 自定义验证返回true表示匹配到了(错误)
// return value.length>5;
// }
}],
phone: [{
message: "请输入正确的电话号码", regex: /^1[3|5|6|9|2|8|7]\d{9}$/
}],
district_id: [{
message: "请选择地址"
}],
address_detail: [{
message: "请输入详细地址"
}],
},
],
phone: [
{
message: '请输入正确的电话号码',
regex: /^1[3|5|6|9|2|8|7]\d{9}$/,
},
],
district_id: [
{
message: '请选择地址',
},
],
address_detail: [
{
message: '请输入详细地址',
},
],
}
const handleSave = ()=>{
retrieval(formData, rules).then(async ()=>{
const result = type=="add"?await fetchData({
const handleSave = () => {
retrieval(formData, rules)
.then(async () => {
const result =
type == 'add'
? await fetchData({
name: formData.name,
phone:formData.phone,
district_id:formData.district_id,
address_detail: formData.address_detail,
is_default: formData.is_default
}):await editFetch({
name: formData.name,
phone:formData.phone,
district_id:formData.district_id,
phone: formData.phone,
district_id: formData.district_id,
address_detail: formData.address_detail,
is_default: formData.is_default,
id: formData.id
});
if(result.success){
Taro.eventCenter.trigger("addressList:refresh");
Taro.navigateBack();
alert.success("保存成功");
}else{
alert.error(result.msg);
})
: await editFetch({
name: formData.name,
phone: formData.phone,
district_id: formData.district_id,
address_detail: formData.address_detail,
is_default: formData.is_default,
id: formData.id,
})
if (result.success) {
Taro.eventCenter.trigger('addressList:refresh')
Taro.navigateBack()
alert.success('保存成功')
} else {
alert.error(result.msg)
}
}).catch((message)=>{
})
.catch((message) => {
alert.none(message)
})
}
// 监听表单完善
const [hozon, setHozon] = useState(false);
useEffect(()=>{
if(retrieval){
retrieval(formData).then(()=>setHozon(true)).catch(()=>setHozon(false))
const [hozon, setHozon] = useState(false)
useEffect(() => {
if (retrieval) {
retrieval(formData)
.then(() => setHozon(true))
.catch(() => setHozon(false))
}
},[formData])
}, [formData])
// 设置选择地址
const handleSetSite = (ev:any)=>{
if(ev.length > 0){
const handleSetSite = (ev: any) => {
if (ev.length > 0) {
setFormData({
...formData,
siteArray: ev,
site: ev.map(item=>item.name+" "),
district_id: ev[ev.length-1]?.id
site: ev.map((item) => item.name + ' '),
district_id: ev[ev.length - 1]?.id,
})
}else{
alert.error("请选择地址");
} else {
alert.error('请选择地址')
}
}
return (
<View className="add-address">
<FromList onInput={(ev:any)=>setFormData({...formData,name:ev.detail.value})} value={formData["name"]} label="联系人" placeholder="请输入收货人姓名"/>
<FromList primordialType="number" onInput={(ev:any)=>setFormData({...formData,phone:ev.detail.value})} value={formData["phone"]} label="联系方式" placeholder="请输入联系方式"/>
<FromList value={formData["site"]} onClick={()=>setShowSiteModal(true)} label="收货地址" type="select" placeholder="请选择/省/市/区"/>
<FromList onInput={(ev:any)=>setFormData({...formData,address_detail:ev.detail.value})} value={formData["address_detail"]} label="详细地址" type="textarea" placeholder="请输入详细地址(街道、门牌号等)"/>
<View className="add-address-default">
<View className='add-address'>
<FromList
onInput={(ev: any) => setFormData({ ...formData, name: ev.detail.value })}
value={formData['name']}
label='联系人'
placeholder='请输入收货人姓名'
/>
<FromList
primordialType='number'
onInput={(ev: any) => setFormData({ ...formData, phone: ev.detail.value })}
value={formData['phone']}
label='联系方式'
placeholder='请输入联系方式'
/>
<FromList value={formData['site']} onClick={() => setShowSiteModal(true)} label='收货地址' type='select' placeholder='请选择/省/市/区' />
<FromList
onInput={(ev: any) => setFormData({ ...formData, address_detail: ev.detail.value })}
value={formData['address_detail']}
label='详细地址'
type='textarea'
placeholder='请输入详细地址(街道、门牌号等)'
/>
<View className='add-address-default'>
<Text></Text>
<View onClick={()=>setFormData({...formData ,is_default: !formData.is_default})}>
{
formData.is_default?<View className="add-address-default-active"><Text className="iconfont icon-tick"/></View>
:<View className="add-address-default-noactive"></View>
}
<View onClick={() => setFormData({ ...formData, is_default: !formData.is_default })}>
{formData.is_default ? (
<View className='add-address-default-active'>
<Text className='iconfont icon-tick' />
</View>
) : (
<View className='add-address-default-noactive'></View>
)}
</View>
</View>
<Button style={{"background": hozon?'#007aff':''}} hoverClass="none" className={`add-address-save`} onClick={handleSave}>
<Button style={{ background: hozon ? '#007aff' : '' }} hoverClass='none' className={`add-address-save`} onClick={handleSave}>
</Button>
<Address addressOnChange={handleSetSite} defaultValue={formData.siteArray} addressOnClose={()=>setShowSiteModal(false)} show={showSiteModal}/>
<Address addressOnChange={handleSetSite} defaultValue={formData.siteArray} addressOnClose={() => setShowSiteModal(false)} show={showSiteModal} />
</View>
)
}

View File

@ -43,9 +43,9 @@ export default memo(({ show = false, onClose, title = '', productId = 0 }: param
//重置数据
useEffect(() => {
// const newList = initList(list)
const newList = initList(list)
startTransition(() => {
// setList([...newList])
setList([...newList])
})
condition.current.code_or_name = null
setSearchShow(false)
@ -199,18 +199,6 @@ export default memo(({ show = false, onClose, title = '', productId = 0 }: param
setSearchShow(false)
}
//格式化金额
const formatPrice = (item) => {
return Number(formatPriceDiv(item[selectList[selectIndex].priceField]))
// return (
// <View className={styles.priceText}>
// <Text>¥</Text>
// {price}
// <Text> /{selectList[selectIndex].eunit}</Text>
// </View>
// )
}
//显示图片弹窗
const [showLabImage, setShowLabImage] = useState(false)
const [labImageValue, setLabImageValue] = useState()
@ -222,47 +210,6 @@ export default memo(({ show = false, onClose, title = '', productId = 0 }: param
setShowLabImage(() => false)
}, [])
//虚拟滚动
// const Rows = memo(({ id, index, style, data }: any) => {
// let item = data[index]
// return (
// <>
// {(item && (
// <View className={styles.item} key={item.id}>
// <View className={styles.item_color}>
// <LabAndImg value={{ lab: item.lab, rgb: item.rgb, texture_url: item.texture_url, title: item.code }} showStatus={false} onClick={getLabAndImg} />
// </View>
// <View className={styles.item_con}>
// <View className={styles.title}>{formatHashTag(item.code, item.name)}</View>
// <View className={styles.num}>{formatPrice(item)}</View>
// </View>
// <View className={styles.btn_con}>
// {(!item.show && (
// <View className={styles.btn} onClick={() => onAdd(item)}>
// 添加
// </View>
// )) || (
// <View className={styles.btn_count}>
// <Counter
// otherData={item}
// onBlue={getInputValue}
// defaultNum={item.count}
// step={selectList[selectIndex].step}
// digits={selectList[selectIndex].digits}
// onClickBtn={getInputValue}
// unit={selectList[selectIndex].unit}
// minNum={selectList[selectIndex].minNum}
// maxNum={selectList[selectIndex].maxNum}
// />
// </View>
// )}
// </View>
// </View>
// )) || <View className={styles.item}></View>}
// </>
// )
// })
return (
<View className={styles.shop_cart_main}>
<Popup showTitle={false} show={showPopup} onClose={() => closePopup()}>
@ -344,20 +291,6 @@ export default memo(({ show = false, onClose, title = '', productId = 0 }: param
})}
</View>
</InfiniteScroll>
// <View className={styles.color_con}>
// <VirtualList
// className={styles.virtual_list}
// height={400}
// width='100%'
// itemData={list}
// itemCount={list.length + 1}
// itemSize={100}
// overscanCount={1}>
// {Rows}
// </VirtualList>
// <View className='common_safe_area_y'></View>
// </View>
)}
{list.length <= 0 && !colorState.loading && <View className={styles.noData}></View>}
</View>