選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

customer.vue 11 KiB

3年前
3年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
3年前
3年前
3年前
3年前
3年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
3年前
2年前
3年前
3年前
3年前
3年前
2年前
3年前
3年前
3年前
3年前
3年前
2年前
3年前
2年前
3年前
3年前
3年前
2年前
3年前
3年前
3年前
2年前
3年前
3年前
3年前
2年前
2年前
3年前
3年前
3年前
2年前
3年前
2年前
3年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
3年前
3年前
2年前
3年前
2年前
3年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
3年前
3年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
3年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
3年前
3年前
2年前
3年前
2年前
3年前
3年前
3年前
3年前
3年前
3年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
3年前
2年前
2年前
2年前
3年前
3年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. <template>
  2. <view class="cented-box">
  3. <view v-if="waitCustomList.length==0" style="width: 100%;height: 100%;display: flex;align-items: center;">
  4. <view style="width: 100%;padding-top: 200rpx;">
  5. <view style="width: 100%;text-align: center;">
  6. <image style="width: 220rpx;height: 200rpx;"
  7. src="https://static.quhouse.com/zhikong_xcx_img/nodatalist.png" mode=""></image>
  8. </view>
  9. <view style="text-align: center;width: 100%;margin-top: 20rpx;color: #999999;">暂无数据</view>
  10. </view>
  11. </view>
  12. <view class="customer" v-if="waitCustomList.length!=0" v-for="(item,index) in waitCustomList" :key='index'
  13. @click="tapThevisiting(item)">
  14. <view class="title">
  15. <view class="zuo">
  16. <!-- <view class="zuoimg">A</view> -->
  17. <view class="zuoname">{{item.name}}</view>
  18. </view>
  19. <view class="you">
  20. <view class="youimg1" v-if="item.status!=0"></view>
  21. <view class="youimg1-1" v-if="item.status==0"></view>
  22. <view class="youtext">{{item.status==0?"排队中":item.status==1?"接待中":"已完成"}}</view>
  23. </view>
  24. </view>
  25. <view class="centerbox" v-if="item.status!=0">
  26. <view class="centerbox-che">手机号码:<text class="shizai">{{item.phone || "--"}}</text></view>
  27. <view class="centerbox-che">开始时间:<text class="shizai">{{item.createTime}}</text></view>
  28. <view class="centerbox-che">顾问姓名:<text class="shizai" style="color: #333333;">{{item.agentName}}</text>
  29. </view>
  30. <view class="centerbox-che2" v-if="item.status==1">
  31. <view class="Workcard" v-if="item.status==1&&item.zkEquipmentState.onLine==0">设备状态:<text
  32. class="shizai" style="color: red;">离线</text></view>
  33. <view class="Workcard" v-if="item.status==1&&item.zkEquipmentState.onLine!=0">工牌电量:<text
  34. class="shizai" style="color: #333333;">{{item.zkEquipmentState.electricity}}%</text></view>
  35. <view class="Workcard" v-if="item.status==1&&item.zkEquipmentState.onLine==1">录音状态:
  36. <text v-if="item.zkEquipmentState.audioStatus=='true'" class="shizai"
  37. style="color: #333333;">使用中</text>
  38. <text v-if="item.zkEquipmentState.audioStatus=='false'" class="shizai"
  39. style="color: #333333;">未使用</text>
  40. </view>
  41. </view>
  42. </view>
  43. <view class="footer-button" v-if="item.status!=0">
  44. <view class="footer1" @click.stop="addTime(item)">接待延时</view>
  45. <view class="footer1" @click.stop="assign(item)">重新指派</view>
  46. <template v-if="endReception">
  47. <view class="footer3" @click.stop="changeEnd(item.id)">结束接待</view>
  48. </template>
  49. </view>
  50. <view class="centerbox" v-if="item.status==0">
  51. <view class="centerbox-che">手机号码:<text class="shizai">{{item.phone || "--"}}</text></view>
  52. </view>
  53. <view class="footer-button" v-if="item.status==0">
  54. <view class="footer3" @click.stop="assign(item)">指派顾问</view>
  55. </view>
  56. </view>
  57. <image v-if="isAdd == 0 && (dataCode!=6||(dataCode==6&&addAccount==0))" @click="addreception()" class="add"
  58. src="/static/images/add.png" mode=""></image>
  59. <image class="add2" @click="reshCustom()" src="https://static.quhouse.com/zhikong_xcx_img/refresh.png" mode="">
  60. </image>
  61. <u-tabbar activeColor="#1296db" inactiveColor="#999999" v-model="current" :list="tabbarList"></u-tabbar>
  62. </view>
  63. </template>
  64. <script>
  65. var util = require("../../utils/util.js");
  66. var config = require("../../config");
  67. import tabbarList from '@/utils/tabbar.js'
  68. export default {
  69. data() {
  70. return {
  71. tabbarList:tabbarList,
  72. current: 0,
  73. buildingID: '',
  74. waitCustomList: [],
  75. isAdd: '',
  76. dataCode: '',
  77. addAccount: '',
  78. endReception: true,
  79. fdFlag:null
  80. };
  81. },
  82. components: {},
  83. onLoad() {},
  84. onShow() {
  85. this.buildingID = uni.getStorageSync('buildingID').id;
  86. const {
  87. addAccount,
  88. dataCode
  89. } = uni.getStorageSync("weapp_session_userInfo_data");
  90. let menulist = uni.getStorageSync('weapp_session_Menu_data')
  91. this.endReception = menulist.findIndex(item => { return item.name == '结束接待' }) != -1
  92. this.addAccount = addAccount;
  93. this.dataCode = dataCode;
  94. console.log(this.menulist)
  95. this.init()
  96. this.queryHaveDept()
  97. this.updateInit()
  98. },
  99. methods: {
  100. updateInit() {
  101. uni.request({
  102. url: config.service.notReadNum,
  103. method: "GET",
  104. data: {
  105. id: uni.getStorageSync('weapp_session_userInfo_data').accountId
  106. },
  107. header: {
  108. 'content-type': 'application/json',
  109. 'Access-Token': uni.getStorageSync('weapp_session_login_data').token
  110. },
  111. success: (res) => {
  112. this.count = res.data.data
  113. this.tabbarList[3].count = res.data.data
  114. }
  115. })
  116. },
  117. reshCustom() {
  118. this.init()
  119. },
  120. tapThevisiting(item) {
  121. uni.showLoading({
  122. title: '加载中',
  123. mask: true
  124. });
  125. if (item.status == 0) {
  126. setTimeout(function() {
  127. uni.hideLoading();
  128. }, 2000);
  129. uni.showToast({
  130. icon: "none",
  131. title: "排队中"
  132. })
  133. return
  134. } else {
  135. const parames = {
  136. pageNum: 1,
  137. pageSize: 100,
  138. query: {
  139. customerId: item.id,
  140. }
  141. }
  142. var itemsd = {
  143. bg: 0,
  144. customerId: item.id,
  145. id: '',
  146. onebest: ''
  147. }
  148. this.$u.post("/corpus/findByPage", parames).then(res => {
  149. setTimeout(function() {
  150. uni.hideLoading();
  151. }, 2000);
  152. if (res) {
  153. let newobj = res[0];
  154. uni.navigateTo({
  155. url: `/pages/mine/details?customerId=${newobj.customerId}&status=${newobj.status}&itemobj=${JSON.stringify(itemsd)}&stateisshow=${"1"}`
  156. })
  157. } else {
  158. uni.showToast({
  159. icon: "none",
  160. title: "暂无音频"
  161. })
  162. return
  163. }
  164. })
  165. }
  166. },
  167. queryHaveDept() {
  168. return new Promise((resolve, reject) => {
  169. this.$u.get("/user/queryHaveDept?houseId=" + this.buildingID).then(res => {
  170. this.isAdd = res;
  171. resolve();
  172. })
  173. })
  174. },
  175. init() {
  176. this.waitCustomList = []
  177. let parames = {
  178. itemId: this.buildingID
  179. }
  180. this.$u.post("/customer/reception", parames).then(data => {
  181. this.waitCustomList = data;
  182. });
  183. },
  184. //延时接待
  185. addTime(item) {
  186. uni.showModal({
  187. content: "确定延长半小时接待时间?",
  188. cancelColor: "#999999",
  189. success: res => {
  190. if (res.confirm) {
  191. this.$u.post("/customer/delayed", {
  192. cusId: item.id
  193. }).then(res => {
  194. uni.showToast({
  195. icon: "none",
  196. title: "操作成功"
  197. })
  198. });
  199. }
  200. }
  201. })
  202. },
  203. //结束接待
  204. changeEnd(id) {
  205. uni.showModal({
  206. content: "确定更改当前客户接待状态为结束?",
  207. cancelColor: "#999999",
  208. success: res => {
  209. if (res.confirm) {
  210. let that = this
  211. clearTimeout(this.fdFlag)
  212. this.fdFlag = setTimeout(() => {
  213. this.$u.post("/customer/endReception", {
  214. id: id,
  215. houseId: this.buildingID
  216. }).then(res => {
  217. uni.showToast({
  218. icon: "none",
  219. title: "操作成功"
  220. })
  221. this.init();
  222. });
  223. that.fdFlag = null;
  224. }, 500)
  225. }
  226. }
  227. })
  228. },
  229. //新增接待
  230. addreception() {
  231. const {
  232. dataCode,
  233. addAccount
  234. } = uni.getStorageSync("weapp_session_userInfo_data");
  235. if (dataCode == 6) {
  236. if (addAccount != 0) {
  237. uni.showToast({
  238. title: '不允许自建客户!',
  239. duration: 2000
  240. });
  241. return
  242. }
  243. if (this.waitCustomList.length == 0) {
  244. uni.navigateTo({
  245. url: '/pages/mine/reception/addreception'
  246. })
  247. return
  248. } else {
  249. for (var i = 0; i < this.waitCustomList.length; i++) {
  250. if (this.waitCustomList[i].status == 1) {
  251. uni.showLoading({
  252. title: '当前还有未完成的客户项'
  253. });
  254. setTimeout(function() {
  255. uni.hideLoading();
  256. }, 1000);
  257. return
  258. } else {
  259. uni.navigateTo({
  260. url: '/pages/mine/reception/addreception'
  261. })
  262. return
  263. }
  264. }
  265. }
  266. } else {
  267. uni.navigateTo({
  268. url: '/pages/mine/reception/addreception'
  269. });
  270. }
  271. },
  272. assign(item) {
  273. let url = `/pages/mine/reception/consultant?id=${item.id}`
  274. if (item.beforeAgentId) {
  275. url += `&beforeAgentId=${item.beforeAgentId}`;
  276. }
  277. uni.navigateTo({
  278. url: url
  279. })
  280. },
  281. },
  282. };
  283. </script>
  284. <style lang="scss" scoped>
  285. .cented-box {
  286. background: #F8F8F8;
  287. width: 100%;
  288. height: 100vh;
  289. padding-bottom: 30rpx;
  290. }
  291. .customer {
  292. margin-top: 30rpx;
  293. width: 100%;
  294. background: #FFFFFF;
  295. box-shadow: 0px 0px 12px 0px rgba(224, 224, 224, 0.3);
  296. .title {
  297. height: 90rpx;
  298. border-bottom: 1px solid #E0E0E0;
  299. display: flex;
  300. align-items: center;
  301. .zuo {
  302. width: 80%;
  303. height: 100%;
  304. display: flex;
  305. align-items: center;
  306. .zuoimg {
  307. width: 52rpx;
  308. height: 52rpx;
  309. border-radius: 50%;
  310. border: 1px solid #C9C9C9;
  311. font-size: 30rpx;
  312. color: #292929;
  313. font-weight: 400;
  314. line-height: 52rpx;
  315. text-align: center;
  316. margin-left: 30rpx;
  317. }
  318. .zuoname {
  319. font-size: 30rpx;
  320. font-weight: 500;
  321. color: #333333;
  322. line-height: 30rpx;
  323. margin-left: 20rpx;
  324. }
  325. }
  326. .you {
  327. width: 20%;
  328. height: 100%;
  329. display: flex;
  330. align-items: center;
  331. .youimg1 {
  332. width: 12rpx;
  333. height: 12rpx;
  334. border-radius: 50%;
  335. background: #2B6EFF;
  336. }
  337. .youimg1-1 {
  338. width: 12rpx;
  339. height: 12rpx;
  340. border-radius: 50%;
  341. background: #F2A269;
  342. }
  343. .youtext {
  344. font-size: 30rpx;
  345. font-weight: 400;
  346. color: #292929;
  347. line-height: 30rpx;
  348. margin-left: 10rpx;
  349. }
  350. }
  351. }
  352. .centerbox {
  353. .centerbox-che {
  354. width: 100%;
  355. margin-top: 30rpx;
  356. height: 30rpx;
  357. font-size: 30rpx;
  358. font-weight: 400;
  359. color: #666666;
  360. line-height: 30rpx;
  361. text-indent: 30rpx;
  362. .shizai {
  363. color: #333333;
  364. }
  365. }
  366. .centerbox-che2 {
  367. width: 100%;
  368. margin-top: 30rpx;
  369. height: 30rpx;
  370. font-size: 30rpx;
  371. font-weight: 400;
  372. color: #666666;
  373. line-height: 30rpx;
  374. text-indent: 30rpx;
  375. display: flex;
  376. .Workcard {
  377. width: 50%;
  378. }
  379. }
  380. }
  381. .footer-button {
  382. margin-top: 30rpx;
  383. width: 100%;
  384. height: 90rpx;
  385. display: flex;
  386. font-size: 30rpx;
  387. font-weight: 400;
  388. color: #333333;
  389. border-top: 1rpx solid #E0E0E0;
  390. .footer1 {
  391. flex: 1;
  392. text-align: center;
  393. line-height: 90rpx;
  394. border-right: 1rpx solid #E0E0E0;
  395. }
  396. .footer3 {
  397. flex: 1;
  398. text-align: center;
  399. line-height: 90rpx;
  400. }
  401. }
  402. }
  403. .add {
  404. width: 90upx;
  405. height: 90upx;
  406. position: fixed;
  407. bottom:275upx;
  408. right: 44upx;
  409. }
  410. .add2 {
  411. width: 90upx;
  412. height: 90upx;
  413. position: fixed;
  414. bottom: 160upx;
  415. right: 44upx;
  416. }
  417. </style>