index.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <template>
  2. <ContentWrap>
  3. <el-form
  4. ref="formRef"
  5. :model="formData"
  6. :rules="formRules"
  7. label-width="160px"
  8. v-loading="formLoading"
  9. >
  10. <el-card shadow="never">
  11. <template #header>
  12. <div class="flex items-center justify-between">
  13. <CardTitle title="客户公海规则设置" />
  14. <el-button
  15. type="primary"
  16. @click="onSubmit"
  17. v-hasPermi="['crm:customer-pool-config:update']"
  18. >保存</el-button
  19. >
  20. </div>
  21. </template>
  22. <el-form-item label="客户公海规则设置" prop="enabled">
  23. <el-radio-group v-model="formData.enabled" class="ml-4">
  24. <el-radio :label="false" size="large">不启用</el-radio>
  25. <el-radio :label="true" size="large">启用</el-radio>
  26. </el-radio-group>
  27. </el-form-item>
  28. <div v-if="formData.enabled">
  29. <el-form-item>
  30. <el-input-number class="mr-2" v-model="formData.contactExpireDays" />
  31. 天不跟进或
  32. <el-input-number class="mx-2" v-model="formData.dealExpireDays" />
  33. 天未成交
  34. </el-form-item>
  35. <el-form-item label="提前提醒设置" prop="notifyEnabled">
  36. <el-radio-group v-model="formData.notifyEnabled" class="ml-4">
  37. <el-radio :label="false" size="large">不提醒</el-radio>
  38. <el-radio :label="true" size="large">提醒</el-radio>
  39. </el-radio-group>
  40. </el-form-item>
  41. <div v-if="formData.notifyEnabled">
  42. <el-form-item>
  43. 提前
  44. <el-input-number class="mx-2" v-model="formData.notifyDays" />
  45. 天提醒
  46. </el-form-item>
  47. </div>
  48. </div>
  49. </el-card>
  50. </el-form>
  51. </ContentWrap>
  52. </template>
  53. <script setup lang="ts">
  54. import * as CustomerPoolConfApi from '@/api/crm/customerPoolConf'
  55. import { CardTitle } from '@/components/Card'
  56. import { CustomerPoolConfigVO } from '@/api/crm/customerPoolConf'
  57. defineOptions({ name: 'CustomerPoolConf' })
  58. const message = useMessage() // 消息弹窗
  59. const { t } = useI18n() // 国际化
  60. const formLoading = ref(false)
  61. const formData = ref({
  62. enabled: false,
  63. contactExpireDays: 0,
  64. dealExpireDays: 0,
  65. notifyEnabled: false,
  66. notifyDays: 0
  67. })
  68. const formRules = reactive({
  69. enabled: [{ required: true, message: '是否启用客户公海不能为空', trigger: 'blur' }]
  70. })
  71. const formRef = ref() // 表单 Ref
  72. /**
  73. * 获取配置
  74. */
  75. const getConfig = async () => {
  76. try {
  77. formLoading.value = true
  78. const data = await CustomerPoolConfApi.getCustomerPoolConfig()
  79. if (data === null) {
  80. return
  81. }
  82. formData.value = data
  83. } finally {
  84. formLoading.value = false
  85. }
  86. }
  87. /**
  88. * 提交配置
  89. */
  90. const onSubmit = async () => {
  91. // 校验表单
  92. if (!formRef) return
  93. const valid = await formRef.value.validate()
  94. if (!valid) return
  95. // 提交请求
  96. formLoading.value = true
  97. try {
  98. const data = formData.value as unknown as CustomerPoolConfApi.CustomerPoolConfigVO
  99. await CustomerPoolConfApi.updateCustomerPoolConfig(data)
  100. message.success(t('common.updateSuccess'))
  101. await getConfig()
  102. formLoading.value = false
  103. } finally {
  104. formLoading.value = false
  105. }
  106. }
  107. watch(
  108. () => formData.value.enabled,
  109. (val: boolean) => {
  110. if (!val) {
  111. formData.value.contactExpireDays = undefined
  112. formData.value.dealExpireDays = undefined
  113. formData.value.notifyEnabled = false
  114. formData.value.notifyDays = undefined
  115. }
  116. }
  117. )
  118. watch(
  119. () => formData.value.notifyEnabled,
  120. (val: boolean) => {
  121. if (!val) {
  122. formData.value.notifyDays = undefined
  123. }
  124. }
  125. )
  126. onMounted(() => {
  127. getConfig()
  128. })
  129. </script>