clientDetail.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <view>
  3. <view class="user-header dflex">
  4. <image class="header-pic" :src="info.avatar?info.avatar:'../../static/images/userimg.png'"></image>
  5. <view>
  6. <view class="user-name">{{info.nickName}}</view>
  7. <view class="ddflex">
  8. <block v-if="info.labelName&&info.labelName.length>0">
  9. <view class="user-tag user-tag-t" v-for="it,idx in info.labelName" :key="idx+'l'">{{it}}</view>
  10. </block>
  11. </view>
  12. </view>
  13. </view>
  14. <view class="form">
  15. <view class="form-title">客户资料</view>
  16. <view class="ddflex form-item">
  17. <view class="form-label">销售员工号</view>
  18. <view class="form-data fflex">{{info.manageSaleNo?info.manageSaleNo:'-'}}</view>
  19. </view>
  20. <view class="ddflex form-item">
  21. <view class="form-label">姓名</view>
  22. <view class="form-data fflex">{{info.realName?info.realName:'-'}}</view>
  23. </view>
  24. <view class="ddflex form-item">
  25. <view class="form-label">性别</view>
  26. <view class="form-data fflex">{{info.gender==1?'男':info.gender==2?'女':'-'}}</view>
  27. </view>
  28. <view class="ddflex form-item">
  29. <view class="form-label">联系电话</view>
  30. <view class="form-data ddflex fflex">
  31. <view class="fflex ddflex">
  32. <text>{{info.mobile?styTelTextFn(info.mobile):'-'}}</text>
  33. <image v-if="info.mobile" style="width: 27rpx;height: 27rpx;margin-left: 10rpx;"
  34. src="../static/images/copy.png" @click="copy(info.mobile)"></image>
  35. </view>
  36. <view v-if="info.mobile" class="ddflex form-btn" @click.stop="callPhone(info.mobile)">
  37. <image style="width: 22rpx;height: 22rpx;margin-right: 10rpx;"
  38. src="../../static/pages/images/phone1.png"></image>
  39. 联系
  40. </view>
  41. </view>
  42. </view>
  43. <view class="ddflex form-item">
  44. <view class="form-label">客户类别</view>
  45. <view class="form-data fflex">
  46. <block v-if="info.customTypeName&&info.customTypeName.length>0">{{info.customTypeName.join(',')}}
  47. </block>
  48. <block>-</block>
  49. </view>
  50. </view>
  51. <view class="ddflex form-item">
  52. <view class="form-label">客户来源</view>
  53. <view class="form-data fflex">小程序</view>
  54. </view>
  55. <!-- <view class="ddflex form-item">
  56. <view class="form-label">网格地址编码</view>
  57. <view class="form-data fflex">-</view>
  58. </view> -->
  59. <view class="ddflex form-item">
  60. <view class="form-label">保单</view>
  61. <view class="form-data fflex">{{info.warrantyCount?info.warrantyCount:0}}</view>
  62. </view>
  63. <view class="ddflex form-item">
  64. <view class="form-label">共计保费</view>
  65. <view class="form-data fflex">{{info.warrantyMoney?info.warrantyMoney:0}}元</view>
  66. </view>
  67. <view class="dflex form-item" v-if="info.associationProduct&&info.associationProduct.length>0">
  68. <view class="form-label">关联产品</view>
  69. <view class="form-data fflex">
  70. <view style="margin-bottom: 8rpx;" v-for="it,idx in info.associationProduct" :key="idx">{{it}}
  71. </view>
  72. </view>
  73. </view>
  74. <!-- <view class="form-title" style="margin-top: 50rpx;">经营服务策略</view>
  75. <view class="c-info">
  76. 刺激消费频率
  77. </view> -->
  78. </view>
  79. <view class="dt-box ddflex">
  80. <view class="dt-title">客户动态</view>
  81. <view class="more ddflex" @click="jumpUrl('/mine/clientDynamic/clientDynamic?id='+id)">
  82. 查看更多
  83. <image style="width: 9rpx;height: 18rpx;margin-left: 10rpx;" src="/static/images/rico.png"></image>
  84. </view>
  85. </view>
  86. <view class="log">
  87. <view v-if="logsList && logsList.length > 0" v-for="(it, index) in logsList" :key="index">
  88. <view class="time-year" v-if="todayYear!=it.year && index==0 || (index!=0 && (it.year!=logsList[index-1].year))">{{ it.year }}年</view>
  89. <view class="dflex">
  90. <view class="time-sort">
  91. <block v-if="index==0 || (index!=0 && (it.day!=logsList[index-1].day||it.month!=logsList[index-1].month||it.year!=logsList[index-1].year))">
  92. <text v-if="todayYear==it.year&&todayMonth==it.month&&todayDay==it.day">今日</text>
  93. <block v-else>
  94. <text>{{it.day}}</text>{{ it.month }}月
  95. </block>
  96. </block>
  97. </view>
  98. <view class="li fflex">
  99. <image src="/mine/static/images/jcico.png" class="jcico"></image>
  100. <view class="time">{{ it.time }}</view>
  101. <!-- <view class="des" v-if="it.brief">{{ it.brief }}</view> -->
  102. <rich-text class="des" :nodes="it.content"></rich-text>
  103. </view>
  104. </view>
  105. </view>
  106. <view v-if="!logsList || logsList.length == 0" class="nodata">
  107. <image src="/mine/static/images/empty.png" mode="aspectFit"></image>
  108. <view>暂无记录~</view>
  109. </view>
  110. </view>
  111. </view>
  112. </template>
  113. <script>
  114. const app = getApp();
  115. const req = require("../../utils/request.js");
  116. const utils = require("../../utils/util.js")
  117. export default {
  118. components: {},
  119. props: {},
  120. data() {
  121. return {
  122. id: '',
  123. info: {},
  124. logsList:[{
  125. createDate:'2023-03-04',
  126. brief:'阅读了《3·15|手把手教你读懂“食品标签”,拒绝被“坑”》',
  127. logsContent:'sss',
  128. year:"2023",
  129. month:"10",
  130. day:'30',
  131. time:'12:00'
  132. },{
  133. createDate:'2023-03-04',
  134. brief:'浏览了中医馆私域解决方案',
  135. logsContent:'sss',
  136. year:"2023",
  137. month:"3",
  138. day:'04',
  139. time:'12:00'
  140. },{
  141. createDate:'2023-03-04',
  142. brief:'填写了表单《英才少儿教育精品VIP课程试听报名》',
  143. logsContent:'sss',
  144. year:"2023",
  145. month:"3",
  146. day:'03',
  147. time:'12:00'
  148. },{
  149. createDate:'2023-03-04',
  150. brief:'浏览了中医馆私域解决方案',
  151. logsContent:'sss',
  152. year:"2023",
  153. month:"3",
  154. day:'03',
  155. time:'12:00'
  156. },{
  157. createDate:'2023-03-04',
  158. brief:'填写了表单《英才少儿教育精品VIP课程试听报名》',
  159. logsContent:'sss',
  160. year:"2023",
  161. month:"2",
  162. day:'04',
  163. time:'12:00'
  164. },{
  165. createDate:'2023-03-04',
  166. brief:'浏览了中医馆私域解决方案',
  167. logsContent:'sss',
  168. year:"2022",
  169. month:"2",
  170. day:'04',
  171. time:'12:00'
  172. },{
  173. createDate:'2023-03-04',
  174. brief:'填写了表单《英才少儿教育精品VIP课程试听报名》',
  175. logsContent:'sss',
  176. year:"2022",
  177. month:"2",
  178. day:'03',
  179. time:'12:00'
  180. }],
  181. todayYear:'',
  182. todayMonth:'',
  183. todayDay:''
  184. }
  185. },
  186. onLoad(options) {
  187. this.id = options.id
  188. this.getDetail()
  189. this.todayYear = new Date().getFullYear()
  190. this.todayMonth = new Date().getMonth() + 1
  191. this.todayDay = new Date().getDate()
  192. },
  193. onShow() {
  194. this.getDynamic()
  195. },
  196. methods: {
  197. jumpUrl(url){
  198. if(!url) return false
  199. uni.navigateTo({
  200. url:url
  201. })
  202. },
  203. getDetail() {
  204. req.getRequest('/api/user/getUserInfoBySaleNo', {
  205. userId: this.id
  206. }, res => {
  207. this.info = res
  208. })
  209. },
  210. styTelTextFn(data) {
  211. return utils.styTelText(data)
  212. },
  213. // 复制
  214. copy(val) {
  215. uni.setClipboardData({
  216. data: val,
  217. complete() {
  218. req.msg('复制成功')
  219. }
  220. })
  221. },
  222. // 拨打电话
  223. callPhone(val) {
  224. if (!val) return false
  225. uni.makePhoneCall({
  226. phoneNumber: val
  227. });
  228. },
  229. getDate(dateStr){
  230. if(!dateStr) return false
  231. let date = new Date(dateStr)
  232. const year = date.getFullYear();
  233. const month = date.getMonth() + 1;
  234. const day = date.getDate();
  235. const hour = date.getHours();
  236. const minute = date.getMinutes();
  237. const second = date.getSeconds();
  238. return {
  239. year:year,
  240. month:month,
  241. day:day,
  242. hour:hour,
  243. minute:minute,
  244. second:second,
  245. }
  246. },
  247. getDynamic(){
  248. req.getRequest('/api/user/getUserTrends',{uid:this.id,page:1,limit:5},res=>{
  249. this.logsList = res&&res.list?res.list:[],
  250. this.logsList.map(item=>{
  251. let t = this.getDate(item.createDate)
  252. item.year = t.year
  253. item.month = t.month
  254. item.day = t.day
  255. item.time = (t.hour<10?('0'+t.hour):t.hour)+':'+(t.minute<10?('0'+t.minute):t.minute)
  256. })
  257. })
  258. }
  259. },
  260. mounted() {},
  261. }
  262. </script>
  263. <style>
  264. @import "./clientDetail.css";
  265. </style>