link.vue 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <!-- 发起邀请 -->
  2. <template>
  3. <div style="font-size: 14px;">
  4. <div class="mt-5 color-777">将下面的公共邀请链接通过微信、00等任何方式发给同事,即可点击加入公司。请注意,用户同意后将自动加入到团队中,您需确保添加到的同事为同一公司招聘人员</div>
  5. <div class="mt-5 d-flex align-center">
  6. <div class="mr-5 shareUrlTxt">
  7. <span v-if="code">{{ shareUrlTxt }}</span>
  8. <span v-else class="color-666">点击刷新生成邀请链接</span>
  9. </div>
  10. <v-btn color="primary" class="mr-3" @click="copy()">{{ $t('common.copy') }}</v-btn>
  11. <v-btn color="green" variant="outlined" @click="refresh()">{{ $t('common.refresh') }}</v-btn>
  12. </div>
  13. <div class="mt-5 color-777">链接{{ day }}天内有效</div>
  14. </div>
  15. </template>
  16. <script setup>
  17. import Snackbar from '@/plugins/snackbar'
  18. import {
  19. enterpriseInviteGenerateCode,
  20. enterpriseInviteGetCode,
  21. enterpriseInviteRefresh,
  22. } from '@/api/recruit/enterprise/enterpriseInvite.js'
  23. import { computed, ref } from 'vue'
  24. defineOptions({name: 'groupAccount-component-invite'})
  25. const props = defineProps({
  26. inviteType: {
  27. type: String,
  28. default: '0' // 类型 (0 邀请同事 | 1 邀请子公司),示例值(2)
  29. }
  30. })
  31. const day = 30
  32. const code = ref('')
  33. const accessUrl = import.meta.env.VITE_ACCESS_BASE_URL
  34. // const shareUrlTxt = ref(accessUrl + '/groupAccount/add?code=' + code.value )
  35. const shareUrlTxt = computed(() => {
  36. return accessUrl + '/invite?code=' + code.value
  37. })
  38. // 基本逻辑:是否已有邀请码?->
  39. // 有:直接调用获取邀请码
  40. // 没有:有生成邀请码标识->获取邀请码
  41. // 刷新: 先调用刷新邀请码接口再执行上面逻辑
  42. // 获取邀请码
  43. const getCode = async (type) => {
  44. try {
  45. const data = await enterpriseInviteGetCode({ type: props.inviteType })
  46. if (!data) getGenerateCode()
  47. code.value = data
  48. if (type === 'refresh') Snackbar.success('刷新成功')
  49. } catch (err) {
  50. console.err(err)
  51. }
  52. }
  53. getCode()
  54. // 生成邀请码标识
  55. const getGenerateCode = async (type) => {
  56. try {
  57. const data = await enterpriseInviteGenerateCode({ type: props.inviteType, expireDay: 30 })
  58. if (!data) Snackbar.error('生成邀请码标识失败')
  59. getCode(type)
  60. } catch (err) {
  61. console.err(err)
  62. }
  63. }
  64. // 刷新邀请码
  65. const refresh = async () => {
  66. try {
  67. await enterpriseInviteRefresh({ code: code.value })
  68. getCode('refresh')
  69. } catch (err) {
  70. console.err(err)
  71. }
  72. }
  73. const copy = async () => {
  74. try {
  75. await navigator.clipboard.writeText(shareUrlTxt.value)
  76. Snackbar.success('复制成功')
  77. } catch (err) {
  78. Snackbar.error('复制失败,请手动复制。')
  79. }
  80. }
  81. </script>
  82. <style lang="scss" scoped>
  83. .shareUrlTxt {
  84. line-height: 30px;
  85. background-color: #f0f0f0;
  86. // border-radius: 5px;
  87. padding: 6px 16px;
  88. }
  89. </style>