fix(operator): fix operator edit issue
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m25s

This commit is contained in:
sexygoat
2026-04-10 15:06:28 +08:00
parent 2b3119c549
commit 8b30341d50
8 changed files with 320 additions and 86 deletions

View File

@@ -47,6 +47,26 @@
</template>
</div>
</ElFormItem>
<ElFormItem
v-if="form.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">
@@ -66,10 +86,13 @@
ElSelect,
ElOption,
ElButton,
ElMessage
ElMessage,
ElUpload,
ElIcon
} from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import { OrderService, PackageManageService } from '@/api/modules'
import { Plus } from '@element-plus/icons-vue'
import type { FormInstance, FormRules, UploadFile, UploadInstance } from 'element-plus'
import { OrderService, PackageManageService, StorageService } from '@/api/modules'
import type { CreateOrderRequest, PackageResponse } from '@/types/api'
import { useUserStore } from '@/store/modules/user'
@@ -91,13 +114,15 @@
const userStore = useUserStore()
const formRef = ref<FormInstance>()
const uploadRef = ref<UploadInstance>()
const loading = ref(false)
const packageSearchLoading = ref(false)
const packageOptions = ref<PackageResponse[]>([])
const form = reactive({
package_id: undefined as number | undefined,
payment_method: 'wallet' as 'wallet' | 'offline'
payment_method: 'wallet' as 'wallet' | 'offline',
payment_voucher_key: undefined as string | undefined
})
const rules: FormRules = {
@@ -172,6 +197,64 @@
}
}
// 处理支付凭证文件变化
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
}
const { upload_url, file_key } = uploadUrlRes.data
// 2. 上传文件到对象存储
await StorageService.uploadFile(upload_url, file, file.type)
// 3. 保存 file_key
form.payment_voucher_key = file_key
ElMessage.success('支付凭证上传成功')
} catch (error: any) {
console.error('上传支付凭证失败:', error)
ElMessage.error(error?.message || '上传失败')
uploadRef.value?.clearFiles()
}
}
// 移除支付凭证
const handleRemoveVoucher = () => {
form.payment_voucher_key = undefined
}
const handleCancel = () => {
visible.value = false
}
@@ -187,6 +270,12 @@
return
}
// 线下支付时验证支付凭证
if (form.payment_method === 'offline' && !form.payment_voucher_key) {
ElMessage.error('线下支付需要上传支付凭证')
return
}
loading.value = true
// 创建订单(后端接收数组,前端单选转为单元素数组)
@@ -196,6 +285,11 @@
payment_method: form.payment_method
}
// 线下支付时,添加支付凭证
if (form.payment_method === 'offline' && form.payment_voucher_key) {
data.payment_voucher_key = form.payment_voucher_key
}
await OrderService.createOrder(data)
// 根据支付方式显示不同的成功消息
@@ -214,7 +308,6 @@
return
}
console.error('创建订单失败:', error)
ElMessage.error(error?.message || '创建订单失败')
} finally {
loading.value = false
}
@@ -224,7 +317,9 @@
formRef.value?.resetFields()
form.package_id = undefined
form.payment_method = 'wallet'
form.payment_voucher_key = undefined
packageOptions.value = []
uploadRef.value?.clearFiles()
}
</script>

View File

@@ -50,11 +50,12 @@
interface Props {
modelValue: boolean
cardNo?: string // 流量卡号ICCID
}
interface Emits {
(e: 'update:modelValue', value: boolean): void
(e: 'confirm', data: { enabled: number; ssid: string; password: string }): void
(e: 'confirm', data: { card_no: string; enabled: number; ssid: string; password: string }): void
}
const props = defineProps<Props>()
@@ -104,6 +105,7 @@
try {
await formRef.value.validate()
emit('confirm', {
card_no: props.cardNo || '',
enabled: form.enabled,
ssid: form.ssid,
password: form.password