AdminPackageCreateView.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <div class="admin-package-create">
  3. <el-button text @click="router.back()">← 返回</el-button>
  4. <h1>新增套餐</h1>
  5. <el-form :model="form" label-width="120px" class="form">
  6. <el-form-item label="套餐类型">
  7. <el-radio-group v-model="form.type">
  8. <el-radio value="BOARDING">寄养</el-radio>
  9. <el-radio value="GROOMING">洗护</el-radio>
  10. </el-radio-group>
  11. </el-form-item>
  12. <el-form-item label="套餐名称">
  13. <el-input v-model="form.name" />
  14. </el-form-item>
  15. <el-form-item label="价格">
  16. <el-input-number v-model="form.price" :min="0" :precision="2" />
  17. </el-form-item>
  18. <el-form-item label="描述">
  19. <el-input v-model="form.description" type="textarea" />
  20. </el-form-item>
  21. <el-form-item v-if="form.type === 'BOARDING'" label="寄养天数">
  22. <el-input-number v-model="form.durationDays" :min="1" />
  23. </el-form-item>
  24. <el-form-item label="是否启用">
  25. <el-switch v-model="form.isActive" />
  26. </el-form-item>
  27. <el-form-item>
  28. <el-button type="primary" @click="handleSubmit">保存</el-button>
  29. <el-button @click="router.back()">取消</el-button>
  30. </el-form-item>
  31. </el-form>
  32. </div>
  33. </template>
  34. <script setup lang="ts">
  35. import { reactive } from 'vue'
  36. import { useRouter } from 'vue-router'
  37. import { ElMessage } from 'element-plus'
  38. import { getAdminPackageController } from '@/api/admin-package-controller'
  39. import type { PackageDto } from '@/api/models'
  40. const router = useRouter()
  41. const form = reactive({
  42. type: 'BOARDING' as 'BOARDING' | 'GROOMING',
  43. name: '',
  44. price: 0,
  45. description: '',
  46. durationDays: 1,
  47. isActive: true
  48. })
  49. const handleSubmit = async () => {
  50. try {
  51. const api = getAdminPackageController()
  52. const dto: PackageDto = {
  53. name: form.name,
  54. type: form.type,
  55. price: form.price,
  56. description: form.description,
  57. duration: form.type === 'BOARDING' ? form.durationDays : undefined,
  58. isActive: form.isActive ? 1 : 0
  59. }
  60. const res = await api.create2(dto)
  61. if (res.code === 200) {
  62. ElMessage.success('新增成功')
  63. router.push('/admin/packages')
  64. } else {
  65. ElMessage.error(res.message || '新增失败')
  66. }
  67. } catch (err: any) {
  68. ElMessage.error(err.message || '新增失败')
  69. }
  70. }
  71. </script>
  72. <style scoped>
  73. .admin-package-create {
  74. max-width: 600px;
  75. padding: 20px;
  76. }
  77. .form {
  78. margin-top: 20px;
  79. }
  80. </style>