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

169 lines
5.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 { 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] = useOrderStore(s => [s.generatePayment])
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))
}
return (
<>
<Row gutter={16}>
<Col span={6} offset={6}>
<Form
labelCol={{
span: 4,
}}
layout={'horizontal'}
form={generateForm}
initialValues={{
notifyEmail: getPrimaryEmail(),
description: 'Tracking Code:\r\nTravel Advisor: \r\nContent:\r\n',
orderNumber: 'lyj202411141004001',
langauge: 'US',
orderType: '227001',
currency: 'USD',
amount: 1,
userId: loginUser.userId
}}>
<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