jbsc-analysis.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. var reqList = [{}]; //记录请求的参数和url,用于后退时使用
  2. var colors={"0":"#5b9db5","1":"#ed7d31","2":"#a5a5a5",
  3. "3":"#ffc000","4":"#44c274","5":"#70ad47",
  4. "6":"#255e91","7":"#9e480e","8":"#7e7e7e","9":"#997300","10":"#264478","11":"#43682b","12":"#5b9db5"}
  5. Vue.use(Vuedals.default);
  6. new Vue({
  7. el: "#main",
  8. data: {
  9. isloading:false, //加载中
  10. valueName: "",
  11. optionsName: [{code:"",title:"全部"}],
  12. valueType:'',
  13. optionsType:[{name:'全部',code:''},{name:'等级医院',code:'1'},{name:'社区医院',code:'2'}],//预约类型
  14. dateValue: [],
  15. pickerOptions: {
  16. disabledDate: function(d) {
  17. return d > new Date();
  18. }
  19. },
  20. ptab:"132", //高危/预警人群分析 131性别、132服务类型
  21. pieData132:[], //饼图数据
  22. pieData131:[], //饼图数据
  23. pieShow131:true,
  24. pieShow132:true,
  25. tabnumber:0,
  26. headerList:[],
  27. tableData:[], //表格数据
  28. topData:{},
  29. //请求页面所需参数
  30. levelList:[{level:"4",areaLevel:"2"},{level:"3",areaLevel:"3"},{level:"2",areaLevel:"4"}], //两种搜索,地区等级对比
  31. areaLevel:"", // 2、市,3、区,4、社区,5、团队\
  32. initareaLevel:"",
  33. initlevel: '',
  34. initarea: '',
  35. level: '',
  36. area: '',
  37. areaTitle: '',
  38. index: '3',
  39. selectedDateType: 1, //折线图坐标值1-日,2-周,3-月
  40. lowLevel: '',
  41. lowCode: '',
  42. chooseYear: '',
  43. userRole: '',
  44. },
  45. components: {
  46. vuedals: Vuedals.Component
  47. },
  48. mounted: function () {
  49. var vm=this
  50. //初始化数据
  51. initData(vm);
  52. vm.getOptionsName() //获取搜索疾病列表
  53. vm.getData()
  54. vm.bindEvent()
  55. },
  56. methods: {
  57. getData:function(isNext,type){ //是否下转
  58. var vm = this
  59. var params={
  60. areaLevel: vm.areaLevel,
  61. level: vm.level,
  62. area: vm.area,
  63. endDate: vm.dateValue[1],
  64. startDate: vm.dateValue[0],
  65. lowLevel: vm.lowLevel
  66. }
  67. if(type=="type"){ //改变预约类型,不会更改转诊率和预警率
  68. loadData([1,2,3,4], vm); //刷新数据
  69. }else{
  70. loadData([0,1,2,3,4], vm); //刷新数据
  71. }
  72. if(isNext){
  73. //存储请求所带的参数
  74. reqList.push(params);
  75. }else{
  76. reqList[reqList.length-1]=params
  77. }
  78. },
  79. //表格tab切换/下转
  80. getnewdata:function(arg){
  81. var vm = this
  82. vm.lowLevel=arg.lowLevel||""
  83. if(arg.level){
  84. vm.level = arg.level
  85. vm.areaLevel = _.find(vm.levelList,{level:vm.level}).areaLevel
  86. }
  87. if(arg.area){
  88. vm.area = arg.area
  89. }
  90. if(arg.areaTitle){
  91. vm.areaTitle = arg.areaTitle
  92. }
  93. vm.getData(arg.level) //有传level,说明是下转
  94. },
  95. //时间选择
  96. changeDate: function (type) {
  97. var vm=this
  98. if(vm.dateValue[0]&&vm.dateValue[1]&&vm.dateValue[0]<=vm.dateValue[1]){
  99. //搜索时,取消下转记录
  100. vm.area=vm.initarea
  101. vm.areaLevel=vm.initareaLevel
  102. vm.level=vm.initlevel
  103. vm.lowLevel = ""
  104. reqList=[{}]; //搜索时清空历史记录,重新搜索
  105. vm.getData(false,type)
  106. vm.initTable()
  107. }else{
  108. vm.$message({
  109. message: '请完善时间选择',
  110. type: 'warning'
  111. });
  112. }
  113. },
  114. //获取疾病筛查表
  115. getOptionsName:function(){
  116. var vm=this
  117. vm.optionsName = [{code:"",title:"全部"}]
  118. var params={}
  119. jbscAPI.surveyTemplates(params).then(function(res) {
  120. if(res.status == 200) {
  121. vm.optionsName=vm.optionsName.concat(res.data)
  122. } else {
  123. vm.$message.error(res.msg)
  124. }
  125. })
  126. },
  127. //筛查表切换
  128. seleName:function(){
  129. var vm=this
  130. vm.changeDate()
  131. },
  132. //预约类型切换
  133. seleType:function(){
  134. var vm=this
  135. vm.changeDate("type")
  136. },
  137. //切换饼图
  138. changePie:function(){
  139. var vm=this
  140. if(vm['pieData'+vm.ptab].length==0||(vm['pieData'+vm.ptab].length==1&&!vm['pieData'+vm.ptab].name)){
  141. vm["pieShow"+vm.ptab]=false
  142. }else{
  143. vm["pieShow"+vm.ptab]=true
  144. }
  145. setTimeout(function(){
  146. handlePieData({elId:"pieChart"+vm.ptab,arry: vm['pieData'+vm.ptab], title:{},colors: colors,param:"total"})
  147. },50)
  148. },
  149. bindEvent:function(){
  150. var vm=this
  151. //监听后退按钮的操作
  152. EventBus.$on("back-click", function (arg) {
  153. EventBus.$emit('update-statistics-time', {}); //更新统计时间
  154. if (reqList.length == 1) {
  155. history.go(-1);
  156. } else {
  157. var preInfo = reqList.pop();
  158. var info = reqList[reqList.length - 1];
  159. vm.areaLevel = info.areaLevel;
  160. vm.level = info.level;
  161. vm.area = info.area;
  162. vm.lowLevel = info.lowLevel;
  163. vm.getData()
  164. vm.$refs.tableRef.changeTab({level:vm.level,lowlevel:vm.lowLevel}) //表格tab
  165. }
  166. });
  167. //监听页面刷新
  168. EventBus.$on("refresh-click", function (arg) {
  169. EventBus.$emit('update-statistics-time', {}); //更新统计时间
  170. loadData([0, 1,2,3,4], vm);
  171. });
  172. $("#main").removeClass("c-hide");
  173. },
  174. initTable:function(){
  175. var vm=this
  176. vm.$refs.tableRef.initTable({
  177. //表格表头 lowlevel等级 1:团队 2社区机构 3区级 4市级
  178. headers:[{thead:"排名",param:"name",canclick:true},{thead:"居民预约量",param:"reservationTotal1Amount0"},
  179. {thead:"代预约量",param:"reservationTota2Amount0"},{thead:"预约总量",param:"reservationTotalAmount0"}],
  180. tabnumber:vm.tabnumber
  181. })
  182. },
  183. },
  184. })
  185. function initData(vm) {
  186. //获得缓存中缓存的角色权限
  187. var userRole = window.sessionStorage.getItem("selectedRole");
  188. if (!userRole) {
  189. return false;
  190. }
  191. vm.userRole = JSON.parse(userRole);
  192. //level:2、市,3、区,4、社区,5、团队
  193. vm.initareaLevel = vm.areaLevel = vm.userRole.code == '350200' ? 2 : vm.userRole.code.length == 6 ? 3 : 4;
  194. vm.initlevel = vm.level = vm.userRole.code == '350200' ? 4 : vm.userRole.code.length == 6 ? 3 : 2;
  195. vm.initarea =vm.area = vm.userRole.code;
  196. vm.areaTitle = vm.userRole.name;
  197. vm.tabnumber=vm.areaLevel==4?1:vm.areaLevel==3?2:3 //表格显示的tab数
  198. //初始化时间
  199. var now = new Date();
  200. vm.dateValue[1] = new Date().format("yyyy-MM-dd");
  201. var start= new Date();
  202. start.setDate(1)
  203. vm.dateValue[0] = start.format("yyyy-MM-dd")
  204. vm.initTable()
  205. }
  206. function initReqParams(vm) {
  207. var param={
  208. startDate: vm.dateValue[0],
  209. endDate: vm.dateValue[1],
  210. area: vm.area,
  211. level: vm.areaLevel, //2、市,3、区,4、社区,5、团队
  212. slaveKey1 : vm.valueName, // 问卷标题
  213. slaveKey2 : vm.valueType, //代预约类型 1、医院2、社区
  214. }
  215. var reqParam = [{
  216. url: "third/surveyStatis/total", //转诊率和预警率
  217. reqType: 'get',
  218. data:{},
  219. },{
  220. url: "third/surveyStatis/surveyArea", //高危/预警人群分析--饼图
  221. reqType: 'get',
  222. data:{},
  223. }, {
  224. url: "third/surveyStatis/surveyArea", //高危/预警人群分析--饼图
  225. reqType: 'get',
  226. data:{},
  227. }, {
  228. url: "third/surveyStatis/line", //预约趋势分析--折线图
  229. reqType: 'get',
  230. data:{},
  231. },{
  232. url: "third/surveyStatis/lowlevel_all", //预约量分析--表格
  233. reqType: 'get',
  234. data:{},
  235. }];
  236. _.each(reqParam,function(item,index){
  237. item.data=JSON.parse(JSON.stringify(param))
  238. if(index==0){
  239. reqParam[index].data.index="128" //注释:128预约总量
  240. }else if(index==1){
  241. reqParam[index].data.index="131" //131性别、132服务类型
  242. }else if(index==2){
  243. reqParam[index].data.index="132" //131性别、132服务类型
  244. }else if(index==3){
  245. reqParam[index].data.index="128,129,130" //128预约总量、129居民预约量130,代预约量
  246. }else if(index==4){
  247. reqParam[index].data.index="128,129,130" //128预约总量、129居民预约量130,代预约量
  248. reqParam[index].data.sort= 1
  249. reqParam[index].data.level= vm.level
  250. if(vm.lowLevel){
  251. reqParam[index].data.lowLevel = vm.lowLevel
  252. }
  253. }
  254. })
  255. return reqParam;
  256. }
  257. function loadData(loadArr, vm) {
  258. //获取其他请求的参数
  259. var reqParams = initReqParams(vm),
  260. reqPromise = [],
  261. newArr = []; //记录非顶部请求的请求数组
  262. for (i = 0; i < loadArr.length; i++) {
  263. var j = loadArr[i];
  264. var param = reqParams[j];
  265. reqPromise.push(httpRequest.get(param.url, {
  266. data: param.data
  267. }));
  268. newArr.push(loadArr[i]);
  269. }
  270. vm.isloading=true
  271. if (reqPromise.length > 0) {
  272. Promise.all(reqPromise).then(function (ress) {
  273. var res1, res2, res3, res4, res5;
  274. for (var i = 0; i < loadArr.length; i++) {
  275. var j = loadArr[i] + 1;
  276. if (j == 1) { res1 = ress[i]; }
  277. if (j == 2) { res2 = ress[i]; }
  278. if (j == 3) { res3 = ress[i]; }
  279. if (j == 4) { res4 = ress[i]; }
  280. if (j == 5) { res5 = ress[i]; }
  281. }
  282. if (res1 && res1.status == 200) {
  283. vm.topData=res1.data
  284. }
  285. if (res2 && res2.status == 200) {
  286. // res2={"msg":"查询成功!","data":[{"total":100,"code":"1","name":"女"},{"total":200,"code":"2","name":"男"},{"total":30,"code":"3","name":"未知"}],"status":200}
  287. vm.pieData131=res2.data
  288. }
  289. if (res3 && res3.status == 200) {
  290. // res3={"msg":"查询成功!","data":[{"total":11,"code":"1","name":"普通人群"},{"total":11,"code":"10","name":"重性精神疾病"},{"total":11,"code":"11","name":"残疾人"},{"total":0,"code":"12","name":"结核病"},{"total":0,"code":"3","name":"老年人"},{"total":0,"code":"4","name":"高血压"},{"total":0,"code":"5","name":"糖尿病"},{"total":11,"code":"6","name":"孕产妇"},{"total":0,"code":"7","name":"0-6岁儿童"},{"total":0,"code":"8","name":"贫困人口"},{"total":0,"code":"9","name":"计生特殊人群"}],"status":200}
  291. vm.pieData132=res3.data
  292. }
  293. if (res4 && res4.status == 200) {
  294. handleSecondPanelData(res4.data, vm);
  295. }
  296. if (res5 && res5.status == 200) {
  297. listHandle(res5.data, vm);;
  298. }
  299. vm.changePie()
  300. vm.isloading=false
  301. })
  302. }
  303. }
  304. function handleSecondPanelData(data, vm) {
  305. var xDatas = [],
  306. yDatas = [],
  307. names = [],
  308. colors = ['#12b7f5', '#cd67fd','#FF9526'],
  309. labels = {'128': '预约总量', '129': '居民预约量', '130': '代预约量'}
  310. index_names = {'index_128': '预约总量', 'index_129': '居民预约量', 'index_130': '代预约量'};
  311. for(var p in data){
  312. names.push(index_names[p]);
  313. xData = _.map(data[p], function(o){
  314. return o.range;
  315. });
  316. yData = _.map(data[p], function(o){
  317. return o.amount;
  318. });
  319. xDatas.push(xData);
  320. yDatas.push(yData);
  321. }
  322. EventBus.$emit("draw-line-chart", {
  323. panelName : "预约趋势分析",
  324. quotaNames : names,
  325. xData : xDatas[0],
  326. yDatas : yDatas,
  327. colors : colors,
  328. selectedDateType: vm.selectedDateType,
  329. nowlineid : "lineChart",
  330. noDateType: true,
  331. chartheight:"322",
  332. unit:"人次",
  333. noshowDate:true,
  334. });
  335. }
  336. function listHandle(list, vm){
  337. var topArr = [];
  338. if(list.length==1&&!list[0].name){
  339. list=[]
  340. }
  341. topArr = soreRank(getKeyValueArr(list, 'reservationTotalAmount0'));
  342. vm.tableData = _.map(list, function(o, index){
  343. o.rank=topArr[index]
  344. return o
  345. });
  346. EventBus.$emit("render-area-data",{
  347. });
  348. }
  349. //获取结束时间
  350. function getEndDate(chooseYear) {
  351. chooseYear = parseInt(chooseYear);
  352. var endDate = new Date((chooseYear + 1) + '-06-29'),
  353. now = new Date();
  354. var yesterday = new Date(now.setDate(now.getDate() - 1))
  355. if (yesterday <= endDate) {
  356. return yesterday.format("yyyy-MM-dd");
  357. } else {
  358. return (chooseYear + 1) + '-06-29';
  359. }
  360. }