member-detail.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <template>
  2. <div class="detail-container">
  3. <el-page-header @back="goBack" content="会员详情"></el-page-header>
  4. <el-container>
  5. <el-header height="100">
  6. <div class="title">基础信息</div>
  7. <el-divider></el-divider>
  8. <el-row :gutter="20" class="member-info">
  9. <el-col :xs="24" :sm="4" :md="3" :lg="2">
  10. <el-avatar :size="80" :src="userDetail.avatar">
  11. <img src="https://cube.elemecdn.com/e/fd/0fc7d20532fdaf769a25683617711png.png"/>
  12. </el-avatar>
  13. </el-col>
  14. <el-col :xs="24" :sm="20" :md="21" :lg="22">
  15. <!-- 普通用户 -->
  16. <el-row :gutter="20" v-if="userDetail.type !== 'SERVICE'">
  17. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>昵称:</span><span>{{ userDetail.nickName }}</span><i class="el-icon-edit pointer" @click="editName()"></i></div></el-col>
  18. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>性别:</span><span>{{ userDetail.sex }}</span></div></el-col>
  19. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>微信手机号:</span><span>{{ userDetail.mobile }}</span></div></el-col>
  20. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>注册时间:</span><span>{{ userDetail.createTime }}</span></div></el-col>
  21. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>角色:</span><span>{{ userDetail.type | MEMBER_CURRENT_TYPE_FILTER }}</span></div></el-col>
  22. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>业务员:</span><span>{{ userDetail.serviceName ? userDetail.serviceName:'暂无' }}</span></div></el-col>
  23. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>业务员电话:</span><span>{{ userDetail.servicePhone ? userDetail.servicePhone:'暂无' }}</span></div></el-col>
  24. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div><el-button type="primary" size="small" @click="applyWorker">成为业务员</el-button></div></el-col>
  25. </el-row>
  26. <!-- 业务员 -->
  27. <el-row :gutter="20" v-if="userDetail.type === 'SERVICE'">
  28. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>昵称:</span><span>{{ userDetail.nickName }}</span><i class="el-icon-edit pointer" @click="editName()"></i></div></el-col>
  29. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>性别:</span><span>{{ userDetail.sex }}</span></div></el-col>
  30. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>微信手机号:</span><span>{{ userDetail.mobile }}</span></div></el-col>
  31. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>注册时间:</span><span>{{ userDetail.createTime }}</span></div></el-col>
  32. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>角色:</span><span>{{ userDetail.type | MEMBER_CURRENT_TYPE_FILTER }}</span></div></el-col>
  33. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>真实姓名:</span><span>{{ userDetail.workerName }}</span></div></el-col>
  34. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>手机号码:</span><span>{{ userDetail.workerPhone }}</span></div></el-col>
  35. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>职位:</span><span>{{ userDetail.position }}</span></div></el-col>
  36. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>收益:</span><span>{{ userDetail.totalAmount }}</span></div></el-col>
  37. <el-col :xs="24" :sm="12" :md="6" :lg="5"><div class="item"><span>客户:</span><span>{{ userDetail.customerNums }}</span></div></el-col>
  38. </el-row>
  39. </el-col>
  40. </el-row>
  41. </el-header>
  42. <el-main>
  43. <el-tabs v-model="activeName" @tab-click="handleClick">
  44. <el-tab-pane label="账户明细" name="account" v-if="userDetail.type === 'SERVICE'" lazy>
  45. <member-account :user="userDetail"/>
  46. </el-tab-pane>
  47. <el-tab-pane label="订单管理" name="order" lazy>
  48. <member-order :user="userDetail"/>
  49. </el-tab-pane>
  50. <el-tab-pane label="会员地址" name="address" lazy>
  51. <member-address :user="userDetail"/>
  52. </el-tab-pane>
  53. <el-tab-pane label="收藏记录" name="favorite" lazy>
  54. <member-favorite :user="userDetail"/>
  55. </el-tab-pane>
  56. <el-tab-pane label="浏览记录" name="browse" lazy>
  57. <member-browse :user="userDetail"/>
  58. </el-tab-pane>
  59. <el-tab-pane label="优惠券" name="coupon" lazy>
  60. <member-coupon :user="userDetail"/>
  61. </el-tab-pane>
  62. <el-tab-pane label="企微客户" name="customer" v-if="userDetail.type === 'SERVICE'" lazy>
  63. <member-customer :user="userDetail"/>
  64. </el-tab-pane>
  65. </el-tabs>
  66. </el-main>
  67. </el-container>
  68. </div>
  69. </template>
  70. <script>
  71. import MemberAccount from "@/components/Mall/Member/member-account";
  72. import MemberOrder from "@/components/Mall/Member/member-order";
  73. import MemberAddress from "@/components/Mall/Member/member-address";
  74. import MemberFavorite from "@/components/Mall/Member/member-favorite";
  75. import MemberBrowse from "@/components/Mall/Member/member-browse";
  76. import MemberCoupon from "@/components/Mall/Member/member-coupon";
  77. import MemberCustomer from "@/components/Mall/Member/member-customer";
  78. import {getMemberDetail, applyWorker, editNickname} from "@/api/member";
  79. export default {
  80. name: 'MemberDetail',
  81. componentName: 'MemberDetail',
  82. props: ['user'],
  83. components: {
  84. MemberAccount, MemberOrder, MemberAddress, MemberFavorite, MemberBrowse, MemberCoupon, MemberCustomer
  85. },
  86. data() {
  87. return {
  88. activeName: this.user.type === 'SERVICE' ? 'account' : 'order',
  89. userDetail: {}
  90. }
  91. },
  92. created() {
  93. this.getMemberDetail(this.user.userId)
  94. },
  95. methods: {
  96. // 返回列表
  97. goBack() {
  98. this.$emit('backListFromDetail')
  99. },
  100. // 切换显示
  101. handleClick(tab, event) {
  102. // console.log(tab, event);
  103. },
  104. // 获取会员详情
  105. getMemberDetail(userId) {
  106. getMemberDetail({ userId }).then(res => {
  107. this.userDetail = res.data
  108. })
  109. },
  110. // 成为业务员
  111. applyWorker() {
  112. this.$prompt('请输入企业微信手机号码', '成为业务员', {
  113. confirmButtonText: '确定',
  114. cancelButtonText: '取消',
  115. inputPattern: /^1[3456789]\d{9}$/,
  116. inputErrorMessage: '请输入正确的手机号码'
  117. }).then(({ value }) => {
  118. applyWorker({
  119. personalPhone: this.userDetail.mobile,
  120. workPhone: value,
  121. }).then(res => {
  122. this.getMemberDetail(this.user.userId);
  123. })
  124. }).catch(() => {
  125. });
  126. },
  127. // 修改昵称
  128. editName() {
  129. this.$prompt('请输入会员昵称', '修改会员昵称', {
  130. confirmButtonText: '确定',
  131. cancelButtonText: '取消',
  132. inputValue: this.userDetail.nickName,
  133. inputValidator: function(value) {
  134. if(!value) return '请输入会员昵称'
  135. },
  136. }).then(({ value }) => {
  137. editNickname({
  138. userId: this.user.userId,
  139. newNickName: value,
  140. }).then(res => {
  141. this.getMemberDetail(this.user.userId);
  142. })
  143. }).catch(() => {
  144. });
  145. },
  146. },
  147. beforeDestroy() {
  148. console.log("执行销毁前")
  149. }
  150. }
  151. </script>
  152. <style scoped lang="scss">
  153. .detail-container {
  154. width:100%;
  155. height: 100%;
  156. ::v-deep .el-container {
  157. margin-top: 20px;
  158. }
  159. ::v-deep .el-header {
  160. .title {
  161. font-size: 16px;
  162. }
  163. .el-row {
  164. //display: flex;
  165. /* 实现垂直居底 */
  166. //align-items: end;
  167. /* 实现水平居中 */
  168. //justify-content: center;
  169. .el-col {
  170. .item {
  171. padding: 10px 0;
  172. white-space:nowrap;
  173. }
  174. }
  175. }
  176. }
  177. }
  178. .pointer {
  179. cursor: pointer;
  180. color: #409EFF;
  181. margin-left: 5px;
  182. }
  183. </style>
  184. <style lang="scss">
  185. .pagination {
  186. margin-top: 30px;
  187. }
  188. </style>