接口调试
This commit is contained in:
parent
36fe597d86
commit
22c8c1b920
|
|
@ -229,8 +229,18 @@ export interface LoginResult {
|
||||||
memberId?: string
|
memberId?: string
|
||||||
/** 会员编号 (后端主会员业务编号,会员权益页展示及发票接口路径参数均使用此值) */
|
/** 会员编号 (后端主会员业务编号,会员权益页展示及发票接口路径参数均使用此值) */
|
||||||
memberNo?: string
|
memberNo?: string
|
||||||
|
/** 注册时间 (后端返回的会员注册时间,会员权益页展示) */
|
||||||
|
registerTime?: string
|
||||||
|
/** 会员过期时间 (后端返回的会员过期时间,会员权益页展示) */
|
||||||
|
expireTime?: string
|
||||||
|
/** 发票抬头 (后端返回的会员发票抬头,会员权益页展示) */
|
||||||
|
invoiceTitle?: string
|
||||||
|
/** 发票税号 (后端返回的会员发票税号,会员权益页展示) */
|
||||||
|
invoiceTaxNo?: string
|
||||||
/** 账号类型 */
|
/** 账号类型 */
|
||||||
accountType?: AccountType
|
accountType?: AccountType
|
||||||
|
/** 单位/组类型 (单位会员专用,用于在会员权益页/支付页区分事业单位与企业/其他) */
|
||||||
|
unitOrOrgType?: UnitOrOrgType
|
||||||
/** 用户昵称/单位名称 */
|
/** 用户昵称/单位名称 */
|
||||||
nickname?: string
|
nickname?: string
|
||||||
/** 是否已充值/开通会员 (后端主字段,用于登录后跳转判断) */
|
/** 是否已充值/开通会员 (后端主字段,用于登录后跳转判断) */
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import { useNavigate } from 'react-router-dom'
|
||||||
import { Form, Input, Button, message, Card } from 'antd'
|
import { Form, Input, Button, message, Card } from 'antd'
|
||||||
import { ArrowLeftOutlined, BankOutlined, LockOutlined } from '@ant-design/icons'
|
import { ArrowLeftOutlined, BankOutlined, LockOutlined } from '@ant-design/icons'
|
||||||
import { loginCompany } from '../api/auth'
|
import { loginCompany } from '../api/auth'
|
||||||
|
import { UnitOrOrgType } from '../api/auth'
|
||||||
import { setToken, setUserId, setMemberNo } from '../utils/request'
|
import { setToken, setUserId, setMemberNo } from '../utils/request'
|
||||||
import './CompanyLogin.css'
|
import './CompanyLogin.css'
|
||||||
|
|
||||||
|
|
@ -39,6 +40,13 @@ const CompanyLogin = () => {
|
||||||
setMemberNo(memberNo)
|
setMemberNo(memberNo)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据后端返回的 unitOrOrgType 区分价格:
|
||||||
|
// - PUBLIC_INSTITUTION (事业单位) -> 1000 元/年
|
||||||
|
// - ENTERPRISE / OTHER (企业及其他机构) -> 2000 元/年
|
||||||
|
const unitOrOrgType = result?.unitOrOrgType as UnitOrOrgType | undefined
|
||||||
|
const amount =
|
||||||
|
unitOrOrgType === UnitOrOrgType.PUBLIC_INSTITUTION ? 1000.0 : 2000.0
|
||||||
|
|
||||||
// 根据后端返回的 isVip 判断会员状态
|
// 根据后端返回的 isVip 判断会员状态
|
||||||
// - isVip = true: 已充值会员 -> 会员权益页(/member-valid)
|
// - isVip = true: 已充值会员 -> 会员权益页(/member-valid)
|
||||||
// - isVip = false/未返回: 未充值 -> 支付页(/payment)
|
// - isVip = false/未返回: 未充值 -> 支付页(/payment)
|
||||||
|
|
@ -48,8 +56,13 @@ const CompanyLogin = () => {
|
||||||
memberNo,
|
memberNo,
|
||||||
memberId: (result?.memberId as string) || '',
|
memberId: (result?.memberId as string) || '',
|
||||||
memberType: '单位会员',
|
memberType: '单位会员',
|
||||||
amount: 999.0,
|
unitOrOrgType,
|
||||||
|
amount,
|
||||||
validPeriod: '1年',
|
validPeriod: '1年',
|
||||||
|
registerTime: (result?.registerTime as string) || '',
|
||||||
|
expireTime: (result?.expireTime as string) || '',
|
||||||
|
invoiceTitle: (result?.invoiceTitle as string) || '',
|
||||||
|
invoiceTaxNo: (result?.invoiceTaxNo as string) || '',
|
||||||
}
|
}
|
||||||
|
|
||||||
message.success('登录成功!')
|
message.success('登录成功!')
|
||||||
|
|
|
||||||
|
|
@ -104,14 +104,7 @@ const CompanyRegister = () => {
|
||||||
<Form.Item
|
<Form.Item
|
||||||
label="联系人姓名"
|
label="联系人姓名"
|
||||||
name="name"
|
name="name"
|
||||||
rules={[
|
rules={[{ required: true, message: '请输入联系人姓名' }]}
|
||||||
{ required: true, message: '请输入联系人姓名' },
|
|
||||||
{ min: 2, max: 20, message: '姓名长度应为 2-20 个字符' },
|
|
||||||
{
|
|
||||||
pattern: /^[\u4e00-\u9fa5A-Za-z·•\s]+$/,
|
|
||||||
message: '姓名仅支持中英文及·',
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
>
|
||||||
<Input placeholder="请输入联系人姓名" maxLength={20} />
|
<Input placeholder="请输入联系人姓名" maxLength={20} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
@ -166,14 +159,7 @@ const CompanyRegister = () => {
|
||||||
<Form.Item
|
<Form.Item
|
||||||
label="法人代表姓名"
|
label="法人代表姓名"
|
||||||
name="legalPersonName"
|
name="legalPersonName"
|
||||||
rules={[
|
rules={[{ required: true, message: '请输入法人代表姓名' }]}
|
||||||
{ required: true, message: '请输入法人代表姓名' },
|
|
||||||
{ min: 2, max: 20, message: '姓名长度应为 2-20 个字符' },
|
|
||||||
{
|
|
||||||
pattern: /^[\u4e00-\u9fa5A-Za-z·•\s]+$/,
|
|
||||||
message: '姓名仅支持中英文及·',
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
>
|
||||||
<Input placeholder="请输入法人代表姓名" maxLength={20} />
|
<Input placeholder="请输入法人代表姓名" maxLength={20} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
@ -204,17 +190,7 @@ const CompanyRegister = () => {
|
||||||
|
|
||||||
{/* 推荐人信息 */}
|
{/* 推荐人信息 */}
|
||||||
<Card title="推荐人信息" className="form-card" bordered={false}>
|
<Card title="推荐人信息" className="form-card" bordered={false}>
|
||||||
<Form.Item
|
<Form.Item label="推荐人姓名" name="referrerName">
|
||||||
label="推荐人姓名"
|
|
||||||
name="referrerName"
|
|
||||||
rules={[
|
|
||||||
{ min: 2, max: 20, message: '姓名长度应为 2-20 个字符' },
|
|
||||||
{
|
|
||||||
pattern: /^[\u4e00-\u9fa5A-Za-z·•\s]+$/,
|
|
||||||
message: '姓名仅支持中英文及·',
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<Input placeholder="请输入推荐人姓名" maxLength={20} />
|
<Input placeholder="请输入推荐人姓名" maxLength={20} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.header-logo {
|
.header-logo {
|
||||||
width: 120px;
|
width: 80px;
|
||||||
height: 120px;
|
height: 80px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
|
@ -127,8 +127,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-icon {
|
.card-icon {
|
||||||
width: 64px;
|
width: 48px;
|
||||||
height: 64px;
|
height: 48px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
@ -137,6 +137,11 @@
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.card-icon svg {
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
.login-card.personal .card-icon,
|
.login-card.personal .card-icon,
|
||||||
.login-card.company .card-icon,
|
.login-card.company .card-icon,
|
||||||
.login-card.rules .card-icon {
|
.login-card.rules .card-icon {
|
||||||
|
|
@ -263,8 +268,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.header-logo {
|
.header-logo {
|
||||||
width: 100px;
|
width: 64px;
|
||||||
height: 100px;
|
height: 64px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-card {
|
.login-card {
|
||||||
|
|
@ -272,13 +277,13 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-icon {
|
.card-icon {
|
||||||
width: 56px;
|
width: 44px;
|
||||||
height: 56px;
|
height: 44px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-icon svg {
|
.card-icon svg {
|
||||||
width: 48px;
|
width: 28px;
|
||||||
height: 48px;
|
height: 28px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
|
|
@ -292,8 +297,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.header-logo {
|
.header-logo {
|
||||||
width: 140px;
|
width: 96px;
|
||||||
height: 140px;
|
height: 96px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
|
|
@ -305,13 +310,13 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-icon {
|
.card-icon {
|
||||||
width: 72px;
|
width: 56px;
|
||||||
height: 72px;
|
height: 56px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-icon svg {
|
.card-icon svg {
|
||||||
width: 72px;
|
width: 40px;
|
||||||
height: 72px;
|
height: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
|
|
|
||||||
|
|
@ -15,23 +15,10 @@ const MemberValid = () => {
|
||||||
memberNo = getMemberNo(),
|
memberNo = getMemberNo(),
|
||||||
memberId = '',
|
memberId = '',
|
||||||
memberType = '个人会员',
|
memberType = '个人会员',
|
||||||
amount = 99.00,
|
amount = 150.00,
|
||||||
validPeriod = '1年'
|
validPeriod = '5年',
|
||||||
} = memberData
|
} = memberData
|
||||||
|
|
||||||
// 计算有效期
|
|
||||||
const now = new Date()
|
|
||||||
const expireDate = new Date(now)
|
|
||||||
expireDate.setFullYear(expireDate.getFullYear() + 1)
|
|
||||||
|
|
||||||
const formatDate = (date: Date) => {
|
|
||||||
return date.toLocaleDateString('zh-CN', {
|
|
||||||
year: 'numeric',
|
|
||||||
month: '2-digit',
|
|
||||||
day: '2-digit'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleBack = () => {
|
const handleBack = () => {
|
||||||
navigate('/')
|
navigate('/')
|
||||||
}
|
}
|
||||||
|
|
@ -93,14 +80,6 @@ const MemberValid = () => {
|
||||||
<span className="detail-label">有效期限</span>
|
<span className="detail-label">有效期限</span>
|
||||||
<span className="detail-value">{validPeriod}</span>
|
<span className="detail-value">{validPeriod}</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="detail-item">
|
|
||||||
<span className="detail-label">生效日期</span>
|
|
||||||
<span className="detail-value">{formatDate(now)}</span>
|
|
||||||
</div>
|
|
||||||
<div className="detail-item">
|
|
||||||
<span className="detail-label">到期日期</span>
|
|
||||||
<span className="detail-value">{formatDate(expireDate)}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,9 @@ import {
|
||||||
import './Payment.css'
|
import './Payment.css'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 测试阶段调起支付宝用的金额(元)
|
* 测试阶段调起支付宝的金额(元)
|
||||||
* TODO: 上线前改回 orderInfo.amount
|
* 页面展示使用 orderInfo.amount(真实价格),调接口仅用 PAY_AMOUNT 调起验证
|
||||||
|
* TODO: 上线前将接口金额改回 orderInfo.amount
|
||||||
*/
|
*/
|
||||||
const PAY_AMOUNT = 0.01
|
const PAY_AMOUNT = 0.01
|
||||||
|
|
||||||
|
|
@ -42,9 +43,9 @@ const Payment = () => {
|
||||||
// 订单信息
|
// 订单信息
|
||||||
const orderInfo = {
|
const orderInfo = {
|
||||||
memberId: stateData.memberId || '',
|
memberId: stateData.memberId || '',
|
||||||
memberType: stateData.memberType || '普通会员',
|
memberType: stateData.memberType || '个人会员',
|
||||||
amount: stateData.amount || 99.0,
|
amount: stateData.amount || 150.0,
|
||||||
validPeriod: stateData.validPeriod || '1年',
|
validPeriod: stateData.validPeriod || '5年',
|
||||||
isRenew: stateData.isRenew || false, // 是否是续费
|
isRenew: stateData.isRenew || false, // 是否是续费
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,7 +144,7 @@ const Payment = () => {
|
||||||
</div>
|
</div>
|
||||||
<div className="order-item amount-item">
|
<div className="order-item amount-item">
|
||||||
<span className="order-label">{orderInfo.isRenew ? '续费金额' : '应付金额'}</span>
|
<span className="order-label">{orderInfo.isRenew ? '续费金额' : '应付金额'}</span>
|
||||||
<span className="order-value amount-value">¥{PAY_AMOUNT.toFixed(2)}</span>
|
<span className="order-value amount-value">¥{orderInfo.amount.toFixed(2)}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
@ -177,7 +178,7 @@ const Payment = () => {
|
||||||
block
|
block
|
||||||
size="large"
|
size="large"
|
||||||
>
|
>
|
||||||
支付宝支付 ¥{PAY_AMOUNT.toFixed(2)}
|
支付宝支付 ¥{orderInfo.amount.toFixed(2)}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<p className="payment-tips">
|
<p className="payment-tips">
|
||||||
|
|
|
||||||
|
|
@ -47,8 +47,12 @@ const PersonalLogin = () => {
|
||||||
memberNo,
|
memberNo,
|
||||||
memberId: (result?.memberId as string) || '',
|
memberId: (result?.memberId as string) || '',
|
||||||
memberType: '个人会员',
|
memberType: '个人会员',
|
||||||
amount: 99.0,
|
amount: 150.0,
|
||||||
validPeriod: '1年',
|
validPeriod: '5年',
|
||||||
|
registerTime: (result?.registerTime as string) || '',
|
||||||
|
expireTime: (result?.expireTime as string) || '',
|
||||||
|
invoiceTitle: (result?.invoiceTitle as string) || '',
|
||||||
|
invoiceTaxNo: (result?.invoiceTaxNo as string) || '',
|
||||||
}
|
}
|
||||||
|
|
||||||
message.success('登录成功!')
|
message.success('登录成功!')
|
||||||
|
|
|
||||||
|
|
@ -159,14 +159,7 @@ const PersonalRegister = () => {
|
||||||
<Form.Item
|
<Form.Item
|
||||||
label="姓名"
|
label="姓名"
|
||||||
name="name"
|
name="name"
|
||||||
rules={[
|
rules={[{ required: true, message: '请输入姓名' }]}
|
||||||
{ required: true, message: '请输入姓名' },
|
|
||||||
{ min: 2, max: 20, message: '姓名长度应为 2-20 个字符' },
|
|
||||||
{
|
|
||||||
pattern: /^[\u4e00-\u9fa5A-Za-z·•\s]+$/,
|
|
||||||
message: '姓名仅支持中英文及·',
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
>
|
||||||
<Input placeholder="请输入姓名" maxLength={20} />
|
<Input placeholder="请输入姓名" maxLength={20} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue