| | |
| | | <template> |
| | | <!-- 跟进记录 --> |
| | | <view> |
| | | <view class="container" @click="isShowComments = false"> |
| | | <view> |
| | | <h-tabs |
| | | class="tab" |
| | |
| | | fontSize: '28', |
| | | underLineWidth: 60, |
| | | }" |
| | | @tabClick="tabClick($event)" |
| | | @tabClick="changeType" |
| | | /> |
| | | </view> |
| | | <view class="content-row font-14" v-for="item in 2"> |
| | | <view class="content-row font-14" v-for="item in list"> |
| | | <view class="flex align-center"> |
| | | <image class="header-img" src="../../../static/images/default-avatar.png"></image> |
| | | <view class="flex flex-v ml-10"> |
| | | <text>杨明</text> |
| | | <text>2020-12 12:34</text> |
| | | <text>{{item.staffName}}</text> |
| | | <text class="gray font-12">{{item.createTime}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="mt-10"> |
| | | <text>截图服务了杨姐,她的面部比较干燥暗沉色斑较多,约下次来做一个面部护理</text> |
| | | <text>{{item.content}}</text> |
| | | </view> |
| | | <view class="mt-10 flex" :start="num"> |
| | | <image v-for="(item,index) in imgList" @click="previewImg(index)" class="content-img mr-10" :src="item"></image> |
| | | <view class="mt-10 mb-10 flex" :start="imgIndex"> |
| | | <image v-for="(op,index) in item.albums" @click="previewImg(item.albums,index)" class="content-img mr-10" :src="op.img"></image> |
| | | </view> |
| | | <view class="flex align-center justify-between mt-5"> |
| | | <text>客户:杨依依</text> |
| | | <view class="flex align-center"> |
| | | <view class="flex align-center justify-between mt-5 gray font-13"> |
| | | <text>客户: {{item.vipName}}</text> |
| | | <view class="flex align-center" v-if="item.nextNotifyTime"> |
| | | <text class="iconfont iconzhong mr-5"></text> |
| | | <text>2020-12-31 12:34</text> |
| | | <text>{{item.nextNotifyTime}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="mt-5"> |
| | | <text>订单:面部护理等</text> |
| | | <view class="mt-5 gray font-13"> |
| | | <text>订单:{{item.orderAbstract}}</text> |
| | | </view> |
| | | <view class="right mt-5"> |
| | | <text class="iconfont iconxin"></text> |
| | | <text class="iconfont iconliuyan1 ml-20" @click="showMessage"></text> |
| | | <text class="iconfont" :class="item.zans && item.zans.indexOf(userInfo.id)>-1?'red iconxin1':'iconxin2'" @click="thumbsUp(item)"></text> |
| | | <text class="iconfont iconliuyan1 ml-15" @click.stop="showComment(item.id)"></text> |
| | | </view> |
| | | <view class="content-row-notes flex align-center blue"> |
| | | <text class="iconfont iconxin mr-10"></text> |
| | | <text>李贝,拉拉</text> |
| | | <view class="content-row-notes flex align-center blue" v-if="item.zanUsers && item.zanUsers.length"> |
| | | <text class="iconfont iconxin2 mr-10"></text> |
| | | <text v-for="(op, i) in item.zanUsers">{{op.suName}}<text v-if="i!=item.zanUsers.length-1">,</text></text> |
| | | </view> |
| | | <view class="content-row-notes flex align-center blue"> |
| | | <text>李贝: 好的,继续跟进</text> |
| | | <view class="content-row-notes blue" v-if="item.followupComments && item.followupComments.length"> |
| | | <view v-for="op in item.followupComments">{{op.createBy}}: {{op.content}}</view> |
| | | </view> |
| | | </view> |
| | | <fillter :isShow="isShowFilter" @change="changeFilter"></fillter> |
| | | <view v-show="messageShow" class="message-row"> |
| | | <input type="text" cursor-spacing="10" :focus="messageShow" class="message-input" placeholder="评论" placeholder-class="placeholder"/> |
| | | <button class="green-btn message-btn">发送</button> |
| | | <view v-if="list.length"> |
| | | <uni-load-more :status="loadStatus" color="#a5abaf"></uni-load-more> |
| | | </view> |
| | | <view v-if="isShowComments" class="message-row" @click.stop=""> |
| | | <input type="text" v-model="comment" cursor-spacing="10" :focus="isShowComments" class="message-input" placeholder="评论" placeholder-class="placeholder"/> |
| | | <button class="green-btn message-btn" :disabled="!comment" @click="addFollowupComment">发送</button> |
| | | </view> |
| | | <fillter :isShow="isShowFilter" :staffList="staffList" :vipList="vipList" @reset="resetFilter" @change="changeFilter"></fillter> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import HTabs from "@/components/liuyuno-tabs/liuyuno-tabs.vue"; |
| | | import fillter from './filter' |
| | | import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue'; |
| | | export default { |
| | | components: { |
| | | HTabs, |
| | | fillter |
| | | fillter, |
| | | uniLoadMore |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | name: '我的团队' |
| | | } |
| | | ], |
| | | imgList:[ |
| | | '../../../static/images/banner.jpg', |
| | | '../../../static/images/product.jpg' |
| | | ], |
| | | messageShow:false, |
| | | type: 1, |
| | | list: [], |
| | | imgIndex: 0, |
| | | isShowComments:false, |
| | | isShowFilter: false, |
| | | num:0 |
| | | pageNum: 0, |
| | | loadStatus: 'more', |
| | | userInfo: {}, |
| | | comment: '', |
| | | follId: '', |
| | | staffList: [], |
| | | vipList: [], |
| | | startTime: '', |
| | | endTime: '' |
| | | } |
| | | }, |
| | | onNavigationBarButtonTap(e){ |
| | | if(e.index==0){ |
| | | uni.navigateTo({ |
| | | url:"./addRecord" |
| | | }) |
| | | } |
| | | if(e.index==1){ |
| | | this.isShowFilter = !this.isShowFilter; |
| | | } |
| | | }, |
| | | onLoad() { |
| | | this.getUserInfo() |
| | | this.reloadList() |
| | | }, |
| | | onPullDownRefresh(){ |
| | | this.reloadData(); |
| | | let timer = setTimeout(function () { |
| | | uni.startPullDownRefresh(); |
| | | clearTimeout(timer); |
| | | timer = null; |
| | | }, 800); |
| | | }, |
| | | onReachBottom(){ |
| | | this.loadList() |
| | | }, |
| | | methods:{ |
| | | getUserInfo(){ |
| | | let roleInfo = this.$httpUtils.getRoleInfo(); |
| | | if(roleInfo){ |
| | | this.userInfo = roleInfo; |
| | | } |
| | | }, |
| | | reloadList(){ |
| | | this.pageNum = 0; |
| | | this.loadStatus = 'more'; |
| | | this.loadList(true) |
| | | }, |
| | | loadList(isRest){ |
| | | if(this.loadStatus!=='more'){ |
| | | return; |
| | | } |
| | | let staffIds = this.staffList.map((item) => { |
| | | return item.id; |
| | | }); |
| | | let vipIds = this.vipList.map((item) => { |
| | | return item.id; |
| | | }); |
| | | this.$httpUtils.request('/api/followup/findFollowup', { |
| | | startTime: this.startTime, |
| | | endTime: this.endTime, |
| | | limit: 10, |
| | | offset: this.pageNum, |
| | | queryType: this.type, |
| | | staffIds: staffIds, |
| | | vipIds: vipIds |
| | | }, 'POST').then((res) => { |
| | | if(res.status == 200){ |
| | | let result = res.rows; |
| | | if(result.length < 10){ |
| | | this.loadStatus = 'noMore'; |
| | | } else { |
| | | this.pageNum ++ ; |
| | | this.loadStatus = 'more'; |
| | | } |
| | | if(isRest){ |
| | | this.list = result |
| | | }else{ |
| | | this.list = this.list.concat(result); |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | changeType(index){ |
| | | this.type = index+1; |
| | | this.reloadList() |
| | | }, |
| | | // 预览图片 |
| | | previewImg(index) { |
| | | // let imgArr=[] |
| | | // imgArr.push(image) |
| | | //预览图片 |
| | | previewImg(imgList, index) { |
| | | if(!imgList.length){ |
| | | return; |
| | | } |
| | | this.imgIndex = index; |
| | | imgList = imgList.map((item) => { |
| | | return item.img; |
| | | }); |
| | | uni.previewImage({ |
| | | urls: this.imgList, |
| | | indicator:'default', |
| | | urls: imgList, |
| | | indicator: 'default', |
| | | loop:true |
| | | }) |
| | | }, |
| | | onNavigationBarButtonTap(e){ |
| | | if(e.index==0){ |
| | | uni.navigateTo({ |
| | | url:"./addRecord" |
| | | }) |
| | | } |
| | | if(e.width && e.index==1){ |
| | | this.isShowFilter = !this.isShowFilter; |
| | | // 点赞 |
| | | thumbsUp(item){ |
| | | this.$httpUtils.request('/api/followup/zanFollowup/'+item.id).then((res) => { |
| | | if(res.status == 200){ |
| | | this.reloadList() |
| | | } |
| | | }) |
| | | }, |
| | | // 评论 |
| | | addFollowupComment(){ |
| | | this.$httpUtils.request('/api/followup/addFollowupComment', { |
| | | follId: this.follId, |
| | | content: this.comment |
| | | }, 'POST').then((res) => { |
| | | if(res.status == 200){ |
| | | this.reloadList(); |
| | | this.isShowComments = false; |
| | | this.comment = ''; |
| | | }else{ |
| | | this.$toast.info(res.info) |
| | | } |
| | | }) |
| | | }, |
| | | showComment(id){ |
| | | this.follId = id; |
| | | this.isShowComments=true; |
| | | }, |
| | | setData(selectItem){ |
| | | let pages = getCurrentPages(); |
| | | let prevPage = pages[ pages.length - 1 ]; |
| | | if(prevPage.route.indexOf('selectCustomer') > -1){ |
| | | this.vipList = selectItem; |
| | | }else{ |
| | | this.staffList = selectItem; |
| | | } |
| | | }, |
| | | showMessage(){ |
| | | this.messageShow=!this.messageShow |
| | | // 重置筛选条件 |
| | | resetFilter(){ |
| | | this.startTime = ''; |
| | | this.endTime = ''; |
| | | this.staffList = []; |
| | | this.vipList = []; |
| | | this.reloadList(); |
| | | }, |
| | | changeFilter(data){ |
| | | this.startTime = data.startTime; |
| | | this.endTime = data.endTime; |
| | | this.reloadList(); |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | |
| | | <style> |
| | | page{ |
| | | background: #F6F6F8; |
| | | height: 100%; |
| | | } |
| | | .container{ |
| | | height: 100%; |
| | | } |
| | | .tab{ |
| | | background: #FFFFFF; |
| | |
| | | height: 80px; |
| | | } |
| | | .content-row-notes{ |
| | | line-height: 20px; |
| | | line-height: 22px; |
| | | background: #F6F6F8; |
| | | padding: 5px; |
| | | margin-top: 10px; |
| | | margin-top: 5px; |
| | | font-size: 13px; |
| | | } |
| | | .message-row{ |
| | | display: flex; |
| | |
| | | background: #FFFFFF; |
| | | height: 30px; |
| | | margin-right: 5px; |
| | | padding-left: 5px; |
| | | padding-right: 5px; |
| | | } |
| | | .message-btn{ |
| | | margin: 0; |
| | | line-height: 30px; |
| | | border-radius: 0; |
| | | font-size: 14px; |
| | | } |
| | | uni-button[disabled]:not([type]), uni-button[disabled][type=default]{ |
| | | color: #FFFFFF; |
| | | background-color: rgb(31 183 19 / 0.4); |
| | | border: 0; |
| | | } |
| | | </style> |