index.vue 4.0 KB

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