index.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template>
  2. <ContentWrap>
  3. <el-form
  4. ref="formRef"
  5. :model="formData"
  6. :rules="formRules"
  7. label-width="120px"
  8. v-loading="formLoading"
  9. >
  10. <el-form-item label="hideId" v-show="false">
  11. <el-input v-model="formData.id" />
  12. </el-form-item>
  13. <el-form-item label="积分抵扣" prop="tradeDeductEnable" class="item-bottom">
  14. <el-switch v-model="formData.tradeDeductEnable" style="user-select: none" />
  15. </el-form-item>
  16. <el-form-item>
  17. <el-text class="mx-1" size="small" type="info">下单积分是否抵用订单金额</el-text>
  18. </el-form-item>
  19. <!-- TODO @xiaqing:用户看到的是元,最多 2 位;分是后端的存储哈 -->
  20. <el-form-item label="积分抵扣" prop="tradeDeductUnitPrice" class="item-bottom">
  21. <el-input-number
  22. v-model="formData.tradeDeductUnitPrice"
  23. placeholder="请输入积分抵扣金额"
  24. style="width: 300px"
  25. />
  26. </el-form-item>
  27. <el-form-item>
  28. <el-text class="mx-1" size="small" type="info"
  29. >积分抵用比例(1积分抵多少金额)单位:元
  30. </el-text>
  31. </el-form-item>
  32. <el-form-item label="积分抵扣最大值" prop="tradeDeductMaxPrice" class="item-bottom">
  33. <el-input-number
  34. v-model="formData.tradeDeductMaxPrice"
  35. placeholder="请输入积分抵扣最大值"
  36. style="width: 300px"
  37. />
  38. </el-form-item>
  39. <el-form-item>
  40. <el-text class="mx-1" size="small" type="info">单次下单积分使用上限,0不限制</el-text>
  41. </el-form-item>
  42. <el-form-item label="1 元赠送多少分" prop="tradeGivePoint" class="item-bottom">
  43. <el-input-number
  44. v-model="formData.tradeGivePoint"
  45. placeholder="请输入 1 元赠送多少积分"
  46. style="width: 300px"
  47. />
  48. </el-form-item>
  49. <el-form-item>
  50. <el-text class="mx-1" size="small" type="info"
  51. >下单支付金额按比例赠送积分(实际支付1元赠送多少积分)</el-text
  52. >
  53. </el-form-item>
  54. <el-form-item>
  55. <el-button type="primary" @click="onSubmit">保存</el-button>
  56. </el-form-item>
  57. </el-form>
  58. </ContentWrap>
  59. </template>
  60. <script lang="ts" setup>
  61. import * as ConfigApi from '@/api/point/config'
  62. const { t } = useI18n() // 国际化
  63. const message = useMessage() // 消息弹窗
  64. const dialogVisible = ref(false) // 弹窗的是否展示
  65. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  66. const formData = ref({
  67. id: undefined,
  68. tradeDeductEnable: undefined,
  69. tradeDeductUnitPrice: undefined,
  70. tradeDeductMaxPrice: undefined,
  71. tradeGivePoint: undefined
  72. })
  73. const formRules = reactive({})
  74. const formRef = ref() // 表单 Ref
  75. /** 修改积分配置 */
  76. const onSubmit = async () => {
  77. // 校验表单
  78. if (!formRef) return
  79. const valid = await formRef.value.validate()
  80. if (!valid) return
  81. // 提交请求
  82. formLoading.value = true
  83. try {
  84. const data = formData.value as unknown as ConfigApi.ConfigVO
  85. await ConfigApi.saveConfig(data)
  86. message.success(t('common.updateSuccess'))
  87. dialogVisible.value = false
  88. } finally {
  89. formLoading.value = false
  90. }
  91. }
  92. /** 获得积分配置 */
  93. const getConfig = async () => {
  94. try {
  95. const data = await ConfigApi.getConfig()
  96. formData.value = data
  97. } finally {
  98. }
  99. }
  100. onMounted(() => {
  101. getConfig()
  102. })
  103. </script>
  104. <style scoped>
  105. .item-bottom {
  106. margin-bottom: 0px;
  107. }
  108. </style>