✨ feat(ID1000804):销售单据调整数量、删除或新增面料;
This commit is contained in:
parent
eb0d906415
commit
02f2cf2bd7
@ -281,6 +281,20 @@
|
|||||||
"query": "",
|
"query": "",
|
||||||
"launchMode": "default",
|
"launchMode": "default",
|
||||||
"scene": null
|
"scene": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"pathName": "pages/orderEdit/index",
|
||||||
|
"query": "orderId=34111",
|
||||||
|
"launchMode": "default",
|
||||||
|
"scene": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"pathName": "pages/orderEdit/index",
|
||||||
|
"query": "orderId=33992",
|
||||||
|
"launchMode": "default",
|
||||||
|
"scene": null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -211,3 +211,17 @@ export const EnumPurchaserType = () => {
|
|||||||
method: 'get',
|
method: 'get',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 订单修改添加面料
|
||||||
|
export const MpsaleOrderaddProductList = () => {
|
||||||
|
return useRequest({
|
||||||
|
url: '/v2/mp/saleOrder/addProductList',
|
||||||
|
method: 'post',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 提交修改订单
|
||||||
|
export const MpsaleOrdersubmit = () => {
|
||||||
|
return useRequest({
|
||||||
|
url: '/v2/mp/saleOrder/submit',
|
||||||
|
method: 'put',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@ -140,5 +140,13 @@ export default defineAppConfig({
|
|||||||
root: 'pages/customerEditor',
|
root: 'pages/customerEditor',
|
||||||
pages: ['index'],
|
pages: ['index'],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
root: 'pages/orderEdit',
|
||||||
|
pages: ['index'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
root: 'pages/addFabric',
|
||||||
|
pages: ['index'],
|
||||||
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|||||||
@ -72,6 +72,7 @@ const AddressList = (props: Params, AddressListRef) => {
|
|||||||
const { fetchData: selectFetch } = MpSaleOrderAddress()
|
const { fetchData: selectFetch } = MpSaleOrderAddress()
|
||||||
const handleSelect = async(item: any, index: number) => {
|
const handleSelect = async(item: any, index: number) => {
|
||||||
if (router.params.orderId && router.params.orderId != '-100') {
|
if (router.params.orderId && router.params.orderId != '-100') {
|
||||||
|
console.log(router.params.orderId != '-100', 'ssss')
|
||||||
console.log(typeof (router.params.orderId) != 'undefined', 'router.params.orderId')
|
console.log(typeof (router.params.orderId) != 'undefined', 'router.params.orderId')
|
||||||
Taro.showLoading({
|
Taro.showLoading({
|
||||||
title: '请稍等...',
|
title: '请稍等...',
|
||||||
|
|||||||
@ -20,6 +20,7 @@ interface prosObj {
|
|||||||
handApplyGoods?: () => void
|
handApplyGoods?: () => void
|
||||||
handApplyMoney?: () => void
|
handApplyMoney?: () => void
|
||||||
handShowCodeList?: () => void
|
handShowCodeList?: () => void
|
||||||
|
handEdit?: () => void
|
||||||
showDetail?: boolean
|
showDetail?: boolean
|
||||||
goodsObj?: any
|
goodsObj?: any
|
||||||
}
|
}
|
||||||
@ -42,6 +43,7 @@ const BottomBtns = (props: prosObj, ref) => {
|
|||||||
handApplyGoods,
|
handApplyGoods,
|
||||||
handApplyMoney,
|
handApplyMoney,
|
||||||
handShowCodeList,
|
handShowCodeList,
|
||||||
|
handEdit,
|
||||||
showDetail = false,
|
showDetail = false,
|
||||||
goodsObj = {},
|
goodsObj = {},
|
||||||
} = props
|
} = props
|
||||||
@ -94,6 +96,7 @@ const BottomBtns = (props: prosObj, ref) => {
|
|||||||
|| (obj.sale_mode === 2 && obj.status === 2)
|
|| (obj.sale_mode === 2 && obj.status === 2)
|
||||||
|| (obj.sale_mode === 2 && obj.status === 7)
|
|| (obj.sale_mode === 2 && obj.status === 7)
|
||||||
|| (obj.sale_mode === 1 && obj.status === 10)
|
|| (obj.sale_mode === 1 && obj.status === 10)
|
||||||
|
|| (obj.sale_mode === 1 && obj.status === 7)
|
||||||
|| (obj.sale_mode === 2 && obj.status === 10)
|
|| (obj.sale_mode === 2 && obj.status === 10)
|
||||||
) {
|
) {
|
||||||
return true
|
return true
|
||||||
@ -158,6 +161,16 @@ const BottomBtns = (props: prosObj, ref) => {
|
|||||||
else { return false }
|
else { return false }
|
||||||
}, [obj])
|
}, [obj])
|
||||||
|
|
||||||
|
// 判断是否显示修改订单
|
||||||
|
const showEdit = useMemo(() => {
|
||||||
|
if (obj.status == 0 || obj.status == 1) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}, [obj])
|
||||||
|
|
||||||
// 多的不显示别的按钮
|
// 多的不显示别的按钮
|
||||||
const [btnList, setbtnList] = useState<any[]>([])
|
const [btnList, setbtnList] = useState<any[]>([])
|
||||||
const itemNums = useMemo(() => {
|
const itemNums = useMemo(() => {
|
||||||
@ -233,6 +246,16 @@ const BottomBtns = (props: prosObj, ref) => {
|
|||||||
sort: 2,
|
sort: 2,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
if (showEdit) {
|
||||||
|
nums = nums + 1
|
||||||
|
console.log('101010')
|
||||||
|
arr.push({
|
||||||
|
key: 'showEdit',
|
||||||
|
label: '修改订单',
|
||||||
|
bgKind: 3,
|
||||||
|
sort: 9,
|
||||||
|
})
|
||||||
|
}
|
||||||
console.log(arr, 'arr')
|
console.log(arr, 'arr')
|
||||||
const fiterArr = arr.sort((a, b) => a.sort - b.sort)
|
const fiterArr = arr.sort((a, b) => a.sort - b.sort)
|
||||||
setbtnList([...fiterArr])
|
setbtnList([...fiterArr])
|
||||||
@ -266,6 +289,9 @@ const BottomBtns = (props: prosObj, ref) => {
|
|||||||
if (key === 'canBuy') {
|
if (key === 'canBuy') {
|
||||||
toPay?.(e)
|
toPay?.(e)
|
||||||
}
|
}
|
||||||
|
if (key === 'showEdit') {
|
||||||
|
handEdit?.()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
125
src/pages/addFabric/components/goods/index.module.scss
Normal file
125
src/pages/addFabric/components/goods/index.module.scss
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
.itemBox {
|
||||||
|
width: 686px;
|
||||||
|
padding-bottom: 18px;
|
||||||
|
border-bottom: 1px solid #e7e7e7;
|
||||||
|
display: flex;
|
||||||
|
margin-left: 32px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
|
||||||
|
.picBox {
|
||||||
|
margin-right: 24px;
|
||||||
|
width: 144px;
|
||||||
|
height: 144px;
|
||||||
|
border-radius: 8px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.pic {
|
||||||
|
width: 144px;
|
||||||
|
height: 144px;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.posBox {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
right: 0px;
|
||||||
|
width: 69px;
|
||||||
|
height: 29px;
|
||||||
|
background: #000000;
|
||||||
|
border-radius: 15px 0px 8px 0px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #FFFFFF;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 29px;
|
||||||
|
|
||||||
|
opacity: 0.55;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.leftBox {
|
||||||
|
width: 144px;
|
||||||
|
height: 144px;
|
||||||
|
border-radius: 8px;
|
||||||
|
position: relative;
|
||||||
|
margin-right: 24px;
|
||||||
|
|
||||||
|
.pic {
|
||||||
|
width: 144px;
|
||||||
|
height: 144px;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.posBox {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
right: 0px;
|
||||||
|
width: 69px;
|
||||||
|
height: 29px;
|
||||||
|
background: #000000;
|
||||||
|
border-radius: 15px 0px 8px 0px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #FFFFFF;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 29px;
|
||||||
|
|
||||||
|
opacity: 0.55;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.rightBox {
|
||||||
|
.productName {
|
||||||
|
font-size: 28px;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tips {
|
||||||
|
font-size: 24px;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #a6a6a6;
|
||||||
|
margin-bottom: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flexTag {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.tagOne {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 8px;
|
||||||
|
padding-top: 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
background: #e3ecff;
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 22px;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #4581FF;
|
||||||
|
text-align: center;
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tagTwo {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 8px;
|
||||||
|
padding-top: 3px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
background: #ffeedb;
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 22px;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #FE8E0F;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
43
src/pages/addFabric/components/goods/index.tsx
Normal file
43
src/pages/addFabric/components/goods/index.tsx
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import { Image, View } from '@tarojs/components'
|
||||||
|
import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||||
|
import styles from '../goods/index.module.scss'
|
||||||
|
import LabAndImg from '@/components/LabAndImg'
|
||||||
|
import { formatDateTime, formatHashTag, formatPriceDiv, formatRemoveHashTag, formatWeightDiv } from '@/common/format'
|
||||||
|
|
||||||
|
const Goods = (props: any) => {
|
||||||
|
const labAndImgObj = useCallback((item) => {
|
||||||
|
return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url }
|
||||||
|
}, [])
|
||||||
|
return (
|
||||||
|
<View className={styles.itemBox} onClick={() => props?.clickItem?.()}>
|
||||||
|
{
|
||||||
|
props.data?.texture_url === '' && <>
|
||||||
|
|
||||||
|
<View className={styles.picBox}>
|
||||||
|
<Image className={styles.pic} mode="aspectFill" src="https://test.cdn.zzfzyc.com/mall/no_img.png"></Image>
|
||||||
|
<View className={styles.posBox}>{props.data?.product_color_count}色</View>
|
||||||
|
</View>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
props.data?.texture_url !== ''
|
||||||
|
&& <>
|
||||||
|
<View className={styles.leftBox}>
|
||||||
|
<LabAndImg value={labAndImgObj(props.data)} />
|
||||||
|
{/* <Image className={styles.pic} mode={'aspectFill'} src={props.data?.picUrl}></Image> */}
|
||||||
|
<View className={styles.posBox}>{props.data?.product_color_count}色</View>
|
||||||
|
</View>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
<View className={styles.rightBox}>
|
||||||
|
<View className={styles.productName}>{formatHashTag(props.data?.code, props.data?.name)}</View>
|
||||||
|
<View className={styles.tips}>{props.data?.component}</View>
|
||||||
|
<View className={styles.flexTag}>
|
||||||
|
<View className={styles.tagOne}>{props.data?.width}</View>
|
||||||
|
<View className={styles.tagTwo}>{props.data?.weight_density}</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default memo(Goods)
|
||||||
221
src/pages/addFabric/components/goodsItem/index.module.scss
Normal file
221
src/pages/addFabric/components/goodsItem/index.module.scss
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
.goodsBox {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 32px;
|
||||||
|
|
||||||
|
// justify-content: space-between;
|
||||||
|
.pic {
|
||||||
|
width: 118px;
|
||||||
|
height: 118px;
|
||||||
|
border-radius: 8px;
|
||||||
|
margin-right: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rightGoodbox {
|
||||||
|
padding-bottom: 31px;
|
||||||
|
border-bottom: 1px solid #efefef;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
// margin-right: 32px;
|
||||||
|
width: 538px;
|
||||||
|
|
||||||
|
.leftFontsbox {
|
||||||
|
.title {
|
||||||
|
width: 260px;
|
||||||
|
height: 34px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
background: 0, 124, 247;
|
||||||
|
}
|
||||||
|
|
||||||
|
.activeTitle {
|
||||||
|
width: 260px;
|
||||||
|
height: 34px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #9c9c9c;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
background: 0, 124, 247;
|
||||||
|
}
|
||||||
|
.productName {
|
||||||
|
width: 260px;
|
||||||
|
height: 30px;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.productNums {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.activeProductNums {
|
||||||
|
color: #9c9c9c;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
.productNameone {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
.activepPoductName {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #9c9c9c;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.rightFontsbox {
|
||||||
|
.moneyFlex {
|
||||||
|
margin-bottom: 14px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
.lastBox {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
text-decoration: line-through;
|
||||||
|
color: #7f7f7f;
|
||||||
|
}
|
||||||
|
.money {
|
||||||
|
margin-left: 15px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #f41a39;
|
||||||
|
}
|
||||||
|
.activeMoney {
|
||||||
|
color: #fba4b0;
|
||||||
|
margin-left: 15px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// .inputBox {
|
||||||
|
// width: 189px;
|
||||||
|
// height: 64px;
|
||||||
|
// border-radius: 8px;
|
||||||
|
// border: 1px solid #979797;
|
||||||
|
// display: flex;
|
||||||
|
|
||||||
|
// .reduceBox {
|
||||||
|
// width: 64px;
|
||||||
|
// height: 64px;
|
||||||
|
// display: flex;
|
||||||
|
// align-items: center;
|
||||||
|
// justify-content: center;
|
||||||
|
|
||||||
|
// .reduce {
|
||||||
|
// width: 20px;
|
||||||
|
// height: 3px;
|
||||||
|
// background: #000000;
|
||||||
|
// border-radius: 1px;
|
||||||
|
// opacity: 0.8;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .numsBox {
|
||||||
|
// width: 61px;
|
||||||
|
// display: flex;
|
||||||
|
// align-items: center;
|
||||||
|
// justify-content: center;
|
||||||
|
// font-size: 24px;
|
||||||
|
// font-weight: 400;
|
||||||
|
// color: #000000;
|
||||||
|
// text-align: center;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .addBox {
|
||||||
|
// width: 64px;
|
||||||
|
// height: 64px;
|
||||||
|
// display: flex;
|
||||||
|
// line-height: 64px;
|
||||||
|
// align-items: center;
|
||||||
|
// justify-content: center;
|
||||||
|
// flex-direction: column;
|
||||||
|
// color: #000;
|
||||||
|
// font-size: 35px;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
.inputBox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.reduceBox {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 18px;
|
||||||
|
border: 1px solid #337fff;
|
||||||
|
.reduce {
|
||||||
|
width: 20px;
|
||||||
|
height: 3px;
|
||||||
|
background: #337fff;
|
||||||
|
border-radius: 16px;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.numsBox {
|
||||||
|
width: 81px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.addBox {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 35px;
|
||||||
|
border-radius: 18px;
|
||||||
|
border: 1px solid #337fff;
|
||||||
|
background-color: #337fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.addtine {
|
||||||
|
width: 64px;
|
||||||
|
height: 64px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: #000;
|
||||||
|
font-size: 35px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #979797;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.isAdd {
|
||||||
|
margin-top: 30px;
|
||||||
|
float: right;
|
||||||
|
color: #999999;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
126
src/pages/addFabric/components/goodsItem/index.tsx
Normal file
126
src/pages/addFabric/components/goodsItem/index.tsx
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
import { Image, Input, ScrollView, View } from '@tarojs/components'
|
||||||
|
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||||
|
import classnames from 'classnames'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
import LabAndImg from '@/components/LabAndImg'
|
||||||
|
|
||||||
|
interface props {
|
||||||
|
clickAdd: (any) => void
|
||||||
|
// onInputEven?: (a: any, c: any) => void,
|
||||||
|
clickReduce: (any) => void
|
||||||
|
handPlus: (any) => void
|
||||||
|
modeFont?: number
|
||||||
|
value: {
|
||||||
|
showInput?: boolean
|
||||||
|
nums?: string
|
||||||
|
bulk_price?: Number | 0
|
||||||
|
length_cut_price?: Number
|
||||||
|
weight_cut_price?: Number
|
||||||
|
code?: string
|
||||||
|
rgb?: { r: number; g: number; b: number }
|
||||||
|
lab?: { l: number; a: number; b: number }
|
||||||
|
texture_url: string
|
||||||
|
name?: string
|
||||||
|
roll?: number | string
|
||||||
|
buyNums?: number | string
|
||||||
|
id?: number
|
||||||
|
isChecked?: boolean
|
||||||
|
weight_error?: number | string
|
||||||
|
last_bulk_price?: number
|
||||||
|
last_length_cut_price?: number
|
||||||
|
last_weight_cut_price?: number
|
||||||
|
}
|
||||||
|
goodList?: any[]
|
||||||
|
onBlur?: (a: any, c: any) => void
|
||||||
|
}
|
||||||
|
const GoodsItem = (props: props) => {
|
||||||
|
const [value, setValue] = useState<any>({ count: props.value.nums })
|
||||||
|
|
||||||
|
const onInputEven = (e) => {
|
||||||
|
const res = e.detail.value
|
||||||
|
if (props.modeFont == 0) {
|
||||||
|
if (Number(res) < 1) {
|
||||||
|
setValue({ count: '' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (props.modeFont == 1) {
|
||||||
|
if (Number(res) < 0) {
|
||||||
|
setValue({ count: '' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (props.modeFont == 2) {
|
||||||
|
if (Number(res) < 0) {
|
||||||
|
setValue({ count: '' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const type = useMemo(() => {
|
||||||
|
if (props.modeFont === 0) {
|
||||||
|
return 'number'
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 'digit'
|
||||||
|
}
|
||||||
|
}, [props.modeFont])
|
||||||
|
|
||||||
|
const labAndImgObj = useCallback((item) => {
|
||||||
|
return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url }
|
||||||
|
}, [])
|
||||||
|
return (
|
||||||
|
<View className={styles.goodsBox}>
|
||||||
|
|
||||||
|
{/* {
|
||||||
|
props?.value?.rgb?.r == 0 && props?.value?.rgb?.g == 0 && props?.value?.rgb?.b == 0 && <Image className={styles.pic} mode="aspectFill" src="https://test.cdn.zzfzyc.com/mall/no_img.png"></Image>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
(props?.value?.rgb?.r != 0 || props?.value?.rgb?.g != 0 || props?.value?.rgb?.b != 0)
|
||||||
|
&& <View className={styles.pic} style={{ backgroundColor: `rgb(${props?.value?.rgb?.r} ${props?.value?.rgb?.g} ${props?.value.rgb?.b})` }}></View>
|
||||||
|
} */}
|
||||||
|
<View className={styles.pic}>
|
||||||
|
<LabAndImg value={labAndImgObj(props.value)} />
|
||||||
|
</View>
|
||||||
|
<View className={styles.rightGoodbox}>
|
||||||
|
<View className={styles.leftFontsbox}>
|
||||||
|
<View className={classnames(props.value.isChecked ? styles.activeTitle : styles.title)}>{props.value?.code} {props.value?.name}</View>
|
||||||
|
<View className={classnames(props.value.isChecked ? styles.activeProductNums : styles.productNums)}>剩:{props.value?.roll}件</View>
|
||||||
|
{
|
||||||
|
props?.modeFont == 0 && <View className={classnames(props.value.isChecked ? styles.activepPoductName : styles.productNameone)}>空差:{props?.value?.weight_error as number / 1000 || 0}Kg</View>
|
||||||
|
}
|
||||||
|
</View>
|
||||||
|
<View className={styles.rightFontsbox}>
|
||||||
|
<View className={styles.moneyFlex}>
|
||||||
|
{
|
||||||
|
props?.modeFont == 0 && props.value?.last_bulk_price !== props.value?.bulk_price && <View className={styles.lastBox}>¥{props?.modeFont == 0 ? Number(props.value?.last_bulk_price) / 100 : props.modeFont === 1 ? Number(props.value?.last_length_cut_price) / 100 : Number(props.value?.last_weight_cut_price) / 100} {props.modeFont as any != 1 ? '/Kg' : '/m'}</View>
|
||||||
|
}
|
||||||
|
<View className={classnames(props.value.isChecked ? styles.activeMoney : styles.money)}>¥{props?.modeFont == 0 ? Number(props.value?.bulk_price) / 100 : props.modeFont == 1 ? Number(props.value?.length_cut_price) / 100 : Number(props.value?.weight_cut_price) / 100}{props.modeFont != 1 ? '/Kg' : '/m'}</View>
|
||||||
|
</View>
|
||||||
|
{
|
||||||
|
!props.value.isChecked && props.value.showInput && <View className={styles.inputBox}>
|
||||||
|
<View className={styles.reduceBox} onClick={() => { props.clickReduce?.(props.value) }}>
|
||||||
|
<View className={styles.reduce}>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
<View className={styles.numsBox}>
|
||||||
|
<Input alwaysEmbed cursorSpacing={100} adjustPosition type={type as any} value={value.count} onInput={onInputEven} onBlur={e => props.onBlur?.(e, props.value.id)}></Input>
|
||||||
|
|
||||||
|
{/* <Input type={type as any} value={value.count} onInput={($event) => onInputEven($event, props.value)}></Input> */}
|
||||||
|
</View>
|
||||||
|
<View className={styles.addBox} onClick={() => { props.handPlus?.(props.value) }}>
|
||||||
|
+
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
!props.value.showInput && !props.value.isChecked && <View className={styles.addtine} onClick={() => props.clickAdd?.(props.value)}>+</View>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
props.value.isChecked && <View className={styles.isAdd} >面料已添加</View>
|
||||||
|
}
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default memo(GoodsItem)
|
||||||
|
// ($event) => onInputEven($event, props.value)
|
||||||
163
src/pages/addFabric/components/shoppingCart/index.module.scss
Normal file
163
src/pages/addFabric/components/shoppingCart/index.module.scss
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
.shopcartBox {
|
||||||
|
padding: 0 32px;
|
||||||
|
|
||||||
|
.topTitle {
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #000000;
|
||||||
|
margin-top: 24px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectFont {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
margin-bottom: 24px;
|
||||||
|
height: 1px;
|
||||||
|
background: #000000;
|
||||||
|
opacity: 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.typeFont {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #000000;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flexType {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 32px;
|
||||||
|
|
||||||
|
.activemodeFont {
|
||||||
|
margin-right: 16px;
|
||||||
|
width: 160px;
|
||||||
|
height: 68px;
|
||||||
|
background: rgba(51, 127, 255, 0.1);
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #337fff;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #337fff;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 68px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modeFont {
|
||||||
|
margin-right: 16px;
|
||||||
|
width: 160px;
|
||||||
|
height: 68px;
|
||||||
|
background: #e9e9e9;
|
||||||
|
border-radius: 8px;
|
||||||
|
opacity: 0.4;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
box-sizing: border-box;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 68px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.flexFonts {
|
||||||
|
display: flex;
|
||||||
|
// justify-content: space-between;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
align-items: center;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
|
||||||
|
.kingFont {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.danwei {
|
||||||
|
margin-left: 16px;
|
||||||
|
width: 148px;
|
||||||
|
height: 30px;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 1px solid #e42945;
|
||||||
|
font-size: 22px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #e42945;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchBox {
|
||||||
|
margin-bottom: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scrollviewBig {
|
||||||
|
.scrollview {
|
||||||
|
// height: 300px;
|
||||||
|
|
||||||
|
.kongBox {
|
||||||
|
height: 181px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.kongOne {
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading_more {
|
||||||
|
height: 300px;
|
||||||
|
padding-bottom: 200px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.posBox {
|
||||||
|
width: 100%;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 999;
|
||||||
|
bottom: calc($customTabBarHeight + env(safe-area-inset-bottom));
|
||||||
|
}
|
||||||
|
|
||||||
|
.noBottom {
|
||||||
|
width: 100vw;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 999;
|
||||||
|
bottom: env(safe-area-inset-bottom);
|
||||||
|
.flexBox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
.selectFont {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #cfcfcf;
|
||||||
|
}
|
||||||
|
.rightBtn {
|
||||||
|
margin-right: 48px;
|
||||||
|
width: 256px;
|
||||||
|
height: 80px;
|
||||||
|
background: #4581ff;
|
||||||
|
border-radius: 40px;
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #ffffff;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 80px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.scrllStyle {
|
||||||
|
height: 75vh;
|
||||||
|
}
|
||||||
216
src/pages/addFabric/components/shoppingCart/index.tsx
Normal file
216
src/pages/addFabric/components/shoppingCart/index.tsx
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
import { ScrollView, View } from '@tarojs/components'
|
||||||
|
import Taro, { useDidShow } from '@tarojs/taro'
|
||||||
|
import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'
|
||||||
|
import classnames from 'classnames'
|
||||||
|
import VirtualList from '@tarojs/components/virtual-list'
|
||||||
|
import Goods from '../goodsItem'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
import Divider from '@/components/Divider'
|
||||||
|
import Search from '@/components/search'
|
||||||
|
import Popup from '@/components/popup'
|
||||||
|
import BottomCustomer from '@/components/BottomCustomer'
|
||||||
|
import DotLoading from '@/components/dotLoading'
|
||||||
|
import { formatDateTime, formatHashTag, formatPriceDiv, formatRemoveHashTag, formatWeightDiv } from '@/common/format'
|
||||||
|
|
||||||
|
interface prosObj {
|
||||||
|
sale_mode?: number
|
||||||
|
showPopup?: false | true
|
||||||
|
closePopup?: () => void
|
||||||
|
goodList?: any[]
|
||||||
|
// typeList?: any[]
|
||||||
|
handCheck?: (any) => void
|
||||||
|
addNums?: (any) => void
|
||||||
|
reduceNums?: (any) => void
|
||||||
|
getSearchData: (any) => void
|
||||||
|
handPlus: (any) => void
|
||||||
|
handSure: () => void
|
||||||
|
obj?: {
|
||||||
|
code?: string
|
||||||
|
name?: string
|
||||||
|
|
||||||
|
}
|
||||||
|
modeFont: Number | string
|
||||||
|
hasBottom?: true | false // 默认不占位底部
|
||||||
|
onBlur?: (e: string, res: object) => void
|
||||||
|
}
|
||||||
|
const ShoppingCart = (props: prosObj, ref) => {
|
||||||
|
const {
|
||||||
|
sale_mode = -1,
|
||||||
|
showPopup = false,
|
||||||
|
closePopup,
|
||||||
|
goodList = [],
|
||||||
|
handCheck,
|
||||||
|
addNums,
|
||||||
|
reduceNums,
|
||||||
|
getSearchData,
|
||||||
|
handPlus,
|
||||||
|
obj = {},
|
||||||
|
modeFont = 0,
|
||||||
|
handSure,
|
||||||
|
hasBottom = true,
|
||||||
|
onBlur,
|
||||||
|
} = props
|
||||||
|
|
||||||
|
const SearchRef = useRef<any>()
|
||||||
|
|
||||||
|
useImperativeHandle(ref, () => ({
|
||||||
|
Object: props,
|
||||||
|
SearchRef,
|
||||||
|
}))
|
||||||
|
|
||||||
|
// 判断选择的类型
|
||||||
|
const showModefont = useMemo(() => {
|
||||||
|
if (sale_mode == 0) {
|
||||||
|
return '条'
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return '米'
|
||||||
|
}
|
||||||
|
}, [sale_mode])
|
||||||
|
|
||||||
|
// 已选的颜色
|
||||||
|
const selectTotal = useMemo(() => {
|
||||||
|
const totalArr = goodList.filter((item) => {
|
||||||
|
return item.showInput
|
||||||
|
})
|
||||||
|
return totalArr.length
|
||||||
|
}, [goodList])
|
||||||
|
|
||||||
|
// 选择的条数或者米数
|
||||||
|
const selectNums = useMemo(() => {
|
||||||
|
const arr: any = []
|
||||||
|
goodList.forEach((item) => {
|
||||||
|
if (item.showInput) {
|
||||||
|
arr.push(Number(item.nums))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const hate = sum(arr)
|
||||||
|
return hate
|
||||||
|
}, [goodList])
|
||||||
|
// onInputEven={(e, item) => oninputEvent?.(e, item)}
|
||||||
|
|
||||||
|
function sum(arr) {
|
||||||
|
let s = 0
|
||||||
|
for (let i = arr.length - 1; i >= 0; i--) {
|
||||||
|
s += arr[i]
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确认添加
|
||||||
|
const handTake = () => {
|
||||||
|
if (selectTotal == 0) {
|
||||||
|
return Taro.showToast({
|
||||||
|
title: '请选择一条添加!',
|
||||||
|
icon: 'error',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
handSure()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const rows = ({ id, index, style, data }: any) => {
|
||||||
|
const item = data[index]
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Goods
|
||||||
|
onBlur={(e, id) => onBlur?.(e, id)}
|
||||||
|
modeFont={(sale_mode as number)}
|
||||||
|
handPlus={item => handPlus?.(item)}
|
||||||
|
value={item || {}}
|
||||||
|
clickAdd={item => addNums?.(item)}
|
||||||
|
clickReduce={(item) => { reduceNums?.(item) }}
|
||||||
|
goodList={goodList}
|
||||||
|
></Goods>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
const Rows = memo(rows)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Popup showTitle={false} show={showPopup} onClose={() => closePopup?.()}>
|
||||||
|
<ScrollView className={styles.scrllStyle} scrollY>
|
||||||
|
<View className={styles.shopcartBox}>
|
||||||
|
<View className={styles.topTitle}>
|
||||||
|
{formatHashTag(obj?.code, obj?.name)}
|
||||||
|
</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}>
|
||||||
|
{sale_mode == 0 ? '大货' : sale_mode == 1 ? '剪版' : '散剪'}单位:{showModefont}
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
<View className={styles.searchBox}>
|
||||||
|
<Search
|
||||||
|
ref={SearchRef}
|
||||||
|
cursorSpacing={100}
|
||||||
|
placeholder="请输入搜索布料"
|
||||||
|
showBtn={false}
|
||||||
|
changeOnSearch={getSearchData}
|
||||||
|
adjustPosition
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
{goodList.length > 0 && (
|
||||||
|
<>
|
||||||
|
<View className={styles.scrollviewBig}>
|
||||||
|
<VirtualList
|
||||||
|
className={styles.scrollview}
|
||||||
|
height={350} /* 列表的高度 */
|
||||||
|
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)}> */}
|
||||||
|
<View className={styles.noBottom}>
|
||||||
|
<View className={styles.flexBox}>
|
||||||
|
<View className={styles.selectFont}>
|
||||||
|
当前已选{selectTotal} 种颜色,共 {selectNums} {showModefont}
|
||||||
|
</View>
|
||||||
|
<View className={styles.rightBtn} onClick={() => handTake()}>确认添加</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</ScrollView>
|
||||||
|
</Popup>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default memo(forwardRef(ShoppingCart))
|
||||||
3
src/pages/addFabric/index.config.ts
Normal file
3
src/pages/addFabric/index.config.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export default {
|
||||||
|
navigationBarTitleText: '添加面料',
|
||||||
|
}
|
||||||
91
src/pages/addFabric/index.module.scss
Normal file
91
src/pages/addFabric/index.module.scss
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
page {
|
||||||
|
background: #ffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
background: #ffff;
|
||||||
|
|
||||||
|
.topBox {
|
||||||
|
padding-left: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancelFont {
|
||||||
|
width: 76px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
margin-left: 32px;
|
||||||
|
margin-right: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
width: 750px;
|
||||||
|
height: 1px;
|
||||||
|
background: #000000;
|
||||||
|
opacity: 0.05;
|
||||||
|
margin-top: 16px;
|
||||||
|
margin-bottom: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order_list {
|
||||||
|
height: calc(100vh - 200px);
|
||||||
|
}
|
||||||
|
.topBox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 32px;
|
||||||
|
|
||||||
|
.histroyLeft {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.histroyFonts {
|
||||||
|
margin-left: 32px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
margin-right: 32px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon_delect {
|
||||||
|
margin-right: 45px;
|
||||||
|
color: #f7f7f7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bigBox {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding-left: 32px;
|
||||||
|
|
||||||
|
.itemBox {
|
||||||
|
background: #f7f7f7;
|
||||||
|
border-radius: 8px;
|
||||||
|
text-align: center;
|
||||||
|
padding-top: 12px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
padding-left: 17px;
|
||||||
|
padding-right: 17px;
|
||||||
|
font-size: 24px;
|
||||||
|
font-family: PingFangSC-Regular, PingFang SC;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
margin-right: 16px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
428
src/pages/addFabric/index.tsx
Normal file
428
src/pages/addFabric/index.tsx
Normal file
@ -0,0 +1,428 @@
|
|||||||
|
import { View } from '@tarojs/components'
|
||||||
|
import Taro, { useDidShow, useRouter } from '@tarojs/taro'
|
||||||
|
import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||||
|
import classnames from 'classnames'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
import Goods from './components/goods'
|
||||||
|
import ShopCart from './components/shoppingCart'
|
||||||
|
import Search from '@/components/search'
|
||||||
|
import Empty from '@/components/empty'
|
||||||
|
import { MpProductList } from '@/api/search'
|
||||||
|
import { dataLoadingStatus, debounce, getFilterData } from '@/common/util'
|
||||||
|
import {
|
||||||
|
MpProductColorList,
|
||||||
|
} from '@/api/order'
|
||||||
|
import { ProductListApi } from '@/api/index'
|
||||||
|
import InfiniteScroll from '@/components/infiniteScroll'
|
||||||
|
|
||||||
|
const SearchPage = () => {
|
||||||
|
const pages = Taro.getCurrentPages() // 获取当前的页面栈
|
||||||
|
const prevPage = pages[pages.length - 2]
|
||||||
|
const router: any = useRouter()
|
||||||
|
const onj = JSON.parse(Taro.getStorageSync('userInfo'))
|
||||||
|
const [search, setSearchObj] = useState({
|
||||||
|
modeId: router.params.sale_mode,
|
||||||
|
goodsId: null,
|
||||||
|
code_or_name: '',
|
||||||
|
physical_warehouse: onj.physical_warehouse,
|
||||||
|
purchaser_id: -1,
|
||||||
|
})
|
||||||
|
|
||||||
|
const [paramGoods, setparamGoods] = useState<any[]>([])
|
||||||
|
|
||||||
|
useDidShow(() => {
|
||||||
|
prevPage.setData({ // 设置上一个页面的值
|
||||||
|
selectGoodsList: [],
|
||||||
|
productId: '',
|
||||||
|
})
|
||||||
|
let arr: any[] = []
|
||||||
|
arr = JSON.parse(decodeURIComponent(router.params.goodList))
|
||||||
|
setparamGoods(arr)
|
||||||
|
})
|
||||||
|
|
||||||
|
const [goodList, setGoodlist] = useState<any[]>([])
|
||||||
|
|
||||||
|
const [showShopCart, setShowShopCart] = useState(false)
|
||||||
|
|
||||||
|
// 获取商品
|
||||||
|
const { fetchData: colorlistFetch } = MpProductColorList()
|
||||||
|
const getGoodList = async() => {
|
||||||
|
const res = await colorlistFetch({ product_id: search.goodsId, code_or_name: search.code_or_name, physical_warehouse: search?.physical_warehouse, purchaser_id: router.params.purchaser_id })
|
||||||
|
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.3
|
||||||
|
item.buyNums = 0.3
|
||||||
|
}
|
||||||
|
if (search.modeId == 2) {
|
||||||
|
item.nums = 3
|
||||||
|
item.buyNums = 3
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
})
|
||||||
|
paramGoods?.forEach((edg) => {
|
||||||
|
if (search.goodsId == edg.id) {
|
||||||
|
edg?.product_colors?.forEach((it) => {
|
||||||
|
res.data.list?.map((gg) => {
|
||||||
|
if (it.id == gg.id) {
|
||||||
|
gg.isChecked = true
|
||||||
|
}
|
||||||
|
return gg
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
setGoodlist([...res.data.list])
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监听选择的类型
|
||||||
|
useEffect(() => {
|
||||||
|
setSearchObj(search)
|
||||||
|
if (search.goodsId) { getGoodList() }
|
||||||
|
}, [search])
|
||||||
|
|
||||||
|
// 确认添加
|
||||||
|
const handSure = () => {
|
||||||
|
setShowShopCart(false)
|
||||||
|
let arr: any[] = []
|
||||||
|
// 洗数据将面料Id底下的数据再装到自己的颜色列表里面
|
||||||
|
arr = orderData?.list?.filter((item) => {
|
||||||
|
return item.id == search.goodsId
|
||||||
|
})
|
||||||
|
const filterArr = goodList.filter((item) => {
|
||||||
|
return item.showInput
|
||||||
|
})
|
||||||
|
arr.forEach((item) => {
|
||||||
|
filterArr.forEach((it) => {
|
||||||
|
// it.sale_price = search.modeId == 0 ? it.bulk_price : search.modeId == 1 ? it.length_cut_price : it.weight_cut_price
|
||||||
|
item.product_colors = [...filterArr]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
if (filterArr.length > 0) {
|
||||||
|
prevPage.setData({ // 设置上一个页面的值
|
||||||
|
selectGoodsList: arr,
|
||||||
|
productId: search.goodsId,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Taro.navigateBack({
|
||||||
|
delta: 1,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 点击输入框的加
|
||||||
|
const handPlus = useCallback((item) => {
|
||||||
|
goodList.map((it) => {
|
||||||
|
if (item.id === it.id) {
|
||||||
|
if (isInteger(item.nums)) {
|
||||||
|
item.nums++
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
item.nums++
|
||||||
|
item.nums = Math.trunc(item.nums)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
})
|
||||||
|
setGoodlist([...goodList])
|
||||||
|
}, [goodList])
|
||||||
|
|
||||||
|
// 输入了搜索关键字
|
||||||
|
const getSearchDataInput = useCallback((eq) => {
|
||||||
|
setSearchObj(e => ({ ...e, code_or_name: eq }))
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const [goodObj, setGoodsobj] = useState({})
|
||||||
|
const ShopCartRef = useRef<any>()
|
||||||
|
// 点击对应商品显示购物车
|
||||||
|
const showCart = async(item) => {
|
||||||
|
setSearchObj(e => ({ ...e, goodsId: item.id, purchaser_id: router.params.purchaser_id }))
|
||||||
|
setShowShopCart(true)
|
||||||
|
setGoodsobj(item)
|
||||||
|
ShopCartRef.current.SearchRef.current.clearInput()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 点击加展示输入框
|
||||||
|
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) {
|
||||||
|
if (isInteger(item.nums)) {
|
||||||
|
item.nums--
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
item.nums = Math.trunc(item.nums)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (search.modeId == 0) {
|
||||||
|
if (item.nums < 1) {
|
||||||
|
it.showInput = false
|
||||||
|
it.nums = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (search.modeId == 1) {
|
||||||
|
if (item.nums < 0.3) {
|
||||||
|
it.showInput = false
|
||||||
|
it.nums = 0.3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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 [searchList, setSearchList] = useState<any[]>([])
|
||||||
|
// 是否有值输入框
|
||||||
|
const [hasFonts, setHasFonts] = useState(false)
|
||||||
|
// useEffect(() => {
|
||||||
|
// getHistory()
|
||||||
|
// }, [])
|
||||||
|
|
||||||
|
// 搜索获取商品数据
|
||||||
|
const { fetchData: productFetch } = MpProductList()
|
||||||
|
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 getSearchData = useCallback((e) => {
|
||||||
|
if (e) {
|
||||||
|
setHasFonts(true)
|
||||||
|
getProduct(e)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setHasFonts(false)
|
||||||
|
setSearchList([])
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
// 返回
|
||||||
|
const back = () => {
|
||||||
|
Taro.navigateBack({
|
||||||
|
delta: 1,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 判断是否整数类型
|
||||||
|
function isInteger(obj) {
|
||||||
|
return (obj | 0) === obj
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输入框失焦
|
||||||
|
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.3) {
|
||||||
|
item.nums = 0.3
|
||||||
|
item.showInput = false
|
||||||
|
}
|
||||||
|
else if (search.modeId == 1 && Number(e.detail.value) >= 0.3) {
|
||||||
|
if (isInteger(Number(e.detail.value))) {
|
||||||
|
item.nums = Number(e.detail.value)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
item.nums = Number(e.detail.value).toFixed(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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) {
|
||||||
|
if (isInteger(Number(e.detail.value))) {
|
||||||
|
item.nums = Number(e.detail.value)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
item.nums = Number(e.detail.value).toFixed(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return item
|
||||||
|
})
|
||||||
|
setGoodlist([...goodList])
|
||||||
|
}
|
||||||
|
|
||||||
|
// 选择中后的值到输入框
|
||||||
|
const [defaultvalue, setdefaultvalue] = useState('')
|
||||||
|
|
||||||
|
const { fetchData: productFetchData, state: orderState } = ProductListApi()
|
||||||
|
|
||||||
|
// 页码和页数
|
||||||
|
const [searchField, setSearchField] = useState<{ page: number; size: number }>({
|
||||||
|
page: 1,
|
||||||
|
size: 10,
|
||||||
|
})
|
||||||
|
|
||||||
|
// 监听筛选条件变化
|
||||||
|
useEffect(() => {
|
||||||
|
getOrderList()
|
||||||
|
}, [searchField])
|
||||||
|
|
||||||
|
const [orderData, setOrderData] = useState<{ list: any[]; total: number }>({ list: [], total: 0 })
|
||||||
|
|
||||||
|
const pageNum = useRef({ size: searchField.size, page: searchField.page })
|
||||||
|
|
||||||
|
// 数据加载状态
|
||||||
|
const statusMore = useMemo(() => {
|
||||||
|
console.log({ list: orderData.list, total: orderData.total, status: orderState.loading }, '{ list: orderData.list, total: orderData.total, status: orderState.loading }')
|
||||||
|
return dataLoadingStatus({ list: orderData.list, total: orderData.total, status: orderState.loading! })
|
||||||
|
}, [orderData, orderState])
|
||||||
|
|
||||||
|
const getScrolltolower = useCallback(() => {
|
||||||
|
if (orderData.list.length < orderData.total) {
|
||||||
|
pageNum.current.page++
|
||||||
|
const size = pageNum.current.size * pageNum.current.page
|
||||||
|
setSearchField({ ...searchField, size })
|
||||||
|
}
|
||||||
|
}, [orderData])
|
||||||
|
|
||||||
|
// 列表下拉刷新
|
||||||
|
const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false)
|
||||||
|
const getOrderList = async() => {
|
||||||
|
const res = await productFetchData({
|
||||||
|
...getFilterData(searchField),
|
||||||
|
})
|
||||||
|
setOrderData(e => ({ ...e, list: res.data?.list, total: res.data?.total }))
|
||||||
|
setRefresherTriggeredStatus(() => false)
|
||||||
|
}
|
||||||
|
|
||||||
|
const getRefresherRefresh = async() => {
|
||||||
|
pageNum.current.size = 1
|
||||||
|
setRefresherTriggeredStatus(true)
|
||||||
|
setSearchField(val => ({ ...val, size: 10 }))
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View className={styles.main}>
|
||||||
|
<View className={styles.topBox}>
|
||||||
|
<Search placeholder="请输入搜索布料" defaultValue={defaultvalue} showBtn={false} changeOnSearch={getSearchData} >
|
||||||
|
<View className={styles.cancelFont} onClick={() => back()}>取消</View>
|
||||||
|
</Search>
|
||||||
|
</View>
|
||||||
|
<View className={styles.line}></View>
|
||||||
|
{
|
||||||
|
!hasFonts && <>
|
||||||
|
<View className={styles.order_list}>
|
||||||
|
<InfiniteScroll
|
||||||
|
statusMore={statusMore}
|
||||||
|
selfonScrollToLower={getScrolltolower}
|
||||||
|
refresherEnabled
|
||||||
|
refresherTriggered={refresherTriggeredStatus}
|
||||||
|
selfOnRefresherRefresh={getRefresherRefresh}
|
||||||
|
>
|
||||||
|
{orderData?.list?.map((item, index) => {
|
||||||
|
return (
|
||||||
|
<View key={item.id} className={styles.order_item_con}>
|
||||||
|
<Goods clickItem={() => showCart(item)} key={index} data={item}></Goods>
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</InfiniteScroll>
|
||||||
|
</View>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
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" text="暂无数据"></Empty>
|
||||||
|
}
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
<ShopCart
|
||||||
|
ref={ShopCartRef}
|
||||||
|
sale_mode={router.params.sale_mode}
|
||||||
|
handSure={() => handSure()}
|
||||||
|
modeFont={router.params.sale_mode}
|
||||||
|
handPlus={item => handPlus(item)}
|
||||||
|
obj={goodObj}
|
||||||
|
getSearchData={(e) => { getSearchDataInput(e) }}
|
||||||
|
hasBottom={false}
|
||||||
|
reduceNums={(item) => { reduceNums(item) }}
|
||||||
|
addNums={(item) => { handAdd(item) }}
|
||||||
|
showPopup={showShopCart}
|
||||||
|
closePopup={() => closePoup()}
|
||||||
|
goodList={goodList}
|
||||||
|
onBlur={(e, id) => onBlur(e, id)}
|
||||||
|
></ShopCart>
|
||||||
|
|
||||||
|
</View>
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default memo(SearchPage)
|
||||||
|
// oninputEvent={(e, item) => { onInputEven?.(e, item) }}
|
||||||
@ -1,228 +1,239 @@
|
|||||||
.itemBox {
|
.itemBox {
|
||||||
margin-top: 38px;
|
margin-top: 38px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
margin-right: 24px;
|
margin-right: 24px;
|
||||||
// height: 560px;
|
// height: 560px;
|
||||||
padding-bottom: 20px;
|
padding-bottom: 20px;
|
||||||
background: #FFFFFF;
|
background: #ffffff;
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
margin-left: 24px;
|
margin-left: 24px;
|
||||||
|
|
||||||
.topItem {
|
.topItem {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
|
|
||||||
.orderNo {
|
.orderNo {
|
||||||
|
font-size: 28px;
|
||||||
|
|
||||||
font-size: 28px;
|
font-weight: 500;
|
||||||
font-family: PingFangSC-Medium, PingFang SC;
|
color: #000000;
|
||||||
font-weight: 500;
|
margin-left: 32px;
|
||||||
color: #000000;
|
|
||||||
margin-left: 32px;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.status {
|
|
||||||
margin-right: 32px;
|
|
||||||
font-size: 28px;
|
|
||||||
font-family: PingFangSC-Medium, PingFang SC;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #0D7CFF;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.status {
|
||||||
|
margin-right: 32px;
|
||||||
|
font-size: 28px;
|
||||||
|
|
||||||
|
font-weight: 500;
|
||||||
|
color: #0d7cff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.flexBox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
.pussName {
|
.pussName {
|
||||||
margin-left: 32px;
|
margin-left: 32px;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
font-family: PingFangSC-Medium, PingFang SC;
|
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
|
}
|
||||||
|
.editFont {
|
||||||
|
margin-right: 32px;
|
||||||
|
width: 84px;
|
||||||
|
height: 32px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #337fff;
|
||||||
|
font-size: 22px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 32px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #337fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
margin-left: 32px;
|
||||||
|
// width: 638px;
|
||||||
|
margin-right: 32px;
|
||||||
|
height: 1px;
|
||||||
|
background: #e7e7e7;
|
||||||
|
// opacity: 0.1;
|
||||||
|
margin-top: 16px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contBox {
|
||||||
|
// padding-right: 32px;
|
||||||
|
// width: 100%;
|
||||||
|
// width: 638rpx;
|
||||||
|
margin-left: 32px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.leftCont {
|
||||||
|
// min-width: 24%;
|
||||||
|
width: 134px;
|
||||||
|
height: 134px;
|
||||||
|
border-radius: 8px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.leftContNums {
|
||||||
|
width: 134px;
|
||||||
|
height: 39px;
|
||||||
|
background: #000000;
|
||||||
|
border-radius: 0px 0px 8px 8px;
|
||||||
|
opacity: 0.5;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
font-size: 20px;
|
||||||
|
|
||||||
|
font-weight: 400;
|
||||||
|
color: #ffffff;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 39px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.line {
|
.rightCont {
|
||||||
margin-left: 32px;
|
min-width: 76%;
|
||||||
// width: 638px;
|
margin-left: 24px;
|
||||||
margin-right: 32px;
|
|
||||||
height: 1px;
|
|
||||||
background: #e7e7e7;
|
|
||||||
// opacity: 0.1;
|
|
||||||
margin-top: 16px;
|
|
||||||
margin-bottom: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.contBox {
|
.rightTop {
|
||||||
// padding-right: 32px;
|
|
||||||
// width: 100%;
|
|
||||||
// width: 638rpx;
|
|
||||||
margin-left: 32px;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
|
|
||||||
.leftCont {
|
|
||||||
// min-width: 24%;
|
|
||||||
width: 134px;
|
|
||||||
height: 134px;
|
|
||||||
border-radius: 8px;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
.leftContNums {
|
|
||||||
width: 134px;
|
|
||||||
height: 39px;
|
|
||||||
background: #000000;
|
|
||||||
border-radius: 0px 0px 8px 8px;
|
|
||||||
opacity: 0.5;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
font-size: 20px;
|
|
||||||
font-family: PingFangSC-Regular, PingFang SC;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #FFFFFF;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 39px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.rightCont {
|
|
||||||
min-width: 76%;
|
|
||||||
margin-left: 24px;
|
|
||||||
|
|
||||||
.rightTop {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
min-width: 76%;
|
|
||||||
// width: 480px;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
|
|
||||||
.productBox {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.productName {
|
|
||||||
max-width: 285px;
|
|
||||||
height: 34px;
|
|
||||||
overflow: hidden;
|
|
||||||
white-space: nowrap;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
margin-right: 8px;
|
|
||||||
font-size: 28px;
|
|
||||||
font-family: PingFangSC-Regular, PingFang SC;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.productMode {
|
|
||||||
width: 60px;
|
|
||||||
height: 28px;
|
|
||||||
background: #337FFF;
|
|
||||||
border-radius: 8px;
|
|
||||||
font-size: 20px;
|
|
||||||
font-family: PingFangSC-Medium, PingFang SC;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #FFFFFF;
|
|
||||||
text-align: center;
|
|
||||||
line-height: 28px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.shipMode {
|
|
||||||
margin-right: 60px;
|
|
||||||
font-size: 28px;
|
|
||||||
font-family: PingFangSC-Regular, PingFang SC;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.colorsBox {
|
|
||||||
padding-right: 60px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
// width: 480px;
|
|
||||||
// margin-right: 32px;
|
|
||||||
margin-bottom: 8px;
|
|
||||||
|
|
||||||
.colorNameOne {
|
|
||||||
flex: 1;
|
|
||||||
font-size: 24px;
|
|
||||||
font-family: PingFangSC-Regular, PingFang SC;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #000000;
|
|
||||||
width: 133px;
|
|
||||||
height: 30px;
|
|
||||||
text-align: left;
|
|
||||||
overflow: hidden;
|
|
||||||
white-space: nowrap;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
|
|
||||||
.colorName {
|
|
||||||
flex: 1;
|
|
||||||
font-size: 24px;
|
|
||||||
font-family: PingFangSC-Regular, PingFang SC;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #000000;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.colorNameTwo {
|
|
||||||
flex: 1;
|
|
||||||
font-size: 24px;
|
|
||||||
font-family: PingFangSC-Regular, PingFang SC;
|
|
||||||
font-weight: 400;
|
|
||||||
color: #000000;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.lineOne {
|
|
||||||
// width: 638px;
|
|
||||||
margin-right: 32px;
|
|
||||||
height: 1px;
|
|
||||||
background: #e7e7e7;
|
|
||||||
// opacity: 0.1;
|
|
||||||
margin-left: 32px;
|
|
||||||
margin-top: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bottomMsg {
|
|
||||||
|
|
||||||
margin-top: 16px;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
min-width: 76%;
|
||||||
|
// width: 480px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
|
||||||
.msgLeft {
|
.productBox {
|
||||||
margin-left: 32px;
|
display: flex;
|
||||||
font-size: 24px;
|
align-items: center;
|
||||||
font-weight: 400;
|
|
||||||
color: #a1a1a1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.msgRight {
|
.productName {
|
||||||
margin-right: 32px;
|
max-width: 285px;
|
||||||
font-size: 24px;
|
height: 34px;
|
||||||
font-family: PingFangSC-Regular, PingFang SC;
|
overflow: hidden;
|
||||||
font-weight: 400;
|
white-space: nowrap;
|
||||||
color: #a1a1a1;
|
text-overflow: ellipsis;
|
||||||
}
|
margin-right: 8px;
|
||||||
|
|
||||||
.msgRightOne {
|
|
||||||
margin-right: 32px;
|
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
font-family: PingFangSC-Medium, PingFang SC;
|
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.productMode {
|
||||||
|
width: 60px;
|
||||||
|
height: 28px;
|
||||||
|
background: #337fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 20px;
|
||||||
|
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #F64861;
|
color: #ffffff;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 28px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.shipMode {
|
||||||
|
margin-right: 60px;
|
||||||
|
font-size: 28px;
|
||||||
|
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.colorsBox {
|
||||||
|
padding-right: 60px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
// width: 480px;
|
||||||
|
// margin-right: 32px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
|
||||||
|
.colorNameOne {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 24px;
|
||||||
|
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
width: 133px;
|
||||||
|
height: 30px;
|
||||||
|
text-align: left;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colorName {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 24px;
|
||||||
|
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.colorNameTwo {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 24px;
|
||||||
|
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.lineOne {
|
||||||
|
// width: 638px;
|
||||||
|
margin-right: 32px;
|
||||||
|
height: 1px;
|
||||||
|
background: #e7e7e7;
|
||||||
|
// opacity: 0.1;
|
||||||
|
margin-left: 32px;
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottomMsg {
|
||||||
|
margin-top: 16px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.msgLeft {
|
||||||
|
margin-left: 32px;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #a1a1a1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottomBox {
|
.msgRight {
|
||||||
margin-top: 40px;
|
margin-right: 32px;
|
||||||
|
font-size: 24px;
|
||||||
|
|
||||||
|
font-weight: 400;
|
||||||
|
color: #a1a1a1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.msgRightOne {
|
||||||
|
margin-right: 32px;
|
||||||
|
font-size: 28px;
|
||||||
|
|
||||||
|
font-weight: 500;
|
||||||
|
color: #f64861;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottomBox {
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -49,7 +49,12 @@ const ItemList = (props: propsObj) => {
|
|||||||
<View className={styles.orderNo}>单号:{props?.obj?.order_no}</View>
|
<View className={styles.orderNo}>单号:{props?.obj?.order_no}</View>
|
||||||
<View className={styles.status}>{props?.obj?.status_name}</View>
|
<View className={styles.status}>{props?.obj?.status_name}</View>
|
||||||
</View>
|
</View>
|
||||||
<View className={styles.pussName}>{props?.obj?.purchaser_name}</View>
|
<View className={styles.flexBox}>
|
||||||
|
<View className={styles.pussName}>{props?.obj?.purchaser_name}</View>
|
||||||
|
{
|
||||||
|
props?.obj?.is_modify && <View className={styles.editFont}>已修改</View>
|
||||||
|
}
|
||||||
|
</View>
|
||||||
<View className={styles.line}></View>
|
<View className={styles.line}></View>
|
||||||
<View className={styles.contBox}>
|
<View className={styles.contBox}>
|
||||||
<View style={{ minWidth: '24%' }}>
|
<View style={{ minWidth: '24%' }}>
|
||||||
|
|||||||
@ -18,6 +18,7 @@ interface prosObj {
|
|||||||
handSureGoods?: (any) => void
|
handSureGoods?: (any) => void
|
||||||
handShowCodeList?: (any) => void
|
handShowCodeList?: (any) => void
|
||||||
cancle?: (any) => void
|
cancle?: (any) => void
|
||||||
|
handEdit?: () => void
|
||||||
goodsObj?: any
|
goodsObj?: any
|
||||||
// handSureGoods?: () => void,
|
// handSureGoods?: () => void,
|
||||||
}
|
}
|
||||||
@ -36,6 +37,7 @@ const BottomApply = (props: prosObj) => {
|
|||||||
handSureGoods,
|
handSureGoods,
|
||||||
cancle,
|
cancle,
|
||||||
handShowCodeList,
|
handShowCodeList,
|
||||||
|
handEdit,
|
||||||
goodsObj = {},
|
goodsObj = {},
|
||||||
nextBuy,
|
nextBuy,
|
||||||
// handSureGoods
|
// handSureGoods
|
||||||
@ -149,6 +151,7 @@ const BottomApply = (props: prosObj) => {
|
|||||||
|| (obj.sale_mode === 2 && obj.status === 2)
|
|| (obj.sale_mode === 2 && obj.status === 2)
|
||||||
|| (obj.sale_mode === 2 && obj.status === 7)
|
|| (obj.sale_mode === 2 && obj.status === 7)
|
||||||
|| (obj.sale_mode === 1 && obj.status === 10)
|
|| (obj.sale_mode === 1 && obj.status === 10)
|
||||||
|
|| (obj.sale_mode === 1 && obj.status === 7)
|
||||||
|| (obj.sale_mode === 2 && obj.status === 10)
|
|| (obj.sale_mode === 2 && obj.status === 10)
|
||||||
) {
|
) {
|
||||||
return true
|
return true
|
||||||
@ -156,6 +159,16 @@ const BottomApply = (props: prosObj) => {
|
|||||||
else { return false }
|
else { return false }
|
||||||
}, [obj])
|
}, [obj])
|
||||||
|
|
||||||
|
// 判断是否显示修改订单
|
||||||
|
const showEdit = useMemo(() => {
|
||||||
|
if (obj.status == 0 || obj.status == 1) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}, [obj])
|
||||||
|
|
||||||
const [btnList, setbtnList] = useState<any[]>([])
|
const [btnList, setbtnList] = useState<any[]>([])
|
||||||
useMemo(() => {
|
useMemo(() => {
|
||||||
const arr: any[] = []
|
const arr: any[] = []
|
||||||
@ -223,6 +236,16 @@ const BottomApply = (props: prosObj) => {
|
|||||||
sort: 2,
|
sort: 2,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
if (showEdit) {
|
||||||
|
nums = nums + 1
|
||||||
|
console.log('101010')
|
||||||
|
arr.push({
|
||||||
|
key: 'showEdit',
|
||||||
|
label: '修改订单',
|
||||||
|
bgKind: 3,
|
||||||
|
sort: 9,
|
||||||
|
})
|
||||||
|
}
|
||||||
const fiterArr = arr.sort((a, b) => a.sort - b.sort)
|
const fiterArr = arr.sort((a, b) => a.sort - b.sort)
|
||||||
setbtnList([...fiterArr])
|
setbtnList([...fiterArr])
|
||||||
return nums
|
return nums
|
||||||
@ -250,6 +273,9 @@ const BottomApply = (props: prosObj) => {
|
|||||||
// if (key === 'canBuy') {
|
// if (key === 'canBuy') {
|
||||||
// toPay?.(e)
|
// toPay?.(e)
|
||||||
// }
|
// }
|
||||||
|
if (key === 'showEdit') {
|
||||||
|
handEdit?.()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -202,6 +202,16 @@ const OrderDetails = () => {
|
|||||||
if (it.leftTitle === '业务员:') {
|
if (it.leftTitle === '业务员:') {
|
||||||
it.rightTitle = res.data.sale_user_name
|
it.rightTitle = res.data.sale_user_name
|
||||||
}
|
}
|
||||||
|
if (res.data.change_time !== '') {
|
||||||
|
if (it.leftTitle === '编辑时间:') {
|
||||||
|
it.rightTitle = formatDateTime(res.data.change_time)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (it.leftTitle === '编辑时间:') {
|
||||||
|
it.showFont = false
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
setOrderMsg([...orderMsg])
|
setOrderMsg([...orderMsg])
|
||||||
setReceivingStatus(res.data.shipment_mode)
|
setReceivingStatus(res.data.shipment_mode)
|
||||||
@ -231,18 +241,28 @@ const OrderDetails = () => {
|
|||||||
leftTitle: '订单编号:',
|
leftTitle: '订单编号:',
|
||||||
rightTitle: '------',
|
rightTitle: '------',
|
||||||
showBtn: true,
|
showBtn: true,
|
||||||
|
showFont: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
leftTitle: '创建时间:',
|
leftTitle: '创建时间:',
|
||||||
rightTitle: '------',
|
rightTitle: '------',
|
||||||
|
showFont: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
leftTitle: '发货时间:',
|
leftTitle: '发货时间:',
|
||||||
rightTitle: '------',
|
rightTitle: '------',
|
||||||
|
showFont: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
leftTitle: '业务员:',
|
leftTitle: '业务员:',
|
||||||
rightTitle: '------',
|
rightTitle: '------',
|
||||||
|
showFont: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
leftTitle: '编辑时间:',
|
||||||
|
rightTitle: '------',
|
||||||
|
showFont: true,
|
||||||
|
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -766,6 +786,13 @@ const OrderDetails = () => {
|
|||||||
setshowCodeList(true)
|
setshowCodeList(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 修改订单
|
||||||
|
const handEdit = () => {
|
||||||
|
Taro.navigateTo({
|
||||||
|
url: `/pages/orderEdit/index?orderId=${infoObj.id}`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View className={styles.mainBox}>
|
<View className={styles.mainBox}>
|
||||||
{(infoObj?.status != 10 && <OrderState orderInfo={infoObj} />)}
|
{(infoObj?.status != 10 && <OrderState orderInfo={infoObj} />)}
|
||||||
@ -831,7 +858,8 @@ const OrderDetails = () => {
|
|||||||
{
|
{
|
||||||
orderMsg.map((item, index) => {
|
orderMsg.map((item, index) => {
|
||||||
return (
|
return (
|
||||||
<View className={styles.detailBox} key={index}>
|
|
||||||
|
item.showFont && <View className={styles.detailBox} key={index}>
|
||||||
<View className={styles.detailFont}>
|
<View className={styles.detailFont}>
|
||||||
{item.leftTitle}
|
{item.leftTitle}
|
||||||
</View>
|
</View>
|
||||||
@ -902,6 +930,7 @@ const OrderDetails = () => {
|
|||||||
handSureGoods={() => handSureGoods?.()}
|
handSureGoods={() => handSureGoods?.()}
|
||||||
handApplyGoods={() => handApplyGood?.()}
|
handApplyGoods={() => handApplyGood?.()}
|
||||||
handApplyMoney={() => handApplyMoney?.()}
|
handApplyMoney={() => handApplyMoney?.()}
|
||||||
|
handEdit={() => handEdit?.()}
|
||||||
></BottomBtns>
|
></BottomBtns>
|
||||||
</View>
|
</View>
|
||||||
<PayPopup
|
<PayPopup
|
||||||
|
|||||||
253
src/pages/orderEdit/components/GoodsItem/index.module.scss
Normal file
253
src/pages/orderEdit/components/GoodsItem/index.module.scss
Normal file
@ -0,0 +1,253 @@
|
|||||||
|
.goodsBox {
|
||||||
|
margin-top: 24px;
|
||||||
|
overflow: hidden;
|
||||||
|
border-bottom: 8px solid #f7f7f7;
|
||||||
|
|
||||||
|
.goodsProduct {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #000000;
|
||||||
|
margin-left: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.goodsLine {
|
||||||
|
margin-right: 24px;
|
||||||
|
margin-left: 24px;
|
||||||
|
// width: 638px;
|
||||||
|
height: 1px;
|
||||||
|
background: #000000;
|
||||||
|
opacity: 0.1;
|
||||||
|
margin-left: 32px;
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemGoods {
|
||||||
|
margin-top: 24px;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.itemPic {
|
||||||
|
margin-left: 32px;
|
||||||
|
margin-right: 42px;
|
||||||
|
width: 108px;
|
||||||
|
height: 108px;
|
||||||
|
// background: #322F2F;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemRight {
|
||||||
|
padding-bottom: 24px;
|
||||||
|
margin-right: 32px;
|
||||||
|
width: 495px;
|
||||||
|
border-bottom: 1px solid #f7f7f7;
|
||||||
|
|
||||||
|
.item_right_top {
|
||||||
|
margin-bottom: 41px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.itemName {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemNums {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.itemMoneyOne {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item_right_Bottom {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
.flexBox {
|
||||||
|
display: flex;
|
||||||
|
.itemMoney {
|
||||||
|
font-size: 28px;
|
||||||
|
margin-right: 10px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.lastBox {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
text-decoration: line-through;
|
||||||
|
color: #7f7f7f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.newBox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.reduceBox {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 18px;
|
||||||
|
border: 1px solid #337fff;
|
||||||
|
.reduce {
|
||||||
|
width: 20px;
|
||||||
|
height: 3px;
|
||||||
|
background: #337fff;
|
||||||
|
border-radius: 16px;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.numsBox {
|
||||||
|
width: 81px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.addBox {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 35px;
|
||||||
|
border-radius: 18px;
|
||||||
|
border: 1px solid #337fff;
|
||||||
|
background-color: #337fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemGoods:last-child {
|
||||||
|
margin-top: 24px;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.itemPic {
|
||||||
|
margin-left: 32px;
|
||||||
|
margin-right: 42px;
|
||||||
|
width: 108px;
|
||||||
|
height: 108px;
|
||||||
|
// background: #322F2F;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemRight {
|
||||||
|
padding-bottom: 24px;
|
||||||
|
width: 495px;
|
||||||
|
border-bottom: none;
|
||||||
|
|
||||||
|
.item_right_top {
|
||||||
|
margin-bottom: 41px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.itemName {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemNums {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.itemMoneyOne {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item_right_Bottom {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.flexBox {
|
||||||
|
display: flex;
|
||||||
|
.itemMoney {
|
||||||
|
font-size: 28px;
|
||||||
|
margin-right: 10px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.lastBox {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
text-decoration: line-through;
|
||||||
|
color: #7f7f7f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.newBox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.reduceBox {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 18px;
|
||||||
|
border: 1px solid #337fff;
|
||||||
|
.reduce {
|
||||||
|
width: 20px;
|
||||||
|
height: 3px;
|
||||||
|
background: #337fff;
|
||||||
|
border-radius: 16px;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.numsBox {
|
||||||
|
width: 81px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.addBox {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 35px;
|
||||||
|
border-radius: 18px;
|
||||||
|
border: 1px solid #337fff;
|
||||||
|
background-color: #337fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.goodsBox:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
110
src/pages/orderEdit/components/GoodsItem/index.tsx
Normal file
110
src/pages/orderEdit/components/GoodsItem/index.tsx
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
import { Input, View } from '@tarojs/components'
|
||||||
|
import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro'
|
||||||
|
import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
import LabAndImg from '@/components/LabAndImg'
|
||||||
|
import { formatDateTime, formatHashTag, formatPriceDiv, formatRemoveHashTag, formatWeightDiv } from '@/common/format'
|
||||||
|
|
||||||
|
// 产品商品元素
|
||||||
|
interface PropGoods {
|
||||||
|
list: any[]
|
||||||
|
obj: {
|
||||||
|
sale_mode?: number | string
|
||||||
|
}
|
||||||
|
modeFont: number
|
||||||
|
clickReduce?: (item: any) => void
|
||||||
|
handPlus?: (item: any) => void
|
||||||
|
onBlur?: (e: any, item: any) => void
|
||||||
|
}
|
||||||
|
const GoodsItem = (porps: PropGoods) => {
|
||||||
|
const { list = [], obj = {} } = porps
|
||||||
|
const labAndImgObj = useCallback((item) => {
|
||||||
|
return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url }
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
// const [value, setValue] = useState<any>({ count: props.value.nums })
|
||||||
|
|
||||||
|
const onInputEven = (e, it) => {
|
||||||
|
const res = e.detail.value
|
||||||
|
if (porps.modeFont == 0) {
|
||||||
|
if (Number(res) < 1) {
|
||||||
|
// setValue({ count: '' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (porps.modeFont == 1) {
|
||||||
|
if (Number(res) < 0) {
|
||||||
|
// setValue({ count: '' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (porps.modeFont == 2) {
|
||||||
|
if (Number(res) < 0) {
|
||||||
|
// setValue({ count: '' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const type = useMemo(() => {
|
||||||
|
if (porps.modeFont === 0) {
|
||||||
|
return 'number'
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 'digit'
|
||||||
|
}
|
||||||
|
}, [porps.modeFont])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{
|
||||||
|
list.map((item, index) => {
|
||||||
|
return (
|
||||||
|
<View className={styles.goodsBox} key={index}>
|
||||||
|
<View className={styles.goodsProduct}>{item.code}# {item.name}</View>
|
||||||
|
<View className={styles.goodsLine}></View>
|
||||||
|
{
|
||||||
|
item.product_colors.map((it, inx) => {
|
||||||
|
return (
|
||||||
|
<View className={styles.itemGoods} key={inx}>
|
||||||
|
<View className={styles.itemPic}>
|
||||||
|
<LabAndImg value={labAndImgObj(it)} />
|
||||||
|
</View>
|
||||||
|
{/* <View className={styles.itemPic} style={{ backgroundColor: `rgb(${it?.rgb?.r} ${it?.rgb?.g} ${it?.rgb?.b})` }}></View> */}
|
||||||
|
<View className={styles.itemRight}>
|
||||||
|
<View className={styles.item_right_top}>
|
||||||
|
<View className={styles.itemName}>{formatHashTag(it.code, it.name)}</View>
|
||||||
|
<View className={styles.itemMoneyOne}>¥{formatPriceDiv(it.total_sale_price)}</View>
|
||||||
|
{/* <View className={styles.itemNums}>x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'}</View> */}
|
||||||
|
</View>
|
||||||
|
<View className={styles.item_right_Bottom}>
|
||||||
|
<View className={styles.flexBox}>
|
||||||
|
<View className={styles.itemMoney}>¥{formatPriceDiv(it.sale_price)}/{obj?.sale_mode === 1 ? 'm' : 'kg'}</View>
|
||||||
|
{/* {
|
||||||
|
obj?.sale_mode === 0 && it?.sale_price !== it?.standard_sale_price && <View className={styles.lastBox}>¥{it?.standard_sale_price / 100}/{obj?.sale_mode === 1 ? 'm' : 'kg'}</View>
|
||||||
|
} */}
|
||||||
|
</View>
|
||||||
|
<View className={styles.newBox}>
|
||||||
|
<View className={styles.reduceBox} onClick={() => { porps.clickReduce?.(it) }}>
|
||||||
|
<View className={styles.reduce}>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
<View className={styles.numsBox}>
|
||||||
|
<Input alwaysEmbed cursorSpacing={100} adjustPosition type={type as any} value={it.nums} onInput={e => onInputEven(e, it)} onBlur={e => porps.onBlur?.(e, it)}></Input>
|
||||||
|
</View>
|
||||||
|
<View className={styles.addBox} onClick={() => { porps.handPlus?.(it) }}>
|
||||||
|
+
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</>
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default memo(GoodsItem)
|
||||||
@ -0,0 +1,144 @@
|
|||||||
|
.addressBox {
|
||||||
|
margin-right: 24px;
|
||||||
|
// width: 702px;
|
||||||
|
min-height: 223px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 16px;
|
||||||
|
margin-top: 24px;
|
||||||
|
margin-left: 24px;
|
||||||
|
|
||||||
|
.topBox {
|
||||||
|
padding-top: 28px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.cirle {
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-left: 32px;
|
||||||
|
width: 64px;
|
||||||
|
height: 64px;
|
||||||
|
background: #4a7fff;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.dingwei {
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 26px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.address {
|
||||||
|
margin-left: 24px;
|
||||||
|
width: 461px;
|
||||||
|
height: 78px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #000000;
|
||||||
|
margin-right: 41px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 2; /*这里设置几行*/
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon_more {
|
||||||
|
font-size: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
margin-top: 16px;
|
||||||
|
float: right;
|
||||||
|
margin-right: 32px;
|
||||||
|
width: 550px;
|
||||||
|
height: 1px;
|
||||||
|
background: #000000;
|
||||||
|
opacity: 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-top: 44px;
|
||||||
|
.reatName {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #337fff;
|
||||||
|
margin-right: 32px;
|
||||||
|
}
|
||||||
|
.leftbottom {
|
||||||
|
margin-left: 120px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.name {
|
||||||
|
line-height: 34px;
|
||||||
|
width: 84px;
|
||||||
|
height: 34px;
|
||||||
|
@include common_ellipsis();
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #343434;
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phone {
|
||||||
|
height: 34px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #343434;
|
||||||
|
// margin-right: 70px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.reatBox {
|
||||||
|
position: relative;
|
||||||
|
margin-right: 32px;
|
||||||
|
|
||||||
|
.updateBtn {
|
||||||
|
width: 200px;
|
||||||
|
font-size: $font_size_min;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
height: 64px;
|
||||||
|
border-radius: 16px;
|
||||||
|
color: $color_font_two;
|
||||||
|
// position: absolute;
|
||||||
|
bottom: 10px;
|
||||||
|
// right: -10px;
|
||||||
|
text-align: center;
|
||||||
|
z-index: 999;
|
||||||
|
|
||||||
|
.updateBtn_list {
|
||||||
|
position: absolute;
|
||||||
|
display: flex;
|
||||||
|
z-index: 5;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.updateBtn_item_select {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.updateBtn_item {
|
||||||
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 64px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.updateBtn_select {
|
||||||
|
color: #fff;
|
||||||
|
background-color: $color_main;
|
||||||
|
border-radius: 16px;
|
||||||
|
position: absolute;
|
||||||
|
width: 100px;
|
||||||
|
height: 61px;
|
||||||
|
z-index: 1;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
76
src/pages/orderEdit/components/addressDetailBox/index.tsx
Normal file
76
src/pages/orderEdit/components/addressDetailBox/index.tsx
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
import { Image, Text, View } from '@tarojs/components'
|
||||||
|
import { memo, useEffect, useMemo, useRef, useState } from 'react'
|
||||||
|
import classnames from 'classnames'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
import IconFont from '@/components/iconfont/iconfont'
|
||||||
|
import { alert } from '@/common/common'
|
||||||
|
|
||||||
|
interface propsObj {
|
||||||
|
receivingStatus: Number | null
|
||||||
|
onReceivingStatus?: (any, Number) => void
|
||||||
|
obj?: any
|
||||||
|
navSelect?: (any) => void
|
||||||
|
showBtn?: boolean
|
||||||
|
showWhatFont?: string
|
||||||
|
}
|
||||||
|
const AddressDetailBox = (props: propsObj) => {
|
||||||
|
const {
|
||||||
|
receivingStatus = null,
|
||||||
|
onReceivingStatus,
|
||||||
|
obj = {},
|
||||||
|
navSelect,
|
||||||
|
showBtn = true,
|
||||||
|
showWhatFont = '',
|
||||||
|
} = props
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View className={styles.addressBox}>
|
||||||
|
<View className={styles.topBox} onClick={() => navSelect?.(obj)}>
|
||||||
|
<View className={styles.cirle}>
|
||||||
|
<IconFont name="icon-cangku1" size={60}></IconFont>
|
||||||
|
</View>
|
||||||
|
{
|
||||||
|
receivingStatus == 1 && <View className={styles.address}>{obj.take_goods_address || '中华人民共和国广东省佛山市禅城区陆盈纺织仓库'}</View>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
(obj?.address_id != 0 && receivingStatus == 2)
|
||||||
|
&& <View className={styles.address}>{obj?.province_name}{obj?.city_name}{obj?.district_name}{obj?.address_detail}</View>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
(obj?.address_id == 0 && receivingStatus == 2)
|
||||||
|
&& <View className={styles.address}></View>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
receivingStatus !== 1
|
||||||
|
&& <IconFont name="icon-chakanquanbukehu" size={50} ></IconFont>
|
||||||
|
}
|
||||||
|
</View>
|
||||||
|
<View className={styles.line}></View>
|
||||||
|
<View className={styles.bottom}>
|
||||||
|
<View className={styles.leftbottom}>
|
||||||
|
<View className={styles.name}>{receivingStatus === 1 ? '谭先生' : obj?.address_id == 0 ? '' : obj.target_user_name}</View>
|
||||||
|
<View className={styles.phone}>{receivingStatus === 1 ? 13242128982 : obj?.address_id == 0 ? '' : obj.purchaser_phone}</View>
|
||||||
|
</View>
|
||||||
|
{
|
||||||
|
showBtn && <View className={styles.reatBox}>
|
||||||
|
<View className={styles.updateBtn}>
|
||||||
|
<View className={styles.updateBtn_list}>
|
||||||
|
<View className={classnames(styles.updateBtn_item, receivingStatus == 1 && styles.updateBtn_item_select)} onClick={e => onReceivingStatus?.(e, 1)}>
|
||||||
|
自提
|
||||||
|
</View>
|
||||||
|
<View className={classnames(styles.updateBtn_item, receivingStatus == 2 && styles.updateBtn_item_select)} onClick={e => onReceivingStatus?.(e, 2)}>
|
||||||
|
物流
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
<View style={{ transform: receivingStatus == 1 ? 'translateX(0)' : 'translateX(100%)' }} className={classnames(styles.updateBtn_select)}></View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
!showBtn && <View className={styles.reatName}>{showWhatFont}</View>
|
||||||
|
}
|
||||||
|
</View>
|
||||||
|
</View >
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default memo(AddressDetailBox)
|
||||||
4
src/pages/orderEdit/index.config.ts
Normal file
4
src/pages/orderEdit/index.config.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export default {
|
||||||
|
navigationBarTitleText: '订单详情',
|
||||||
|
|
||||||
|
}
|
||||||
212
src/pages/orderEdit/index.module.scss
Normal file
212
src/pages/orderEdit/index.module.scss
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
page {
|
||||||
|
background: #f7f7f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mainBox {
|
||||||
|
.pussBox {
|
||||||
|
margin-top: 24px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.pussName {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pussPhone {
|
||||||
|
margin-left: 88px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.addBtn {
|
||||||
|
margin: 24px;
|
||||||
|
width: 702px;
|
||||||
|
height: 82px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 16px;
|
||||||
|
border: 1px solid #337fff;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #337fff;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 82px;
|
||||||
|
}
|
||||||
|
.total {
|
||||||
|
margin-top: 44px;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
margin-left: 32px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.productBox {
|
||||||
|
// width: 702px;
|
||||||
|
margin-right: 24px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 16px;
|
||||||
|
margin-left: 24px;
|
||||||
|
padding-bottom: 36px;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.flexMoney {
|
||||||
|
display: flex;
|
||||||
|
margin-top: 32px;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.flexTotalBox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.totalFont {
|
||||||
|
margin-left: 32px;
|
||||||
|
margin-right: 8px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tishi {
|
||||||
|
font-size: 28px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.shoudPay {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #f64861;
|
||||||
|
margin-right: 32px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.defaltBox {
|
||||||
|
margin: 24px;
|
||||||
|
padding: 24px 32px 24px 24px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 16px;
|
||||||
|
|
||||||
|
.titleBox {
|
||||||
|
// margin-right: 24px;
|
||||||
|
// margin-left: 24px;
|
||||||
|
// width: 638px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modeName {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #337fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.modeLine {
|
||||||
|
margin-top: 24px;
|
||||||
|
// width: 638px;
|
||||||
|
// margin-right: 24px;
|
||||||
|
// margin-left: 24px;
|
||||||
|
height: 1px;
|
||||||
|
background: #000000;
|
||||||
|
opacity: 0.1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailBox {
|
||||||
|
display: flex;
|
||||||
|
margin-top: 24px;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.detailRightFlex {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.detailRight {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailBtn {
|
||||||
|
margin-left: 16px;
|
||||||
|
width: 65px;
|
||||||
|
height: 32px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #337fff;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #337fff;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 32px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailFont {
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #b8b8b8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.remarkFont {
|
||||||
|
margin-top: 24px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.safeBottom {
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottomBox {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
// width: 750px;
|
||||||
|
width: 100%;
|
||||||
|
height: 160px;
|
||||||
|
background: #ffffff;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 10000;
|
||||||
|
padding-bottom: 24px;
|
||||||
|
.bottomBtn {
|
||||||
|
width: 702px;
|
||||||
|
margin-left: 24px;
|
||||||
|
margin-right: 24px;
|
||||||
|
font-size: 28px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #ffffff;
|
||||||
|
height: 80px;
|
||||||
|
background: #337fff;
|
||||||
|
border-radius: 44px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 80px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.order_save_address {
|
||||||
|
height: 82px;
|
||||||
|
background: #007aff;
|
||||||
|
border-radius: 40px;
|
||||||
|
// width: 668px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 82px;
|
||||||
|
color: #fff;
|
||||||
|
margin-top: 20px;
|
||||||
|
margin-left: 24px;
|
||||||
|
margin-right: 24px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
789
src/pages/orderEdit/index.tsx
Normal file
789
src/pages/orderEdit/index.tsx
Normal file
@ -0,0 +1,789 @@
|
|||||||
|
import { View } from '@tarojs/components'
|
||||||
|
import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro'
|
||||||
|
import type { ReactNode } from 'react'
|
||||||
|
import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||||
|
import classnames from 'classnames'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
import AddressDetailBox from './components/addressDetailBox'
|
||||||
|
import GoodsItem from './components/GoodsItem'
|
||||||
|
import Remark from '@/components/textareaEnhance'
|
||||||
|
import Popup from '@/components/popup'
|
||||||
|
import { debounce } from '@/common/util'
|
||||||
|
import {
|
||||||
|
MpSaleOrder,
|
||||||
|
MpSaleOrderPut,
|
||||||
|
MpsaleOrderaddProductList,
|
||||||
|
MpsaleOrdersubmit,
|
||||||
|
} from '@/api/order'
|
||||||
|
import { alert, goLink } from '@/common/common'
|
||||||
|
import { formatDateTime, formatHashTag, formatPriceDiv, formatRemoveHashTag, formatWeightDiv } from '@/common/format'
|
||||||
|
import { MpPurchaserAddressList } from '@/api/addressList'
|
||||||
|
|
||||||
|
// 卡片盒子元素
|
||||||
|
interface Obs {
|
||||||
|
title?: string
|
||||||
|
modeName?: string
|
||||||
|
showMode?: boolean
|
||||||
|
children?: ReactNode
|
||||||
|
clickNode?: () => void
|
||||||
|
}
|
||||||
|
|
||||||
|
const DefaultBox = (props: Obs) => {
|
||||||
|
const {
|
||||||
|
title = '标题',
|
||||||
|
modeName = '大货',
|
||||||
|
showMode = false,
|
||||||
|
children,
|
||||||
|
clickNode,
|
||||||
|
} = props
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View className={styles.defaltBox}>
|
||||||
|
<View className={styles.titleBox}>
|
||||||
|
<View className={styles.title}>{title}</View>
|
||||||
|
{
|
||||||
|
showMode && <View className={styles.modeName} onClick={() => clickNode?.()}>{modeName}</View>
|
||||||
|
}
|
||||||
|
</View>
|
||||||
|
<View className={styles.modeLine}></View>
|
||||||
|
{children}
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
const DefaultBoxWithMemo = memo(DefaultBox)
|
||||||
|
|
||||||
|
const OrderDetails = () => {
|
||||||
|
const router = useRouter()
|
||||||
|
const addrssRef = useRef<any>([])
|
||||||
|
const pages = Taro.getCurrentPages()
|
||||||
|
const currPage = pages[pages.length - 1] // 获取当前页面
|
||||||
|
const { fetchData: addressFetch } = MpPurchaserAddressList()
|
||||||
|
let selectId = -1
|
||||||
|
|
||||||
|
// 收货方法,1:自提,2物流
|
||||||
|
const [receivingStatus, setReceivingStatus] = useState<any>(null)
|
||||||
|
// 切换自提或者物流
|
||||||
|
const onReceivingStatus = debounce(async(e, value) => {
|
||||||
|
e.stopPropagation()
|
||||||
|
if (receivingStatus === value) {
|
||||||
|
alert.error('不能选择相同的方式')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
Taro.showLoading({
|
||||||
|
title: '请稍等...',
|
||||||
|
mask: true,
|
||||||
|
})
|
||||||
|
// 判断是否有默认地址
|
||||||
|
if (value === 2 && addrssRef.current.length > 0 && !currPage.data?.addressObj) {
|
||||||
|
setInfoObj(val => ({
|
||||||
|
...val,
|
||||||
|
province_name: addrssRef.current[0]?.province_name,
|
||||||
|
address_id: addrssRef.current[0]?.id,
|
||||||
|
city_name: addrssRef.current[0]?.city_name,
|
||||||
|
address_detail: addrssRef.current[0]?.address_detail,
|
||||||
|
district_name: addrssRef.current[0]?.district_name,
|
||||||
|
target_user_name: addrssRef.current[0]?.name,
|
||||||
|
purchaser_phone: addrssRef.current[0]?.phone,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
// 没有默认地址提示进去选择地址
|
||||||
|
if (value === 2 && !addrssRef.current.length && !infoObj?.address_id) {
|
||||||
|
alert.error('请选择地址')
|
||||||
|
}
|
||||||
|
setReceivingStatus(value)
|
||||||
|
Taro.hideLoading()
|
||||||
|
}, 300)
|
||||||
|
|
||||||
|
// 获取客户地址
|
||||||
|
// 获取地址
|
||||||
|
const getAddress = async(id) => {
|
||||||
|
const result = await addressFetch({ purchaser_id: id })
|
||||||
|
addrssRef.current = result?.data?.list.filter((item) => { return item.is_default })
|
||||||
|
}
|
||||||
|
|
||||||
|
const { fetchData: infoFetch } = MpSaleOrder()
|
||||||
|
const [infoObj, setInfoObj] = useState<any>({})
|
||||||
|
const [goodList, setgoodList] = useState<any>([])
|
||||||
|
// 获取订单详情
|
||||||
|
const getDetail = async() => {
|
||||||
|
Taro.showLoading({
|
||||||
|
title: '加载中...',
|
||||||
|
mask: true,
|
||||||
|
})
|
||||||
|
const res = await infoFetch({ id: router.params.orderId })
|
||||||
|
setInfoObj(res.data)
|
||||||
|
res.data.product_list.forEach((item) => {
|
||||||
|
item.product_colors.map((it) => {
|
||||||
|
it.nums = res.data?.sale_mode == 0 ? it.roll : it.length / 100
|
||||||
|
return it
|
||||||
|
})
|
||||||
|
})
|
||||||
|
setgoodList([...res.data.product_list])
|
||||||
|
orderMsg.map((it) => {
|
||||||
|
if (it.leftTitle === '订单编号:') {
|
||||||
|
it.rightTitle = res.data.order_no
|
||||||
|
}
|
||||||
|
if (it.leftTitle === '创建时间:') {
|
||||||
|
it.rightTitle = formatDateTime(res.data.create_time)
|
||||||
|
}
|
||||||
|
if (it.leftTitle === '发货时间:') {
|
||||||
|
it.rightTitle = formatDateTime(res.data.delivery_time)
|
||||||
|
}
|
||||||
|
if (it.leftTitle === '业务员:') {
|
||||||
|
it.rightTitle = res.data.sale_user_name
|
||||||
|
}
|
||||||
|
})
|
||||||
|
setOrderMsg([...orderMsg])
|
||||||
|
setReceivingStatus(res.data.shipment_mode)
|
||||||
|
// 小程序提供的api,通知页面停止下拉刷新效果
|
||||||
|
Taro.stopPullDownRefresh()
|
||||||
|
Taro.hideLoading()
|
||||||
|
getAddress(res.data?.purchaser_id)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 订单信息文字数组
|
||||||
|
const [orderMsg, setOrderMsg] = useState<any[]>([
|
||||||
|
{
|
||||||
|
leftTitle: '订单编号:',
|
||||||
|
rightTitle: '------',
|
||||||
|
showBtn: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
leftTitle: '创建时间:',
|
||||||
|
rightTitle: '------',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
leftTitle: '发货时间:',
|
||||||
|
rightTitle: '------',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
leftTitle: '业务员:',
|
||||||
|
rightTitle: '------',
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
// 备注操作
|
||||||
|
const [showDesc, setShowDesc] = useState(false)
|
||||||
|
const { fetchData: remarkFetch } = MpSaleOrderPut()
|
||||||
|
const getRemark = async() => {
|
||||||
|
const res = await remarkFetch({ remark: infoObj.remark, id: Number(router.params.orderId) })
|
||||||
|
if (res.msg === 'success') {
|
||||||
|
Taro.showToast({
|
||||||
|
title: '成功',
|
||||||
|
icon: 'success',
|
||||||
|
})
|
||||||
|
setShowDesc(false)
|
||||||
|
getDetail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
getDetail()
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
// 面料修改获取金额列表接口
|
||||||
|
const { fetchData: editFetch } = MpsaleOrderaddProductList()
|
||||||
|
|
||||||
|
useDidShow(() => {
|
||||||
|
// getDetail()
|
||||||
|
const pages = Taro.getCurrentPages()
|
||||||
|
const currPage = pages[pages.length - 1] // 获取当前页面
|
||||||
|
// 获取选择回来的地址
|
||||||
|
if (currPage.data?.addressObj) {
|
||||||
|
setInfoObj(val => ({
|
||||||
|
...val,
|
||||||
|
province_name: currPage.data?.addressObj?.province_name ? currPage.data?.addressObj?.province_name : '',
|
||||||
|
address_id: currPage.data?.addressObj?.id ? currPage.data?.addressObj?.id : '',
|
||||||
|
city_name: currPage.data?.addressObj?.city_name ? currPage.data?.addressObj?.city_name : '',
|
||||||
|
address_detail: currPage.data?.addressObj?.address_detail ? currPage.data?.addressObj?.address_detail : '',
|
||||||
|
district_name: currPage.data?.addressObj?.district_name ? currPage.data?.addressObj?.district_name : '',
|
||||||
|
target_user_name: currPage.data?.addressObj?.name ? currPage.data?.addressObj?.name : '',
|
||||||
|
purchaser_phone: currPage.data?.addressObj?.phone ? currPage.data?.addressObj?.phone : '',
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
selectId = currPage.data?.addressObj?.id
|
||||||
|
const obj = currPage?.data?.ids?.filter((item) => { return item == selectId })
|
||||||
|
if (currPage?.data?.ids && obj.length === 0 && infoObj?.address_id == 0) {
|
||||||
|
setInfoObj(val => ({
|
||||||
|
...val,
|
||||||
|
province_name: '',
|
||||||
|
address_id: '',
|
||||||
|
city_name: '',
|
||||||
|
address_detail: '',
|
||||||
|
district_name: '',
|
||||||
|
target_user_name: '',
|
||||||
|
purchaser_phone: '',
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
if (!currPage.data?.addressObj && infoObj?.address_id == 0) {
|
||||||
|
setReceivingStatus(1)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setReceivingStatus(2)
|
||||||
|
}
|
||||||
|
// 获取选择回来的商品
|
||||||
|
if (currPage.data?.selectGoodsList && currPage.data?.selectGoodsList.length > 0) {
|
||||||
|
for (let i = 0; i < currPage.data?.selectGoodsList.length; i++) {
|
||||||
|
let flag = true
|
||||||
|
for (let j = 0; j < goodList.length; j++) {
|
||||||
|
if (goodList[j].id === currPage.data?.selectGoodsList[i].id) {
|
||||||
|
flag = false
|
||||||
|
goodList[j].product_colors.push(...currPage.data?.selectGoodsList[i].product_colors)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (flag) { goodList.push(currPage.data?.selectGoodsList[i]) }
|
||||||
|
}
|
||||||
|
handEditMoney(1)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const goodsObjRef = useRef<any>()
|
||||||
|
useEffect(() => {
|
||||||
|
goodsObjRef.current = goodList
|
||||||
|
}, [goodList])
|
||||||
|
|
||||||
|
// 面料修改或者添加获取实时金额
|
||||||
|
const handEditMoney = async(toastEnum) => {
|
||||||
|
let toastMsg = ''
|
||||||
|
if (toastEnum == 1) {
|
||||||
|
toastMsg = '添加商品成功'
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
toastMsg = '修改商品成功'
|
||||||
|
}
|
||||||
|
Taro.showLoading({
|
||||||
|
title: '请稍等...',
|
||||||
|
})
|
||||||
|
const arr: any = []
|
||||||
|
goodsObjRef.current.forEach((ec) => {
|
||||||
|
ec.product_colors.forEach((v) => {
|
||||||
|
const colorsArr: any[] = []
|
||||||
|
colorsArr.push({
|
||||||
|
product_color_id: v.id,
|
||||||
|
length: infoObj?.sale_mode == 0 ? 0 : Number(v.nums) * 100,
|
||||||
|
roll: infoObj?.sale_mode != 0 ? 0 : Number(v.nums),
|
||||||
|
sale_price: v.sale_price,
|
||||||
|
})
|
||||||
|
arr.push({
|
||||||
|
product_id: ec.id,
|
||||||
|
sale_mode: Number(infoObj?.sale_mode),
|
||||||
|
color_list: colorsArr,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
// 合并相同的数据
|
||||||
|
const idArray: any[] = []
|
||||||
|
const newAarray: any[] = []
|
||||||
|
|
||||||
|
arr.forEach((ele, i) => {
|
||||||
|
if (!idArray.includes(ele.product_id)) {
|
||||||
|
newAarray.push({
|
||||||
|
product_id: ele.product_id,
|
||||||
|
name: ele.name,
|
||||||
|
sale_mode: Number(infoObj?.sale_mode),
|
||||||
|
color_list: ele.color_list,
|
||||||
|
})
|
||||||
|
|
||||||
|
idArray.push(ele.product_id)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
newAarray.map((dom, k) => {
|
||||||
|
if (dom.product_id == ele.product_id) {
|
||||||
|
dom.color_list = [...ele.color_list, ...dom.color_list]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const res = await editFetch({ add_product_list_param: newAarray, sale_order_id: infoObj?.id })
|
||||||
|
if (res.data) {
|
||||||
|
Taro.hideLoading()
|
||||||
|
Taro.showToast({
|
||||||
|
title: toastMsg,
|
||||||
|
icon: 'none',
|
||||||
|
})
|
||||||
|
goodList.map((item) => {
|
||||||
|
res.data.list?.map((v) => {
|
||||||
|
if (item.id == v.id) {
|
||||||
|
item.product_colors?.forEach((edg) => {
|
||||||
|
v.product_colors?.forEach((ac) => {
|
||||||
|
if (edg.id == ac.id) {
|
||||||
|
edg.total_sale_price = ac.total_sale_price
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return item
|
||||||
|
})
|
||||||
|
setgoodList([...goodList])
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Taro.hideLoading()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 页面下拉刷新
|
||||||
|
usePullDownRefresh(() => {
|
||||||
|
getDetail()
|
||||||
|
})
|
||||||
|
|
||||||
|
// 选择地址
|
||||||
|
const handSelect = (obj) => {
|
||||||
|
Taro.navigateTo({
|
||||||
|
url: `/pages/addressManager/index?orderId=${-100}&purchaser_id=${obj.purchaser_id}`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 是否显示按钮
|
||||||
|
const showBtn = useMemo(() => {
|
||||||
|
if ((infoObj.status === 8 || infoObj.status === 9 || infoObj.status === 4 || infoObj.status === 5 || infoObj.status === 11 || infoObj.status === 3)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}, [infoObj])
|
||||||
|
|
||||||
|
const showWhatFont = useMemo(() => {
|
||||||
|
if (infoObj.shipment_mode === 1) {
|
||||||
|
return '自提商品'
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return '物流'
|
||||||
|
}
|
||||||
|
}, [infoObj])
|
||||||
|
|
||||||
|
const onChange = (e) => {
|
||||||
|
setInfoObj(val => ({ ...val, remark: e }))
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setInfoObj(infoObj)
|
||||||
|
}, [infoObj])
|
||||||
|
|
||||||
|
const showRemarkFont = useMemo(() => {
|
||||||
|
if (infoObj.status === 10 || infoObj.status == 0 || infoObj.status == 1 || infoObj.status == 2 || infoObj.status == 7) {
|
||||||
|
return `${'填写/修改备注'} >`
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
}, [infoObj])
|
||||||
|
|
||||||
|
// 待接单、配布中、已配布状态时,叫预估金额,其他状态叫合计金额。
|
||||||
|
const payFont = useMemo(() => {
|
||||||
|
if (infoObj?.status === 0 || infoObj?.status === 1 || infoObj?.status === 2) {
|
||||||
|
return '预估金额'
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return '合计金额'
|
||||||
|
}
|
||||||
|
}, [infoObj])
|
||||||
|
|
||||||
|
// 复制功能
|
||||||
|
const clipboardData = () => {
|
||||||
|
Taro.setClipboardData({
|
||||||
|
data: infoObj?.order_no || '',
|
||||||
|
success(res) {
|
||||||
|
Taro.showToast({
|
||||||
|
icon: 'none',
|
||||||
|
title: '复制成功',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否整数类型
|
||||||
|
function isInteger(obj) {
|
||||||
|
return (obj | 0) === obj
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除面料的ids数组
|
||||||
|
const [deleteProductIds, setdeleteProductIds] = useState<any[]>([])
|
||||||
|
|
||||||
|
// 删除商品弹窗
|
||||||
|
const handCancelToast = (item) => {
|
||||||
|
// const deletIds: any[] = []
|
||||||
|
for (let i = 0; i < goodList?.length; i++) {
|
||||||
|
if (goodList.length === 1 && goodList[i].product_colors?.length === 1) {
|
||||||
|
return Taro.showToast({
|
||||||
|
icon: 'none',
|
||||||
|
title: '至少保留一个面料',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Taro.showModal({
|
||||||
|
content: '删除所选商品?',
|
||||||
|
async success(res) {
|
||||||
|
if (res.confirm) {
|
||||||
|
// 删除某项商品
|
||||||
|
goodList.forEach((edg) => {
|
||||||
|
edg?.product_colors.map((it, index) => {
|
||||||
|
if (item.id == it.id) {
|
||||||
|
deleteProductIds.push(item.id)
|
||||||
|
edg?.product_colors.splice(index, 1)
|
||||||
|
}
|
||||||
|
return it
|
||||||
|
})
|
||||||
|
return edg
|
||||||
|
})
|
||||||
|
// 子商品没有了大商品也删除
|
||||||
|
goodList.forEach((edg, index) => {
|
||||||
|
if (!edg?.product_colors.length) {
|
||||||
|
goodList.splice(index, 1)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
setgoodList([...goodList])
|
||||||
|
setdeleteProductIds([...deleteProductIds])
|
||||||
|
}
|
||||||
|
else if (res.cancel) {
|
||||||
|
console.log('用户点击取消')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输入框减
|
||||||
|
const clickReduce = useCallback((item) => {
|
||||||
|
goodList.forEach((edg) => {
|
||||||
|
edg?.product_colors.map((it) => {
|
||||||
|
if (item.id == it.id) {
|
||||||
|
if (infoObj?.sale_mode == 0 && item.nums == 1) {
|
||||||
|
return handCancelToast(item)
|
||||||
|
}
|
||||||
|
if (infoObj?.sale_mode == 1 && item.nums == 0.3) {
|
||||||
|
return handCancelToast(item)
|
||||||
|
}
|
||||||
|
if (infoObj?.sale_mode == 2 && item.nums == 3) {
|
||||||
|
return handCancelToast(item)
|
||||||
|
}
|
||||||
|
if (isInteger(item.nums)) {
|
||||||
|
it.nums--
|
||||||
|
handEditMoney(2)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
it.nums = Math.trunc(item.nums)
|
||||||
|
handEditMoney(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return it
|
||||||
|
})
|
||||||
|
return edg
|
||||||
|
})
|
||||||
|
setgoodList([...goodList])
|
||||||
|
// if ((infoObj?.sale_mode == 0 && item.nums > 1) || (infoObj?.sale_mode == 1 && item.nums > 0.3) || (infoObj?.sale_mode == 2 && item.nums > 3)) {
|
||||||
|
// handEditMoney(2)
|
||||||
|
// }
|
||||||
|
}, [goodList])
|
||||||
|
|
||||||
|
// 输入框加
|
||||||
|
const handPlus = useCallback((item) => {
|
||||||
|
goodList.forEach((edg) => {
|
||||||
|
edg?.product_colors.map((it) => {
|
||||||
|
if (item.id == it.id) {
|
||||||
|
if (isInteger(item.nums)) {
|
||||||
|
item.nums++
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
item.nums++
|
||||||
|
item.nums = Math.trunc(item.nums)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return it
|
||||||
|
})
|
||||||
|
return edg
|
||||||
|
})
|
||||||
|
setgoodList([...goodList])
|
||||||
|
handEditMoney(2)
|
||||||
|
}, [goodList])
|
||||||
|
|
||||||
|
// 输入框监听
|
||||||
|
const onBlur = useCallback((e, item) => {
|
||||||
|
goodList.forEach((edg) => {
|
||||||
|
edg?.product_colors.map((it) => {
|
||||||
|
if (it.id == item.id) {
|
||||||
|
if (infoObj.sale_mode == 0 && (e.detail.value == '' || Number(e.detail.value) == 0)) {
|
||||||
|
it.nums = 1
|
||||||
|
}
|
||||||
|
else if (infoObj.sale_mode == 0 && (e.detail.value != '' || Number(e.detail.value) > 0)) {
|
||||||
|
it.nums = Number(e.detail.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (infoObj.sale_mode == 1 && Number(e.detail.value) < 0.3) {
|
||||||
|
it.nums = 0.3
|
||||||
|
}
|
||||||
|
else if (infoObj.sale_mode == 1 && Number(e.detail.value) >= 0.3) {
|
||||||
|
if (isInteger(Number(e.detail.value))) {
|
||||||
|
it.nums = Number(e.detail.value)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
it.nums = Number(e.detail.value).toFixed(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (infoObj.sale_mode == 2 && Number(e.detail.value) < 3) {
|
||||||
|
it.nums = 3
|
||||||
|
}
|
||||||
|
else if (infoObj.sale_mode == 2 && Number(e.detail.value) >= 3) {
|
||||||
|
if (isInteger(Number(e.detail.value))) {
|
||||||
|
it.nums = Number(e.detail.value)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
it.nums = Number(e.detail.value).toFixed(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return it
|
||||||
|
})
|
||||||
|
return edg
|
||||||
|
})
|
||||||
|
setgoodList([...goodList])
|
||||||
|
handEditMoney(2)
|
||||||
|
}, [goodList])
|
||||||
|
|
||||||
|
// 添加面料
|
||||||
|
const navTo = () => {
|
||||||
|
const arr = JSON.stringify(goodList).replace(/%/g, '%25')
|
||||||
|
Taro.navigateTo({
|
||||||
|
url: `/pages/addFabric/index?goodList=${arr}&purchaser_id=${infoObj?.purchaser_id}&sale_mode=${infoObj?.sale_mode}`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const { fetchData: submitFetch } = MpsaleOrdersubmit()
|
||||||
|
// 提交修改
|
||||||
|
const handSubmit = () => {
|
||||||
|
if (infoObj?.address_id == 0 || !infoObj?.address_id) {
|
||||||
|
return Taro.showToast(
|
||||||
|
{
|
||||||
|
title: '请选择收货地址',
|
||||||
|
icon: 'error',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
const quertArr: any[] = []
|
||||||
|
|
||||||
|
goodList.forEach((item) => {
|
||||||
|
item.product_colors?.forEach((edc) => {
|
||||||
|
quertArr.push({
|
||||||
|
length: infoObj?.sale_mode != 0 ? edc.nums * 100 : 0,
|
||||||
|
product_color_id: edc.id,
|
||||||
|
product_id: item.id,
|
||||||
|
roll: infoObj?.sale_mode == 0 ? edc.nums : 0,
|
||||||
|
// sale_order_detail_id: edc.sale_order_detail_id ? edc.sale_order_detail_id : 0,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
const query = {
|
||||||
|
address_id: infoObj?.address_id,
|
||||||
|
commodity_list: quertArr,
|
||||||
|
delete_detail_list: filterArr(deleteProductIds),
|
||||||
|
remar: infoObj?.remark,
|
||||||
|
sale_order_id: infoObj?.id,
|
||||||
|
shipment_mode: receivingStatus,
|
||||||
|
}
|
||||||
|
console.log(query, 'quertArrquertArr')
|
||||||
|
Taro.showModal({
|
||||||
|
content: '是否确认提交修改',
|
||||||
|
async success(res) {
|
||||||
|
if (res.confirm) {
|
||||||
|
Taro.showLoading({
|
||||||
|
title: '加载中...',
|
||||||
|
})
|
||||||
|
const res = await submitFetch(query)
|
||||||
|
if (res.data) {
|
||||||
|
Taro.hideLoading()
|
||||||
|
Taro.redirectTo({
|
||||||
|
url: `/pages/orderDetails/index?id=${res.data.id}`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Taro.hideLoading()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (res.cancel) {
|
||||||
|
console.log('用户点击取消')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数组去重
|
||||||
|
const filterArr = (arr) => {
|
||||||
|
const newArr: any[] = []
|
||||||
|
// 控制外循环
|
||||||
|
for (let i = 0; i < arr.length; i++) {
|
||||||
|
for (let j = i + 1; j < arr.length; j++) {
|
||||||
|
if (arr[i] == arr[j]) {
|
||||||
|
arr[j] = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 去除值为0的
|
||||||
|
if (arr[i] == 0) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 放入新的数组
|
||||||
|
newArr.push(arr[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newArr
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算预估金额
|
||||||
|
const totalMoney = useMemo(() => {
|
||||||
|
const arr: any = []
|
||||||
|
goodList.forEach((item) => {
|
||||||
|
item.product_colors.forEach((it) => {
|
||||||
|
arr.push(Number(it.total_sale_price))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
const hate = sum(arr)
|
||||||
|
return hate
|
||||||
|
}, [goodList])
|
||||||
|
|
||||||
|
// 计算总面料
|
||||||
|
const totalProduct = useMemo(() => {
|
||||||
|
const arr: any = []
|
||||||
|
goodList.forEach((item) => {
|
||||||
|
arr.push(item)
|
||||||
|
})
|
||||||
|
return arr.length
|
||||||
|
}, [goodList])
|
||||||
|
|
||||||
|
// 计算总颜色
|
||||||
|
const totalColors = useMemo(() => {
|
||||||
|
const arr: any = []
|
||||||
|
goodList.forEach((item) => {
|
||||||
|
item.product_colors.forEach((it) => {
|
||||||
|
arr.push(it)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return arr.length
|
||||||
|
}, [goodList])
|
||||||
|
|
||||||
|
// 计算总颜色数量
|
||||||
|
const totalColorsNums = useMemo(() => {
|
||||||
|
const arr: any = []
|
||||||
|
goodList.forEach((item) => {
|
||||||
|
item.product_colors.forEach((it) => {
|
||||||
|
arr.push(Number(it.nums))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
const hate = sum(arr)
|
||||||
|
return hate
|
||||||
|
}, [goodList])
|
||||||
|
|
||||||
|
function sum(arr) {
|
||||||
|
let s = 0
|
||||||
|
for (let i = arr.length - 1; i >= 0; i--) {
|
||||||
|
s += arr[i]
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View className={styles.mainBox}>
|
||||||
|
<AddressDetailBox
|
||||||
|
showBtn={showBtn}
|
||||||
|
showWhatFont={showWhatFont}
|
||||||
|
navSelect={obj => handSelect(obj)}
|
||||||
|
obj={infoObj}
|
||||||
|
receivingStatus={receivingStatus}
|
||||||
|
onReceivingStatus={(e, value) => onReceivingStatus(e, value)}
|
||||||
|
></AddressDetailBox>
|
||||||
|
<DefaultBox
|
||||||
|
showMode
|
||||||
|
title="客户信息"
|
||||||
|
modeName={infoObj.sale_mode_name}
|
||||||
|
>
|
||||||
|
<View className={styles.pussBox}>
|
||||||
|
<View className={styles.pussName}>{infoObj.purchaser_name}</View>
|
||||||
|
<View className={styles.pussPhone}>{infoObj.purchaser_phone}</View>
|
||||||
|
</View>
|
||||||
|
</DefaultBox>
|
||||||
|
<View className={styles.addBtn} onClick={() => navTo()}>添加面料</View>
|
||||||
|
<View className={styles.total}> {totalProduct} 种面料,{totalColors} 个颜色,共 {totalColorsNums} {infoObj.sale_mode === 0 ? '条' : 'm'}</View>
|
||||||
|
<View className={styles.productBox}>
|
||||||
|
<GoodsItem
|
||||||
|
list={goodList}
|
||||||
|
obj={infoObj}
|
||||||
|
clickReduce={it => clickReduce(it)}
|
||||||
|
handPlus={it => handPlus(it)}
|
||||||
|
onBlur={(e, it) => onBlur(e, it)}
|
||||||
|
modeFont={infoObj?.sale_mode}
|
||||||
|
></GoodsItem>
|
||||||
|
<View className={styles.flexMoney}>
|
||||||
|
<View className={styles.flexTotalBox}>
|
||||||
|
<View className={styles.totalFont}>{payFont}</View>
|
||||||
|
</View>
|
||||||
|
<View className={styles.shoudPay}>¥{formatPriceDiv(totalMoney)}</View>
|
||||||
|
</View>
|
||||||
|
{/* <View className={styles.flexMoney}>
|
||||||
|
<View className={styles.flexTotalBox}>
|
||||||
|
<View className={styles.totalFont}>实付金额</View>
|
||||||
|
</View>
|
||||||
|
<View className={styles.shoudPay}>¥{formatPriceDiv(infoObj.actual_amount)}</View>
|
||||||
|
</View> */}
|
||||||
|
{
|
||||||
|
infoObj?.wait_pay_amount < 0 && <View className={styles.flexMoney}>
|
||||||
|
<View className={styles.flexTotalBox}>
|
||||||
|
<View className={styles.totalFont}>{infoObj?.wait_pay_amount?.toString().indexOf('-') !== -1 ? '退款金额' : '待付金额'}</View>
|
||||||
|
</View>
|
||||||
|
<View className={styles.shoudPay}>¥{formatPriceDiv(infoObj.wait_pay_amount)}</View>
|
||||||
|
</View>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
infoObj?.wait_pay_amount > 0 && <View className={styles.flexMoney}>
|
||||||
|
<View className={styles.flexTotalBox}>
|
||||||
|
<View className={styles.totalFont}>{infoObj?.wait_pay_amount?.toString().indexOf('-') !== -1 ? '退款金额' : '待付金额'}</View>
|
||||||
|
</View>
|
||||||
|
<View className={styles.shoudPay}>¥{formatPriceDiv(infoObj.wait_pay_amount)}</View>
|
||||||
|
</View>
|
||||||
|
}
|
||||||
|
|
||||||
|
</View>
|
||||||
|
<DefaultBox title="订单信息">
|
||||||
|
{
|
||||||
|
orderMsg.map((item, index) => {
|
||||||
|
return (
|
||||||
|
<View className={styles.detailBox} key={index}>
|
||||||
|
<View className={styles.detailFont}>
|
||||||
|
{item.leftTitle}
|
||||||
|
</View>
|
||||||
|
<View className={styles.detailRightFlex}>
|
||||||
|
<View className={styles.detailRight}>{item.rightTitle}</View>
|
||||||
|
{item.showBtn && <View className={styles.detailBtn} onClick={() => clipboardData()}>复制</View>}
|
||||||
|
</View>
|
||||||
|
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
</DefaultBox>
|
||||||
|
<DefaultBox title="备注信息" showMode modeName={showRemarkFont} clickNode={() => setShowDesc(showRemarkFont != '')}>
|
||||||
|
<View className={styles.remarkFont}>{infoObj.remark === '' ? '暂无' : infoObj.remark}</View>
|
||||||
|
</DefaultBox>
|
||||||
|
|
||||||
|
<Popup show={showDesc} title="填写/编辑备注" showTitle onClose={() => setShowDesc(false)}>
|
||||||
|
<View style={{ margin: '24rpx' }}>
|
||||||
|
<Remark
|
||||||
|
// onSave={(e) => getRemark(e)}
|
||||||
|
onChange={e => onChange(e)}
|
||||||
|
defaultValue={infoObj.remark}
|
||||||
|
/>
|
||||||
|
<View className={styles.order_save_address} onClick={() => getRemark()}>保存</View>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
</Popup>
|
||||||
|
<View className={styles.safeBottom}></View>
|
||||||
|
<View className={styles.bottomBox}>
|
||||||
|
<View className={styles.bottomBtn} onClick={() => handSubmit()}>提交修改</View>
|
||||||
|
</View>
|
||||||
|
</View >
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default OrderDetails
|
||||||
Loading…
x
Reference in New Issue
Block a user