Files
AIGC/demo/frontend/src/views/PaymentCreate.vue
AIGC Developer 8449423cfb 完成数据库结构升级 - 移除模拟数据,实现真实数据库集成
- 扩展数据库表结构,添加会员等级、用户会员信息、视频任务、用户作品、系统配置等表
- 更新用户表,添加手机号、头像、昵称、性别、生日、地址等字段
- 创建完整的初始数据,包含10个用户、3个会员等级、15个订单、10个视频任务、10个用户作品
- 实现会员管理API控制器,支持CRUD操作和批量操作
- 创建会员等级和用户会员信息实体类及仓库接口
- 更新前端会员管理页面,集成真实API调用,保留模拟数据作为后备
- 实现编辑功能,支持修改用户名、会员等级、资源点、到期时间等信息
2025-10-22 09:50:11 +08:00

258 lines
6.2 KiB
Vue
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.

<template>
<div class="payment-create">
<el-page-header @back="$router.go(-1)" content="创建支付">
<template #extra>
<el-button type="primary" @click="handleSubmit" :loading="loading">
<el-icon><CreditCard /></el-icon>
创建支付
</el-button>
</template>
</el-page-header>
<el-card class="form-card">
<el-form
ref="formRef"
:model="form"
:rules="rules"
label-width="100px"
@submit.prevent="handleSubmit"
>
<el-form-item label="订单号" prop="orderId">
<el-input
v-model="form.orderId"
placeholder="请输入订单号"
clearable
/>
</el-form-item>
<el-form-item label="支付金额" prop="amount">
<el-input-number
v-model="form.amount"
:precision="2"
:min="0.01"
placeholder="请输入支付金额"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="货币" prop="currency">
<el-select v-model="form.currency" placeholder="请选择货币">
<el-option label="人民币 (CNY)" value="CNY" />
<el-option label="美元 (USD)" value="USD" />
<el-option label="欧元 (EUR)" value="EUR" />
</el-select>
</el-form-item>
<el-form-item label="支付方式" prop="paymentMethod">
<el-radio-group v-model="form.paymentMethod">
<el-radio value="ALIPAY">
<el-icon><CreditCard /></el-icon>
支付宝
</el-radio>
<el-radio value="PAYPAL">
<el-icon><CreditCard /></el-icon>
PayPal
</el-radio>
<el-radio value="WECHAT">
<el-icon><CreditCard /></el-icon>
微信支付
</el-radio>
<el-radio value="UNIONPAY">
<el-icon><CreditCard /></el-icon>
银联支付
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="支付描述" prop="description">
<el-input
v-model="form.description"
type="textarea"
:rows="3"
placeholder="请输入支付描述"
/>
</el-form-item>
<el-form-item label="回调URL" prop="callbackUrl">
<el-input
v-model="form.callbackUrl"
placeholder="请输入回调URL可选"
/>
</el-form-item>
<el-form-item label="返回URL" prop="returnUrl">
<el-input
v-model="form.returnUrl"
placeholder="请输入返回URL可选"
/>
</el-form-item>
</el-form>
</el-card>
<!-- 支付方式说明 -->
<el-card class="info-card">
<template #header>
<h4>支付方式说明</h4>
</template>
<el-row :gutter="20">
<el-col :xs="24" :sm="12" :md="6">
<div class="payment-method-info">
<el-icon size="32" color="#1677FF"><CreditCard /></el-icon>
<h5>支付宝</h5>
<p>支持支付宝扫码支付和网页支付</p>
</div>
</el-col>
<el-col :xs="24" :sm="12" :md="6">
<div class="payment-method-info">
<el-icon size="32" color="#0070BA"><CreditCard /></el-icon>
<h5>PayPal</h5>
<p>支持PayPal账户支付和信用卡支付</p>
</div>
</el-col>
<el-col :xs="24" :sm="12" :md="6">
<div class="payment-method-info">
<el-icon size="32" color="#07C160"><CreditCard /></el-icon>
<h5>微信支付</h5>
<p>支持微信扫码支付和H5支付</p>
</div>
</el-col>
<el-col :xs="24" :sm="12" :md="6">
<div class="payment-method-info">
<el-icon size="32" color="#E6A23C"><CreditCard /></el-icon>
<h5>银联支付</h5>
<p>支持银联卡支付和网银支付</p>
</div>
</el-col>
</el-row>
</el-card>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
const router = useRouter()
const formRef = ref()
const loading = ref(false)
const form = reactive({
orderId: '',
amount: 0,
currency: 'CNY',
paymentMethod: 'ALIPAY',
description: '',
callbackUrl: '',
returnUrl: ''
})
const rules = {
orderId: [
{ required: true, message: '请输入订单号', trigger: 'blur' }
],
amount: [
{ required: true, message: '请输入支付金额', trigger: 'blur' },
{ type: 'number', min: 0.01, message: '支付金额必须大于0', trigger: 'blur' }
],
currency: [
{ required: true, message: '请选择货币', trigger: 'change' }
],
paymentMethod: [
{ required: true, message: '请选择支付方式', trigger: 'change' }
]
}
// 提交表单
const handleSubmit = async () => {
if (!formRef.value) return
try {
const valid = await formRef.value.validate()
if (!valid) return
loading.value = true
// 模拟创建支付
await new Promise(resolve => setTimeout(resolve, 1000))
ElMessage.success('支付创建成功')
router.push('/payments')
} catch (error) {
console.error('Create payment error:', error)
ElMessage.error('创建支付失败')
} finally {
loading.value = false
}
}
</script>
<style scoped>
.payment-create {
max-width: 1200px;
margin: 0 auto;
}
.form-card {
margin-top: 20px;
}
.info-card {
margin-top: 20px;
}
.info-card h4 {
margin: 0;
color: #303133;
}
.payment-method-info {
text-align: center;
padding: 20px;
border: 1px solid #e4e7ed;
border-radius: 8px;
background-color: #fafafa;
transition: all 0.3s;
}
.payment-method-info:hover {
background-color: #f5f7fa;
border-color: #409EFF;
}
.payment-method-info h5 {
margin: 12px 0 8px 0;
color: #303133;
}
.payment-method-info p {
margin: 0;
color: #606266;
font-size: 14px;
line-height: 1.5;
}
@media (max-width: 768px) {
.payment-method-info {
margin-bottom: 16px;
}
}
</style>