resident-analysis.html 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>居民分析</title>
  6. <meta name="author" content="yihu.com" />
  7. <meta name="format-detection" content="telephone=no" />
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0" />
  9. <meta name="apple-mobile-web-app-capable" content="yes" />
  10. <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  11. <link rel="stylesheet" type="text/css" href="../../../css/font-awesome.min.css" />
  12. <link rel="stylesheet" type="text/css" href="../../../css/style.min.css" />
  13. <link rel="stylesheet" type="text/css" href="../../../css/cross.css" />
  14. <link rel="stylesheet" type="text/css" href="../../../plugins/toastr/toastr.min.css" />
  15. <link rel="stylesheet" type="text/css" href="../css/common.css" />
  16. <link rel="stylesheet" type="text/css" href="../css/resident-analysis.css" />
  17. <script src="../../../js/vue.js" type="text/javascript" charset="utf-8"></script>
  18. <script src="../../../component/common/vuedals.js" type="text/javascript" charset="utf-8"></script>
  19. </head>
  20. <body style="margin: 0">
  21. <div id="main">
  22. <header-tab :appname="appname" :isback="isback" :isrefresh="isrefresh" :isfilter="isfilter" :isopen="isopen"></header-tab>
  23. <header-prompt></header-prompt>
  24. <resident-analysis></resident-analysis>
  25. <vuedals></vuedals>
  26. <div class="mui-scroll-wrapper" style="top: 46px">
  27. <div class="mui-scroll">
  28. <!-- 位置信息 start -->
  29. <!-- <div class="ui-grid ui-grid-middle location-div">
  30. <div class="ui-col-0 text-box c-f13 c-nowrap" style="max-width:60%;">
  31. <img src="../images/dizhi_icon.png" width="12">
  32. <span id="areaTitle" class="title c-666 c-f13 ml5">厦门市</span>
  33. </div>
  34. <div class="ui-col-0">
  35. <span class="jiezhi-time c-f13"></span>
  36. </div>
  37. <div class="ui-col-1 c-t-right"><span class="choose-label"></span></div>
  38. </div> -->
  39. <!-- 位置信息 end -->
  40. <div class="ui-grid plr10 mt20">
  41. <div class="div-qingkuang-left" style="height: 304px">
  42. <div class="bgc-fff" style="height: 100%">
  43. <div class="plr10 c-border-b ptb10">
  44. <!-- <img src="../images/xianshangjiaofeiqingkuang_icon.png" width="22" class="mr5"> -->
  45. <span class="c-323232 c-bold c-f16">线上缴费情况</span>
  46. </div>
  47. <div class="ui-grid ui-grid-middle container">
  48. <div class="ui-col-0 c-t-center c-w-33">
  49. <p class="c-ffc800 c-f16 c-bold online-num"></p>
  50. <p class="c-ffc800 c-f14 mt5 online-rate"></p>
  51. <p class="c-ffc800 c-f12 mt5">线上缴费人数</p>
  52. </div>
  53. <div class="ui-col-0 c-t-center c-w-33 c-position-r">
  54. <div class="div-jf-title2">
  55. 在线缴费
  56. <br />
  57. 分析
  58. </div>
  59. <div id="pieChart" style="width: 100%" class="height-140 ui-col-0"></div>
  60. </div>
  61. <div class="ui-col-0 c-t-center c-w-33">
  62. <p class="c-17b3ec c-f16 c-bold offline-num"></p>
  63. <p class="c-17b3ec c-f14 mt5 offline-rate"></p>
  64. <p class="c-17b3ec c-f12 mt5">线下缴费人数</p>
  65. </div>
  66. </div>
  67. </div>
  68. </div>
  69. <div class="ui-col-1"></div>
  70. <div class="div-qingkuang-right" style="height: 304px">
  71. <!-- <script type="text/html" id="line-chart"> -->
  72. <!-- 折线图 -->
  73. <!-- <line-chart v-on:getlinedata="getNewLineData" lineid="lineChart"></line-chart> -->
  74. <div>
  75. <div class="ui-grid plr10 c-border-b">
  76. <div class="ui-col-0 ptb10">
  77. <span class="c-333 c-f16">{{ chartObj && chartObj.panelName }}</span>
  78. </div>
  79. <div class="ui-col-1 c-t-right ptb5" v-show="!chartObj.noDateType">
  80. <span class="date-tag" :class="{active: chartObj.selectedDateType == 1}" data-type="1" @click="changeType(1)">日</span>
  81. <span class="date-tag" :class="{active: chartObj.selectedDateType == 2}" data-type="2" @click="changeType(2)">周</span>
  82. <span class="date-tag" :class="{active: chartObj.selectedDateType == 3}" data-type="3" @click="changeType(3)">月</span>
  83. </div>
  84. </div>
  85. <div class="ui-grid ui-grid-middle mt5 plr10" v-if="!chartObj.noshowDate">
  86. <div v-if="chartObj.showDatePanel" class="ui-col-1">
  87. <span>数据时间:</span>
  88. <el-date-picker
  89. v-model="chartObj.defaultValue[0]"
  90. type="date"
  91. unlink-panels
  92. placeholder="开始日期"
  93. :picker-options="chartObj.pickerOptions2"
  94. @change="dateChange"
  95. value-format="yyyy-MM-dd"></el-date-picker>
  96. <span>—</span>
  97. <el-date-picker
  98. v-model="chartObj.defaultValue[1]"
  99. type="date"
  100. unlink-panels
  101. placeholder="结束日期"
  102. :picker-options="chartObj.pickerOptions2"
  103. @change="dateChange"
  104. value-format="yyyy-MM-dd"></el-date-picker>
  105. </div>
  106. <div v-if="!chartObj.showDatePanel" class="ui-col-1 c-f12 mtb10 c-909090">
  107. <span>{{startDate}}</span>
  108. ~
  109. <span>{{endDate}}</span>
  110. 数据
  111. </div>
  112. <div class="ui-col-0 c-f12 c-909090 mtb10 pr15">单位:{{chartObj.unit}}</div>
  113. </div>
  114. <div v-else class="c-f12 c-909090 mtb10 pl15">单位:{{chartObj.unit}}</div>
  115. <div class="line-chart" id="lineChart" style="width: 100%" :style="{height: chartObj.chartheight + 'px'}"></div>
  116. </div>
  117. <!-- </script> -->
  118. </div>
  119. </div>
  120. <!-- <div class="mt10 bgc-fff c-border-tb pb10">line-chart
  121. <div class="ui-grid ui-grid-middle c-border-b plr10">
  122. <div class="ui-col-0">
  123. <span class="c-323232 c-bold c-f16">线上缴费趋势</span>
  124. </div>
  125. <div class="ui-col-1 c-t-right ptb5">
  126. <span class="date-tag active" data-type="1">日</span>
  127. <span class="date-tag" data-type="2">周</span>
  128. <span class="date-tag" data-type="3">月</span>
  129. </div>
  130. </div>
  131. <div class="clearfix mt5 plr10">
  132. <div class="fl c-f12 c-909090"><span id="startValue"></span> ~ <span id="endValue"></span>数据</div>
  133. <div class="fr c-f12 c-909090">单位:人</div>
  134. </div>
  135. <div class="line-chart" id="lineChart" style="height: 200px"></div>
  136. </div> -->
  137. <div class="mt10">
  138. <div class="area-tab-panel">
  139. <div class="area-tab" v-if="levelType == 4" :class="areaType == 4?'active':''" data-val="4" @click="showTabs(4)">
  140. <span>各区</span>
  141. <i class="border-line-right"></i>
  142. </div>
  143. <div class="area-tab" v-if="levelType >= 3" :class="areaType == 3?'active':''" data-val="3" @click="showTabs(3)">
  144. <span>社区</span>
  145. <i class="border-line-right"></i>
  146. </div>
  147. <div class="area-tab" :class="areaType == 2?'active':''" data-val="2" @click="showTabs(2)">
  148. <span>团队</span>
  149. <i class="border-line-right"></i>
  150. </div>
  151. </div>
  152. <table class="bottom-list-table mb20" id="listTable">
  153. <thead>
  154. <tr>
  155. <th>排名</th>
  156. <th>线上缴费量</th>
  157. <th>总缴费量</th>
  158. <!-- {{if level>2 && lowLevel != 1}} -->
  159. <th width="20"></th>
  160. <!-- {{/if}} -->
  161. </tr>
  162. </thead>
  163. <tbody>
  164. <tr v-for="v in tableList"class="data-row" :data-name="v.name" :data-code="v.code" data-type="">
  165. <td class="area-name">
  166. <div v-if="v.top == 1" class="ranking ranking1">{{v.top}}</div>
  167. <div v-else-if="v.top == 2" class="ranking ranking2">{{v.top}}</div>
  168. <div v-else-if="v.top == 3" class="ranking ranking3">{{v.top}}</div>
  169. <div v-else class="ranking">{{v.top}}</div>
  170. <div class="ui-col-1 c-nowrap-multi">{{v.name}}</div>
  171. </td>
  172. <td>{{v.signPayOnlineNum}}</td>
  173. <td>{{v.signNum}}</td>
  174. <!-- {{if level>2 && lowLevel != 1}} -->
  175. <td>
  176. <i class="fa fa-angle-right"></i>
  177. </td>
  178. <!-- {{/if}} -->
  179. </tr>
  180. </tbody>
  181. </table>
  182. </div>
  183. </div>
  184. </div>
  185. </div>
  186. <!-- <div class="h45">
  187. <div class="demo-comtop">
  188. <a class="mui-action-back"></a>
  189. <h1>线上缴费情况</h1>
  190. <a class="header-link">
  191. <img src="../images/hanbaobao_icon.png" width="25" class="mt10">
  192. </a>
  193. </div>
  194. </div> -->
  195. <!-- 团队信息模块 -->
  196. <div class="modal-overlay"></div>
  197. <div class="modal-content">
  198. <div class="div-header-title">
  199. <div class="div-overlay-img"></div>
  200. <div class="div-overlay-title">团队详情</div>
  201. </div>
  202. <div class="div-overlay-content">
  203. <div class="pt15" id="teamInfoBox" style="height: 260px; overflow: auto"></div>
  204. </div>
  205. <div class="div-close"></div>
  206. </div>
  207. <script type="text/html" id="data-list">
  208. <thead>
  209. <tr>
  210. <th>排名</th>
  211. <th>线上缴费量</th>
  212. <th>总缴费量</th>
  213. <!-- {{if level>2 && lowLevel != 1}} -->
  214. <th width="20"></th>
  215. <!-- {{/if}} -->
  216. </tr>
  217. </thead>
  218. <tbody>
  219. {{each list as v i}}
  220. <tr class="data-row" data-name="{{v.name}}" data-code="{{v.code}}" data-type="">
  221. <td class="area-name">
  222. {{if v.top == 1}}
  223. <div class="ranking ranking1">{{v.top}}</div>
  224. {{else if v.top == 2}}
  225. <div class="ranking ranking2">{{v.top}}</div>
  226. {{else if v.top == 3}}
  227. <div class="ranking ranking3">{{v.top}}</div>
  228. {{else}}
  229. <div class="ranking">{{v.top}}</div>
  230. {{/if}}
  231. <div class="ui-col-1 c-nowrap-multi">{{v.name}}</div>
  232. </td>
  233. <td>{{v.signPayOnlineNum}}</td>
  234. <td>{{v.signNum}}</td>
  235. <!-- {{if level>2 && lowLevel != 1}} -->
  236. <td>
  237. <i class="fa fa-angle-right"></i>
  238. </td>
  239. <!-- {{/if}} -->
  240. </tr>
  241. {{/each}}
  242. </tbody>
  243. </script>
  244. <!-- 团队信息模板 -->
  245. <script type="text/html" id="teamInfo">
  246. <div class="plr15 pb20">
  247. <span class="c-f14 c-bold c-333">团队名称:</span>
  248. <span class="c-f14 c-333">{{team.name}}</span>
  249. </div>
  250. <div class="plr15 pb20">
  251. <span class="c-f14 c-bold c-333">所在社区:</span>
  252. <span class="c-f14 c-333">{{team.hospitalName}}</span>
  253. </div>
  254. <div class="plr15 pb20">
  255. <span class="c-f14 c-bold c-333">团队长:</span>
  256. <span class="c-f14 c-333">{{team.leaderName}}</span>
  257. </div>
  258. <div class="plr15 pb20">
  259. <span class="c-f14 c-bold c-333">
  260. 团队成员(
  261. <span class="span-team-count">{{memberLength}}</span>
  262. 人):
  263. </span>
  264. <p class="c-f14 c-333 mt10">
  265. {{each members as member index}} {{if index == 0}} {{member.name}} {{else if index < 20}} 、{{member.name}} {{else if index == 20}} 、{{member.name}}等 {{/if}} {{/each}}
  266. </p>
  267. </div>
  268. </script>
  269. <script src="../../../js/jquery-2.2.4.js" type="text/javascript" charset="utf-8"></script>
  270. <script src="../../../js/es6-promise.js" type="text/javascript" charset="utf-8"></script>
  271. <script src="../../../js/underscore-1.9.1.js" type="text/javascript" charset="utf-8"></script>
  272. <script src="../../../js/template.js"></script>
  273. <script src="../../../plugins/echarts/3.8.5/echarts.min.js" type="text/javascript" charset="utf-8"></script>
  274. <script src="../../../plugins/toastr/toastr.min.js" type="text/javascript" charset="utf-8"></script>
  275. <script src="../../../component/common/event-bus.js"></script>
  276. <script src="../../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
  277. <script src="../../../js/util.js" type="text/javascript" charset="utf-8"></script>
  278. <script src="../../../api/statistics-api.js" type="text/javascript" charset="utf-8"></script>
  279. <script src="../../../component/statistics/line-chart.js" type="text/javascript" charset="utf-8"></script>
  280. <script src="../js/common.js" type="text/javascript" charset="UTF-8"></script>
  281. <script src="../../../component/statistics/header-tab.js" type="text/javascript" charset="utf-8"></script>
  282. <script type="text/javascript" src="../../../component/statistics/header-prompt.js"></script>
  283. <script type="text/javascript" src="../../../component/statistics/resident-analysis.js"></script>
  284. <script type="text/javascript" src="../../../component/statistics/resident-analysis-filter.js"></script>
  285. <script src="../js/resident-analysis-charts.js" type="text/javascript" charset="UTF-8"></script>
  286. <script src="../js/resident-analysis.js" type="text/javascript" charset="UTF-8"></script>
  287. <script type="text/javascript">
  288. new Vue({
  289. el: '#main',
  290. data: {
  291. appname: '居民分析',
  292. isback: true,
  293. isrefresh: true,
  294. isfilter: true,
  295. isopen: false,
  296. self,
  297. initLevel: null,
  298. type: null,
  299. level: null,
  300. area: null,
  301. title: null,
  302. startDate: '',
  303. endDate: '',
  304. lowLevel: null,
  305. dateType: 1,
  306. selectedDateType: 1,
  307. analysisType: '1',
  308. areaType: null,
  309. tableList:[],
  310. chooseYear: new Date().getFullYear(),
  311. userRole: {},
  312. reqParam: [],
  313. reqList: [],
  314. chartObj: {
  315. selectedDateType: 1,
  316. startDate: '', //数据展示时显示的开始时间
  317. endDate: '', //数据展示时显示的结束时间
  318. panelName: '',
  319. unit: '人',
  320. dateValue: '',
  321. lineid: '',
  322. showDatePanel: '',
  323. defaultValue: [],
  324. pickerOptions2: {
  325. disabledDate: function (d) {
  326. var start = new Date(getStartDate(chooseYear) + ' 00:00:00'),
  327. end = new Date(getEndDate(chooseYear) + ' 23:59:59')
  328. return d < start || d > end
  329. }
  330. },
  331. chooseYear: '',
  332. noDateType: false, //不显示年月日
  333. chartheight: 200, //表格高度
  334. noshowDate: false //显示统计时间
  335. }
  336. },
  337. components: {
  338. vuedals: Vuedals.Component
  339. },
  340. mounted: function () {
  341. var vm = this
  342. this.initData()
  343. EventBus.$on('time-data', function (arg) {
  344. console.log('arg', arg)
  345. vm.chooseYear = arg.year
  346. vm.chartObj.chooseYear = arg.year
  347. vm.level = Number(arg.level)
  348. if (arg.level == '3') {
  349. vm.lowLevel = 2
  350. } else if (arg.level == '2') {
  351. vm.lowLevel = 1
  352. } else {
  353. vm.lowLevel = 0
  354. }
  355. vm.area = arg.areaCode || '350200'
  356. vm.startDate = vm.getStartDate()
  357. vm.endDate = vm.getEndDate()
  358. vm.showTabs(vm.level, 1)
  359. vm.initReqParams()
  360. vm.loadData([0, 1, 2])
  361. vm.bindEvents()
  362. })
  363. },
  364. methods: {
  365. changeType: function (type) {
  366. this.selectedDateType = type
  367. //触发页面更新折线图的数据,触发器是父类页面自定在组件上的
  368. // this.$emit('getlinedata', { dateType: type })
  369. this.getNewLineData({ dateType: type })
  370. },
  371. dateChange: function () {
  372. var vm = this
  373. if (vm.defaultValue[0] && vm.defaultValue[1]) {
  374. if (vm.defaultValue[0] > vm.defaultValue[1]) {
  375. vm.$message.warning('开始时间应小于结束时间')
  376. } else {
  377. this.getNewLineData({ dateType: this.selectedDateType, dateValue: [vm.defaultValue[0], vm.defaultValue[1]] })
  378. // this.$emit('getlinedata', { dateType: this.selectedDateType, dateValue: [vm.defaultValue[0], vm.defaultValue[1]] })
  379. }
  380. }
  381. },
  382. initData() {
  383. const self = JSON.parse(window.sessionStorage.getItem('selectedRole'))
  384. // const self = {
  385. // doctorAuthOperate: '1',
  386. // high: '1',
  387. // code: '350200',
  388. // level: '2',
  389. // name: '厦门市卫生健康委员会',
  390. // isManage: '1',
  391. // areas: '350200',
  392. // type: '1'
  393. // }
  394. this.areaType = '4'
  395. this.userRole = self
  396. this.initLevel = this.userRole.code == '350200' ? 4 : vm.userRole.code.length == 6 ? 3 : 2
  397. this.level = this.initLevel
  398. this.area = self.code
  399. this.title = self.title
  400. // if (self.year && !isNaN(self.year)) {
  401. // this.chooseYear = parseInt(self.year);
  402. // }
  403. this.startDate = this.getStartDate()
  404. this.endDate = this.getEndDate()
  405. this.showTabs(this.level, 1)
  406. this.initReqParams()
  407. this.reqList.push({
  408. level: this.level,
  409. lowLevel: this.lowLevel,
  410. area: this.area,
  411. title: this.title,
  412. analysisType: this.analysisType,
  413. req: this.reqParam
  414. })
  415. this.loadData([0, 1, 2])
  416. // this.initScroller();
  417. // this.shaixuanInit(self);
  418. this.bindEvents()
  419. },
  420. // getStartDate() {
  421. // if (this.chooseYear < '2023') {
  422. // return this.chooseYear + '-07-01';
  423. // } else {
  424. // return this.chooseYear + '-01-01';
  425. // }
  426. // },
  427. getEndDate() {
  428. // 逻辑同原文件
  429. var nowdate = new Date()
  430. var year = nowdate.getFullYear()
  431. var month = nowdate.getMonth() + 1
  432. var day = nowdate.getDate()
  433. var endDate = ''
  434. if (this.chooseYear < '2023') {
  435. endDate = new Date(parseInt(this.chooseYear) + 1 + '-06-30')
  436. } else {
  437. endDate = new Date(parseInt(this.chooseYear) + '-12-31')
  438. }
  439. var now = new Date()
  440. if (now <= endDate) {
  441. return now.format('yyyy-MM-dd')
  442. } else {
  443. if (this.chooseYear < '2023') {
  444. return parseInt(this.chooseYear) + 1 + '-06-30'
  445. } else {
  446. return parseInt(this.chooseYear) + '-12-31'
  447. }
  448. }
  449. },
  450. initReqParams() {
  451. this.startDate = this.getStartDate()
  452. this.endDate = this.getEndDate()
  453. var mIndex = 82, //折线图指标index
  454. bIndexs = { '4': '75', '3': '76', '2': '77' }
  455. var bIndex = 82 //bIndexs[level];
  456. this.reqParam = []
  457. this.reqParam.push(
  458. httpRequest.get('/statistics/signPayOnline', {
  459. data: { level: this.level, area: this.area, year: this.chooseYear }
  460. })
  461. )
  462. this.reqParam.push(
  463. httpRequest.get('/statistics/interval_total', {
  464. data: { level: this.level, area: this.area, startDate: this.startDate, endDate: this.endDate, interval: this.selectedDateType, index: mIndex }
  465. })
  466. )
  467. // this.reqParam.push(
  468. // httpRequest.post('/statistics/lowlevel_all_sign_pay_online', {
  469. // data: { sort: 1, date: this.endDate, level: this.level, index: bIndex, area: this.area, year: this.chooseYear }
  470. // })
  471. // )
  472. if (this.lowLevel) {
  473. this.reqParam.push(
  474. httpRequest.post('/statistics/lowlevel_all_sign_pay_online', {
  475. data: { sort: 1, date: this.endDate, lowLevel: this.lowLevel, level: this.level, index: bIndex, area: this.area, year: this.chooseYear }
  476. })
  477. )
  478. } else {
  479. this.reqParam.push(
  480. httpRequest.post('/statistics/lowlevel_all_sign_pay_online', {
  481. data: { sort: 1, date: this.endDate, level: this.level, index: bIndex, area: this.area, year: this.chooseYear }
  482. })
  483. )
  484. }
  485. },
  486. loadData(loadArr) {
  487. // plus.nativeUI.showWaiting();
  488. // getJieZhiTime();
  489. var vm = this
  490. var reqPromise = []
  491. for (var i = 0; i < loadArr.length; i++) {
  492. var j = loadArr[i]
  493. reqPromise.push(this.reqParam[j])
  494. }
  495. Promise.all(reqPromise, true).then(function (ress) {
  496. console.log(99999, ress)
  497. var res1, res2, res3
  498. for (var i = 0; i < loadArr.length; i++) {
  499. var j = loadArr[i] + 1
  500. if (j == 1) {
  501. res1 = ress[i]
  502. }
  503. if (j == 2) {
  504. res2 = ress[i]
  505. }
  506. if (j == 3) {
  507. res3 = ress[i]
  508. }
  509. }
  510. if (res1 && res1.status == 200) {
  511. vm.handleTopData(res1.data)
  512. }
  513. if (res2 && res2.status == 200) {
  514. vm.handleSecondPanelData(res2.data, vm)
  515. }
  516. if (res3) {
  517. if (res3.status == 200) {
  518. vm.listHandle(res3.data)
  519. } else {
  520. $('#listTable').empty()
  521. mui.toast(res3.msg)
  522. }
  523. }
  524. // plus.nativeUI.closeWaiting();
  525. })
  526. },
  527. handleTopData(res) {
  528. $('.online-num').text(res.signPayOnlineNum)
  529. $('.online-rate').text(res.signPayOnlineRate)
  530. $('.offline-num').text(res.signPayUnderNum)
  531. $('.offline-rate').text(res.signPayUnderRate)
  532. var pieChart = echarts.init(document.getElementById('pieChart')),
  533. options = {
  534. tooltip: {
  535. trigger: 'item',
  536. formatter: '{b}:<br/> {c} ({d}%)'
  537. },
  538. series: [
  539. {
  540. type: 'pie',
  541. radius: ['80%', '70%'],
  542. color: ['#ffc800', '#17b3ec'],
  543. avoidLabelOverlap: false,
  544. label: {
  545. normal: {
  546. show: false,
  547. position: 'center'
  548. }
  549. // emphasis: {
  550. // show: true,
  551. // textStyle: {
  552. // fontSize: '16',
  553. // fontWeight: 'bold'
  554. // }
  555. // }
  556. },
  557. labelLine: {
  558. normal: {
  559. show: false
  560. }
  561. },
  562. data: [
  563. { value: res.signPayOnlineNum, name: '线上缴费人数' },
  564. { value: res.signPayUnderNum, name: '线下缴费人数' }
  565. ]
  566. }
  567. ]
  568. }
  569. pieChart.setOption(options)
  570. },
  571. getNewLineData(arg) {
  572. this.selectedDateType = arg.dateType
  573. this.initReqParams()
  574. this.loadData([1], this)
  575. },
  576. xlineChart(arg) {
  577. console.log('arg', arg)
  578. var vm = this
  579. vm.chartObj.panelName = arg.panelName
  580. if (arg.selectedDateType) {
  581. vm.chartObj.selectedDateType = arg.selectedDateType
  582. }
  583. if (arg.unit) {
  584. vm.chartObj.unit = arg.unit
  585. }
  586. vm.chartObj.dateValue = arg.dateValue
  587. // vm.chooseYear = arg.chooseYear;
  588. chooseYear = arg.chooseYear
  589. vm.chartObj.noDateType = arg.noDateType
  590. vm.chartObj.noshowDate = arg.noshowDate
  591. if (arg.chartheight) {
  592. vm.chartObj.chartheight = arg.chartheight
  593. }
  594. vm.$nextTick(function () {
  595. vm.drawLine(vm, arg)
  596. })
  597. },
  598. handleSecondPanelData(data, vm) {
  599. var xDatas = [],
  600. yDatas = [],
  601. names = [],
  602. colors = ['#12b7f5', '#cd67fd', '#FF9526']
  603. for (var p in data) {
  604. var xData = _.map(data[p].data, function (o) {
  605. return o.range
  606. })
  607. var yData = _.map(data[p].data, function (o) {
  608. return o.amount
  609. })
  610. xDatas.push(xData)
  611. yDatas.push(yData)
  612. }
  613. this.xlineChart({
  614. panelName: '线上缴费趋势',
  615. quotaNames: ['线上缴费量'],
  616. xData: xDatas[0],
  617. yDatas: yDatas,
  618. colors: colors,
  619. selectedDateType: vm.selectedDateType,
  620. nowlineid: 'lineChart'
  621. })
  622. // EventBus.$emit("draw-line-chart", {
  623. // panelName: '线上缴费趋势',
  624. // quotaNames: ['线上缴费量'],
  625. // xData: xDatas,
  626. // yDatas: yDatas,
  627. // colors: colors,
  628. // selectedDateType: vm.selectedDateType,
  629. // nowlineid: "lineChart"
  630. // });
  631. },
  632. drawLine(vm, arg) {
  633. var lineCharts = echarts.init(document.getElementById('lineChart'))
  634. var xData = arg.xData,
  635. yDatas = arg.yDatas,
  636. names = arg.quotaNames,
  637. colors = arg.colors,
  638. markLineValue = arg.markLineValue,
  639. markLineName = arg.markLineName
  640. //处理数据, 数据按照20条数一屏展示
  641. // var lastIndex = xData.length % 20;
  642. if (xData.length > 20) {
  643. dataZoom_end = 100 - (19 / xData.length) * 100
  644. } else {
  645. dataZoom_end = 0
  646. }
  647. //初始结束时间
  648. var lastValue = xData[xData.length - 1]
  649. // if (vm.selectedDateType == 1 || vm.selectedDateType == 2) {
  650. // vm.endDate = lastValue
  651. // } else if (vm.selectedDateType == 3) {
  652. // var val = lastValue.substr(5, 2) + '月'
  653. // vm.endDate = lastValue.substr(0, 4) + '年' + val
  654. // }
  655. var options = {
  656. tooltip: {
  657. trigger: 'axis'
  658. },
  659. color: colors,
  660. legend: {
  661. top: '0px',
  662. data: names,
  663. borderColor: '#f1f1f1'
  664. },
  665. grid: {
  666. show: false,
  667. left: '20px',
  668. right: '20px',
  669. bottom: '40px',
  670. top: '20px',
  671. containLabel: true
  672. },
  673. xAxis: {
  674. type: 'category',
  675. boundaryGap: false,
  676. data: xData,
  677. axisLabel: {
  678. interval: 0, //横轴信息全部显示
  679. formatter: function (value, index) {
  680. if (vm.selectedDateType == 1 || vm.selectedDateType == 2) {
  681. if (index == 0) {
  682. vm.startDate = value
  683. return value.substr(5, 2) + '月' + value.substr(8, 2)
  684. } else {
  685. if (index == 19) {
  686. vm.endDate = value
  687. }
  688. return value.substr(8, 2)
  689. }
  690. } else if (vm.selectedDateType == 3) {
  691. var val = value.substr(5, 2) + '月'
  692. // if (index == 0) {
  693. // vm.startDate = value.substr(0, 4) + '年' + val
  694. // } else {
  695. // if (index == 19) {
  696. // vm.endDate = value.substr(0, 4) + '年' + val
  697. // }
  698. // }
  699. return val
  700. }
  701. }
  702. }
  703. },
  704. yAxis: {
  705. type: 'value',
  706. axisPointer: {
  707. snap: true
  708. },
  709. scale: true,
  710. minInterval: 1,
  711. boundaryGap: ['10%', '30%'],
  712. splitLine: { show: false }
  713. },
  714. dataZoom: [
  715. {
  716. //给x轴设置滚动条
  717. // show: false,
  718. start: dataZoom_end,
  719. end: 100,
  720. type: 'slider',
  721. zoomLock: false
  722. },
  723. {
  724. //下面这个属性是内容区域配置
  725. start: dataZoom_end,
  726. end: 100,
  727. type: 'inside',
  728. zoomLock: false
  729. }
  730. ]
  731. }
  732. var series = []
  733. for (var i = 0; i < yDatas.length; i++) {
  734. var obj = {
  735. name: names[i],
  736. type: 'line',
  737. smooth: true,
  738. data: yDatas[i],
  739. lineStyle: {
  740. normal: {
  741. color: colors[i]
  742. }
  743. }
  744. }
  745. series.push(obj)
  746. }
  747. options.series = series
  748. if (markLineValue) {
  749. //目前统计只有签约统计页面有目标量
  750. $.extend(options.yAxis, {
  751. min: function (value) {
  752. if (value.min > markLineValue) {
  753. return markLineValue / 2
  754. } else {
  755. return value.min / 2
  756. }
  757. },
  758. max: function (value) {
  759. if (value.max > markLineValue) {
  760. return parseInt(value.max * 1.5)
  761. } else {
  762. return parseInt(markLineValue * 1.2)
  763. }
  764. }
  765. })
  766. $.extend(options.series[0], {
  767. markLine: {
  768. data: [{ yAxis: markLineValue, name: markLineName }],
  769. label: {
  770. show: true,
  771. position: 'middle',
  772. formatter: '{b}: {c}'
  773. },
  774. lineStyle: {
  775. color: 'rgb(194,53,49)'
  776. }
  777. }
  778. })
  779. }
  780. // console.log(JSON.stringify(options));
  781. $('#' + vm.lineid).removeAttr('_echarts_instance_')
  782. lineCharts.setOption(options)
  783. window.lineCharts = lineCharts
  784. },
  785. listHandle(res) {
  786. for (var k in res) {
  787. var list = res[k]
  788. var topArr = soreRank(this.amountArr(list))
  789. list = _.map(list, function (o, index) {
  790. o.top = topArr[index]
  791. o.rate = parseFloat(o.rate).toFixed(2)
  792. o.targetRate = parseFloat(o.targetRate).toFixed(2)
  793. return o
  794. })
  795. console.log('list', { list: list, level: this.level, lowLevel: this.lowLevel, analysisType: this.analysisType })
  796. this.tableList = list
  797. // var html = template('data-list', { list: list, level: this.level, lowLevel: this.lowLevel, analysisType: this.analysisType })
  798. // $('#listTable').empty().append(html)
  799. }
  800. },
  801. amountArr(list) {
  802. var amountArr = []
  803. for (var k in list) {
  804. amountArr.push(list[k].signPayOnlineNum)
  805. }
  806. return amountArr
  807. },
  808. showRow() {},
  809. showTabs(type, levelType) {
  810. // $('.area-tab').removeClass('active')
  811. switch (type) {
  812. case 4:
  813. if (levelType) {
  814. this.levelType = 4
  815. // $('.area-tab').show()
  816. // $('.area-tab').eq(0).addClass('active')
  817. }
  818. this.areaType = '4'
  819. break
  820. case 3:
  821. if (levelType) {
  822. this.levelType = 3
  823. // $('.area-tab').eq(0).hide()
  824. // $('.area-tab').eq(1).show()
  825. // $('.area-tab').eq(1).addClass('active')
  826. }
  827. this.areaType = '3'
  828. break
  829. case 2:
  830. if (levelType) {
  831. this.levelType = 2
  832. // $('.area-tab').eq(0).hide()
  833. // $('.area-tab').eq(1).hide()
  834. // $('.area-tab').eq(2).addClass('active')
  835. }
  836. this.areaType = '2'
  837. break
  838. case 1: //团队
  839. $('.area-tab-panel').parent().remove()
  840. break
  841. }
  842. if (type == '3') {
  843. this.lowLevel = 2
  844. } else if (type == '2') {
  845. this.lowLevel = 1
  846. } else {
  847. this.lowLevel = 0
  848. }
  849. this.initReqParams()
  850. this.loadData([2])
  851. // this.loadData([2], this)
  852. },
  853. /**
  854. * 初始化筛选事件
  855. */
  856. // shaixuanInit(main) {
  857. // var shaixuan = plus.webview.getWebviewById('shaixuan2.html');
  858. // if (!shaixuan) {
  859. // shaixuan = mui.createWindow({
  860. // id: 'shaixuan2.html',
  861. // url: 'shaixuan2.html',
  862. // styles: {
  863. // top: 0,
  864. // bottom: 0,
  865. // left: '20%',
  866. // width: '80%',
  867. // scorllIndicator: "none"
  868. // },
  869. // show: {
  870. // aniShow: "slide-in-right",
  871. // duration: "400"
  872. // },
  873. // extras: {
  874. // noYear: '2016',
  875. // chooseYear: this.chooseYear,
  876. // // hasCustomDate:true,
  877. // }
  878. // });
  879. // }
  880. // window.addEventListener("hideShaiXuan", function () {
  881. // console.log("hideShaiXuan");
  882. // main.setStyle({ mask: "none" });
  883. // shaixuan.hide();
  884. // }, false);
  885. // window.addEventListener("showShaiXuan", function () {
  886. // shaixuan.show();
  887. // main.setStyle({ mask: "rgba(0,0,0,0.5)" });
  888. // main.addEventListener("maskClick", function () {
  889. // main.setStyle({ mask: "none" });
  890. // shaixuan.hide();
  891. // }, false);
  892. // });
  893. // },
  894. getLowCodeData(code) {
  895. if (code == 3) {
  896. this.lowLevel = ''
  897. } else {
  898. this.lowLevel = code
  899. }
  900. //触发组件监听事件,去父页面请求新的数据
  901. this.$emit('getnewdata', {
  902. level: this.level,
  903. area: this.area,
  904. lowLevel: this.lowLevel
  905. })
  906. },
  907. bindEvents() {
  908. var vm = this
  909. //说明信息相关事件
  910. $('#closeBtn').on('tap', function () {
  911. $('.information').hide()
  912. })
  913. $('.info-icon').on('tap', function () {
  914. $('.information').show()
  915. })
  916. //左滑筛选区域的数据
  917. // $('.header-link').on("tap", function () {
  918. // var self = plus.webview.currentWebview();
  919. // mui.fire(self, "showShaiXuan");
  920. // });
  921. //日、周、月按钮切换
  922. $('.date-tag').on('tap', function () {
  923. vm.selectedDateType = $(this).attr('data-type')
  924. $('.date-tag').removeClass('active')
  925. $(this).addClass('active')
  926. this.initReqParams()
  927. vm.loadData([1]) //只加载中间区域的数据
  928. })
  929. //底部各区等区域的tab切换
  930. $('.area-tab').on('tap', function () {
  931. var $this = $(this),
  932. type = $this.attr('data-val') //4 - 各区, 3 - 社区, 2 - 团队
  933. this.areaType = type
  934. if ($this.hasClass('active')) {
  935. return false
  936. }
  937. $('.area-tab').removeClass('active')
  938. $this.addClass('active')
  939. this.showTabs(this.level)
  940. if (type == '3') {
  941. this.lowLevel = 2
  942. } else if (type == '2') {
  943. this.lowLevel = 1
  944. } else {
  945. this.lowLevel = 0
  946. }
  947. this.initReqParams()
  948. vm.loadData([2])
  949. })
  950. //底部每条记录的点击事件
  951. $('#listTable').on('click', '.data-row', function () {
  952. var $this = $(this),
  953. name = $this.attr('data-name'),
  954. code = $this.attr('data-code'),
  955. $selectTab = $('.area-tab.active')
  956. if (vm.areaType == '2') {
  957. //获得团队信息,弹框显示数据
  958. vm.showTeamInfo(code)
  959. return false
  960. }
  961. vm.title = name
  962. vm.area = code
  963. var newlevel = vm.level - 1
  964. //如果是市级管理员,先点击“社区”tab后再往下看下一级的数据,需要将level再-1
  965. if (newlevel == 3 && vm.lowLevel == 2) {
  966. newlevel--
  967. }
  968. vm.lowLevel = ''
  969. vm.level = newlevel
  970. vm.areaType = newlevel
  971. $('#areaTitle').text(vm.title)
  972. vm.showTabs(vm.level, 1)
  973. vm.initReqParams()
  974. //记录返回链接信息
  975. vm.reqList.push({
  976. level: vm.level,
  977. lowLevel: vm.lowLevel,
  978. area: vm.area,
  979. title: vm.title,
  980. analysisType: vm.analysisType,
  981. req: vm.reqParam
  982. })
  983. vm.loadData([0, 1, 2])
  984. })
  985. //弹出遮罩
  986. $('.icon-remark').on('click', function (e) {
  987. $('.modal-overlay').addClass('modal-overlay-visible')
  988. setTimeout(function () {
  989. $('.modal-content').show()
  990. }, 50)
  991. })
  992. $('.div-close,.modal-overlay').on('click', function () {
  993. $('.modal-overlay').removeClass('modal-overlay-visible')
  994. $('.modal-content').hide()
  995. })
  996. //添加页面监听
  997. window.addEventListener('refresh', function (e) {
  998. var year = e.detail.year
  999. this.chooseYear = year
  1000. //重置变量值
  1001. this.level = this.initLevel
  1002. this.area = this.userRole.code
  1003. this.title = this.userRole.name
  1004. this.lowLevel = ''
  1005. if (e.detail.startTime) {
  1006. this.startDate = e.detail.startTime
  1007. this.endDate = e.detail.endTime
  1008. } else {
  1009. this.startDate = this.getStartDate()
  1010. this.endDate = this.getEndDate()
  1011. }
  1012. $('#areaTitle').text(title)
  1013. $('.choose-label').text(this.chooseYear + '年')
  1014. this.showTabs()
  1015. this.initReqParams()
  1016. //清空请求数组
  1017. reqList.splice(0, reqList.length)
  1018. //记录返回链接信息
  1019. reqList.push({
  1020. level: this.level,
  1021. lowLevel: this.lowLevel,
  1022. area: this.area,
  1023. title: this.title,
  1024. analysisType: this.analysisType,
  1025. req: this.reqParam
  1026. })
  1027. vm.loadData([0, 1, 2])
  1028. })
  1029. },
  1030. /*
  1031. * 获得团队信息
  1032. */
  1033. showTeamInfo(teamId) {
  1034. console.log(9999999)
  1035. console.log(teamId)
  1036. var url = '/doctor/admin-teams/teams/info',
  1037. params = {
  1038. teamId: teamId
  1039. }
  1040. httpRequest.get(url, { data: params }).then(function (res) {
  1041. if (res.status == 200) {
  1042. var data = res.data
  1043. data.memberLength = data.members.length
  1044. var html = template('teamInfo', data)
  1045. $('#teamInfoBox').empty().append(html)
  1046. $('.modal-overlay').addClass('modal-overlay-visible')
  1047. setTimeout(function () {
  1048. $('.modal-content').show()
  1049. }, 50)
  1050. }
  1051. })
  1052. },
  1053. getStartDate() {
  1054. if (this.chooseYear < '2023') {
  1055. return this.chooseYear + '-07-01'
  1056. } else {
  1057. return this.chooseYear + '-01-01'
  1058. }
  1059. },
  1060. getEndDate() {
  1061. var nowdate = new Date()
  1062. var year = nowdate.getFullYear()
  1063. var month = nowdate.getMonth() + 1
  1064. var day = nowdate.getDate()
  1065. var endDate = ''
  1066. if (this.chooseYear < '2023') {
  1067. endDate = new Date(parseInt(this.chooseYear) + 1 + '-06-30')
  1068. } else {
  1069. endDate = new Date(parseInt(this.chooseYear) + '-12-31')
  1070. }
  1071. var now = new Date()
  1072. if (now <= endDate) {
  1073. return now.format('yyyy-MM-dd')
  1074. } else {
  1075. if (this.chooseYear < '2023') {
  1076. return parseInt(this.chooseYear) + 1 + '-06-30'
  1077. } else {
  1078. return parseInt(this.chooseYear) + '-12-31'
  1079. }
  1080. }
  1081. }
  1082. }
  1083. })
  1084. </script>
  1085. </body>
  1086. </html>