ExternalContactNameCell.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <span class="external-contact-name-cell">
  3. <span class="external-contact-name-text" :style="nameStyle">{{ row.name || '-' }}</span>
  4. <el-tooltip
  5. v-if="hasManageIndicator"
  6. placement="top"
  7. :disabled="!row.manageRemark"
  8. >
  9. <div slot="content" class="external-contact-manage-tooltip">
  10. <div v-if="row.manageRemark" class="external-contact-manage-remark">{{ row.manageRemark }}</div>
  11. </div>
  12. <i :class="iconClass" />
  13. </el-tooltip>
  14. </span>
  15. </template>
  16. <script>
  17. export default {
  18. name: 'ExternalContactNameCell',
  19. props: {
  20. row: {
  21. type: Object,
  22. required: true
  23. }
  24. },
  25. computed: {
  26. manageStatus() {
  27. return this.row && this.row.manageStatus != null ? Number(this.row.manageStatus) : null
  28. },
  29. isBlacklisted() {
  30. return this.manageStatus === 2
  31. },
  32. hasManageRemark() {
  33. const remark = this.row && this.row.manageRemark
  34. return remark != null && String(remark).trim() !== ''
  35. },
  36. isManaged() {
  37. return this.manageStatus === 1 && this.hasManageRemark
  38. },
  39. hasManageIndicator() {
  40. return this.isBlacklisted || this.isManaged
  41. },
  42. nameStyle() {
  43. if (this.isBlacklisted) {
  44. return { color: '#f56c6c' }
  45. }
  46. if (this.isManaged) {
  47. return { color: '#67c23a' }
  48. }
  49. return {}
  50. },
  51. iconClass() {
  52. if (this.isBlacklisted) {
  53. return 'el-icon-warning external-contact-manage-icon external-contact-manage-icon--danger'
  54. }
  55. if (this.isManaged) {
  56. return 'el-icon-warning external-contact-manage-icon external-contact-manage-icon--success'
  57. }
  58. return ''
  59. }
  60. }
  61. }
  62. </script>
  63. <style scoped>
  64. .external-contact-name-cell {
  65. display: inline-flex;
  66. align-items: center;
  67. max-width: 100%;
  68. }
  69. .external-contact-name-text {
  70. overflow: hidden;
  71. text-overflow: ellipsis;
  72. white-space: nowrap;
  73. }
  74. .external-contact-manage-icon {
  75. margin-left: 4px;
  76. font-size: 14px;
  77. cursor: pointer;
  78. flex-shrink: 0;
  79. }
  80. .external-contact-manage-icon--danger {
  81. color: #f56c6c;
  82. }
  83. .external-contact-manage-icon--success {
  84. color: #67c23a;
  85. }
  86. .external-contact-manage-remark {
  87. line-height: 1.5;
  88. word-break: break-all;
  89. }
  90. </style>