SetVip.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <template>
  2. <Dialog title="企业权益" v-model="dialogVisible">
  3. <el-descriptions class="mb-50px" title="企业当前权益" :column="2" border>
  4. <el-descriptions-item label="是否开启人才地图">{{ info.personMap ? '是' : '否' }}</el-descriptions-item>
  5. <el-descriptions-item label="是否允许发布众聘职位">{{ info.hireJob ? '是' : '否' }}</el-descriptions-item>
  6. <el-descriptions-item label="是否允许参加招聘会">{{ info.jobFair ? '是' : '否' }}</el-descriptions-item>
  7. <!-- <el-descriptions-item label="是否开启新任命">{{ info.newAppointment ? '是' : '否' }}</el-descriptions-item> -->
  8. <el-descriptions-item label="剩余发布职位数量">{{ info.publishJobCount || 0 }}个</el-descriptions-item>
  9. <!-- <el-descriptions-item label="剩余搜索人才数量">{{ info.searchCount || 0 }}次</el-descriptions-item> -->
  10. <el-descriptions-item label="剩余查看简历数量">{{ info.lookCvCount || 0 }}次</el-descriptions-item>
  11. </el-descriptions>
  12. <h3 style="color: #303133;">权益设置</h3>
  13. <el-form
  14. ref="formRef"
  15. :model="formData"
  16. label-width="140px"
  17. v-loading="formLoading"
  18. >
  19. <el-form-item label="会员套餐" prop="packageId">
  20. <el-select v-model="formData.packageId" placeholder="请选择会员套餐" @change="handleChange">
  21. <el-option v-for="val in packageList" :key="val.id" :label="val.text + `(会员时效增加:${val.day}天)`" :value="val.id" />
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="是否激活VIP" prop="entitlement.activateVip" :rules="[{ required: true, message: '请设置是否激活VIP', trigger: 'change' }]">
  25. <div>
  26. <el-switch v-model="formData.entitlement.activateVip" />
  27. <div>vip激活后到期,权益将无法使用;vip未激活,权益可以持续至额度归零。</div>
  28. </div>
  29. </el-form-item>
  30. <el-form-item v-if="formData.entitlement.activateVip" label="VIP过期时间" prop="entitlement.vipExpireDate" :rules="[{ required: true, message: '请选择VIP过期时间', trigger: 'change' }]">
  31. <el-date-picker v-model="formData.entitlement.vipExpireDate" :disabledDate="disabledDates" value-format="x" type="date" placeholder="请选择VIP过期时间" />
  32. </el-form-item>
  33. <el-form-item label="发布职位数量" prop="entitlement.publishJobCount" :rules="[{ required: true, message: '请输入发布职位数量', trigger: 'change' }]">
  34. <el-input-number v-model="formData.entitlement.publishJobCount" :min="0" />
  35. </el-form-item>
  36. <el-form-item label="查看简历数量" prop="entitlement.lookCvCount" :rules="[{ required: true, message: '请输入查看简历数量', trigger: 'change' }]">
  37. <el-input-number v-model="formData.entitlement.lookCvCount" :min="0" />
  38. </el-form-item>
  39. <!-- <el-form-item label="搜索人才数量" prop="entitlement.searchCount" :rules="[{ required: true, message: '请输入搜索人才数量', trigger: 'change' }]">
  40. <el-input-number v-model="formData.entitlement.searchCount" :min="0" />
  41. </el-form-item> -->
  42. <el-form-item label="开启人才地图" prop="entitlement.personMap" :rules="[{ required: true, message: '请设置是否开启人才地图', trigger: 'change' }]">
  43. <el-switch v-model="formData.entitlement.personMap" />
  44. </el-form-item>
  45. <el-form-item label="允许发布众聘职位" prop="entitlement.hireJob" :rules="[{ required: true, message: '请设置是否允许发布众聘职位', trigger: 'change' }]">
  46. <el-switch v-model="formData.entitlement.hireJob" />
  47. </el-form-item>
  48. <el-form-item label="允许参加招聘会" prop="entitlement.jobFair" :rules="[{ required: true, message: '请设置是否允许参加招聘会', trigger: 'change' }]">
  49. <el-switch v-model="formData.entitlement.jobFair" />
  50. </el-form-item>
  51. <!-- <el-form-item label="开启新任命" prop="entitlement.newAppointment" :rules="[{ required: true, message: '请设置是否开启新任命', trigger: 'change' }]">
  52. <el-switch v-model="formData.entitlement.newAppointment" />
  53. </el-form-item> -->
  54. </el-form>
  55. <template #footer>
  56. <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
  57. <el-button @click="dialogVisible = false">取 消</el-button>
  58. </template>
  59. </Dialog>
  60. </template>
  61. <script setup lang="ts">
  62. defineOptions({ name: 'EnterpriseMessageSetVip' })
  63. import { EnterpriseApi } from '@/api/menduner/system/enterprise/message'
  64. const props = defineProps({ packageList: Array })
  65. const message = useMessage() // 消息弹窗
  66. const dialogVisible = ref(false) // 弹窗的是否展示
  67. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  68. const formData = ref({
  69. enterpriseId: '',
  70. packageId: undefined as any,
  71. entitlement: {
  72. activateVip: false,
  73. vipExpireDate: undefined,
  74. publishJobCount: 0,
  75. searchCount: 0,
  76. lookCvCount: 0,
  77. personMap: false,
  78. hireJob: false,
  79. jobFair: false,
  80. // newAppointment: false
  81. }
  82. })
  83. const formRef = ref()
  84. // 套餐选择
  85. const item = ref({})
  86. const handleChange = (val) => {
  87. if (!val) return
  88. const obj = props.packageList.value.find(e => e.id === val)
  89. for (let key in formData.value.entitlement) {
  90. // 会员标识激活时才设置vip过期时间
  91. if (key === 'vipExpireDate' && obj.activateVip) {
  92. const currentDate = new Date()
  93. currentDate.setDate(currentDate.getDate() + obj.day)
  94. formData.value.entitlement[key] = currentDate.getTime()
  95. } else if (['publishJobCount', 'searchCount', 'lookCvCount'].includes(key)) {
  96. // 累加权益
  97. formData.value.entitlement[key] = info.value[key] ? (info.value[key] + obj[key]) : obj[key]
  98. } else formData.value.entitlement[key] = obj[key]
  99. }
  100. }
  101. // 过去的日期不可选
  102. const disabledDates = (date) => {
  103. const currentDate = new Date()
  104. currentDate.setDate(currentDate.getDate())
  105. return date.getTime() < currentDate.getTime()
  106. }
  107. /** 打开弹窗 */
  108. const info = ref({})
  109. const open = async (id: number, vipExpireDate) => {
  110. dialogVisible.value = true
  111. resetForm()
  112. formData.value.enterpriseId = id
  113. // 修改时,设置数据
  114. if (id) {
  115. formLoading.value = true
  116. try {
  117. const data = await EnterpriseApi.getEnterprisePackagePrivilege(id)
  118. info.value = data && data.length ? data[0] : {}
  119. // 回显数据
  120. if (info.value && Object.keys(info.value).length) {
  121. for (let key in formData.value.entitlement) {
  122. formData.value.entitlement[key] = info.value[key]
  123. }
  124. }
  125. // 设置到期时间
  126. if (vipExpireDate) formData.value.entitlement.vipExpireDate = vipExpireDate
  127. // 有到期时间的则是有开启会员标识的
  128. formData.value.entitlement.activateVip = vipExpireDate ? true : false
  129. } finally {
  130. formLoading.value = false
  131. }
  132. }
  133. }
  134. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  135. /** 提交表单 */
  136. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  137. const submitForm = async () => {
  138. // 校验表单
  139. await formRef.value.validate()
  140. // 提交请求
  141. formLoading.value = true
  142. try {
  143. await EnterpriseApi.updateEnterprisePackage(formData.value)
  144. dialogVisible.value = false
  145. message.success('操作成功')
  146. // 发送操作成功的事件
  147. emit('success')
  148. resetForm()
  149. } finally {
  150. formLoading.value = false
  151. }
  152. }
  153. /** 重置表单 */
  154. const resetForm = () => {
  155. item.value = {}
  156. formData.value = {
  157. enterpriseId: '',
  158. packageId: undefined,
  159. entitlement: {
  160. activateVip: false,
  161. vipExpireDate: undefined,
  162. publishJobCount: 0,
  163. searchCount: 0,
  164. lookCvCount: 0,
  165. personMap: false,
  166. hireJob: false,
  167. jobFair: false,
  168. // newAppointment: false
  169. }
  170. }
  171. }
  172. </script>