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.
 
 
 

1192 lines
35 KiB

  1. <template>
  2. <div class="box-center">
  3. <!-- 头 -->
  4. <div class="app-top">
  5. <div class="app-titel" v-if="role != 3" style="margin-bottom: 10px">
  6. <div class="titel-text">项目选择:</div>
  7. <div style="margin-left: 26px">
  8. <el-select v-model="houseId" placeholder="请选择" filterable @change="houseChange">
  9. <el-option v-for="item in houseList" :key="item.id" :label="item.propertyName" :value="item.id">
  10. </el-option>
  11. </el-select>
  12. </div>
  13. </div>
  14. <!-- <div class="app-titel">
  15. <div style="text-indent: 30px;font-weight: bold;">接待时间:</div>
  16. <div class="toptimeqhuan">
  17. <div :class="{ tophove: TimetoAhoose == 4 }" @click="tabtimetap(4)">
  18. 近7天
  19. </div>
  20. <div :class="{ tophove: TimetoAhoose == 5 }" @click="tabtimetap(5)">
  21. 近15天
  22. </div>
  23. <div :class="{ tophove: TimetoAhoose == 6 }" @click="tabtimetap(6)">
  24. 近30天
  25. </div>
  26. </div>
  27. <div style="margin-left: 26px">
  28. <el-date-picker v-model="customtime" @change="confirmtime()" type="daterange" :clearable="false"
  29. range-separator="-" :default-time="['00:00:00', '23:59:59']" value-format="yyyy-MM-dd"
  30. start-placeholder="开始日期" end-placeholder="结束日期">
  31. </el-date-picker>
  32. </div>
  33. <div style="margin-left: auto; margin-right: 10px" v-if="sta_team_downLoad">
  34. <el-button @click="downLoad" icon="el-icon-download">导出</el-button>
  35. </div>
  36. </div> -->
  37. <div class="app-titel projectBackend">
  38. <div class="titel-text">筛选日期:</div>
  39. <div style="margin-left: 14px;">
  40. <el-button
  41. :class="{ 'el-button--primary': TimetoAhoose == 0 }"
  42. @click="tabtimetap(0)"
  43. >今天</el-button
  44. >
  45. <el-button
  46. :class="{ 'el-button--primary': TimetoAhoose == 4 }"
  47. @click="tabtimetap(4)"
  48. >近7天</el-button
  49. >
  50. <el-button
  51. :class="{ 'el-button--primary': TimetoAhoose == 6 }"
  52. @click="tabtimetap(6)"
  53. >近30天</el-button
  54. >
  55. </div>
  56. <div style="margin-left: 26px">
  57. <el-date-picker v-model="customtime" @change="confirmtime()" type="daterange" :clearable="false"
  58. range-separator="-" :default-time="['00:00:00', '23:59:59']" value-format="yyyy-MM-dd"
  59. start-placeholder="开始日期" end-placeholder="结束日期">
  60. </el-date-picker>
  61. </div>
  62. </div>
  63. </div>
  64. <!-- 表格 -->
  65. <div class="cen-tab" :style="{'margin-top':role != 3?'100px':'60px'}">
  66. <div style="overflow: auto">
  67. <table>
  68. <tbody>
  69. <tr style="background: #F5F7FA;color: #333333;">
  70. <td v-for="(item, index) in tablsitdata1" :key="index" class="theadtd">
  71. {{ item.name }}
  72. </td>
  73. </tr>
  74. <tr v-for="(item, iddex) in tablsitdata2" :key="iddex">
  75. <td v-if="iddex + 1 == tablsitdata2.length" class="theadtd">
  76. 合计/平均
  77. </td>
  78. <td v-else class="theadtd">{{ iddex + 1 }}</td>
  79. <td class="theadtd">{{ item.deptName }}</td>
  80. <td class="theadtd">{{ item.receptionCount }}</td>
  81. <td class="theadtd">{{ item.accountNum }}</td>
  82. <td class="theadtd">{{ item.activeCustomer || 0 }}</td>
  83. <td class="theadtd">{{ item.prohibitedCustomer || 0 }}</td>
  84. <td class="theadtd">
  85. {{ Math.floor(item.sumDuration / 60) || 0 }}
  86. </td>
  87. <td class="theadtd">{{ item.fraction || 0 }}%</td>
  88. <td class="theadtd">{{ item.prohibitedZb || 0 }}%</td>
  89. <td class="theadtd" v-for="(che, ind) in item.resultsList" :key="ind">
  90. {{ che.zxl }}%
  91. </td>
  92. </tr>
  93. </tbody>
  94. </table>
  95. </div>
  96. </div>
  97. <div class="app-box-san">
  98. <div class="zuo">
  99. <div class="title">
  100. <div class="text1">接待量排名
  101. <el-tooltip effect="light" content="筛选时间内,已经结束的接待条数,不包含待接单;" placement="bottom-end">
  102. <i class="pop"></i>
  103. </el-tooltip>
  104. </div>
  105. </div>
  106. <div class="hejisan">
  107. <div class="sanbox1" style="width: 50%;text-align: center;">
  108. <div class="text1-1">团队总数</div>
  109. <div class="text1-2">{{ teamobj1.num || 0 }}个</div>
  110. </div>
  111. <div class="sanbox1" style="width: 50%;text-align: center;">
  112. <div class="text1-1">均值</div>
  113. <div class="text1-2">{{ teamobj1.avg || 0 }}个</div>
  114. </div>
  115. </div>
  116. <div v-if="teamobj1.list.length != 0" style="width: 94%; margin: 0 auto">
  117. <div class="jinbox" v-for="(item, i) in teamobj1.list" :key="i">
  118. <!-- <div class="jinboxtit">{{ item.name }}</div> -->
  119. <span class="sequenceNum" :style="{
  120. 'background': i + 1 == 1 ? 'linear-gradient(180deg, #FFA395 0%, #F54D3F 100%)' : i + 1 == 2 ? 'linear-gradient(180deg, #FFBE70 0%, #FF981E 100%)' : i + 1 == 3 ? 'linear-gradient(180deg, #FFE683 0%, #FFCC00 100%)' : '#E5F0FF',
  121. 'color': i + 1 == 1 ? '#FFF' : i + 1 == 2 ? '#FFF' : i + 1 == 3 ? '#FFF' : '#333',
  122. 'box-shadow': i + 1 == 1 ? '0px 0px 6px 1px #F54D3F' : i + 1 == 2 ? '0px 0px 6px 1px #FF981E' : i + 1 == 3 ? '0px 0px 6px 1px #FFCC00' : '#E5F0FF',
  123. 'border': i + 1 == 1 ? '1px solid #FFCAC6' : i + 1 == 2 ? '1px solid #FFD6AA' : i + 1 == 3 ? '1px solid #FFEEAC' : 'none',
  124. }">{{ i + 1 }}</span>
  125. <div class="jinboxtit">
  126. <el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
  127. <span class="name">{{ item.name }}</span>
  128. </el-tooltip>
  129. </div>
  130. <div class="jinbox-box">
  131. <!-- <div class="boxbaifenbi" :style="'width:' + item.zxl1 + '%;'"></div> -->
  132. <div class="boxbaifenbi"
  133. :style="{ 'background': i + 1 == 1 ? 'linear-gradient(270deg, #F88881 0%, #E6625B 100%)' : i + 1 == 2 ? 'linear-gradient(270deg, #FFC940 0%, #FF981E 100%)' : i + 1 == 3 ? 'linear-gradient(270deg, #FFE800 0%, #FFCC00 100%)' : 'inear-gradient(270deg, #7BB1FF 0%, #618FFF 100%)', 'width': item.zxl1 + '%' }">
  134. </div>
  135. </div>
  136. <div class="jinboxbott">{{ item.zxl }}个</div>
  137. </div>
  138. </div>
  139. <div class="nulllist" v-if="teamobj1.list.length == 0">
  140. <div class="imgboxc">
  141. <!-- <img class="imgboxc-img" src="/img/nullnull.png" alt="" /> -->
  142. <div class="nulltext" style="font-size:14px;">暂无数据</div>
  143. </div>
  144. </div>
  145. </div>
  146. <div class="you">
  147. <div class="title">
  148. <div class="text1">接待时长排名</div>
  149. </div>
  150. <div class="hejisan">
  151. <div class="sanbox1" style="width: 50%;text-align: center;">
  152. <div class="text1-1">团队总数</div>
  153. <div class="text1-2">{{ teamobj2.num || 0 }}个</div>
  154. </div>
  155. <div class="sanbox1" style="width: 50%;text-align: center;">
  156. <div class="text1-1">均值</div>
  157. <div class="text1-2">
  158. {{ Math.floor(teamobj2.avg / 60) || 0 }}分钟
  159. </div>
  160. </div>
  161. </div>
  162. <div v-if="teamobj2.list.length != 0" style="width: 94%; margin: 0 auto">
  163. <div class="jinbox" v-for="(item, i) in teamobj2.list" :key="i">
  164. <!-- <div class="jinboxtit">{{ item.name }}</div>
  165. <div class="jinbox-box">
  166. <div class="boxbaifenbi" :style="'width:' + item.zxl1 + '%;'"></div>
  167. </div> -->
  168. <span class="sequenceNum" :style="{
  169. 'background': i + 1 == 1 ? 'linear-gradient(180deg, #FFA395 0%, #F54D3F 100%)' : i + 1 == 2 ? 'linear-gradient(180deg, #FFBE70 0%, #FF981E 100%)' : i + 1 == 3 ? 'linear-gradient(180deg, #FFE683 0%, #FFCC00 100%)' : '#E5F0FF',
  170. 'color': i + 1 == 1 ? '#FFF' : i + 1 == 2 ? '#FFF' : i + 1 == 3 ? '#FFF' : '#333',
  171. 'box-shadow': i + 1 == 1 ? '0px 0px 6px 1px #F54D3F' : i + 1 == 2 ? '0px 0px 6px 1px #FF981E' : i + 1 == 3 ? '0px 0px 6px 1px #FFCC00' : '#E5F0FF',
  172. 'border': i + 1 == 1 ? '1px solid #FFCAC6' : i + 1 == 2 ? '1px solid #FFD6AA' : i + 1 == 3 ? '1px solid #FFEEAC' : 'none',
  173. }">{{ i + 1 }}</span>
  174. <div class="jinboxtit">
  175. <el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
  176. <span class="name">{{ item.name }}</span>
  177. </el-tooltip>
  178. </div>
  179. <div class="jinbox-box">
  180. <!-- <div class="boxbaifenbi" :style="'width:' + item.zxl1 + '%;'"></div> -->
  181. <div class="boxbaifenbi"
  182. :style="{ 'background': i + 1 == 1 ? 'linear-gradient(270deg, #F88881 0%, #E6625B 100%)' : i + 1 == 2 ? 'linear-gradient(270deg, #FFC940 0%, #FF981E 100%)' : i + 1 == 3 ? 'linear-gradient(270deg, #FFE800 0%, #FFCC00 100%)' : 'inear-gradient(270deg, #7BB1FF 0%, #618FFF 100%)', 'width': item.zxl1 + '%' }">
  183. </div>
  184. </div>
  185. <div class="jinboxbott">{{ item.zxl }}分钟</div>
  186. </div>
  187. </div>
  188. <div class="nulllist" v-if="teamobj2.list.length == 0">
  189. <div class="imgboxc">
  190. <!-- <img class="imgboxc-img" src="/img/nullnull.png" alt="" /> -->
  191. <div class="nulltext" style="font-size:14px;">暂无数据</div>
  192. </div>
  193. </div>
  194. </div>
  195. </div>
  196. <div class="app-box-san">
  197. <div class="zuo">
  198. <div class="title">
  199. <div class="text1">销讲执行率</div>
  200. <div class="text2">
  201. <el-select @change="teamAllLevelidtap()" style="width: 90%; margin: 0 auto" v-model="teamAllLevelid"
  202. placeholder="请选择">
  203. <el-option v-for="item in teamAllLevel" :key="item.value" :label="item.name" :value="item.value">
  204. </el-option>
  205. </el-select>
  206. </div>
  207. </div>
  208. <div class="hejisan">
  209. <div class="sanbox1" style="width: 50%;text-align: center;">
  210. <div class="text1-1">团队总数</div>
  211. <div class="text1-2">{{ teamobj3.num || 0 }}个</div>
  212. </div>
  213. <div class="sanbox1" style="width: 50%;text-align: center;">
  214. <div class="text1-1">均值</div>
  215. <div class="text1-2">{{ teamobj3.avg || 0 }}%</div>
  216. </div>
  217. </div>
  218. <div v-if="teamobj3.list.length != 0" style="width: 94%; margin: 0 auto">
  219. <div class="jinbox" v-for="(item, i) in teamobj3.list" :key="i">
  220. <span class="sequenceNum" :style="{
  221. 'background': i + 1 == 1 ? 'linear-gradient(180deg, #FFA395 0%, #F54D3F 100%)' : i + 1 == 2 ? 'linear-gradient(180deg, #FFBE70 0%, #FF981E 100%)' : i + 1 == 3 ? 'linear-gradient(180deg, #FFE683 0%, #FFCC00 100%)' : '#E5F0FF',
  222. 'color': i + 1 == 1 ? '#FFF' : i + 1 == 2 ? '#FFF' : i + 1 == 3 ? '#FFF' : '#333',
  223. 'box-shadow': i + 1 == 1 ? '0px 0px 6px 1px #F54D3F' : i + 1 == 2 ? '0px 0px 6px 1px #FF981E' : i + 1 == 3 ? '0px 0px 6px 1px #FFCC00' : '#E5F0FF',
  224. 'border': i + 1 == 1 ? '1px solid #FFCAC6' : i + 1 == 2 ? '1px solid #FFD6AA' : i + 1 == 3 ? '1px solid #FFEEAC' : 'none',
  225. }">{{ i + 1 }}</span>
  226. <div class="jinboxtit">
  227. <el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
  228. <span class="name">{{ item.name }}</span>
  229. </el-tooltip>
  230. </div>
  231. <div class="jinbox-box">
  232. <!-- <div class="boxbaifenbi" :style="'width:' + item.zxl1 + '%;'"></div> -->
  233. <div class="boxbaifenbi"
  234. :style="{ 'background': i + 1 == 1 ? 'linear-gradient(270deg, #F88881 0%, #E6625B 100%)' : i + 1 == 2 ? 'linear-gradient(270deg, #FFC940 0%, #FF981E 100%)' : i + 1 == 3 ? 'linear-gradient(270deg, #FFE800 0%, #FFCC00 100%)' : 'inear-gradient(270deg, #7BB1FF 0%, #618FFF 100%)', 'width': item.zxl + '%' }">
  235. </div>
  236. </div>
  237. <div class="jinboxbott">{{ item.zxl }}%</div>
  238. </div>
  239. </div>
  240. <div class="nulllist" v-if="teamobj3.list.length == 0">
  241. <div class="imgboxc">
  242. <!-- <img class="imgboxc-img" src="/img/nullnull.png" alt="" /> -->
  243. <div class="nulltext" style="font-size:14px;">暂无数据</div>
  244. </div>
  245. </div>
  246. </div>
  247. <div class="you">
  248. <div class="title">
  249. <div class="text1">销讲能力雷达图</div>
  250. </div>
  251. <div id="main" v-if="isshowcd2 == true" style="width: 94%; margin: 0 auto"></div>
  252. <div class="nulllist" v-if="isshowcd2 == false">
  253. <div class="imgboxc">
  254. <!-- <img class="imgboxc-img" src="/img/nullnull.png" alt="" /> -->
  255. <div class="nulltext" style="font-size:14px;">暂无数据</div>
  256. </div>
  257. </div>
  258. </div>
  259. </div>
  260. <div class="app-box-san">
  261. <div class="zuo">
  262. <div class="title">
  263. <div class="text1">违禁接待次数
  264. <el-tooltip effect="light" content="筛选时间内,出现违禁的接待次数,不包含待接单/无效接待/无效违禁;" placement="bottom-end">
  265. <i class="pop"></i>
  266. </el-tooltip>
  267. </div>
  268. <div class="text2">
  269. <el-select @change="teamAllLeve2tap()" style="width: 90%; margin: 0 auto" v-model="teamAllLeve2id"
  270. placeholder="请选择">
  271. <el-option v-for="item in teamAllLeve2" :key="item.value" :label="item.name" :value="item.value">
  272. </el-option>
  273. </el-select>
  274. </div>
  275. </div>
  276. <div class="hejisan">
  277. <div class="sanbox1" style="width: 50%;text-align: center;">
  278. <div class="text1-1">团队总数</div>
  279. <div class="text1-2">{{ teamobj5.num || 0 }}个</div>
  280. </div>
  281. <div class="sanbox1" style="width: 50%;text-align: center;">
  282. <div class="text1-1">均值</div>
  283. <div class="text1-2">{{ teamobj5.avg || 0 }}次</div>
  284. </div>
  285. </div>
  286. <div v-if="teamobj5.list.length != 0" style="width: 94%; margin: 0 auto">
  287. <div class="jinbox" v-for="(item, i) in teamobj5.list" :key="i">
  288. <!-- <div class="jinboxtit">{{ item.name }}</div>
  289. <div class="jinbox-box">
  290. <div class="boxbaifenbi" :style="'width:' + item.zxl1 + '%;'"></div>
  291. </div> -->
  292. <span class="sequenceNum" :style="{
  293. 'background': i + 1 == 1 ? 'linear-gradient(180deg, #FFA395 0%, #F54D3F 100%)' : i + 1 == 2 ? 'linear-gradient(180deg, #FFBE70 0%, #FF981E 100%)' : i + 1 == 3 ? 'linear-gradient(180deg, #FFE683 0%, #FFCC00 100%)' : '#E5F0FF',
  294. 'color': i + 1 == 1 ? '#FFF' : i + 1 == 2 ? '#FFF' : i + 1 == 3 ? '#FFF' : '#333',
  295. 'box-shadow': i + 1 == 1 ? '0px 0px 6px 1px #F54D3F' : i + 1 == 2 ? '0px 0px 6px 1px #FF981E' : i + 1 == 3 ? '0px 0px 6px 1px #FFCC00' : '#E5F0FF',
  296. 'border': i + 1 == 1 ? '1px solid #FFCAC6' : i + 1 == 2 ? '1px solid #FFD6AA' : i + 1 == 3 ? '1px solid #FFEEAC' : 'none',
  297. }">{{ i + 1 }}</span>
  298. <div class="jinboxtit">
  299. <el-tooltip class="item" effect="dark" :content="item.name" placement="top-start">
  300. <span class="name">{{ item.name }}</span>
  301. </el-tooltip>
  302. </div>
  303. <div class="jinbox-box">
  304. <!-- <div class="boxbaifenbi" :style="'width:' + item.zxl1 + '%;'"></div> -->
  305. <div class="boxbaifenbi"
  306. :style="{ 'background': i + 1 == 1 ? 'linear-gradient(270deg, #F88881 0%, #E6625B 100%)' : i + 1 == 2 ? 'linear-gradient(270deg, #FFC940 0%, #FF981E 100%)' : i + 1 == 3 ? 'linear-gradient(270deg, #FFE800 0%, #FFCC00 100%)' : 'inear-gradient(270deg, #7BB1FF 0%, #618FFF 100%)', 'width': item.zxl1 + '%' }">
  307. </div>
  308. </div>
  309. <div class="jinboxbott">{{ item.zxl }}次</div>
  310. </div>
  311. </div>
  312. <div class="nulllist" v-if="teamobj5.list.length == 0">
  313. <div class="imgboxc">
  314. <!-- <img class="imgboxc-img" src="/img/nullnull.png" alt="" /> -->
  315. <div class="nulltext" style="font-size:14px;">暂无数据</div>
  316. </div>
  317. </div>
  318. </div>
  319. <div class="you">
  320. <div class="title">
  321. <div class="text1">违禁话术雷达图</div>
  322. </div>
  323. <div v-if="isshowcd == true" id="main2" style="width: 94%; margin: 0 auto"></div>
  324. <div class="nulllist" v-if="isshowcd == false">
  325. <div class="imgboxc">
  326. <!-- <img class="imgboxc-img" src="/img/nullnull.png" alt="" /> -->
  327. <div class="nulltext" style="font-size:14px;">暂无数据</div>
  328. </div>
  329. </div>
  330. </div>
  331. </div>
  332. </div>
  333. </template>
  334. <script>
  335. import * as echarts from "echarts";
  336. import { mapGetters } from "vuex";
  337. import { exportMethodPost } from "@/util/util";
  338. export default {
  339. data() {
  340. return {
  341. houseId: "",
  342. TimetoAhoose: 4,
  343. customtime: [],
  344. statDateStart: "",
  345. statDateEnd: "",
  346. tablsitdata1: [],
  347. tablsitdata2: [],
  348. teamobj1: {
  349. avg: "",
  350. list: [],
  351. num: "",
  352. },
  353. teamobj2: {
  354. avg: "",
  355. list: [],
  356. num: "",
  357. },
  358. teamobj3: {
  359. avg: "",
  360. list: [],
  361. num: "",
  362. },
  363. teamobj5: {
  364. avg: "",
  365. list: [],
  366. num: "",
  367. },
  368. teamAllLevel: [],
  369. teamAllLevelid: "",
  370. teamAllLeve2: [],
  371. teamAllLeve2id: "",
  372. ceratelist: [],
  373. role: "",
  374. houseList: [],
  375. isshowcd: true,
  376. isshowcd2: true,
  377. };
  378. },
  379. computed: {
  380. ...mapGetters(["permissions"]),
  381. },
  382. created() {
  383. this.sta_team_downLoad = this.permissions["sta_team_downLoad"];
  384. },
  385. mounted() {
  386. this.role = localStorage.getItem("orgType");
  387. if (this.role == 3) {
  388. this.houseId = localStorage.getItem("houseId");
  389. this.allhttp();
  390. } else {
  391. this.zkhousePage();
  392. }
  393. },
  394. methods: {
  395. downLoad() {
  396. let pamaet = {
  397. houseId: this.houseId,
  398. dateType: 0,
  399. statDateStart: this.statDateStart,
  400. statDateEnd: this.statDateEnd,
  401. };
  402. if (this.TimetoAhoose == 7) {
  403. pamaet.dateType = null;
  404. } else {
  405. pamaet.dateType = this.TimetoAhoose;
  406. }
  407. exportMethodPost(
  408. "autoSR/cusStageStatistics/teamTableExport",
  409. "团队对比",
  410. pamaet
  411. );
  412. },
  413. zkhousePage() {
  414. this.$api.api
  415. .findHouseByUser({
  416. orgType: localStorage.getItem("orgType"),
  417. })
  418. .then((res) => {
  419. this.houseList = res.data;
  420. this.houseId = res.data[0].id;
  421. this.allhttp();
  422. });
  423. },
  424. houseChange() {
  425. this.customtime = [];
  426. this.TimetoAhoose = 4;
  427. this.statDateStart = "";
  428. this.statDateEnd = "";
  429. this.allhttp();
  430. },
  431. allhttp() {
  432. this.teamteamTable();
  433. this.teamData1();
  434. this.teamData2();
  435. this.teamData3();
  436. this.teamData4();
  437. this.teamData5();
  438. this.teamData6();
  439. this.teamAllLeve();
  440. },
  441. // 获取一级
  442. teamAllLeve() {
  443. this.teamAllLevel = [{ name: "平均执行", value: "" }];
  444. this.teamAllLeve2 = [{ name: "总次数", value: "" }];
  445. let pamaet = {
  446. houseId: this.houseId,
  447. dateType: 0,
  448. statDateStart: this.statDateStart,
  449. statDateEnd: this.statDateEnd,
  450. };
  451. if (this.TimetoAhoose == 7) {
  452. pamaet.dateType = null;
  453. } else {
  454. pamaet.dateType = this.TimetoAhoose;
  455. }
  456. this.$api.http.teamAllLevel(pamaet).then((res) => {
  457. let arr1 = res.data.resultsList || [];
  458. let arr2 = res.data.sensitiveWordsList || [];
  459. arr1.map((item) => {
  460. this.teamAllLevel.push({
  461. name: item.name,
  462. value: item.marketingId,
  463. });
  464. });
  465. arr2.map((item) => {
  466. this.teamAllLeve2.push({
  467. name: item.words,
  468. value: item.words,
  469. });
  470. });
  471. this.teamAllLevelid = "";
  472. this.teamAllLeve2id = "";
  473. });
  474. },
  475. //表格
  476. teamteamTable() {
  477. this.tablsitdata1 = [
  478. { name: "序号" },
  479. { name: "团队" },
  480. { name: "接待量" },
  481. { name: "接待顾问" },
  482. { name: "有效接待" },
  483. { name: "违禁接待次数" },
  484. { name: "接待时长(分)" },
  485. { name: "平均执行率" },
  486. { name: "违禁接待占比" },
  487. ];
  488. let pamaet = {
  489. houseId: this.houseId,
  490. dateType: 0,
  491. statDateStart: this.statDateStart,
  492. statDateEnd: this.statDateEnd,
  493. };
  494. if (this.TimetoAhoose == 7) {
  495. pamaet.dateType = null;
  496. } else {
  497. pamaet.dateType = this.TimetoAhoose;
  498. }
  499. this.$api.http.teamteamTable(pamaet).then((res) => {
  500. let newlist = res.data || [];
  501. this.tablsitdata2 = res.data;
  502. newlist[0].resultsList.map((item) => {
  503. this.tablsitdata1.push({ name: item.name });
  504. });
  505. });
  506. },
  507. //接待量排名
  508. teamData1() {
  509. this.teamobj1 = {
  510. avg: "",
  511. list: [],
  512. num: "",
  513. };
  514. let pamaet = {
  515. houseId: this.houseId,
  516. dateType: 0,
  517. statDateStart: this.statDateStart,
  518. statDateEnd: this.statDateEnd,
  519. type: 1,
  520. };
  521. if (this.TimetoAhoose == 7) {
  522. pamaet.dateType = null;
  523. } else {
  524. pamaet.dateType = this.TimetoAhoose;
  525. }
  526. this.$api.http.teamData(pamaet).then((res) => {
  527. let arr = [];
  528. res.data.list.map((item) => {
  529. let obj = {};
  530. obj.name = item.deptName;
  531. obj.zxl = item.activeCustomer;
  532. arr.push(obj);
  533. });
  534. arr = this.dealData(arr);
  535. this.teamobj1 = {
  536. avg: res.data.avg || 0,
  537. num: res.data.num || 0,
  538. list: arr || [],
  539. };
  540. });
  541. },
  542. //录音时长排名
  543. teamData2() {
  544. this.teamobj2 = {
  545. avg: "",
  546. list: [],
  547. num: "",
  548. };
  549. let pamaet = {
  550. houseId: this.houseId,
  551. dateType: 0,
  552. statDateStart: this.statDateStart,
  553. statDateEnd: this.statDateEnd,
  554. type: 2,
  555. };
  556. if (this.TimetoAhoose == 7) {
  557. pamaet.dateType = null;
  558. } else {
  559. pamaet.dateType = this.TimetoAhoose;
  560. }
  561. this.$api.http.teamData(pamaet).then((res) => {
  562. let arr = [];
  563. res.data.list.map((item) => {
  564. let obj = {};
  565. obj.name = item.deptName;
  566. obj.zxl = Math.floor(item.sumDuration / 60);
  567. arr.push(obj);
  568. });
  569. arr = this.dealData(arr);
  570. this.teamobj2 = {
  571. avg: res.data.avg || 0,
  572. num: res.data.num || 0,
  573. list: arr || [],
  574. };
  575. });
  576. },
  577. //销讲执行率切换一级
  578. teamAllLevelidtap() {
  579. this.teamData3();
  580. },
  581. //销讲执行率
  582. teamData3() {
  583. this.teamobj3 = {
  584. avg: "",
  585. list: [],
  586. num: "",
  587. };
  588. let pamaet = {
  589. houseId: this.houseId,
  590. dateType: 0,
  591. statDateStart: this.statDateStart,
  592. statDateEnd: this.statDateEnd,
  593. type: 3,
  594. marketingId: this.teamAllLevelid,
  595. };
  596. if (this.TimetoAhoose == 7) {
  597. pamaet.dateType = null;
  598. } else {
  599. pamaet.dateType = this.TimetoAhoose;
  600. }
  601. this.$api.http.teamData(pamaet).then((res) => {
  602. let arr = [];
  603. res.data.list.map((item) => {
  604. let obj = {};
  605. obj.name = item.deptName;
  606. obj.zxl = item.fraction;
  607. arr.push(obj);
  608. });
  609. // arr=this.dealData(arr)
  610. this.teamobj3 = {
  611. avg: res.data.avg || 0,
  612. num: res.data.num || 0,
  613. list: arr || [],
  614. };
  615. });
  616. },
  617. //销讲雷达图
  618. teamData4() {
  619. let pamaet = {
  620. houseId: this.houseId,
  621. dateType: 0,
  622. statDateStart: this.statDateStart,
  623. statDateEnd: this.statDateEnd,
  624. type: 4,
  625. };
  626. if (this.TimetoAhoose == 7) {
  627. pamaet.dateType = null;
  628. } else {
  629. pamaet.dateType = this.TimetoAhoose;
  630. }
  631. this.$api.http.teamData(pamaet).then((res) => {
  632. let namelist = [];
  633. let datalist = [];
  634. let newlinename = [];
  635. let arr = res.data.list || [];
  636. if (arr.length != 0) {
  637. arr.map((item) => {
  638. namelist.push(item.deptName);
  639. datalist.push({
  640. name: item.deptName,
  641. value: [],
  642. });
  643. });
  644. arr[0].resultsList.map((item) => {
  645. newlinename.push({
  646. name: item.name,
  647. max: 100,
  648. });
  649. });
  650. arr.map((item, index) => {
  651. datalist.map((che) => {
  652. if (item.deptName == che.name) {
  653. item.resultsList.map((as) => {
  654. che.value.push(as.zxl);
  655. });
  656. }
  657. });
  658. });
  659. }
  660. this.initecah(namelist, datalist, newlinename);
  661. });
  662. },
  663. //违禁话术雷达图
  664. teamData6() {
  665. let pamaet = {
  666. houseId: this.houseId,
  667. dateType: 0,
  668. statDateStart: this.statDateStart,
  669. statDateEnd: this.statDateEnd,
  670. type: 6,
  671. };
  672. if (this.TimetoAhoose == 7) {
  673. pamaet.dateType = null;
  674. } else {
  675. pamaet.dateType = this.TimetoAhoose;
  676. }
  677. this.$api.http.teamData(pamaet).then((res) => {
  678. let namelist = [];
  679. let datalist = [];
  680. let newlinename = [];
  681. let arr = res.data.list || [];
  682. if (arr.length != 0) {
  683. arr.map((item) => {
  684. namelist.push(item.deptName);
  685. datalist.push({
  686. name: item.deptName,
  687. value: [],
  688. });
  689. });
  690. arr[0].sensitiveWordsList.map((item) => {
  691. newlinename.push({
  692. name: item.words,
  693. max: 100,
  694. });
  695. });
  696. arr.map((item, index) => {
  697. datalist.map((che) => {
  698. if (item.deptName == che.name) {
  699. item.sensitiveWordsList.map((as) => {
  700. che.value.push(as.num);
  701. });
  702. }
  703. });
  704. });
  705. }
  706. this.initecah2(namelist, datalist, newlinename);
  707. });
  708. },
  709. initecah(namelist, datalist, newlinename) {
  710. if (datalist.length == 0) {
  711. this.isshowcd2 = false;
  712. return;
  713. } else {
  714. this.isshowcd2 = true;
  715. }
  716. echarts.init(document.getElementById("main")).dispose();
  717. var chartDom = document.getElementById("main");
  718. var myChart = echarts.init(chartDom);
  719. var option;
  720. option = {
  721. color: [
  722. "#6F8EDC",
  723. "#EE6666",
  724. "#F98120",
  725. "#1CC99E",
  726. "#9474FB",
  727. "#66AFF5",
  728. "#FABD2B",
  729. "#FFCF8F",
  730. "#657292",
  731. "#7A6A99",
  732. "#BF5D52",
  733. "#77B7E4",
  734. "#E6A065",
  735. "#9D5139",
  736. "#C1AA88",
  737. "#F87F7A",
  738. "#F6CF74",
  739. "#7F5506",
  740. "#88BB9B",
  741. "#6E99AA",
  742. "#5789D0",
  743. ],
  744. tooltip: {
  745. trigger: "axis",
  746. },
  747. legend: {
  748. data: namelist,
  749. right: "10",
  750. top: "10",
  751. icon:"roundRect"
  752. },
  753. color: ["#2671E2", "#F3787B"],
  754. radar: {
  755. // shape: 'circle',
  756. indicator: newlinename,
  757. },
  758. series: [
  759. {
  760. type: "radar",
  761. tooltip: {
  762. trigger: "item",
  763. },
  764. data: datalist,
  765. },
  766. ],
  767. };
  768. option && myChart.setOption(option);
  769. window.addEventListener("resize", () => {
  770. myChart.resize();
  771. });
  772. },
  773. initecah2(namelist, datalist, newlinename) {
  774. if (datalist.length == 0) {
  775. this.isshowcd = false;
  776. return;
  777. } else {
  778. this.isshowcd = true;
  779. }
  780. echarts.init(document.getElementById("main2")).dispose();
  781. var chartDom = document.getElementById("main2");
  782. var myChart = echarts.init(chartDom);
  783. var option;
  784. option = {
  785. color: [
  786. "#6F8EDC",
  787. "#EE6666",
  788. "#F98120",
  789. "#1CC99E",
  790. "#9474FB",
  791. "#66AFF5",
  792. "#FABD2B",
  793. "#FFCF8F",
  794. "#657292",
  795. "#7A6A99",
  796. "#BF5D52",
  797. "#77B7E4",
  798. "#E6A065",
  799. "#9D5139",
  800. "#C1AA88",
  801. "#F87F7A",
  802. "#F6CF74",
  803. "#7F5506",
  804. "#88BB9B",
  805. "#6E99AA",
  806. "#5789D0",
  807. ],
  808. tooltip: {
  809. trigger: "axis",
  810. },
  811. legend: {
  812. data: namelist,
  813. right: "10",
  814. top: "10",
  815. icon:"roundRect"
  816. },
  817. color: ["#2671E2", "#F3787B"],
  818. radar: {
  819. // shape: 'circle',
  820. indicator: newlinename,
  821. },
  822. series: [
  823. {
  824. type: "radar",
  825. tooltip: {
  826. trigger: "item",
  827. },
  828. data: datalist,
  829. },
  830. ],
  831. };
  832. option && myChart.setOption(option);
  833. window.addEventListener("resize", () => {
  834. myChart.resize();
  835. });
  836. },
  837. //违禁接待次数一级切换
  838. teamAllLeve2tap() {
  839. this.teamData5();
  840. },
  841. //违禁接待次数
  842. teamData5() {
  843. this.teamobj5 = {
  844. avg: "",
  845. list: [],
  846. num: "",
  847. };
  848. let pamaet = {
  849. houseId: this.houseId,
  850. dateType: 0,
  851. statDateStart: this.statDateStart,
  852. statDateEnd: this.statDateEnd,
  853. type: 5,
  854. words: this.teamAllLeve2id,
  855. };
  856. if (this.TimetoAhoose == 7) {
  857. pamaet.dateType = null;
  858. } else {
  859. pamaet.dateType = this.TimetoAhoose;
  860. }
  861. this.$api.http.teamData(pamaet).then((res) => {
  862. let arr = [];
  863. res.data.list.map((item) => {
  864. let obj = {};
  865. obj.name = item.deptName;
  866. obj.zxl = item.prohibitedCustomer;
  867. arr.push(obj);
  868. });
  869. arr = this.dealData(arr);
  870. this.teamobj5 = {
  871. avg: res.data.avg || 0,
  872. num: res.data.num || 0,
  873. list: arr || [],
  874. };
  875. });
  876. },
  877. // 自定义时间
  878. confirmtime() {
  879. this.TimetoAhoose = 7;
  880. (this.statDateStart = this.customtime[0]),
  881. (this.statDateEnd = this.customtime[1]);
  882. this.allhttp();
  883. },
  884. //切换时间
  885. tabtimetap(index) {
  886. this.TimetoAhoose = index;
  887. this.statDateStart = "";
  888. this.statDateEnd = "";
  889. this.customtime = [];
  890. this.allhttp();
  891. },
  892. dealData(arr) {
  893. console.log(arr);
  894. let num = Math.max.apply(
  895. Math,
  896. arr.map(function (o) {
  897. return o.zxl;
  898. })
  899. ); //结果:3
  900. arr.map((item) => {
  901. item.zxl1 = Math.floor((item.zxl / num) * 100) || 0;
  902. });
  903. return arr;
  904. },
  905. },
  906. };
  907. </script>
  908. <style scoped="scoped" lang="scss" >
  909. /* 添加table滚动条 */
  910. table {
  911. border-collapse: collapse;
  912. width: 100%;
  913. }
  914. tbody {
  915. display: block;
  916. // width: 100%;
  917. // overflow-x: auto;
  918. height: 220px;
  919. }
  920. tbody tr {
  921. display: table;
  922. width: 100%;
  923. table-layout: fixed;
  924. // word-break: break-all;
  925. }
  926. .box-center {
  927. width: 100%;
  928. padding: 20px 15px;
  929. min-width: 1000px;
  930. }
  931. .cen-tab {
  932. width: 100%;
  933. padding: 15px;
  934. background: #ffffff;
  935. margin-top: 60px;
  936. }
  937. .tophove {
  938. color: #ffffff;
  939. background: #2671e2;
  940. }
  941. .app-top {
  942. // width: 100%;
  943. width: calc(100% - 270px);
  944. position: fixed;
  945. z-index: 999;
  946. margin-top: -16px;
  947. background: #ffffff;
  948. box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.04);
  949. box-shadow: 0px 0px 10px 0px #dadada;
  950. border-radius: 4px;
  951. padding-top: 15px;
  952. padding-bottom: 15px;
  953. }
  954. .app-titel {
  955. width: 100%;
  956. display: flex;
  957. align-items: center;
  958. .titel-text {
  959. height: 100%;
  960. font-size: 16px;
  961. color: #32363d;
  962. text-indent: 30px;
  963. }
  964. .toptimeqhuan {
  965. width: 190px;
  966. height: 32px;
  967. background: #ffffff;
  968. border-radius: 4px;
  969. border: 1px solid #e0e0e0;
  970. display: flex;
  971. align-items: center;
  972. overflow: hidden;
  973. margin-left: 20px;
  974. cursor: pointer;
  975. }
  976. .toptimeqhuan div {
  977. flex: 1;
  978. text-align: center;
  979. line-height: 32px;
  980. font-size: 14px;
  981. }
  982. }
  983. .app-box-san {
  984. width: 100%;
  985. min-height: 400px;
  986. display: flex;
  987. margin-top: 15px;
  988. .zuo {
  989. flex: 1;
  990. margin-right: 15px;
  991. background: #ffffff;
  992. border-radius: 4px;
  993. .title {
  994. width: 100%;
  995. height: 55px;
  996. // border-bottom: 1px solid #e0e0e0;
  997. display: flex;
  998. align-content: center;
  999. .text1 {
  1000. flex: 2;
  1001. line-height: 55px;
  1002. text-indent: 20px;
  1003. font-weight: 500;
  1004. font-size: 16px;
  1005. color: #333333;
  1006. display: flex;
  1007. align-items: center;
  1008. }
  1009. .text2 {
  1010. flex: 1;
  1011. height: 55px;
  1012. display: flex;
  1013. align-items: center;
  1014. }
  1015. }
  1016. }
  1017. .you {
  1018. flex: 1;
  1019. background: #ffffff;
  1020. border-radius: 4px;
  1021. .title {
  1022. width: 100%;
  1023. height: 55px;
  1024. // border-bottom: 1px solid #e0e0e0;
  1025. display: flex;
  1026. align-content: center;
  1027. .text1 {
  1028. flex: 2;
  1029. line-height: 55px;
  1030. text-indent: 20px;
  1031. font-weight: 500;
  1032. font-size: 16px;
  1033. color: #333333;
  1034. display: flex;
  1035. align-items: center;
  1036. }
  1037. .text2 {
  1038. flex: 1;
  1039. height: 55px;
  1040. display: flex;
  1041. align-items: center;
  1042. }
  1043. }
  1044. #main {
  1045. height: calc(400px - 55px);
  1046. }
  1047. #main2 {
  1048. height: calc(400px - 55px);
  1049. }
  1050. }
  1051. }
  1052. .hejisan {
  1053. width: 92%;
  1054. margin: 15px auto;
  1055. display: flex;
  1056. // padding-top: 10px;
  1057. // padding-bottom: 10px;
  1058. .text1-1 {
  1059. color: #666666;
  1060. }
  1061. .text1-2 {
  1062. color: #333333;
  1063. margin-top: 10px;
  1064. font-weight: bold;
  1065. }
  1066. }
  1067. // 进度条
  1068. .jinbox {
  1069. width: 100%;
  1070. height: 18px;
  1071. line-height: 18px;
  1072. display: flex;
  1073. font-size: 16px;
  1074. color: #2c3542;
  1075. margin-top: 24px;
  1076. align-items: center;
  1077. .jinboxtit {
  1078. width: 14%;
  1079. height: 18px;
  1080. padding-right: 6px;
  1081. white-space: nowrap;
  1082. text-overflow: ellipsis;
  1083. overflow: hidden;
  1084. }
  1085. .jinbox-box {
  1086. width: 75%;
  1087. height: 100%;
  1088. border-radius: 8px;
  1089. background: #f2f2f2;
  1090. }
  1091. .boxbaifenbi {
  1092. height: 100%;
  1093. background: #60d7a0;
  1094. border-radius: 8px;
  1095. max-width: 100%;
  1096. }
  1097. .boxbaifenbi2 {
  1098. height: 100%;
  1099. background: #5b8ff9;
  1100. max-width: 100%;
  1101. }
  1102. .jinboxbott {
  1103. width: 16%;
  1104. text-indent: 16px;
  1105. }
  1106. }
  1107. .theadtd {
  1108. width: 140px;
  1109. height: 48px;
  1110. border-bottom: 1px solid #E0E0E0;
  1111. text-align: center;
  1112. line-height: 48px;
  1113. font-size: 14px;
  1114. color: #32363d;
  1115. }
  1116. .nulllist {
  1117. flex: 1;
  1118. }
  1119. .sequenceNum {
  1120. display: flex;
  1121. width: 26px;
  1122. height: 24px;
  1123. justify-content: center;
  1124. align-items: center;
  1125. background: #E5F0FF;
  1126. border-radius: 15px;
  1127. color: #333333;
  1128. margin-right: 10px;
  1129. }
  1130. .pop{
  1131. display: inline-block;
  1132. width: 18px;
  1133. height: 18px;
  1134. background: url('../../../public/img/pop.png') no-repeat;
  1135. background-size: 100%;
  1136. margin-left: 6px;
  1137. }
  1138. /deep/ .el-button--primary{
  1139. background: #2671E2 !important;
  1140. border: 1px solid #2671E2 !important;
  1141. }
  1142. </style>