diff --git a/src/api/contractReview/Payment/index.ts b/src/api/contractReview/Payment/index.ts new file mode 100644 index 0000000..23b2853 --- /dev/null +++ b/src/api/contractReview/Payment/index.ts @@ -0,0 +1,37 @@ +import { defHttp } from '@/utils/http/axios'; +import { PaymentRequest, PaymentResponse } from './model'; + +/** + * 创建支付订单 + * @param data 支付请求数据 + * @returns + */ +export function createPayment(data: PaymentRequest) { + return defHttp.postWithMsg({ + url: '/contractreview/payment/create', + data + }); +} + +/** + * 查询支付状态 + * @param orderNo 订单号 + * @returns + */ +export function queryPaymentStatus(orderNo: string) { + return defHttp.get({ + url: `/contractreview/payment/status/${orderNo}` + }); +} + +/** + * 处理支付回调 + * @param data 回调数据 + * @returns + */ +export function handlePaymentCallback(data: any) { + return defHttp.post({ + url: '/contractreview/payment/callback', + data + }); +} \ No newline at end of file diff --git a/src/api/contractReview/Payment/model.ts b/src/api/contractReview/Payment/model.ts new file mode 100644 index 0000000..7307a38 --- /dev/null +++ b/src/api/contractReview/Payment/model.ts @@ -0,0 +1,71 @@ +/** + * 支付请求参数 + */ +export interface PaymentRequest { + /** 套餐类型 */ + planType: string; + /** 套餐名称 */ + planName: string; + /** 时长(月) */ + duration: number; + /** 金额 */ + amount: number; + /** 支付方式 */ + paymentMethod: string; + /** 用户ID */ + userId: number; + /** 客户端IP */ + clientIp: string; + /** 异步通知地址 */ + notifyUrl: string; + /** 同步回调地址 */ + returnUrl: string; +} + +/** + * 支付响应结果 + */ +export interface PaymentResponse { + /** 是否成功 */ + success: boolean; + /** 错误信息 */ + errorMsg?: string; + /** 订单号 */ + orderNo?: string; + /** 支付状态 */ + payStatus?: string; + /** 二维码链接 */ + qrCodeUrl?: string; + /** 支付链接 */ + payUrl?: string; +} + +/** + * 支付状态查询响应 + */ +export interface PaymentStatusResponse { + /** 是否成功 */ + success: boolean; + /** 错误信息 */ + errorMsg?: string; + /** 商户订单号 */ + mchOrderNo: string; + /** 支付状态文本 (INIT/ING/SUCCESS/FAIL/CANCEL/REFUND/CLOSED) */ + payStatus: string; + /** Jeepay原始状态码 (0-6) */ + jeepayState: number; + /** 支付金额 */ + amount?: number; + /** 支付时间 */ + payTime?: string; + /** Jeepay支付订单ID */ + payOrderId?: string; + /** 支付方式代码 */ + wayCode?: string; + /** 货币类型 */ + currency?: string; + /** 商品标题 */ + subject?: string; + /** 商品描述 */ + body?: string; +} \ No newline at end of file diff --git a/src/router/routes/index.ts b/src/router/routes/index.ts index 01557da..9bfb9b2 100644 --- a/src/router/routes/index.ts +++ b/src/router/routes/index.ts @@ -20,18 +20,29 @@ Object.keys(modules).forEach((key) => { export const asyncRoutes = [PAGE_NOT_FOUND_ROUTE, ...routeModuleList]; -// 根路由 -export const RootRoute: AppRouteRecordRaw = { +// 用户展示页面路由 +export const UserPageRoute: AppRouteRecordRaw = { path: '/', - name: 'Root', - redirect: PageEnum.BASE_HOME, + name: 'UserHomepage', + component: () => import('@/views/homepage/index.vue'), meta: { - title: 'Root', + title: '小研智审 - 合同全能助手', + ignoreAuth: true, + }, +}; + +// 管理后台根路由 +export const AdminRootRoute: AppRouteRecordRaw = { + path: '/admin', + name: 'AdminRoot', + redirect: '/admin' + PageEnum.BASE_HOME, + meta: { + title: 'Admin Root', }, }; export const LoginRoute: AppRouteRecordRaw = { - path: '/login', + path: '/admin/login', name: 'Login', component: () => import('@/views/auth/login/Login.vue'), meta: { @@ -39,11 +50,60 @@ export const LoginRoute: AppRouteRecordRaw = { }, }; +// 用户登录页面路由 +export const UserLoginRoute: AppRouteRecordRaw = { + path: '/user/login', + name: 'UserLogin', + component: () => import('@/views/user/login/index.vue'), + meta: { + title: '用户登录 - 小研智审', + ignoreAuth: true, + }, +}; + +// 用户注册页面路由 +export const UserRegisterRoute: AppRouteRecordRaw = { + path: '/user/register', + name: 'UserRegister', + component: () => import('@/views/user/Register.vue'), + meta: { + title: '用户注册 - 小研智审', + ignoreAuth: true, + }, +}; + +// 用户忘记密码页面路由 +export const UserForgotPasswordRoute: AppRouteRecordRaw = { + path: '/user/forgot-password', + name: 'UserForgotPassword', + component: () => import('@/views/user/ForgotPassword.vue'), + meta: { + title: '忘记密码 - 小研智审', + ignoreAuth: true, + }, +}; + +// 用户主页路由 +export const UserHomeRoute: AppRouteRecordRaw = { + path: '/user/home', + name: 'UserHome', + component: () => import('@/views/user/home/index.vue'), + meta: { + title: '小研智审 - 合同审查助手', + ignoreAuth: false, + }, +}; + // Basic routing without permission // 基本路由 就是不在后台返回内容中的路由 export const basicRoutes = [ + UserPageRoute, + UserLoginRoute, + UserRegisterRoute, + UserForgotPasswordRoute, + UserHomeRoute, LoginRoute, - RootRoute, + AdminRootRoute, REDIRECT_ROUTE, PAGE_NOT_FOUND_ROUTE, ...localRoutes, diff --git a/src/views/homepage/index.vue b/src/views/homepage/index.vue new file mode 100644 index 0000000..9ed608f --- /dev/null +++ b/src/views/homepage/index.vue @@ -0,0 +1,322 @@ + + + + + \ No newline at end of file diff --git a/src/views/user/ForgotPassword.vue b/src/views/user/ForgotPassword.vue new file mode 100644 index 0000000..1f7d863 --- /dev/null +++ b/src/views/user/ForgotPassword.vue @@ -0,0 +1,752 @@ + + + + + \ No newline at end of file diff --git a/src/views/user/Register.vue b/src/views/user/Register.vue new file mode 100644 index 0000000..061b70d --- /dev/null +++ b/src/views/user/Register.vue @@ -0,0 +1,860 @@ + + + + + \ No newline at end of file diff --git a/src/views/user/home/components/ChecklistPage.vue b/src/views/user/home/components/ChecklistPage.vue new file mode 100644 index 0000000..d9137a3 --- /dev/null +++ b/src/views/user/home/components/ChecklistPage.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/src/views/user/home/components/MembershipModal.vue b/src/views/user/home/components/MembershipModal.vue new file mode 100644 index 0000000..738ab34 --- /dev/null +++ b/src/views/user/home/components/MembershipModal.vue @@ -0,0 +1,755 @@ + + + + + \ No newline at end of file diff --git a/src/views/user/home/components/PaymentQRCodeModal.vue b/src/views/user/home/components/PaymentQRCodeModal.vue new file mode 100644 index 0000000..bc837cc --- /dev/null +++ b/src/views/user/home/components/PaymentQRCodeModal.vue @@ -0,0 +1,370 @@ + + + + + \ No newline at end of file diff --git a/src/views/user/home/components/RecordsPage.vue b/src/views/user/home/components/RecordsPage.vue new file mode 100644 index 0000000..374d8c2 --- /dev/null +++ b/src/views/user/home/components/RecordsPage.vue @@ -0,0 +1,286 @@ + + + + + \ No newline at end of file diff --git a/src/views/user/home/components/ReviewPage.vue b/src/views/user/home/components/ReviewPage.vue new file mode 100644 index 0000000..d1d2b18 --- /dev/null +++ b/src/views/user/home/components/ReviewPage.vue @@ -0,0 +1,297 @@ + + + + + \ No newline at end of file diff --git a/src/views/user/home/index.vue b/src/views/user/home/index.vue new file mode 100644 index 0000000..b85a3e6 --- /dev/null +++ b/src/views/user/home/index.vue @@ -0,0 +1,725 @@ + + + + + \ No newline at end of file diff --git a/src/views/user/login/index.vue b/src/views/user/login/index.vue new file mode 100644 index 0000000..e0a9801 --- /dev/null +++ b/src/views/user/login/index.vue @@ -0,0 +1,728 @@ + + + + + \ No newline at end of file