index.html 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. {include file="/shopro/common/script" /}
  2. <style>
  3. .user-index .auth-id {
  4. color: var(--sa-subfont);
  5. }
  6. </style>
  7. <div id="index" class="user-index panel panel-default panel-intro" v-cloak>
  8. <el-container class="panel-block">
  9. <el-header class="sa-header">
  10. <div class="sa-title sa-flex sa-row-between">
  11. <div class="sa-title-left">
  12. <div class="left-name">会话管理</div>
  13. <sa-filter-condition v-model="state.filter" @filter-delete="onChangeFilter">
  14. </sa-filter-condition>
  15. </div>
  16. <div class="sa-title-right">
  17. <el-button class="sa-button-refresh" icon="RefreshRight" @click="getData"></el-button>
  18. <el-button class="sa-button-refresh" icon="Search" @click="onOpenFilter"></el-button>
  19. </div>
  20. </div>
  21. </el-header>
  22. <el-main class="sa-main">
  23. <el-table height="100%" class="sa-table" :data="state.data" stripe @selection-change="onChangeSelection"
  24. @sort-change="onChangeSort">
  25. <el-table-column type="selection" width="48"></el-table-column>
  26. <el-table-column prop="id" label="ID" min-width="90" sortable="custom"> </el-table-column>
  27. <el-table-column label="用户信息" min-width="160">
  28. <template #default="scope">
  29. <div class="sa-flex sa-col-center">
  30. <el-avatar class="mr-2" :size="32" :src="Fast.api.cdnurl(scope.row.avatar)">
  31. <img src="/assets/addons/shopro/img/default-avatar.png" />
  32. </el-avatar>
  33. <div>
  34. <div class="sa-table-line-1">
  35. {{ scope.row.nickname || '-' }}
  36. </div>
  37. <div class="auth-id">
  38. {{ scope.row.auth_id ? '用户' : '游客' }}
  39. </div>
  40. </div>
  41. </div>
  42. </template>
  43. </el-table-column>
  44. <el-table-column label="手机号" min-width="120">
  45. <template #default="scope">
  46. <div class="sa-table-line-1">
  47. {{ scope.row.user?.mobile || '-' }}
  48. </div>
  49. </template>
  50. </el-table-column>
  51. <el-table-column label="最后会话客服" min-width="160">
  52. <template #default="scope">
  53. <div v-if="scope.row.customer_service" class="sa-flex sa-col-center">
  54. <el-avatar class="mr-2" :size="32"
  55. :src="Fast.api.cdnurl(scope.row.customer_service.avatar)">
  56. <img src="/assets/addons/shopro/img/default-avatar.png" />
  57. </el-avatar>
  58. <div>
  59. <div class="sa-table-line-1">
  60. {{ scope.row.customer_service.name || '-' }}
  61. </div>
  62. <div class="auth-id">
  63. {{ scope.row.customer_service.room_name }}
  64. </div>
  65. </div>
  66. </div>
  67. <div v-else>{{scope.row.customer_service_id}}</div>
  68. </template>
  69. </el-table-column>
  70. <el-table-column label="最后会话时间" width="172">
  71. <template #default="scope">
  72. {{ scope.row.last_time || '-' }}
  73. </template>
  74. </el-table-column>
  75. <el-table-column fixed="right" label="操作" min-width="120">
  76. <template #default="scope">
  77. {if $auth->check('shopro/chat/record/index')}
  78. <el-button type="primary" link @click="onRecord(scope.row)">查看</el-button>
  79. {/if}
  80. <el-popconfirm width="fit-content" confirm-button-text="确认" cancel-button-text="取消"
  81. title="此操作会删除当前会话所有聊天记录,是否确定?" @confirm="onDelete(scope.row.id)">
  82. <template #reference>
  83. {if $auth->check('shopro/chat/user/delete')}
  84. <el-button type="danger" link>删除</el-button>
  85. {/if}
  86. </template>
  87. </el-popconfirm>
  88. </template>
  89. </el-table-column>
  90. </el-table>
  91. </el-main>
  92. <el-footer class="sa-footer sa-flex sa-row-between sa-flex-wrap">
  93. <div class="sa-batch sa-flex">
  94. <div class="tip">
  95. 已选择 <span>{{batchHandle.data.length}}</span> 项</div>
  96. <div class="sa-flex">
  97. {if $auth->check('shopro/chat/user/delete')}
  98. <el-button type="danger" :disabled="!batchHandle.data.length" @click="onBatchHandle('delete')">删除
  99. </el-button>
  100. {/if}
  101. </div>
  102. </div>
  103. <sa-pagination v-model="pagination" @pagination-change="getData"></sa-pagination>
  104. </el-footer>
  105. </el-container>
  106. <sa-filter v-model="state.filter" @filter-change="onChangeFilter"></sa-filter>
  107. </div>