205 lines
8.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

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

import { Image, ScrollView, Text, View } from '@tarojs/components'
import Taro from '@tarojs/taro'
import { memo, useEffect, useRef, useState } from 'react'
import classnames from 'classnames'
import styles from './index.module.scss'
import Popup from '@/components/popup'
import { alert } from '@/common/common'
import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatRemoveHashTag, formatWeightDiv } from '@/common/fotmat'
import useCheckAuthorize from '@/use/useCheckAuthorize'
import { GetPayCode } from '@/api/onlinePay'
import LoadingCard from '@/components/loadingCard'
import { PAY_H5_CODE_URL } from '@/common/constant'
interface Param {
show?: true | false
onClose?: () => void
company?: string
qrcode?: string
orderInfo?: any
}
interface ListParam {
product_code: string
product_name: string
product_color_code: string
product_color_name: string
num: string
weight: string
length: string
sale_price: string
total_price: string
weight_error: string
}
const ScanPay = ({ show = true, onClose, company, orderInfo }: Param) => {
const [detail, setDetail] = useState<any>()
// 收货地址
const address = (addressInfo) => {
if (addressInfo?.shipment_mode == 2) {
return addressInfo?.province_name ? addressInfo.province_name + addressInfo.city_name + addressInfo.district_name + addressInfo.address_detail : ''
}
else {
return addressInfo?.take_goods_address
}
}
// 收件人
const userName = (addressInfo) => {
return addressInfo?.shipment_mode == 2 ? orderInfo.target_user_name : ''
}
// 手机号
const userPhone = (addressInfo) => {
return addressInfo?.shipment_mode == 2 ? orderInfo.target_user_phone : orderInfo.take_goods_phone
}
useEffect(() => {
if (orderInfo) {
const lists: ListParam[] = []
orderInfo.product_list?.forEach((pitem) => {
pitem?.product_colors?.forEach((citem) => {
lists.push({
product_code: formatRemoveHashTag(pitem.code),
product_name: pitem.name,
product_color_code: formatRemoveHashTag(citem.code)!,
product_color_name: citem.name,
num: citem.roll.toString(),
length: (citem.length / 100).toString(),
weight: formatWeightDiv(citem.actual_weight || citem.estimate_weight).toString(),
sale_price: formatPriceDiv(citem.sale_price).toString(),
total_price: formatPriceDiv(citem.total_sale_price || citem.estimate_amount).toString(), // 小计
weight_error: formatWeightDiv(citem.weight_error).toString(),
})
})
})
console.log('md5_key:::', orderInfo.md5_key)
setDetail(() => ({
title: '面料销售电子确认单',
company: orderInfo.company_name, // 后端公司
order_type: orderInfo.sale_mode_name, // 类型:大货
sale_user: orderInfo.sale_user_name, // 业务员
order_created_time: formatDateTime(orderInfo.create_time),
order_no: orderInfo.order_no,
shipment_mode: orderInfo.shipment_mode_name, // 发货方式
target_user_name: userName(orderInfo), // 收件人
target_address: address(orderInfo), // 收货地址
target_description: orderInfo.remark, // 发货备注
pay_account: orderInfo.offline_remittance_information?.transfer_remittance_account, // 专属收款账号
bank_account_name: orderInfo.offline_remittance_information?.account_name, // 账户名称
bank_name: orderInfo.offline_remittance_information?.bank_of_deposit, // 开户银行
pay_type: '', // 支付方式, 可不传
client: orderInfo.purchaser_name, // 客户名称
phone: userPhone(orderInfo), // 收货手机号码
order_total_length: (orderInfo.total_number / 100).toString(), // 订单布匹长度
order_total_price: formatPriceDiv(orderInfo.bill_total_sale_price).toString(), // 订单价格
show_order_total_price: orderInfo.is_display_price,
order_total_num: `${orderInfo.total_number}`,
qrcode: `${PAY_H5_CODE_URL}?key=${orderInfo.md5_key}`, // 跳转链接
order_total_weight: formatWeightDiv(orderInfo.total_weight || orderInfo.total_estimate_weight).toString(), // 订单布匹重量
list: lists,
show_qrcode: true, // 是否显示码单
estimate_amount: formatPriceDiv(orderInfo.estimate_amount).toString(),
show_estimate_amount: orderInfo.estimate_amount > 0 && orderInfo.total_sale_price <= 0 && orderInfo.is_display_price,
total_sale_price: formatPriceDiv(orderInfo.total_sale_price).toString(),
show_total_sale_price: orderInfo.total_sale_price > 0 && orderInfo.is_display_price,
total_weight_error_discount: formatPriceDiv(orderInfo.total_weight_error_discount).toString(),
show_total_weight_error_discount: orderInfo.total_weight_error_discount > 0 && orderInfo.is_display_price,
actual_amount: formatPriceDiv(orderInfo.actual_amount).toString(),
show_actual_amount: orderInfo.actual_amount > 0 && orderInfo.is_display_price,
wait_pay_amount: formatPriceDiv(orderInfo.wait_pay_amount).toString(),
show_wait_pay_amount: orderInfo.wait_pay_amount > 0 && orderInfo.is_display_price,
show_barcode: false, // 条形码
order_total_weight_error: formatWeightDiv(orderInfo.total_weight_error).toString(), // 总空差重量
show_total_price: orderInfo.is_display_price,
show_sale_price: orderInfo.is_display_price,
show_tips: true,
tips: `请核对本单后验收, <b>如发现质量问题请于收到货之日起3天内与平台客服联系协商解决</b>逾期不作处理即表示购方默认对货物无异议;<b>购方确认无任何问题方可裁剪/加工,一经裁剪,缩水等工艺,平台概不负责;</b>
看布购货,请先试缩水,并注意分缸裁布!如需撞色拼接,请先试色牢度。非质量问题,恕不退换,谢谢合作!`,
}))
}
}, [orderInfo, show])
// 获取支付二维码
const [payCodeImage, setPayCodeImage] = useState<string>('')
const fileData = useRef({
filePath: '',
base64: '',
})
const { fetchData, state } = GetPayCode()
const getCore = async() => {
const res = await fetchData(detail)
const base64 = res.data.base64
setPayCodeImage(() => base64)
const time = new Date().valueOf()
const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64) || []
const filePath = `${Taro.env.USER_DATA_PATH}/img${time}.${format}`
fileData.current.filePath = filePath
fileData.current.base64 = bodyData
const save = Taro.getFileSystemManager()
save.writeFile({
filePath: fileData.current.filePath,
data: fileData.current.base64,
encoding: 'base64',
})
}
useEffect(() => {
if (show) { getCore() }
}, [show])
// 检查是否开启保存图片权限
const { check } = useCheckAuthorize({
scope: 'scope.writePhotosAlbum',
msg: '您没授权,无法保存图片',
})
// 保存图片
const saveImage = () => {
alert.loading('正在保存图片')
Taro.saveImageToPhotosAlbum({
filePath: fileData.current.filePath,
success(res) {
alert.success('图片保存成功')
},
fail(err) {
console.log('err::', err)
},
})
}
const saveImageCheck = async() => {
const res = await check()
res && saveImage()
}
// 预览图片
const showImage = () => {
console.log('fileData.current.filePath::', fileData.current.filePath)
Taro.previewImage({
current: fileData.current.filePath, // 当前显示
urls: [fileData.current.filePath], // 需要预览的图片http链接列表
})
}
// 复制功能
return (
<View className={styles.scanPay_main}>
<Popup show={show} showTitle={false} onClose={onClose}>
<View className={styles.scanPay_con}>
<View className={classnames('iconfont icon-a-moreback', styles.miconfont_title)} onClick={onClose}></View>
<View className={styles.title}></View>
<View className={styles.desc}>
1. 2.
</View>
<View className={styles.scanPay_list}>
{(state.loading && <LoadingCard />) || (
<ScrollView scrollY className={styles.scanPay_list}>
<Image mode="widthFix" src={payCodeImage} onClick={showImage} showMenuByLongpress></Image>
</ScrollView>
)}
</View>
<View className={styles.btns} onClick={saveImageCheck}>
</View>
</View>
</Popup>
</View>
)
}
export default memo(ScanPay)