index.vue 4.0 KB

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