修改bug
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 4m54s

This commit is contained in:
sexygoat
2026-04-09 13:48:11 +08:00
parent cc9d2a85a2
commit cb3ba06106
26 changed files with 987 additions and 1984 deletions

View File

@@ -176,6 +176,26 @@
</template>
</div>
</ElFormItem>
<ElFormItem
v-if="createForm.payment_method === 'offline'"
label="支付凭证"
prop="payment_voucher_key"
>
<ElUpload
ref="uploadRef"
:auto-upload="false"
:on-change="handleVoucherFileChange"
:on-remove="handleRemoveVoucher"
accept="image/*"
list-type="picture-card"
:limit="1"
>
<el-icon><Plus /></el-icon>
<template #tip>
<div class="el-upload__tip">支持 jpgpng 格式文件大小不超过 5MB</div>
</template>
</ElUpload>
</ElFormItem>
</ElForm>
<template #footer>
<div class="dialog-footer">
@@ -265,9 +285,10 @@
<script setup lang="ts">
import { h } from 'vue'
import { useRouter } from 'vue-router'
import { OrderService, CardService, DeviceService, PackageManageService } from '@/api/modules'
import { OrderService, CardService, DeviceService, PackageManageService, StorageService } from '@/api/modules'
import { ElMessage, ElMessageBox, ElTag } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import { Plus } from '@element-plus/icons-vue'
import type { FormInstance, FormRules, UploadInstance, UploadFile } from 'element-plus'
import type {
Order,
OrderQueryParams,
@@ -408,29 +429,104 @@
]
const createFormRef = ref<FormInstance>()
const uploadRef = ref<UploadInstance>()
const createRules = reactive<FormRules>({
order_type: [
{
required: true,
message: '请选择订单类型',
trigger: 'change'
// 处理支付凭证文件选择
const handleVoucherFileChange = async (uploadFile: UploadFile) => {
const file = uploadFile.raw
if (!file) return
// 验证文件类型
const isImage = file.type.startsWith('image/')
if (!isImage) {
ElMessage.error('只能上传图片文件!')
uploadRef.value?.clearFiles()
return
}
// 验证文件大小
const isLt5M = file.size / 1024 / 1024 < 5
if (!isLt5M) {
ElMessage.error('图片大小不能超过 5MB!')
uploadRef.value?.clearFiles()
return
}
// 开始上传
try {
ElMessage.info('正在上传支付凭证...')
// 1. 获取上传 URL
const uploadUrlRes = await StorageService.getUploadUrl({
file_name: file.name,
content_type: file.type,
purpose: 'attachment'
})
if (uploadUrlRes.code !== 0) {
ElMessage.error(uploadUrlRes.msg || '获取上传地址失败')
uploadRef.value?.clearFiles()
return
}
],
package_ids: [
{
required: true,
message: '请选择套餐',
trigger: 'change'
}
],
payment_method: [
{
required: true,
message: '请选择支付方式',
trigger: 'change'
}
]
const { upload_url, file_key } = uploadUrlRes.data
// 2. 上传文件到对象存储
await StorageService.uploadFile(upload_url, file, file.type)
// 3. 保存 file_key
createForm.payment_voucher_key = file_key
ElMessage.success('上传成功')
} catch (error: any) {
console.error('上传失败:', error)
ElMessage.error(error.message || '上传失败,请重试')
createForm.payment_voucher_key = undefined
uploadRef.value?.clearFiles()
}
}
// 删除支付凭证
const handleRemoveVoucher = () => {
createForm.payment_voucher_key = undefined
}
const createRules = computed<FormRules>(() => {
const baseRules: FormRules = {
order_type: [
{
required: true,
message: '请选择订单类型',
trigger: 'change'
}
],
package_ids: [
{
required: true,
message: '请选择套餐',
trigger: 'change'
}
],
payment_method: [
{
required: true,
message: '请选择支付方式',
trigger: 'change'
}
]
}
// 线下支付时,支付凭证为必填
if (createForm.payment_method === 'offline') {
baseRules.payment_voucher_key = [
{
required: true,
message: '请上传支付凭证',
trigger: 'change'
}
]
}
return baseRules
})
const createForm = reactive<CreateOrderRequest>({
@@ -438,7 +534,8 @@
package_ids: [],
iot_card_id: null,
device_id: null,
payment_method: 'wallet' // 默认使用钱包支付
payment_method: 'wallet', // 默认使用钱包支付
payment_voucher_key: undefined // 线下支付凭证
})
const orderList = ref<Order[]>([])
@@ -884,6 +981,10 @@
createForm.iot_card_id = null
createForm.device_id = null
createForm.payment_method = 'wallet'
createForm.payment_voucher_key = undefined
// 清空上传文件列表
uploadRef.value?.clearFiles()
// 清空套餐、IoT卡和设备搜索结果
packageOptions.value = []
@@ -964,6 +1065,11 @@
payment_method: createForm.payment_method
}
// 线下支付时,添加支付凭证
if (createForm.payment_method === 'offline' && createForm.payment_voucher_key) {
data.payment_voucher_key = createForm.payment_voucher_key
}
await OrderService.createOrder(data)
// 根据支付方式显示不同的成功消息