coupon.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <xn-form-container
  3. :title="formData.id ? '赠送蛋糕券' : '赠送蛋糕券'"
  4. :width="700"
  5. v-model:open="open"
  6. :destroy-on-close="true"
  7. @close="onClose"
  8. >
  9. <a-form ref="formRef" :model="formData" :rules="formRules" :label-col="labelCol" :wrapper-col="wrapperCol">
  10. <a-form-item label="会员姓名:" name="name">
  11. <a-input v-model:value="formData.name" placeholder="请输入会员姓名" disabled allow-clear />
  12. </a-form-item>
  13. <a-form-item label="糕点:" name="accountBalance">
  14. <a-input v-model:value="formData.accountBalance" placeholder="请输入账户余额" disabled allow-clear />
  15. </a-form-item>
  16. <a-form-item label="积分:" name="voucherBalance">
  17. <a-input v-model:value="formData.voucherBalance" placeholder="请输入代金券余额" disabled allow-clear />
  18. </a-form-item>
  19. <a-form-item label="选择蛋糕券:" name="couponId">
  20. <a-select v-model:value="formData.couponId" placeholder="请选择蛋糕券"
  21. :options="couponIdList" @change="onChangeCouponId"
  22. > </a-select>
  23. </a-form-item>
  24. <a-form-item label="蛋糕券:" name="couponAmount" v-show = "couponFlag">
  25. <a-input-number v-model:value="formData.couponAmount" style="width: 100%" :min="0" :max="99999999"
  26. :precision="2" placeholder="请输入蛋糕券" allow-clear disabled/>
  27. </a-form-item>
  28. <a-form-item label="蛋糕券类型:" name="couponType" v-show = "couponFlag">
  29. <a-radio-group button-style="solid" v-model:value="formData.couponType" disabled>
  30. <a-radio-button value="1">
  31. </a-radio-button>
  32. <a-radio-button value="2">
  33. </a-radio-button>
  34. </a-radio-group>
  35. </a-form-item>
  36. <a-form-item label="蛋糕券数量:" name="couponNum" v-show = "couponFlag">
  37. <a-input-number v-model:value="formData.couponNum" style="width: 100%" :min="0" :max="99999999"
  38. :precision="0" placeholder="请输入蛋糕券数量" allow-clear disabled/>
  39. </a-form-item>
  40. </a-form>
  41. <template #footer>
  42. <a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
  43. <a-button type="primary" @click="onSubmit" :loading="submitLoading">确认</a-button>
  44. </template>
  45. </xn-form-container>
  46. </template>
  47. <script setup name="consumptionRecordForm">
  48. import { cloneDeep } from 'lodash-es'
  49. import { required } from '@/utils/formRules'
  50. import consumptionRecordApi from '@/api/biz/consumptionRecordApi'
  51. import { Modal } from 'ant-design-vue'
  52. import { createVNode } from 'vue'
  53. import { ExclamationCircleOutlined } from '@ant-design/icons-vue'
  54. import couponConfigApi from "@/api/biz/couponConfigApi";
  55. import bizCouponRecordApi from "@/api/biz/bizCouponRecordApi";
  56. // 抽屉状态
  57. const open = ref(false)
  58. const emit = defineEmits({ successful: null })
  59. const formRef = ref()
  60. // 表单数据
  61. const formData = ref({})
  62. const submitLoading = ref(false)
  63. const couponIdList = ref()
  64. const couponFlag = ref(false)
  65. const labelCol = ref({ span: 5 })
  66. const wrapperCol = ref({ span: 18 })
  67. const chongzhiFlag = ref(false)
  68. const tuikuanFlag = ref(false)
  69. const qitaFlag = ref(false)
  70. // 打开抽屉
  71. const onOpen = (record) => {
  72. open.value = true
  73. if (record) {
  74. let recordData = cloneDeep(record)
  75. formData.value = Object.assign({}, recordData)
  76. formData.value.userId = formData.value.id
  77. chongzhiFlag.value = true
  78. qitaFlag.value = true
  79. tuikuanFlag.value = false
  80. }
  81. couponConfigApi.getMemberList().then((res)=>{
  82. couponIdList.value = res.map((item)=>{
  83. return{
  84. value:item.id,
  85. label:item.couponAmount + (item.couponType=='1'?'寸':'元') + "*" + item.couponNum
  86. }
  87. })
  88. })
  89. }
  90. const onChangeCouponId = (value) => {
  91. console.log("value:"+value)
  92. couponConfigApi.couponConfigDetail({id:value}).then((res)=>{
  93. formData.value.couponAmount = res.couponAmount
  94. formData.value.couponType = res.couponType
  95. formData.value.couponNum = res.couponNum
  96. couponFlag.value = true
  97. })
  98. }
  99. // 关闭抽屉
  100. const onClose = () => {
  101. formRef.value.resetFields()
  102. formData.value = {}
  103. open.value = false
  104. couponFlag.value = false
  105. }
  106. // 默认要校验的
  107. const formRules = {
  108. name: [required('请输入消费者姓名')],
  109. accountBalance: [required('请输入账户余额')],
  110. voucherBalance: [required('请输入代金券余额')],
  111. couponId: [required('选择蛋糕券')],
  112. }
  113. // 验证并提交数据
  114. //title: '确定要为'+formData.value.name+(formData.value.consumptionOperate=='1'?'赠送':'扣减')+(formData.value.consumptionType=='1'?'代金券':'余额')+formData.value.consumptionMoney+'元吗?',
  115. const onSubmit = () => {
  116. formRef.value
  117. .validate()
  118. .then(() => {
  119. submitLoading.value = true
  120. const formDataParam = cloneDeep(formData.value)
  121. bizCouponRecordApi
  122. .giftCoupon(formDataParam)
  123. .then(() => {
  124. onClose()
  125. emit('successful')
  126. })
  127. .finally(() => {
  128. submitLoading.value = false
  129. })
  130. })
  131. .catch(() => {})
  132. }
  133. // 抛出函数
  134. defineExpose({
  135. onOpen
  136. })
  137. </script>