index.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <template>
  2. <v-card class="pa-5 card-box" style="height: 500px;">
  3. <div class="resume-header mb-3">
  4. <div class="resume-title">推荐人佣金比例设置</div>
  5. </div>
  6. <div class="d-flex flex-column align-center justify-center" style="height: 350px;">
  7. <CtForm ref="formPageRef" :items="items" style="width: 500px;"></CtForm>
  8. <v-btn class="buttons" color="primary" @click="handleSubmit">{{ $t('common.submit') }}</v-btn>
  9. </div>
  10. </v-card>
  11. </template>
  12. <script setup>
  13. defineOptions({ name: 'public-recruitment-commission'})
  14. import { ref } from 'vue'
  15. import { useI18n } from '@/hooks/web/useI18n'
  16. import { getHireCommissionRatio, updateHireCommissionRatio } from '@/api/recruit/public/commission'
  17. import Snackbar from '@/plugins/snackbar'
  18. const { t } = useI18n()
  19. const formPageRef = ref()
  20. const items = ref({
  21. options: [
  22. {
  23. type: 'number',
  24. key: 'rate',
  25. value: null,
  26. suffix: '%',
  27. label: '推荐人佣金比例 *',
  28. rules: [v => !!v || '请填写推荐人佣金比例']
  29. }
  30. ]
  31. })
  32. // 效验数值
  33. const validateNumber = (input) => {
  34. let number = parseFloat(input)
  35. if (isNaN(number) || !isFinite(number)) {
  36. return false
  37. }
  38. if (number < 0.01 || number > 100.00) {
  39. return false
  40. }
  41. let parts = input.split('.')
  42. if (parts.length > 1 && parts[1].length > 2) {
  43. return false
  44. }
  45. return true
  46. }
  47. // 获取佣金比例
  48. const getData = async () => {
  49. const data = await getHireCommissionRatio()
  50. if (!data) return
  51. items.value.options.find(e => e.key === 'rate').value = data.rate
  52. }
  53. getData()
  54. const handleSubmit = async () => {
  55. const { valid } = await formPageRef.value.formRef.validate()
  56. if (!valid) return
  57. const rate = items.value.options.find(e => e.key === 'rate').value
  58. if (!validateNumber(rate)) return Snackbar.warning('请填写正确格式的数值')
  59. await updateHireCommissionRatio(rate)
  60. Snackbar.success(t('common.submittedSuccessfully'))
  61. getData()
  62. }
  63. </script>
  64. <style scoped lang="scss">
  65. </style>