You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Global-sales/src/views/accounts/GeneratePayment.jsx

198 lines
6.5 KiB
JavaScript

import { Radio, Row, Col, Tooltip, Flex, Form, Input, Button, InputNumber, Select, message } from 'antd'
import { useState, useEffect } from 'react'
import HtmlPreview from './HtmlPreview'
import useAuthStore from '@/stores/AuthStore'
import useConversationStore from '@/stores/ConversationStore'
import { useOrderStore } from '@/stores/OrderStore'
import { InfoCircleOutlined } from '@ant-design/icons'
function GeneratePayment() {
const [messageApi, contextHolder] = message.useMessage()
const [generateForm] = Form.useForm()
const [getPrimaryEmail, loginUser] = useAuthStore((s) => [s.getPrimaryEmail, s.loginUser])
const [generatePayment, fetchOrderDetail] = useOrderStore((s) => [s.generatePayment, s.fetchOrderDetail])
const currentOrder = useConversationStore((state) => state.currentConversation?.coli_sn || '')
const [isHtmlLoading, setHtmlLoading] = useState(false)
const [generatedObject, setGeneratedObject] = useState('')
const handleGenerate = () => {
setHtmlLoading(true)
generatePayment(generateForm.getFieldsValue())
.then((result) => {
setGeneratedObject(result)
})
.catch((ex) => console.info(ex))
.finally(() => setHtmlLoading(false))
}
useEffect(() => {
if (currentOrder) {
fetchOrderDetail(currentOrder)
.then((result) => {
const orderNumber = result.orderDetail.order_no
const travelAdvisor = loginUser.accountList.length > 0 ? loginUser.accountList[0].OPI_NameEN : ''
generateForm.setFieldsValue({
notifyEmail: getPrimaryEmail(),
orderNumber: orderNumber,
description: 'Tracking Code: ' + orderNumber + '\r\nTravel Advisor: ' + travelAdvisor + '\r\nContent: \r\n',
langauge: 'US',
orderType: '227001',
currency: 'USD',
amount: 1,
userId: loginUser.userId,
})
})
// .finally(() => setLoading(false))
// .catch(() => {
// })
} else {
generateForm.setFieldsValue({
notifyEmail: getPrimaryEmail(),
description: 'Tracking Code: \r\nTravel Advisor: \r\nContent: \r\n',
langauge: 'US',
orderType: '227001',
currency: 'USD',
amount: 1,
userId: loginUser.userId,
})
}
}, [currentOrder])
return (
<>
<Row gutter={16}>
<Col span={6} offset={6}>
<Form
labelCol={{
span: 4,
}}
layout={'horizontal'}
form={generateForm}>
<Form.Item name='userId' className='hidden'>
<Input />
</Form.Item>
<Form.Item
label='订单类型'
name='orderType'
rules={[
{
required: true,
message: '订单类型必选',
},
]}>
<Radio.Group>
<Radio.Button value='227001'>线路订单</Radio.Button>
<Radio.Button value='227002'>商务订单</Radio.Button>
</Radio.Group>
</Form.Item>
<Form.Item
label='语种'
name='langauge'
rules={[
{
required: true,
message: '语种必选',
},
]}>
<Select
options={[
{ value: 'US', label: '英语' },
{ value: 'de_de', label: '德语' },
{ value: 'fr_fr', label: '法语' },
{ value: 'es_es', label: '西语' },
{ value: 'ja_JP', label: '日语' },
{ value: 'ru_ru', label: '俄语' },
{ value: 'it_it', label: '意大利语' },
]}
/>
</Form.Item>
<Form.Item
label='订单号'
name='orderNumber'
rules={[
{
required: true,
message: '订单号必填',
},
]}>
<Input />
</Form.Item>
<Form.Item
label='金额'
name='amount'
rules={[
{
required: true,
message: '金额填',
},
]}>
<InputNumber
addonBefore={
<Form.Item name='currency' noStyle>
<Select
style={{
width: 90,
}}
options={[
{ value: 'USD', label: '美元' },
{ value: 'CNY', label: '人民币' },
{ value: 'EUR', label: '欧元' },
{ value: 'JPY', label: '日元' },
{ value: 'AUD', label: '澳元' },
{ value: 'CAD', label: '加元' },
{ value: 'HKD', label: '港币' },
]}></Select>
</Form.Item>
}
min={1}
className='w-full'
/>
</Form.Item>
<Form.Item label='描述' name='description'>
<Input.TextArea rows={4} />
</Form.Item>
<Form.Item label='通知邮箱' name='notifyEmail'>
<Input />
</Form.Item>
</Form>
<Flex gap='middle' justify='center'>
<Button
type='primary'
loading={isHtmlLoading}
onClick={() => {
handleGenerate()
}}>
生成
</Button>
</Flex>
</Col>
<Col span={6}>
<Flex gap='small' vertical>
<Flex gap='small'>
<span>支付按钮</span>
<Tooltip placement='topLeft' title='发送邮件使用'>
<InfoCircleOutlined />
</Tooltip>
</Flex>
<HtmlPreview value={generatedObject.payhtml} loading={isHtmlLoading} onCopied={() => messageApi.success('已复制')} />
<Flex gap='small'>
<span>支付链接</span>
<Tooltip placement='topLeft' title='发送 WhatsApp 使用'>
<InfoCircleOutlined />
</Tooltip>
</Flex>
<Input readOnly value={generatedObject.paylink} />
</Flex>
</Col>
{contextHolder}
</Row>
</>
)
}
export default GeneratePayment