AuditTable.vue 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240
  1. <template>
  2. <a-card>
  3. <div>
  4. <h2 style='text-align:center;margin : 0px'>稽核人员工作量统计列表</h2>
  5. <a-row>
  6. <a-card>
  7. <a-col :span="12"><div id="typeChart6" style="width: 600px;height:10px;"></div></a-col>
  8. <a-col :span="24"><div id="typeChart5" style="width: 1200px;height:600px;"></div></a-col>
  9. </a-card>
  10. <a-card>
  11. <h2 style='text-align:center;margin : 30px'>稽核人员稽核数量排名</h2>
  12. <a-col :span="24"><div id="typeCharts" style="width: 1200px;height:700px;"></div></a-col>
  13. </a-card>
  14. </a-row>
  15. <div style='height: 30px'></div>
  16. <h2 style='text-align:center'>稽核人员稽核明细</h2>
  17. <a-col >
  18. <div class="table-page-search-wrapper">
  19. <a-form layout="inline" @keyup.enter.native="searchQuery">
  20. <a-row :gutter="24">
  21. <a-col :xl="6" :lg="7" :md="8" :sm="24">
  22. <a-form-item label="客户编号">
  23. <j-input placeholder="请输入客户编号" v-model="queryParam.customerNo" ></j-input>
  24. </a-form-item>
  25. </a-col>
  26. <a-col :xl="6" :lg="7" :md="8" :sm="24">
  27. <a-form-item label="用户编号">
  28. <j-input placeholder="用户编号" v-model="queryParam.userNo" ></j-input>
  29. </a-form-item>
  30. </a-col>
  31. <a-col :xl="6" :lg="7" :md="8" :sm="24">
  32. <a-form-item label="稽核类型">
  33. <j-dict-select-tag placeholder="请选择稽核类型" v-model="queryParam.type" dictCode="sms_check_task_type" />
  34. </a-form-item>
  35. </a-col>
  36. <div class="table-operator" style='float: right'>
  37. <!-- 高级查询区域 -->
  38. <a-dropdown v-if="selectedRowKeys.length > 0">
  39. <a-menu slot="overlay">
  40. <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
  41. </a-menu>
  42. <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
  43. </a-dropdown>
  44. <a-button type="primary" @click="searchQuery()" icon="search" >查询</a-button>
  45. <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
  46. </div>
  47. <a-col :xl="6" :lg="7" :md="8" :sm="24">
  48. <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"></span>
  49. </a-col>
  50. </a-row>
  51. </a-form>
  52. </div>
  53. </a-col>
  54. <div>
  55. <a-table
  56. ref="table"
  57. size="middle"
  58. :scroll="{x:true}"
  59. bordered
  60. rowKey="id"
  61. :columns="columns"
  62. :dataSource="dataSource"
  63. :pagination="ipagination"
  64. :loading="loading"
  65. :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  66. class="j-table-force-nowrap"
  67. @change="handleTableChange">
  68. <template v-slot:checkState="status">
  69. <a-badge :status="status | statusTypeFilter" :text="status | statusFilter"/>
  70. </template>
  71. <template v-slot:checkType="text">
  72. <a-badge :text="text | checkType "/>
  73. </template>
  74. <template v-slot:rowIndex="text,records,index">
  75. {{ (ipagination.current - 1) * ipagination.pageSize + Number(index)+1 }}
  76. </template>
  77. </a-table>
  78. </div>
  79. <!-- table区域 end -->
  80. <div style="width: 600px;height:5px;"></div>
  81. </div>
  82. </a-card>
  83. </template>
  84. <script>
  85. import * as echarts from 'echarts'
  86. import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  87. import { getAction } from '@api/manage'
  88. export default {
  89. name: 'TaskCheckList',
  90. mixins:[JeecgListMixin],
  91. inject:['closeCurrent'],
  92. data () {
  93. return{
  94. url: {
  95. queryTask: "/smsCheck/task/queryById",
  96. list: "/smsCheck/customerInfo/warningPageList",
  97. infoListTop: "/smsCheck/customerInfo/infoListTop",
  98. infoListTopTable: "/smsCheck/customerInfo/infoListTopTable",
  99. },
  100. dataSource:[
  101. ],
  102. topList:[],
  103. shortMap :[],
  104. lotMap :[],
  105. truckMap:[],
  106. speMap :[],
  107. dep:[],
  108. columns: [
  109. {
  110. title: '#',
  111. dataIndex: '',
  112. key:'rowIndex',
  113. width:60,
  114. align:"center",
  115. scopedSlots: { customRender: 'rowIndex' }
  116. },
  117. {
  118. title:'稽核类型',
  119. align:"center",
  120. sorter: true,
  121. dataIndex: 'type',
  122. customRender: function (text) {
  123. //客户信息所属类型:1:行短稽核 2:物联网业务稽核 3.复开审批 4.中继线稽核
  124. if (text == '1') {
  125. return "行短稽核";
  126. } else if (text == "2") {
  127. return "物联网业务稽核";
  128. } else if (text == "3") {
  129. return "复开审批";
  130. } else if (text == "4") {
  131. return "中继线稽核";
  132. }
  133. }
  134. },
  135. {
  136. title:'客户编号',
  137. align:"center",
  138. sorter: true,
  139. dataIndex: 'customerNo'
  140. },
  141. {
  142. title:'用户编号',
  143. align:"center",
  144. dataIndex: 'userNo'
  145. },
  146. {
  147. title:'入网时间',
  148. align:"center",
  149. sorter: true,
  150. dataIndex: 'networkAccessTime'
  151. },
  152. {
  153. title:'员工姓名',
  154. align:"center",
  155. dataIndex: 'staffName'
  156. },
  157. {
  158. title:'员工编号',
  159. align:"center",
  160. sorter: true,
  161. dataIndex: 'staffNo'
  162. },
  163. {
  164. title: '员工二级部门',
  165. align: "center",
  166. dataIndex: 'staffDeptLevel2Name'
  167. },
  168. {
  169. title: '员工三级部门',
  170. align: "center",
  171. dataIndex: 'staffDeptLevel3Name'
  172. },
  173. {
  174. //0:未处理;1:未完善;2:待稽核;4:待整改;5:稽核通过;)
  175. title:'预警稽核进度',
  176. align:"center",
  177. sorter: true,
  178. dataIndex: 'warningState',
  179. scopedSlots: { customRender: 'checkState' }
  180. }
  181. ],
  182. }
  183. },
  184. created() {
  185. // this.selectListCount()
  186. // this.selectList();
  187. this.loadData(1)
  188. this.selectCountTop();
  189. this.infoListTopTable();
  190. },
  191. filters: {
  192. statusTypeFilter(type) {
  193. const statusTypeMap = {
  194. '0': 'error',
  195. '1': 'purple',
  196. '2': 'warning',
  197. '3': 'warning',
  198. '4': 'processing',
  199. '5': 'success'
  200. }
  201. return statusTypeMap[type]
  202. },
  203. checkType(text) {
  204. const statusMap = {
  205. '0': '未处理',
  206. '1': '未完善',
  207. '2': '待稽核',
  208. '3': '待稽核',
  209. '4': '待整改',
  210. '5': '通过'
  211. }
  212. return statusMap[text]
  213. },
  214. statusFilter(status) {
  215. const statusMap = {
  216. '0': '未处理',
  217. '1': '未完善',
  218. '2': '待稽核',
  219. '3': '待稽核',
  220. '4': '待整改',
  221. '5': '通过'
  222. }
  223. return statusMap[status]
  224. }
  225. },
  226. methods: {
  227. typeChart() {
  228. var myChart = echarts.init(document.getElementById('typeChart'));
  229. var option = {
  230. title: {
  231. text: '多个指标分析',
  232. subtext: '',
  233. left: 'center'
  234. },
  235. tooltip: {
  236. trigger: 'axis',
  237. axisPointer: {
  238. type: 'shadow'
  239. }
  240. },
  241. legend: {
  242. top:" 15%",//与上方的距离 可百分比% 可像素p
  243. bottom: '100%',
  244. data: [
  245. '当月存量用户月均ARPU',
  246. '流失用户分析'
  247. ]
  248. },
  249. grid: {
  250. left: '3%',
  251. right: '4%',
  252. bottom: '3%',
  253. containLabel: true
  254. },
  255. xAxis: {
  256. type: 'category',
  257. data: ['月份1', '月份2', '月份3', '月份4']
  258. },
  259. yAxis: {
  260. type: 'value'
  261. },
  262. series: [
  263. {
  264. name: '当月存量用户月均ARPU',
  265. type: 'bar',
  266. data: [30, 40, 50, 60]
  267. },
  268. {
  269. name: '流失用户分析',
  270. type: 'bar',
  271. data: [20, 30, 40, 50]
  272. }
  273. ]
  274. };
  275. myChart.setOption(option);
  276. },
  277. typeChart2() {
  278. // 基于准备好的dom,初始化echarts实例
  279. var myChart = echarts.init(document.getElementById('typeChart2'));
  280. var option = {
  281. title: {
  282. subtext: '',
  283. left: 'center',
  284. text: '指标保有率分析',
  285. },
  286. tooltip: {
  287. trigger: 'axis',
  288. axisPointer: {
  289. type: 'shadow'
  290. }
  291. },
  292. legend: {
  293. bottom: '10%',
  294. top:" 15%",//与上方的距离 可百分比% 可像素px
  295. data: [
  296. '存量收入月均保有率(全量)',
  297. '存量收入月均保有率(政企)',
  298. '存量收入月均保有率(公众)',
  299. '政企/公众用户保有率',
  300. '政企直销单位户保有率',
  301. ]
  302. },
  303. grid: {
  304. left: '3%',
  305. right: '4%',
  306. bottom: '3%',
  307. containLabel: true
  308. },
  309. xAxis: {
  310. type: 'category',
  311. data: ['指标1', '指标2', '指标3', '指标4']
  312. },
  313. yAxis: {
  314. type: 'value'
  315. },
  316. series: [
  317. {
  318. name: '存量收入月均保有率(全量)',
  319. type: 'line',
  320. data: [0.8, 0.7, 0.6, 0.9]
  321. },
  322. {
  323. name: '存量收入月均保有率(政企)',
  324. type: 'line',
  325. data: [0.6, 0.5, 0.7, 0.8]
  326. },
  327. {
  328. name: '存量收入月均保有率(公众)',
  329. type: 'line',
  330. data: [0.7, 0.8, 0.6, 0.9]
  331. },
  332. {
  333. name: '存量用户保有率',
  334. type: 'line',
  335. data: [0.9, 0.8, 0.7, 0.6]
  336. },
  337. {
  338. name: '政企/公众用户保有率',
  339. type: 'line',
  340. data: [0.7, 0.8, 0.6, 0.9]
  341. },
  342. {
  343. name: '政企直销单位户保有率',
  344. type: 'line',
  345. data: [0.5, 0.6, 0.4, 0.7]
  346. }
  347. ]
  348. };
  349. myChart.setOption(option);
  350. },
  351. typeChart3() {
  352. var myChart = echarts.init(document.getElementById('typeChart3'));
  353. var option = {
  354. title: {
  355. text: '续约加约情况',
  356. left: 'center'
  357. },
  358. tooltip: {},
  359. legend: {
  360. top:" 15%",//与上方的距离 可百分比% 可像素px
  361. data: ['合约用户续约数', '无合约用户加约数' ]
  362. },
  363. grid: {
  364. left: '3%',
  365. right: '4%',
  366. bottom: '3%',
  367. containLabel: true
  368. },
  369. xAxis: {
  370. type: 'category',
  371. data: ['1季度','2季度','3季度','4季度']
  372. },
  373. yAxis: {
  374. type: 'value'
  375. },
  376. series: [
  377. {
  378. name: '合约用户续约数',
  379. type: 'bar',
  380. stack: '续约加约',
  381. data: [120,190,140,150],
  382. itemStyle: {
  383. normal: {
  384. //这里是颜色
  385. color: function(params) {
  386. //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
  387. var colorList = ['#FFA100','#BBFFAA', '#ffc0cb','#00A3E0', '#CCCCCC', '#749f83', '#ca8622'];
  388. return colorList[params.dataIndex]
  389. }
  390. }
  391. }
  392. },
  393. {
  394. name: '无合约用户加约数',
  395. type: 'bar',
  396. stack: '续约加约',
  397. data: [220,100,300,200],
  398. itemStyle: {
  399. normal: {
  400. //这里是颜色
  401. color: function(params) {
  402. //注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
  403. var colorList = [ '#CCCCCC','#749f83', '#FFA100','#BBFFAA', '#ffc0cb','#00A3E0','#ca8622'];
  404. return colorList[params.dataIndex]
  405. }
  406. }
  407. }
  408. },
  409. ]
  410. };
  411. myChart.setOption(option);
  412. },
  413. typeCharts(){
  414. var nameList=[];
  415. var shortList=[];
  416. var lotList=[];
  417. var truckList=[];
  418. var specialList=[];
  419. for (var k in this.topList) {
  420. nameList.push(this.topList[k].staffNo)
  421. shortList.push(this.topList[k].shortCount)
  422. lotList.push(this.topList[k].lotCount)
  423. truckList.push(this.topList[k].truckCount)
  424. specialList.push(this.topList[k].specialCount)
  425. }
  426. var myChart = echarts.init(document.getElementById('typeCharts'));
  427. var option = {
  428. tooltip: {
  429. trigger: 'axis',
  430. axisPointer: {
  431. // Use axis to trigger tooltip
  432. type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
  433. }
  434. },
  435. legend: {},
  436. grid: {
  437. left: '3%',
  438. right: '4%',
  439. bottom: '3%',
  440. containLabel: true
  441. },
  442. xAxis: {
  443. type: 'value'
  444. },
  445. yAxis: {
  446. type: 'category',
  447. data: nameList
  448. },
  449. series: [
  450. {
  451. name: '行短稽核数量',
  452. type: 'bar',
  453. stack: 'total',
  454. label: {
  455. show: true
  456. },
  457. emphasis: {
  458. focus: 'series'
  459. },
  460. data: shortList
  461. },
  462. {
  463. name: '物联网稽核数量',
  464. type: 'bar',
  465. stack: 'total',
  466. label: {
  467. show: true
  468. },
  469. emphasis: {
  470. focus: 'series'
  471. },
  472. data: lotList
  473. },
  474. {
  475. name: '中继线稽核数量',
  476. type: 'bar',
  477. stack: 'total',
  478. label: {
  479. show: true
  480. },
  481. emphasis: {
  482. focus: 'series'
  483. },
  484. data: truckList
  485. },
  486. {
  487. name: '特审复开数量',
  488. type: 'bar',
  489. stack: 'total',
  490. label: {
  491. show: true
  492. },
  493. emphasis: {
  494. focus: 'series'
  495. },
  496. data: specialList
  497. }
  498. ]
  499. };
  500. myChart.setOption(option);
  501. },
  502. typeChart5(){
  503. var myChart = echarts.init(document.getElementById('typeChart5'));
  504. var dataMap = {};
  505. var depName =this.dep;
  506. var shortMap =this.shortMap;
  507. var lotMap =this.lotMap;
  508. var truckMap=this.truckMap;
  509. var speMap =this.speMap;
  510. function dataFormatter(obj) {
  511. debugger
  512. // prettier-ignore
  513. var pList = depName;
  514. var temp;
  515. for (var year = 1; year <= 1; year++) {
  516. var max = 0;
  517. var sum = 0;
  518. temp = obj[year];
  519. for (var i = 0, l = temp.length; i < l; i++) {
  520. max = Math.max(max, temp[i]);
  521. sum += temp[i];
  522. obj[year][i] = {
  523. name: pList[i],
  524. value: temp[i]
  525. };
  526. }
  527. obj[year + 'max'] = Math.floor(max / 100) * 100;
  528. obj[year + 'sum'] = sum/100;
  529. }
  530. return obj;
  531. }
  532. dataMap.dataShort = dataFormatter({
  533. //max : 60000,
  534. 1: shortMap,
  535. });
  536. // prettier-ignore
  537. dataMap.dataLot = dataFormatter({
  538. //max : 4000,
  539. 1: lotMap});
  540. // prettier-ignore
  541. dataMap.dataTruck = dataFormatter({
  542. //max : 26600,
  543. 1: truckMap});
  544. // prettier-ignore
  545. dataMap.dataSpe = dataFormatter({
  546. //max : 25000,
  547. 1: speMap
  548. });
  549. // prettier-ignore
  550. var option = {
  551. baseOption: {
  552. timeline: {
  553. axisType: 'category',
  554. // realtime: false,
  555. // loop: false,
  556. autoPlay: true,
  557. // currentIndex: 2,
  558. playInterval: 1000,
  559. // controlStyle: {
  560. // position: 'left'
  561. // },
  562. data: [
  563. {
  564. value: '稽核量统计图',
  565. tooltip: {
  566. formatter: function (params) {
  567. return params.name + ' 达到又一个高度';
  568. }
  569. },
  570. symbol: 'diamond',
  571. symbolSize: 18
  572. }
  573. ],
  574. label: {
  575. formatter: function (s) {
  576. return s;
  577. }
  578. }
  579. },
  580. title: {
  581. subtext: ' '
  582. },
  583. tooltip: {},
  584. legend: {
  585. left: 'right',
  586. data: ['行短稽核', '物联网稽核', '中继线稽核', '特审复开' ],
  587. },
  588. calculable: true,
  589. grid: {
  590. top: 80,
  591. bottom: 100,
  592. tooltip: {
  593. trigger: 'axis',
  594. axisPointer: {
  595. type: 'shadow',
  596. label: {
  597. show: true,
  598. formatter: function (params) {
  599. return params.value.replace('\n', '');
  600. }
  601. }
  602. }
  603. }
  604. },
  605. xAxis: [
  606. {
  607. type: 'category',
  608. axisLabel: { interval: 0 },
  609. data: depName,
  610. splitLine: { show: false }
  611. }
  612. ],
  613. yAxis: [
  614. {
  615. type: 'value',
  616. name: '数量(个)'
  617. }
  618. ],
  619. series: [
  620. { name: '特审复开', type: 'bar' },
  621. { name: '行短稽核', type: 'bar' },
  622. { name: '物联网稽核', type: 'bar' },
  623. { name: '中继线稽核', type: 'bar' },
  624. ]
  625. },
  626. options: [
  627. {
  628. title: { text: '稽核人员工作量统计列表' },
  629. series: [
  630. { data: dataMap.dataSpe['1'] },
  631. { data: dataMap.dataShort['1'] },
  632. { data: dataMap.dataLot['1'] },
  633. { data: dataMap.dataTruck['1'] },
  634. ]
  635. },
  636. ]
  637. };
  638. myChart.setOption(option);
  639. },
  640. typeChart7(){
  641. var myChart = echarts.init(document.getElementById('typeChart7'));
  642. var option = {
  643. title: {
  644. text: '专项存量维系数据分析',
  645. left: 'center'
  646. },
  647. tooltip: {},
  648. legend: {
  649. y: 'bottom',
  650. top:" 15%",//与上方的距离 可百分比% 可像素px
  651. data: [
  652. '翼企行动用户维系(单位户)',
  653. '翼企行动用户维系(个人户)',
  654. '每月存量客户拉新数量',
  655. '移动三零用户数',
  656. '低零流量用户数'
  657. ],
  658. },
  659. grid: {
  660. left: '3%',
  661. right: '4%',
  662. bottom: '3%',
  663. containLabel: true
  664. },
  665. xAxis: {
  666. type: 'category',
  667. data: ['北区整体', '分部门1', '分部门2']
  668. },
  669. yAxis: {
  670. type: 'value'
  671. },
  672. series: [
  673. {
  674. name: '翼企行动用户维系(单位户)',
  675. type: 'bar',
  676. stack: '翼企行动',
  677. data: [120, 132, 101]
  678. },
  679. {
  680. name: '翼企行动用户维系(个人户)',
  681. type: 'bar',
  682. stack: '翼企行动',
  683. data: [80, 90, 70]
  684. },
  685. {
  686. name: '每月存量客户拉新数量',
  687. type: 'bar',
  688. data: [50, 60, 40]
  689. },
  690. {
  691. name: '移动三零用户数',
  692. type: 'bar',
  693. stack: '移动三零',
  694. data: [20, 25, 15]
  695. },
  696. {
  697. name: '低零流量用户数',
  698. type: 'bar',
  699. stack: '低零流量',
  700. data: [30, 35, 25]
  701. }
  702. ]
  703. };
  704. myChart.setOption(option);
  705. },
  706. typeChart8(){
  707. var myChart = echarts.init(document.getElementById('typeChart8'));
  708. var option = {
  709. title: {
  710. text: '专项存量维系数据分析',
  711. left: 'center'
  712. },
  713. tooltip: {},
  714. legend: {
  715. top:" 15%",//与上方的距离 可百分比% 可像素px
  716. data: [
  717. '客户保有率',
  718. '客户流失率',
  719. ]
  720. },
  721. grid: {
  722. left: '3%',
  723. right: '4%',
  724. bottom: '3%',
  725. containLabel: true
  726. },
  727. xAxis: {
  728. type: 'category',
  729. boundaryGap: false,
  730. data: ['北区整体', '分部门1', '分部门2']
  731. },
  732. yAxis: {
  733. type: 'value'
  734. },
  735. series: [
  736. {
  737. name: '客户保有率',
  738. type: 'line',
  739. data: [0.8, 0.7, 0.6]
  740. },
  741. {
  742. name: '客户流失率',
  743. type: 'line',
  744. data: [0.2, 0.3, 0.4]
  745. },
  746. {
  747. name: '移动三零用户占比',
  748. type: 'line',
  749. stack: '移动三零',
  750. data: [0.1, 0.15, 0.1]
  751. },
  752. {
  753. name: '低零流量用户占比',
  754. type: 'line',
  755. stack: '低零流量',
  756. data: [0.2, 0.25, 0.2]
  757. }
  758. ]
  759. };
  760. myChart.setOption(option);
  761. },
  762. typeChart9(){
  763. var myChart = echarts.init(document.getElementById('typeChart9'));
  764. var option = {
  765. legend: {
  766. top: 'bottom'
  767. },
  768. toolbox: {
  769. show: true,
  770. feature: {
  771. mark: { show: true },
  772. dataView: { show: true, readOnly: false },
  773. restore: { show: true },
  774. saveAsImage: { show: true }
  775. }
  776. },
  777. series: [
  778. {
  779. name: 'Nightingale Chart',
  780. type: 'pie',
  781. radius: [50, 100],
  782. center: ['50%', '50%'],
  783. roseType: 'area',
  784. itemStyle: {
  785. borderRadius: 8
  786. },
  787. data: [
  788. { value: 40, name: '低零流量客户' },
  789. { value: 38, name: '移动三零客户' },
  790. { value: 32, name: '存量客户拉新数量' }
  791. ]
  792. }
  793. ]
  794. };
  795. myChart.setOption(option);
  796. },
  797. typeChart10(){
  798. var myChart = echarts.init(document.getElementById('typeChart10'));
  799. var option = {
  800. title: {
  801. text: '多个指标分析',
  802. left: 'center'
  803. },
  804. legend: { top:"45%" },
  805. tooltip: {
  806. trigger: 'axis',
  807. showContent: false
  808. },
  809. dataset: {
  810. source: [
  811. ['政企直销单位户', '2012', '2013', '2014', '2015', '2016', '2017'],
  812. ['流失用户', 56.5, 82.1, 88.7, 70.1, 53.4, 85.1],
  813. ['攻企/公众用户', 51.1, 51.4, 55.1, 53.3, 73.8, 68.7],
  814. ['存量用户', 40.1, 62.2, 69.5, 36.4, 45.2, 32.5],
  815. ['当月存量用户月均ARPU', 25.2, 37.1, 41.2, 18, 33.9, 49.1],
  816. ['存量收入月均保有率(全量/政企/公众)', 42.1, 62.2, 46.5, 36.4, 45.2, 32.5],
  817. ]
  818. },
  819. xAxis: { type: 'category' },
  820. yAxis: { gridIndex: 0 },
  821. grid: { top: '55%' },
  822. series: [
  823. {
  824. type: 'line',
  825. smooth: true,
  826. seriesLayoutBy: 'row',
  827. emphasis: { focus: 'series' }
  828. },
  829. {
  830. type: 'line',
  831. smooth: true,
  832. seriesLayoutBy: 'row',
  833. emphasis: { focus: 'series' }
  834. },
  835. {
  836. type: 'line',
  837. smooth: true,
  838. seriesLayoutBy: 'row',
  839. emphasis: { focus: 'series' }
  840. },
  841. {
  842. type: 'line',
  843. smooth: true,
  844. seriesLayoutBy: 'row',
  845. emphasis: { focus: 'series' }
  846. },
  847. {
  848. type: 'pie',
  849. id: 'pie',
  850. radius: '30%',
  851. center: ['50%', '25%'],
  852. emphasis: {
  853. focus: 'self'
  854. },
  855. label: {
  856. formatter: '{b}: {@2012} ({d}%)'
  857. },
  858. encode: {
  859. itemName: 'product',
  860. value: '2012',
  861. tooltip: '2012'
  862. }
  863. }
  864. ]
  865. };
  866. myChart.on('updateAxisPointer', function (event) {
  867. const xAxisInfo = event.axesInfo[0];
  868. if (xAxisInfo) {
  869. const dimension = xAxisInfo.value + 1;
  870. myChart.setOption({
  871. series: {
  872. id: 'pie',
  873. label: {
  874. formatter: '{b}: {@[' + dimension + ']} ({d}%)'
  875. },
  876. encode: {
  877. value: dimension,
  878. tooltip: dimension
  879. }
  880. }
  881. });
  882. }
  883. });
  884. myChart.setOption(option);
  885. },
  886. selectList() {
  887. this.loading = true;
  888. let params = {
  889. customerNo: this.queryParam.customerNo,
  890. userNo: this.queryParam.userNo,
  891. checkState:this.currentCheckState,
  892. staffNo: this.queryParam.staffNo,
  893. type: this.queryParam.type
  894. }
  895. getAction(this.url.lists, params).then((res) => {
  896. if (res.success) {
  897. if (!res.result){
  898. this.dataSource = []
  899. }else {
  900. this.dataSource = res.result.records ;
  901. }
  902. if(res.result && res.result.total) {
  903. this.ipagination.total = res.result.total;
  904. }else{
  905. this.ipagination.total = 0;
  906. }
  907. //update-end---author:zhangyafei Date:20201118 for:适配不分页的数据列表------------
  908. }else{
  909. this.$message.warning(res.message)
  910. }
  911. }).finally(() => {
  912. this.loading = false
  913. })
  914. },
  915. infoListTopTable() {
  916. this.loading = true;
  917. getAction(this.url.infoListTopTable).then((res) => {
  918. if (res.success) {
  919. this.shortMap =res.result.short
  920. this.lotMap=res.result.lot
  921. this.truckMap=res.result.truck
  922. this.speMap =res.result.spe
  923. this.dep =res.result.name
  924. this.shortMapCount=res.result.shortCount
  925. this.lotMapCount=res.result.lotCount
  926. this.truckMapCount=res.result.truckCount
  927. this.speMapCount=res.result.speCount
  928. debugger
  929. this.typeChart5()
  930. }else{
  931. this.$message.warning(res.message)
  932. }
  933. }).finally(() => {
  934. this.loading = false
  935. })
  936. },
  937. selectCountTop() {
  938. this.loading = true;
  939. getAction(this.url.infoListTop).then((res) => {
  940. if (res.success) {
  941. if (!res.resultList){
  942. this.topList = []
  943. }else {
  944. this.topList = res.resultList ;
  945. this.typeCharts()
  946. }
  947. }else{
  948. this.$message.warning(res.message)
  949. }
  950. }).finally(() => {
  951. this.loading = false
  952. })
  953. },
  954. selectListCount() {
  955. getAction(this.url.infoListTop).then((res) => {
  956. if (res.success) {
  957. if (!res.result){
  958. this.dataSource = []
  959. }else {
  960. this.dataSource = res.result.records ;
  961. }
  962. if(res.result && res.result.total) {
  963. this.ipagination.total = res.result.total;
  964. }else{
  965. this.ipagination.total = 0;
  966. }
  967. //update-end---author:zhangyafei Date:20201118 for:适配不分页的数据列表------------
  968. }else{
  969. this.$message.warning(res.message)
  970. }
  971. }).finally(() => {
  972. this.loading = false
  973. })
  974. },
  975. typeChart11(){
  976. var myChart = echarts.init(document.getElementById('typeChart11'));
  977. var option = {
  978. title: {
  979. text: '续约加约分析',
  980. left: 'center'
  981. },
  982. legend: { top:"45%" },
  983. tooltip: {
  984. trigger: 'axis',
  985. showContent: false
  986. },
  987. dataset: {
  988. source: [
  989. ['季度', '第一季度', '第二季度', '第三季度', '第四季度' ],
  990. ['无合约用户续约数', 60.5, 82.1, 54.7, 70.1 ],
  991. ['合约用户续约数', 56.5, 70.1, 88.7, 78.1 ]
  992. ]
  993. },
  994. xAxis: { type: 'category' },
  995. yAxis: { gridIndex: 0 },
  996. grid: { top: '55%' },
  997. series: [
  998. {
  999. type: 'line',
  1000. smooth: true,
  1001. seriesLayoutBy: 'row',
  1002. emphasis: { focus: 'series' }
  1003. },
  1004. {
  1005. type: 'line',
  1006. smooth: true,
  1007. seriesLayoutBy: 'row',
  1008. emphasis: { focus: 'series' }
  1009. },
  1010. {
  1011. type: 'line',
  1012. smooth: true,
  1013. seriesLayoutBy: 'row',
  1014. emphasis: { focus: 'series' }
  1015. },
  1016. {
  1017. type: 'line',
  1018. smooth: true,
  1019. seriesLayoutBy: 'row',
  1020. emphasis: { focus: 'series' }
  1021. },
  1022. {
  1023. type: 'pie',
  1024. id: 'pie',
  1025. radius: '30%',
  1026. center: ['50%', '25%'],
  1027. emphasis: {
  1028. focus: 'self'
  1029. },
  1030. label: {
  1031. formatter: '{b}: {@2012} ({d}%)'
  1032. },
  1033. encode: {
  1034. itemName: 'product',
  1035. value: '2012',
  1036. tooltip: '2012'
  1037. }
  1038. }
  1039. ]
  1040. };
  1041. myChart.on('updateAxisPointer', function (event) {
  1042. const xAxisInfo = event.axesInfo[0];
  1043. if (xAxisInfo) {
  1044. const dimension = xAxisInfo.value + 1;
  1045. myChart.setOption({
  1046. series: {
  1047. id: 'pie',
  1048. label: {
  1049. formatter: '{b}: {@[' + dimension + ']} ({d}%)'
  1050. },
  1051. encode: {
  1052. value: dimension,
  1053. tooltip: dimension
  1054. }
  1055. }
  1056. });
  1057. }
  1058. });
  1059. myChart.setOption(option);
  1060. },
  1061. typeChart12(){
  1062. var myChart = echarts.init(document.getElementById('typeChart12'));
  1063. var option = {
  1064. title: {
  1065. text: '每月4G迁转5G套餐用户数和ARPU值统计',
  1066. left: 'center'
  1067. },
  1068. legend: { top:"45%" },
  1069. tooltip: {
  1070. trigger: 'axis',
  1071. showContent: false
  1072. },
  1073. dataset: {
  1074. source: [
  1075. ['4G 迁转 5G 套餐用户数', '2012', '2013', '2014', '2015', '2016', '2017'],
  1076. ['政企升级 ARPU 值变化', 26.5, 52.1, 48.7, 30.1, 53.4, 65.1],
  1077. ['公众升级 ARPU 值变化', 41.1, 55.4, 55.1, 63.3, 43.8, 58.7],
  1078. ['5G 终端机套匹配用户数', 80.1, 62.2, 69.5, 36.4, 45.2, 32.5],
  1079. ['5G渗透率', 25.2, 37.1, 41.2, 48, 33.9, 49.1]
  1080. ]
  1081. },
  1082. xAxis: { type: 'category' },
  1083. yAxis: { gridIndex: 0 },
  1084. grid: { top: '55%' },
  1085. series: [
  1086. {
  1087. type: 'line',
  1088. smooth: true,
  1089. seriesLayoutBy: 'row',
  1090. emphasis: { focus: 'series' }
  1091. },
  1092. {
  1093. type: 'line',
  1094. smooth: true,
  1095. seriesLayoutBy: 'row',
  1096. emphasis: { focus: 'series' }
  1097. },
  1098. {
  1099. type: 'line',
  1100. smooth: true,
  1101. seriesLayoutBy: 'row',
  1102. emphasis: { focus: 'series' }
  1103. },
  1104. {
  1105. type: 'line',
  1106. smooth: true,
  1107. seriesLayoutBy: 'row',
  1108. emphasis: { focus: 'series' }
  1109. },
  1110. {
  1111. type: 'pie',
  1112. id: 'pie',
  1113. radius: '30%',
  1114. center: ['50%', '25%'],
  1115. emphasis: {
  1116. focus: 'self'
  1117. },
  1118. label: {
  1119. formatter: '{b}: {@2012} ({d}%)'
  1120. },
  1121. encode: {
  1122. itemName: 'product',
  1123. value: '2012',
  1124. tooltip: '2012'
  1125. }
  1126. }
  1127. ]
  1128. };
  1129. myChart.on('updateAxisPointer', function (event) {
  1130. const xAxisInfo = event.axesInfo[0];
  1131. if (xAxisInfo) {
  1132. const dimension = xAxisInfo.value + 1;
  1133. myChart.setOption({
  1134. series: {
  1135. id: 'pie',
  1136. label: {
  1137. formatter: '{b}: {@[' + dimension + ']} ({d}%)'
  1138. },
  1139. encode: {
  1140. value: dimension,
  1141. tooltip: dimension
  1142. }
  1143. }
  1144. });
  1145. }
  1146. });
  1147. myChart.setOption(option);
  1148. },
  1149. },
  1150. mounted() {
  1151. }
  1152. };
  1153. </script>