You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1534 lines
39 KiB

  1. <template>
  2. <view class="box">
  3. <view class="top-search">
  4. <view class="search-box">
  5. <view class="search" @click="goSearch">
  6. <view class="search-img">
  7. <image
  8. class="search-img1"
  9. src="../../../static/images/search.png"
  10. mode=""
  11. ></image>
  12. </view>
  13. <view class="search-text">输入客户姓名/手机号</view>
  14. </view>
  15. </view>
  16. <image
  17. class="filter-icon"
  18. @click="screenShow = true"
  19. src="https://static.quhouse.com/f4feade4a19d413085b591612179457f.png"
  20. mode=""
  21. />
  22. </view>
  23. <!-- 选择器 -->
  24. <view class="boxtittab" style="border: none">
  25. <view class="tabbox" @click="soltishow = true" :style="sortFilter=='排序'?'color:#666':'color:#409eff'">
  26. {{ sortFilter }}
  27. <u-icon
  28. name="arrow-down"
  29. size="24"
  30. style="padding-left: 12rpx"
  31. ></u-icon>
  32. </view>
  33. <view class="tabbox" @click="timeshow = true" :style="arriveFilter=='到访时间'?'color:#666':'color:#409eff'">
  34. {{ arriveFilter }}
  35. <u-icon
  36. name="arrow-down"
  37. size="24"
  38. style="padding-left: 12rpx"
  39. ></u-icon>
  40. </view>
  41. <view class="tabbox" @click="selectshow = true" :style="receptionDuration=='所属顾问'?'color:#666':'color:#409eff'">
  42. {{ receptionDuration }}
  43. <u-icon
  44. name="arrow-down"
  45. size="24"
  46. style="padding-left: 12rpx"
  47. ></u-icon>
  48. </view>
  49. <view class="tabbox" @click="huaxiangShow = true">
  50. 画像标签
  51. <u-icon
  52. name="arrow-down"
  53. size="24"
  54. style="padding-left: 12rpx"
  55. ></u-icon>
  56. </view>
  57. </view>
  58. <view class="count" v-if="recordList.length > 0">
  59. 筛选结果:<text>{{ totalRecords }} </text>条
  60. </view>
  61. <view class="content">
  62. <view
  63. v-if="recordList.length == 0"
  64. style="width: 100%; height: 100%; display: flex; align-items: center"
  65. >
  66. <view style="width: 100%; padding-top: 200rpx; background: #ffffff">
  67. <view style="width: 100%; text-align: center">
  68. <image
  69. style="width: 220rpx; height: 200rpx"
  70. src="https://static.quhouse.com/zhikong_xcx_img/nodatalist.png"
  71. mode=""
  72. ></image>
  73. </view>
  74. <view
  75. style="
  76. text-align: center;
  77. width: 100%;
  78. margin-top: 20rpx;
  79. color: #999999;
  80. "
  81. >暂无数据</view
  82. >
  83. </view>
  84. </view>
  85. <view
  86. v-if="recordList.length != 0"
  87. class="content-tips"
  88. v-for="(item, index) in recordList"
  89. :key="index"
  90. @click="gotoDetail(item.id)"
  91. >
  92. <view class="content-first">
  93. <view class="left">
  94. <view v-if="item.level.length == 0"></view>
  95. <view class="img" v-else-if="item.level == 1">A</view>
  96. <view class="img" v-else-if="item.level == 2">B</view>
  97. <view class="img" v-else-if="item.level == 3">C</view>
  98. <view class="img" v-else-if="item.level == 4">D</view>
  99. <view class="test">{{ item.name }}</view>
  100. </view>
  101. <view class="right">
  102. <view class="test"
  103. >销讲执行:<text class="blue"
  104. >{{ item.fraction || 0 }}%</text
  105. ></view
  106. >
  107. </view>
  108. </view>
  109. <view class="content-sec">
  110. <view class="content-sec-lab">
  111. <view class="content-sec-lab1"
  112. >手机号码:{{ item.phone || "--" }}</view
  113. >
  114. <view class="content-sec-lab1" style="width: 44%"
  115. >到访次数:{{ item.visitRecord || 0 }}次/{{
  116. item.mm || 0
  117. }}min</view
  118. >
  119. </view>
  120. <view class="content-sec-lab">
  121. <view class="content-sec-lab1"
  122. >需求挖掘:{{ item.wordFraction || 0 }}%</view
  123. >
  124. <view class="content-sec-lab1" style="width: 44%"
  125. >画像标签:<text style="font-weight: 600">{{
  126. item.demand.cusSemanticWordsList.length || 0
  127. }}</text></view
  128. >
  129. </view>
  130. <view class="content-sec-lab">
  131. <view class="content-sec-lab1"
  132. >所属顾问:{{ item.agentName || "--" }}</view
  133. >
  134. <view class="content-sec-lab1" style="width: 44%"
  135. >客户阶段:{{ item.stageName || "--" }}</view
  136. >
  137. </view>
  138. <view class="content-sec-lab">
  139. <view class="content-sec-lab1"
  140. >上次到访:{{ item.createTime || "--" }}</view
  141. >
  142. </view>
  143. </view>
  144. <view class="content-last" v-if="item.isshow">
  145. <view class="content-last-tab">
  146. <!-- <image class="icon" src="https://static.quhouse.com/5daebdec0aad4f63a62d3720437034bc.png" mode="" />
  147. 添加提醒 -->
  148. </view>
  149. <view class="content-last-tab">
  150. <!-- <image class="icon" src="https://static.quhouse.com/b867df5efc72480f8c1f3bc9399c7d6c.png" mode="" />
  151. 拨打电话 -->
  152. </view>
  153. <view class="content-last-tab" @click.stop="gotoFollowUp(item.id)">
  154. <image
  155. class="icon"
  156. src="https://static.quhouse.com/3730fc3a185c4d65ae6a1821601038ab.png"
  157. mode=""
  158. />
  159. 写跟进</view
  160. >
  161. </view>
  162. </view>
  163. </view>
  164. <!-- 更多筛选 -->
  165. <u-popup v-model="screenShow" mode="top" height="900">
  166. <view class="screen">
  167. <scroll-view scroll-y="true" style="height: 750rpx;">
  168. <!-- 咨询业务 -->
  169. <!-- <view class="screen-record">
  170. <view class="screen-record-text" @click="zixunArrow = !zixunArrow">
  171. 咨询业务<image
  172. v-if="zixunArrow"
  173. class="arrow"
  174. src="https://static.quhouse.com/6cf38a2b82694392a7ab6eea24ce76b1.png"
  175. mode=""
  176. />
  177. <image
  178. v-else
  179. class="arrow"
  180. src="https://static.quhouse.com/17d69984ec7c4830b43f712016f06807.png"
  181. mode=""
  182. />
  183. </view>
  184. <view class="screen-record-tab" v-if="zixunArrow">
  185. <block v-for="(item, index) in zixunList" :key="index">
  186. <view
  187. class="screen-record-item"
  188. :class="[
  189. item.isShow ? 'screen-record-chose' : 'screen-record-nochose',
  190. ]"
  191. @click="choice(item)"
  192. >
  193. {{ item.label }}
  194. </view>
  195. </block>
  196. </view>
  197. </view> -->
  198. <!-- 接待时长 -->
  199. <view class="screen-record">
  200. <view class="screen-record-text" @click="jiedaiArrow = !jiedaiArrow">
  201. 接待时长<image
  202. v-if="jiedaiArrow"
  203. class="arrow"
  204. src="https://static.quhouse.com/6cf38a2b82694392a7ab6eea24ce76b1.png"
  205. mode=""
  206. />
  207. <image
  208. v-else
  209. class="arrow"
  210. src="https://static.quhouse.com/17d69984ec7c4830b43f712016f06807.png"
  211. mode=""
  212. />
  213. </view>
  214. <view class="screen-record-tab" v-if="jiedaiArrow">
  215. <block v-for="(item, index) in jiedaiList" :key="index">
  216. <view
  217. class="screen-record-item"
  218. :class="[
  219. item.isShow ? 'screen-record-chose' : 'screen-record-nochose',
  220. ]"
  221. @click="choice(item)"
  222. >
  223. {{ item.label }}
  224. </view>
  225. </block>
  226. </view>
  227. </view>
  228. <!-- 客户等级 -->
  229. <view class="screen-record">
  230. <view class="screen-record-text" @click="levelArrow = !levelArrow">
  231. 客户等级<image
  232. v-if="levelArrow"
  233. class="arrow"
  234. src="https://static.quhouse.com/6cf38a2b82694392a7ab6eea24ce76b1.png"
  235. mode=""
  236. />
  237. <image
  238. v-else
  239. class="arrow"
  240. src="https://static.quhouse.com/17d69984ec7c4830b43f712016f06807.png"
  241. mode=""
  242. />
  243. </view>
  244. <view class="screen-record-tab" v-if="levelArrow">
  245. <block v-for="(item, index) in levelList" :key="index">
  246. <view
  247. class="screen-record-item"
  248. :class="[
  249. item.isShow ? 'screen-record-chose' : 'screen-record-nochose',
  250. ]"
  251. @click="choice(item)"
  252. >
  253. {{ item.label }}
  254. </view>
  255. </block>
  256. </view>
  257. </view>
  258. <!-- 客户来源 -->
  259. <view class="screen-record">
  260. <view class="screen-record-text" @click="sourceArrow = !sourceArrow">
  261. 客户来源<image
  262. v-if="sourceArrow"
  263. class="arrow"
  264. src="https://static.quhouse.com/6cf38a2b82694392a7ab6eea24ce76b1.png"
  265. mode=""
  266. />
  267. <image
  268. v-else
  269. class="arrow"
  270. src="https://static.quhouse.com/17d69984ec7c4830b43f712016f06807.png"
  271. mode=""
  272. />
  273. </view>
  274. <view class="screen-record-tab" v-if="sourceArrow">
  275. <block v-for="(item, index) in sourceList" :key="index">
  276. <view
  277. class="screen-record-item"
  278. :class="[
  279. item.isShow ? 'screen-record-chose' : 'screen-record-nochose',
  280. ]"
  281. @click="choice(item)"
  282. >
  283. {{ item.label }}
  284. </view>
  285. </block>
  286. </view>
  287. </view>
  288. <!-- 客户阶段 -->
  289. <view class="screen-record">
  290. <view
  291. class="screen-record-text"
  292. @click="jieduanArrow = !jieduanArrow"
  293. >
  294. 客户阶段<image
  295. v-if="jieduanArrow"
  296. class="arrow"
  297. src="https://static.quhouse.com/6cf38a2b82694392a7ab6eea24ce76b1.png"
  298. mode=""
  299. />
  300. <image
  301. v-else
  302. class="arrow"
  303. src="https://static.quhouse.com/17d69984ec7c4830b43f712016f06807.png"
  304. mode=""
  305. />
  306. </view>
  307. <view class="screen-record-tab" v-if="jieduanArrow">
  308. <block v-for="(item, index) in phaseList" :key="index">
  309. <view
  310. class="screen-record-item"
  311. :class="[
  312. item.isShow ? 'screen-record-chose' : 'screen-record-nochose',
  313. ]"
  314. @click="choice(item)"
  315. >
  316. {{ item.label }}
  317. </view>
  318. </block>
  319. </view>
  320. </view>
  321. <!-- 需求挖掘率 -->
  322. <view class="screen-record">
  323. <view class="screen-record-text" @click="wajueArrow = !wajueArrow">
  324. 需求挖掘率<image
  325. v-if="wajueArrow"
  326. class="arrow"
  327. src="https://static.quhouse.com/6cf38a2b82694392a7ab6eea24ce76b1.png"
  328. mode=""
  329. />
  330. <image
  331. v-else
  332. class="arrow"
  333. src="https://static.quhouse.com/17d69984ec7c4830b43f712016f06807.png"
  334. mode=""
  335. />
  336. </view>
  337. <view class="screen-record-tab" v-if="wajueArrow">
  338. <block v-for="(item, index) in wajueList" :key="index">
  339. <view
  340. class="screen-record-item"
  341. :class="[
  342. item.isShow ? 'screen-record-chose' : 'screen-record-nochose',
  343. ]"
  344. @click="choice(item)"
  345. >
  346. {{ item.label }}
  347. </view>
  348. </block>
  349. </view>
  350. </view>
  351. <!-- 销讲执行率 -->
  352. <view class="screen-record">
  353. <view
  354. class="screen-record-text"
  355. @click="xiaojiangArrow = !xiaojiangArrow"
  356. >
  357. 销讲执行率
  358. <image
  359. v-if="xiaojiangArrow"
  360. class="arrow"
  361. src="https://static.quhouse.com/6cf38a2b82694392a7ab6eea24ce76b1.png"
  362. mode=""
  363. />
  364. <image
  365. v-else
  366. class="arrow"
  367. src="https://static.quhouse.com/17d69984ec7c4830b43f712016f06807.png"
  368. mode=""
  369. />
  370. </view>
  371. <view class="screen-record-tab" v-if="xiaojiangArrow">
  372. <block v-for="(item, index) in xiaojiangList" :key="index">
  373. <view
  374. class="screen-record-item"
  375. :class="[
  376. item.isShow ? 'screen-record-chose' : 'screen-record-nochose',
  377. ]"
  378. @click="choice(item)"
  379. >
  380. {{ item.label }}
  381. </view>
  382. </block>
  383. </view>
  384. </view>
  385. <!-- 到访次数 -->
  386. <view class="screen-record">
  387. <view class="screen-record-text" @click="visitArrow = !visitArrow">
  388. 到访次数<image
  389. v-if="visitArrow"
  390. class="arrow"
  391. src="https://static.quhouse.com/6cf38a2b82694392a7ab6eea24ce76b1.png"
  392. mode=""
  393. />
  394. <image
  395. v-else
  396. class="arrow"
  397. src="https://static.quhouse.com/17d69984ec7c4830b43f712016f06807.png"
  398. mode=""
  399. />
  400. </view>
  401. <view class="screen-record-tab" v-if="visitArrow">
  402. <block v-for="(item, index) in visitList" :key="index">
  403. <view
  404. class="screen-record-item"
  405. :class="[
  406. item.isShow ? 'screen-record-chose' : 'screen-record-nochose',
  407. ]"
  408. @click="choice(item)"
  409. >
  410. {{ item.label }}
  411. </view>
  412. </block>
  413. </view>
  414. </view>
  415. </scroll-view>
  416. <view class="screen-foot">
  417. <view class="screen-foot-reset" @click="reset"> 重置 </view>
  418. <view class="screen-foot-sure" @click="screensure"> 确定 </view>
  419. </view>
  420. </view>
  421. </u-popup>
  422. <!-- 选择顾问的选择框 -->
  423. <u-select
  424. v-model="selectshow"
  425. :list="freeList"
  426. @confirm="actionSelectCallback"
  427. ></u-select>
  428. <!-- 客户阶段 -->
  429. <!-- <u-select
  430. v-model="selectPhaseShow"
  431. :list="phaseList"
  432. @confirm="selectPhase"
  433. ></u-select> -->
  434. <u-calendar
  435. v-model="totalTimeShow"
  436. mode="range"
  437. @change="totalTimeChange"
  438. ></u-calendar>
  439. <!-- 到访时间 -->
  440. <u-popup v-model="timeshow" mode="bottom">
  441. <view
  442. class="timeview"
  443. :style="{ color: activeTotal == 5 ? '#2B6EFF' : '#333333' }"
  444. @click="tabtimetap(5, '接待时间')"
  445. >
  446. 全部</view
  447. >
  448. <view
  449. class="timeview"
  450. :style="{ color: activeTotal == 0 ? '#2B6EFF' : '#333333' }"
  451. @click="tabtimetap(0, '今天')"
  452. >
  453. 今天</view
  454. >
  455. <view
  456. class="timeview"
  457. :style="{ color: activeTotal == 1 ? '#2B6EFF' : '#333333' }"
  458. @click="tabtimetap(1, '昨天')"
  459. >
  460. 昨天</view
  461. >
  462. <view
  463. class="timeview"
  464. :style="{ color: activeTotal == 2 ? '#2B6EFF' : '#333333' }"
  465. @click="tabtimetap(2, '近7天')"
  466. >
  467. 近7天</view
  468. >
  469. <view
  470. class="timeview"
  471. :style="{ color: activeTotal == 6 ? '#2B6EFF' : '#333333' }"
  472. @click="tabtimetap(6, '近30天')"
  473. >
  474. 近30天</view
  475. >
  476. <view
  477. class="timeview"
  478. :style="{ color: activeTotal == 4 ? '#2B6EFF' : '#333333' }"
  479. @click="tabtimetap(4)"
  480. >
  481. 自定义</view
  482. >
  483. </u-popup>
  484. <!-- 画像标签 -->
  485. <u-popup v-model="huaxiangShow" mode="top" height="850">
  486. <view class="screen">
  487. <scroll-view scroll-y="true" style="height: 700rpx;">
  488. <view class="screen-record" v-if="item.children.length" v-for="(item,index) in huaxiangList" :key="index">
  489. <view class="screen-record-text" @click="choice(item)">
  490. {{item.name}}<image
  491. v-if="item.isShow"
  492. class="arrow"
  493. src="https://static.quhouse.com/6cf38a2b82694392a7ab6eea24ce76b1.png"
  494. mode=""
  495. />
  496. <image
  497. v-else
  498. class="arrow"
  499. src="https://static.quhouse.com/17d69984ec7c4830b43f712016f06807.png"
  500. mode=""
  501. />
  502. </view>
  503. <view class="screen-record-tab" v-if="item.isShow">
  504. <block v-for="(subitem, ind) in item.children" :key="ind">
  505. <view
  506. class="screen-record-item"
  507. :class="[
  508. subitem.isShow ? 'screen-record-chose' : 'screen-record-nochose',
  509. ]"
  510. @click="choice(subitem)"
  511. >
  512. {{ subitem.name }}
  513. </view>
  514. </block>
  515. </view>
  516. </view>
  517. </scroll-view>
  518. <view class="screen-foot">
  519. <view class="screen-foot-reset" @click="resetHuaXiang"> 重置 </view>
  520. <view class="screen-foot-sure" @click="screensure"> 确定 </view>
  521. </view>
  522. </view>
  523. </u-popup>
  524. <!-- 排序 -->
  525. <u-select
  526. v-model="soltishow"
  527. :list="orderBylist"
  528. @confirm="selectCallback2"
  529. ></u-select>
  530. <!-- 加载组件 -->
  531. <loading v-model="LOADING"></loading>
  532. </view>
  533. </template>
  534. <script>
  535. import loading from "@/components/loading/index.vue";
  536. const config = require("@/config");
  537. export default {
  538. components: {
  539. loading,
  540. },
  541. data() {
  542. return {
  543. huaxiangShow: false,
  544. wajueArrow: true,
  545. jieduanArrow: true,
  546. sourceArrow: true,
  547. levelArrow: true,
  548. zixunArrow: true,
  549. jiedaiArrow: true,
  550. luyinArrow: true,
  551. visitArrow: true,
  552. xiaojiangArrow: true,
  553. huaxiangList: [],
  554. orderBylist: [
  555. {
  556. label: "创建时间倒序",
  557. value: "1",
  558. },
  559. {
  560. label: "创建时间正序",
  561. value: "2",
  562. },
  563. {
  564. label: "接待时间倒序",
  565. value: "3",
  566. },
  567. {
  568. label: "接待时间正序",
  569. value: "4",
  570. },
  571. {
  572. label: "执行率倒序",
  573. value: "5",
  574. },
  575. {
  576. label: "执行率正序",
  577. value: "6",
  578. },
  579. {
  580. label: "接访次数正序",
  581. value: "7",
  582. },
  583. {
  584. label: "接访次数倒序",
  585. value: "8",
  586. },
  587. {
  588. label: "需求挖掘率正序",
  589. value: "9",
  590. },
  591. {
  592. label: "需求挖掘率倒序",
  593. value: "10",
  594. },
  595. ],
  596. zixunList: [
  597. {
  598. label: "一期住宅",
  599. value: 1,
  600. isShow: false,
  601. },
  602. {
  603. label: "二期住宅",
  604. value: 2,
  605. isShow: false,
  606. },
  607. {
  608. label: "三期住宅",
  609. value: 3,
  610. isShow: false,
  611. },
  612. {
  613. label: "商铺",
  614. value: 4,
  615. isShow: false,
  616. },
  617. ],
  618. jiedaiList: [
  619. {
  620. label: "0~15min",
  621. value: 1,
  622. isShow: false,
  623. },
  624. {
  625. label: "15~30min",
  626. value: 2,
  627. isShow: false,
  628. },
  629. {
  630. label: "30~60min",
  631. value: 3,
  632. isShow: false,
  633. },
  634. {
  635. label: "60~90min",
  636. value: 4,
  637. isShow: false,
  638. },
  639. {
  640. label: "90min以上",
  641. value: 5,
  642. isShow: false,
  643. },
  644. ],
  645. wajueList: [
  646. {
  647. label: "31%及以下",
  648. value: 1,
  649. isShow: false,
  650. },
  651. {
  652. label: "31%~50%",
  653. value: 2,
  654. isShow: false,
  655. },
  656. {
  657. label: "51%~70%",
  658. value: 3,
  659. isShow: false,
  660. },
  661. {
  662. label: "71%及以上",
  663. value: 4,
  664. isShow: false,
  665. },
  666. ],
  667. xiaojiangList: [
  668. {
  669. label: "30%及以下",
  670. value: 1,
  671. isShow: false,
  672. },
  673. {
  674. label: "31%~50%",
  675. value: 2,
  676. isShow: false,
  677. },
  678. {
  679. label: "51%~70%",
  680. value: 3,
  681. isShow: false,
  682. },
  683. {
  684. label: "71%及以上",
  685. value: 4,
  686. isShow: false,
  687. },
  688. ],
  689. screenShow: false,
  690. selectshow: false,
  691. selectPhaseShow: false,//客户阶段
  692. buildingID: "",
  693. screen: {
  694. staTime: "",
  695. endTime: "",
  696. orderBy: "",// 排序
  697. agentId: "",//顾问
  698. sourceIds: [],// 客户来源
  699. level: [],// 客户等级
  700. visitRecord: [],// 到访次数
  701. // zixunVal: [],// 咨询业务
  702. wajueVal: [],// 需求挖掘
  703. xiaojiangVal:[],//销讲执行率
  704. jiedaiVal: [],// 接待时长
  705. validInvalid: null,// 录音标识
  706. clientStage: [],// 客户阶段 clientStage
  707. },
  708. recordList: [],
  709. nextPage: 1,
  710. totalRecord: "",
  711. freeList: [],
  712. userInfo: {},
  713. phaseList: [],//客户阶段
  714. isnorefresh: "",
  715. activeTotal: 5,
  716. totalTimeShow: false,
  717. timeshow: false,
  718. soltishow: false,
  719. totalRecords: "",
  720. visitList: [
  721. {
  722. label: "首次到访",
  723. value: 1,
  724. isShow: false,
  725. },
  726. {
  727. label: "2次到访",
  728. value: 2,
  729. isShow: false,
  730. },
  731. {
  732. label: "3次到访",
  733. value: 3,
  734. isShow: false,
  735. },
  736. {
  737. label: "3次以上",
  738. value: 4,
  739. isShow: false,
  740. },
  741. ],
  742. levelList: [
  743. {
  744. label: "A",
  745. value: 1,
  746. isShow: false,
  747. },
  748. {
  749. label: "B",
  750. value: 2,
  751. isShow: false,
  752. },
  753. {
  754. label: "C",
  755. value: 3,
  756. isShow: false,
  757. },
  758. {
  759. label: "D",
  760. value: 4,
  761. isShow: false,
  762. },
  763. ],
  764. sourceList: [],//客户来源
  765. keywordsIds: [],// 画像标签
  766. isRefresh: false,
  767. // 筛选文字展示
  768. sortFilter: "排序",
  769. arriveFilter: "到访时间",
  770. receptionDuration: "所属顾问",
  771. };
  772. },
  773. onLoad(options) {
  774. this.LOADING = true;
  775. this.isnorefresh = options.refresh;
  776. },
  777. onShow() {
  778. // dataCode: 身份标识 2:项目总、3:客服、4:策划、5:经理、6:置业顾问
  779. this.userInfo = uni.getStorageSync('weapp_session_userInfo_data');
  780. if (this.isnorefresh == "refresh") {
  781. this.buildingID = uni.getStorageSync("buildingID").id;
  782. this.nextPage = 1;
  783. this.recordList = [];
  784. this.isRefresh = false;
  785. this.getMyCustom();
  786. this.getFreeList();
  787. this.getWordMiningList();
  788. this.getCustomPhase();
  789. this.getFromSource();
  790. this.isnorefresh = "";
  791. }
  792. },
  793. onPullDownRefresh() {
  794. this.resetFilter();
  795. this.isRefresh = true;
  796. this.nextPage = 1;
  797. this.getMyCustom();
  798. setTimeout(() => {
  799. uni.stopPullDownRefresh();
  800. }, 1000);
  801. },
  802. onReachBottom() {
  803. if (this.totalRecord == this.nextPage) {
  804. uni.showToast({
  805. icon: "none",
  806. title: "到底了",
  807. duration: 2000,
  808. });
  809. return;
  810. } else {
  811. this.nextPage += 1;
  812. this.isRefresh = false;
  813. this.getMyCustom();
  814. }
  815. },
  816. methods: {
  817. // 获取客户来源
  818. getFromSource() {
  819. this.$u.get(config.service.sourceList, {
  820. houseId: this.buildingID
  821. })
  822. .then((res) => {
  823. console.log(res)
  824. if(res.length){
  825. this.sourceList = res.map((item) => {
  826. return {
  827. label: item.sourceName,
  828. value: item.id,
  829. isShow: false
  830. }
  831. })
  832. }else{
  833. this.sourceList = []
  834. }
  835. })
  836. },
  837. // 过滤
  838. resetFilter() {
  839. this.sortFilter = "排序";
  840. this.receptionDuration = "所属顾问";
  841. this.arriveFilter = "到访时间";
  842. this.screen.orderBy = '';
  843. this.screen.staTime = "";
  844. this.screen.endTime = "";
  845. this.nextPage = 1;
  846. this.activeTotal = 5;
  847. this.recordList = [];
  848. },
  849. choice(item) {
  850. item.isShow = !item.isShow;
  851. },
  852. //选择标签
  853. selectCallback2(e) {
  854. this.sortFilter = e[0].label;
  855. this.screen.orderBy = e[0].value;
  856. this.nextPage = 1;
  857. this.recordList = [];
  858. this.isRefresh = false;
  859. this.getMyCustom();
  860. },
  861. //选择录音时长
  862. timetap(index, text) {
  863. if (text) this.receptionDuration = text;
  864. this.nextPage = 1;
  865. this.recordList = [];
  866. this.isRefresh = false;
  867. this.getMyCustom();
  868. },
  869. //时间选择
  870. tabtimetap(index, text) {
  871. this.timeshow = false;
  872. if (text) this.arriveFilter = text;
  873. if (index == 4) {
  874. this.totalTimeShow = true;
  875. } else {
  876. this.activeTotal = index;
  877. this.screen.staTime = "";
  878. this.screen.endTime = "";
  879. this.nextPage = 1;
  880. this.recordList = [];
  881. this.isRefresh = false;
  882. this.getMyCustom();
  883. }
  884. },
  885. //自定义时间
  886. totalTimeChange(e) {
  887. this.screen.staTime = e.startDate;
  888. this.screen.endTime = e.endDate;
  889. this.activeTotal = 4;
  890. this.nextPage = 1;
  891. this.recordList = [];
  892. this.isRefresh = false;
  893. this.getMyCustom();
  894. },
  895. // 字典表接口
  896. getListByType() {
  897. this.$u
  898. .get("/matchKeywords/findPersonalMatchData", {
  899. customerId: this.customerId,
  900. })
  901. .then((res) => {
  902. // console.log(res)
  903. res.forEach((item1) => {
  904. item1.children.map((item) => {
  905. if (item.isInterval == 0) {
  906. item.label =
  907. item.name + item.unit + "-" + item.endName + item.unit;
  908. } else {
  909. item.label = item.name;
  910. }
  911. item.value = item.id;
  912. });
  913. });
  914. // console.log(res)
  915. this.allList = res;
  916. });
  917. },
  918. // 客户详情
  919. gotoDetail(id) {
  920. uni.navigateTo({
  921. url: `/pages/center/consumer/consumerDetail?id=${id}`,
  922. });
  923. },
  924. getMyCustom() {
  925. this.screen.visitRecord = []
  926. this.screen.jiedaiVal = []
  927. this.screen.wajueVal = []
  928. this.screen.xiaojiangVal = []
  929. this.screen.level = []
  930. this.screen.clientStage = []
  931. this.screen.sourceIds = []
  932. let dateType = 0;
  933. if (this.activeTotal == 5||this.activeTotal == 4) {
  934. dateType = null;
  935. } else {
  936. dateType = this.activeTotal;
  937. }
  938. // 到访次数
  939. this.visitList.forEach(i => {
  940. if(i.isShow) this.screen.visitRecord.push(i.value)
  941. })
  942. // 接待时长
  943. this.jiedaiList.forEach(i => {
  944. if(i.isShow) this.screen.jiedaiVal.push(i.value)
  945. })
  946. // 需求挖掘
  947. this.wajueList.forEach(i => {
  948. if(i.isShow) this.screen.wajueVal.push(i.value)
  949. })
  950. // 销讲执行率
  951. this.xiaojiangList.forEach(i => {
  952. if(i.isShow) this.screen.xiaojiangVal.push(i.value)
  953. })
  954. // 客户等级
  955. this.levelList.forEach(i => {
  956. if(i.isShow) this.screen.level.push(i.value)
  957. })
  958. //客户阶段
  959. this.phaseList.forEach(i => {
  960. if(i.isShow) this.screen.clientStage.push(i.value)
  961. })
  962. // 客户来源
  963. this.sourceList.forEach(i => {
  964. if(i.isShow) this.screen.sourceIds.push(i.value)
  965. })
  966. var parames = {
  967. pageNum: this.nextPage,
  968. pageSize: 10,
  969. query: {
  970. projectId: this.buildingID,
  971. fractions: this.screen.xiaojiangVal.length?this.screen.xiaojiangVal.join(','):'',// 销讲执行率
  972. wordFractions: this.screen.wajueVal.length?this.screen.wajueVal.join(','):'',//需求挖掘
  973. visitRecordNum: this.screen.visitRecord.length?this.screen.visitRecord.join(','):'',//到访次数
  974. clientStages: this.screen.clientStage.length?this.screen.clientStage.join(','):'', // 客户阶段
  975. sourceIds: this.screen.sourceIds.length?this.screen.sourceIds.join(','):'',// 客户来源
  976. level: this.screen.level.length?this.screen.level.join(','):'',// 客户等级
  977. duractionNums: this.screen.jiedaiVal.length?this.screen.jiedaiVal.join(','):'',// 接待时长
  978. keywordsIds: this.keywordsIds.length?this.keywordsIds.join(','):'',// 画像标签
  979. dateType: dateType, // 接待时间
  980. staTime: this.screen.staTime,
  981. endTime: this.screen.endTime,
  982. agentId: this.screen.agentId,// 顾问
  983. orderBy: this.screen.orderBy==''?'': this.screen.orderBy,// 排序
  984. },
  985. };
  986. this.$u.post("/customer/customerManagement", parames)
  987. .then((data) => {
  988. this.LOADING = false;
  989. // if (this.screen.staTime && this.screen.endTime) {
  990. // this.arriveFilter = `${this.screen.staTime}-${this.screen.endTime}`;
  991. // }
  992. var list = data.results || [];
  993. list.forEach((item) => {
  994. if (this.userInfo.dataCode == 6) {
  995. item.isshow = true;
  996. } else {
  997. item.isshow = false;
  998. }
  999. });
  1000. list.forEach((item) => {
  1001. if (item.demand.cusSemanticWordsList != null) {
  1002. item.demand.cusSemanticWordsList.forEach((che) => {
  1003. if (che.isInterval == 0) {
  1004. che.name = che.name + che.unit + "-" + che.endName + che.unit;
  1005. }
  1006. });
  1007. }else{
  1008. item.demand.cusSemanticWordsList = []
  1009. }
  1010. });
  1011. if (this.isRefresh) {
  1012. this.recordList = list;
  1013. } else {
  1014. this.recordList = [...this.recordList, ...list];
  1015. }
  1016. this.totalRecord = data.totalPage;
  1017. this.totalRecords = data.totalRecord;
  1018. })
  1019. .catch((e) => {
  1020. this.LOADING = false;
  1021. });
  1022. },
  1023. //获取画像标签
  1024. getWordMiningList() {
  1025. this.huaxiangList = [];
  1026. this.$u.get("/corpus/findSelectedWordMiningTemplate", {
  1027. houseId: this.buildingID,
  1028. selected: 1
  1029. })
  1030. .then((res) => {
  1031. // console.log(res)
  1032. if(res.length){
  1033. res.forEach(item=>{
  1034. item.isShow = true;
  1035. if(item.children.length){
  1036. item.children.forEach(subitem=>{
  1037. subitem.isShow = false;
  1038. })
  1039. }
  1040. })
  1041. }
  1042. this.huaxiangList = res;
  1043. });
  1044. },
  1045. //获取顾问列表
  1046. getFreeList() {
  1047. if(this.userInfo.dataCode==6){
  1048. this.freeList = [{
  1049. label: this.userInfo.name,
  1050. value: this.userInfo.accountId
  1051. }]
  1052. }else{
  1053. this.freeList = [];
  1054. this.$u.post("/cusLvStatistics/selectAllAccountIdByHouseId", {
  1055. houseId: this.buildingID,
  1056. })
  1057. .then((res) => {
  1058. this.freeList = res;
  1059. this.freeList.forEach((item) => {
  1060. item.label = item.name;
  1061. item.value = item.accountId;
  1062. });
  1063. this.freeList.unshift({
  1064. label: '全部',
  1065. value: '',
  1066. })
  1067. });
  1068. }
  1069. },
  1070. // 获取客户阶段数据
  1071. getCustomPhase() {
  1072. this.phaseList = [];
  1073. this.$u
  1074. .post("/customer/lifeTrackDefineList", {
  1075. houseId: this.buildingID,
  1076. })
  1077. .then((res) => {
  1078. if(res.length){
  1079. this.phaseList = res.map(item=>{
  1080. return {
  1081. label: item.stageName,
  1082. value: item.id,
  1083. isShow: false
  1084. }
  1085. })
  1086. }else{
  1087. this.phaseList =[]
  1088. }
  1089. });
  1090. },
  1091. //选择顾问
  1092. actionSelectCallback(e) {
  1093. this.screen.agentId = e[0].value;
  1094. this.receptionDuration = e[0].label;
  1095. this.nextPage = 1;
  1096. this.recordList = [];
  1097. this.screenShow = false;
  1098. this.huaxiangShow = false;
  1099. this.isRefresh = false;
  1100. this.getMyCustom();
  1101. },
  1102. // 客户阶段
  1103. selectPhase(e) {
  1104. this.screen.clientStageName = e[0].label;
  1105. this.screen.clientStage = e[0].value;
  1106. },
  1107. //重置
  1108. reset() {
  1109. this.screen = {
  1110. agentId: "",
  1111. visitRecord: [],
  1112. record: [],
  1113. clientStage: "",
  1114. clientStageName: "",
  1115. };
  1116. this.sourceList.map((i) => {
  1117. i.isShow = false;
  1118. });
  1119. this.wajueList.map((i) => {
  1120. i.isShow = false;
  1121. });
  1122. this.phaseList.map((i) => {
  1123. i.isShow = false;
  1124. });
  1125. this.jiedaiList.map((i) => {
  1126. i.isShow = false;
  1127. });
  1128. this.xiaojiangList.map((i) => {
  1129. i.isShow = false;
  1130. });
  1131. this.visitList.map((i) => {
  1132. i.isShow = false;
  1133. });
  1134. this.levelList.map((i) => {
  1135. i.isShow = false;
  1136. });
  1137. this.nextPage = 1;
  1138. this.recordList = [];
  1139. this.isRefresh = false;
  1140. this.getMyCustom();
  1141. },
  1142. //重置画像标签选择
  1143. resetHuaXiang(){
  1144. if(this.huaxiangList.length){
  1145. this.huaxiangList.forEach(item=>{
  1146. item.isShow = true;
  1147. if(item.children.length){
  1148. item.children.forEach(subitem=>{
  1149. subitem.isShow = false;
  1150. })
  1151. }
  1152. })
  1153. }
  1154. },
  1155. //筛选确认
  1156. screensure() {
  1157. this.nextPage = 1;
  1158. this.recordList = [];
  1159. this.keywordsIds = []
  1160. this.screenShow = false;
  1161. this.huaxiangShow = false;
  1162. this.isRefresh = false;
  1163. // 画像标签
  1164. this.huaxiangList.forEach(item => {
  1165. if(item.children.length){
  1166. item.children.forEach(im=>{
  1167. if(im.isShow) this.keywordsIds.push(im.id)
  1168. })
  1169. }
  1170. })
  1171. console.log(this.keywordsIds);
  1172. this.getMyCustom();
  1173. },
  1174. goSearch() {
  1175. uni.navigateTo({
  1176. url: "/pages/center/consumer/consumerSearch",
  1177. });
  1178. },
  1179. gotoFollowUp(id) {
  1180. uni.navigateTo({
  1181. url: `/pages/center/consumer/newFollowup/newFollowup?id=${id}`,
  1182. });
  1183. },
  1184. },
  1185. };
  1186. </script>
  1187. <style lang="scss" scoped>
  1188. .box {
  1189. width: 100%;
  1190. height: 100%;
  1191. background: #f8f8f8;
  1192. }
  1193. .count {
  1194. width: 100%;
  1195. height: 60rpx;
  1196. display: flex;
  1197. align-items: center;
  1198. justify-content: center;
  1199. background-color: #fff;
  1200. border-top: 1px solid #e0e0e0;
  1201. text {
  1202. color: #f71616;
  1203. }
  1204. }
  1205. .timeview {
  1206. height: 80rpx;
  1207. line-height: 80rpx;
  1208. width: 100%;
  1209. text-align: center;
  1210. border-bottom: 1px solid #f8f8f8;
  1211. }
  1212. //时间切换的样式
  1213. .boxtittab {
  1214. position: sticky;
  1215. top: var(--window-top);
  1216. z-index: 999;
  1217. width: 100;
  1218. height: 92rpx;
  1219. background: #ffffff;
  1220. display: flex;
  1221. align-items: center;
  1222. .tabbox {
  1223. flex: 1;
  1224. height: 100%;
  1225. text-align: center;
  1226. line-height: 92rpx;
  1227. color: #666666;
  1228. font-size: 28rpx;
  1229. overflow: hidden;
  1230. text-overflow: ellipsis;
  1231. display: -webkit-box;
  1232. /* 将对象作为弹性伸缩盒子模型显示 */
  1233. -webkit-line-clamp: 1;
  1234. /* 控制最多显示几行 */
  1235. -webkit-box-orient: vertical;
  1236. /* 设置或检索伸缩盒对象的子元素的排列方式 */
  1237. }
  1238. }
  1239. .top-search {
  1240. display: flex;
  1241. align-items: center;
  1242. justify-content: space-between;
  1243. background: #fff;
  1244. padding-right: 30rpx;
  1245. .filter-icon {
  1246. width: 40rpx;
  1247. height: 40rpx;
  1248. padding: 15rpx;
  1249. }
  1250. .search-box {
  1251. width: 670rpx;
  1252. height: 102rpx;
  1253. background: #ffffff;
  1254. display: flex;
  1255. align-items: center;
  1256. justify-content: center;
  1257. .search {
  1258. width: 94%;
  1259. height: 70rpx;
  1260. display: flex;
  1261. align-items: center;
  1262. background: #f8f8f8;
  1263. border-radius: 33rpx;
  1264. .search-img {
  1265. width: 26rpx;
  1266. height: 30rpx;
  1267. margin-left: 20rpx;
  1268. .search-img1 {
  1269. width: 100%;
  1270. height: 100%;
  1271. margin-top: 2rpx;
  1272. }
  1273. }
  1274. .search-text {
  1275. font-size: 28rpx;
  1276. font-weight: 400;
  1277. color: #999999;
  1278. margin-left: 10rpx;
  1279. }
  1280. }
  1281. .search-screen {
  1282. width: 40rpx;
  1283. height: 40rpx;
  1284. margin-left: 30rpx;
  1285. .search-screen1 {
  1286. width: 100%;
  1287. height: 100%;
  1288. }
  1289. }
  1290. }
  1291. }
  1292. .content {
  1293. overflow: hidden;
  1294. .content-tips {
  1295. background: #fff;
  1296. margin-top: 20rpx;
  1297. overflow: hidden;
  1298. padding-bottom: 30rpx;
  1299. .content-first {
  1300. padding: 19rpx 30rpx;
  1301. display: flex;
  1302. justify-content: space-between;
  1303. box-sizing: border-box;
  1304. font-weight: 400;
  1305. color: #292929;
  1306. height: 90rpx;
  1307. font-size: 30rpx;
  1308. line-height: 30rpx;
  1309. .left {
  1310. display: flex;
  1311. .img {
  1312. width: 52rpx;
  1313. height: 52rpx;
  1314. border-radius: 50%;
  1315. text-align: center;
  1316. line-height: 50rpx;
  1317. margin-right: 20rpx;
  1318. color: #fff;
  1319. font-size: 30rpx;
  1320. background: #9f61c8;
  1321. }
  1322. .test {
  1323. margin-top: 11rpx;
  1324. font-weight: 500;
  1325. color: #333333;
  1326. font-size: 30rpx;
  1327. font-family: PingFangSC-Medium, PingFang SC;
  1328. }
  1329. }
  1330. .right {
  1331. display: flex;
  1332. .test {
  1333. margin-top: 11rpx;
  1334. .blue {
  1335. font-size: 32rpx;
  1336. font-family: PingFangSC-Medium, PingFang SC;
  1337. font-weight: 500;
  1338. color: #2671e2;
  1339. }
  1340. }
  1341. }
  1342. }
  1343. .content-sec {
  1344. border-top: 1px solid #e0e0e0;
  1345. padding: 0 30rpx;
  1346. // padding-bottom: 30rpx;
  1347. position: relative;
  1348. .content-sec-lab {
  1349. margin-top: 28rpx;
  1350. display: flex;
  1351. justify-content: space-between;
  1352. font-size: 30rpx;
  1353. font-weight: 400;
  1354. color: #666666;
  1355. line-height: 42rpx;
  1356. .content-sec-lab1 {
  1357. color: #333333;
  1358. }
  1359. .content-sec-tips {
  1360. max-width: 160rpx;
  1361. height: 46rpx;
  1362. background: #f2f2f2;
  1363. border-radius: 6rpx;
  1364. text-align: center;
  1365. line-height: 26rpx;
  1366. overflow: hidden;
  1367. text-overflow: ellipsis;
  1368. white-space: nowrap;
  1369. font-size: 26rpx;
  1370. font-weight: 400;
  1371. color: #333333;
  1372. margin-right: 20rpx;
  1373. box-sizing: border-box;
  1374. padding: 10rpx 24rpx;
  1375. }
  1376. }
  1377. .content-sec-num {
  1378. position: absolute;
  1379. width: 200rpx;
  1380. height: 90rpx;
  1381. background: #f4f8fd;
  1382. border-radius: 12rpx;
  1383. font-weight: 400;
  1384. color: #2671e2;
  1385. line-height: 45rpx;
  1386. bottom: 30rpx;
  1387. right: 30rpx;
  1388. text-align: center;
  1389. }
  1390. }
  1391. .content-last {
  1392. display: flex;
  1393. height: 42rpx;
  1394. margin-top: 30rpx;
  1395. .content-last-tab {
  1396. width: 33.4%;
  1397. text-align: center;
  1398. font-size: 30rpx;
  1399. font-weight: 400;
  1400. color: #333333;
  1401. line-height: 78rpx;
  1402. display: flex;
  1403. align-items: center;
  1404. justify-content: center;
  1405. .icon {
  1406. width: 40rpx;
  1407. height: 40rpx;
  1408. margin-right: 12rpx;
  1409. }
  1410. }
  1411. }
  1412. }
  1413. }
  1414. // 这是弹出层
  1415. .screen {
  1416. .screen-record {
  1417. overflow: hidden;
  1418. padding: 0 30rpx;
  1419. box-sizing: border-box;
  1420. border-bottom: 1px solid #e0e0e0;
  1421. .screen-record-text {
  1422. font-weight: 600;
  1423. padding: 30rpx 0;
  1424. font-size: 30rpx;
  1425. color: #333333;
  1426. line-height: 30rpx;
  1427. display: flex;
  1428. align-items: center;
  1429. justify-content: space-between;
  1430. .arrow {
  1431. width: 30rpx;
  1432. height: 14rpx;
  1433. }
  1434. }
  1435. .screen-record-tab {
  1436. margin-top: 30rpx;
  1437. padding-bottom: 10rpx;
  1438. display: flex;
  1439. flex-wrap: wrap;
  1440. .screen-record-item {
  1441. min-width: 150rpx;
  1442. padding: 0 14rpx;
  1443. height: 60rpx;
  1444. border-radius: 8rpx;
  1445. text-align: center;
  1446. line-height: 60rpx;
  1447. margin: 0 22rpx 22rpx 0;
  1448. &:nth-child(4n) {
  1449. margin-right: 0;
  1450. }
  1451. }
  1452. .screen-record-chose {
  1453. background: #f1f6fd;
  1454. color: #2671e2;
  1455. }
  1456. .screen-record-nochose {
  1457. background: #f7f8fa;
  1458. color: #333;
  1459. }
  1460. }
  1461. }
  1462. .screen-foot {
  1463. width: 100%;
  1464. height: 78rpx;
  1465. display: flex;
  1466. margin: 30rpx 30rpx 0;
  1467. .screen-foot-reset {
  1468. width: 176rpx;
  1469. height: 78rpx;
  1470. line-height: 78rpx;
  1471. background: #FFFFFF;
  1472. border-radius: 8rpx;
  1473. border: 1px solid #2671E2;
  1474. margin-right: 30rpx;
  1475. font-size: 30rpx;
  1476. font-family: PingFangSC-Regular, PingFang SC;
  1477. font-weight: 400;
  1478. color: #2671E2;
  1479. text-align: center;
  1480. }
  1481. .screen-foot-sure {
  1482. width: 484rpx;
  1483. height: 78rpx;
  1484. line-height: 78rpx;
  1485. background: #2671E2;
  1486. border: 1px solid #2671E2;
  1487. border-radius: 8rpx;
  1488. font-size: 30rpx;
  1489. font-family: PingFangSC-Regular, PingFang SC;
  1490. font-weight: 400;
  1491. color: #FFFFFF;
  1492. text-align: center;
  1493. }
  1494. }
  1495. }
  1496. </style>