index.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. var template = ''
  2. $.ajax('../../../component/statistics/GxbEvaluation/index.html', {
  3. data: {},
  4. dataType: 'html',
  5. cache: false,
  6. timeout: 60000,
  7. async: false,
  8. error: function (res) {},
  9. success: function (res) {
  10. template = res
  11. }
  12. })
  13. Vue.component('gxb-evaluation', {
  14. template: template,
  15. props: [],
  16. data: function () {
  17. return {
  18. years: [],
  19. yearType: '1',
  20. chooseYear: null,
  21. chooseTime: null,
  22. rangeOptions: [
  23. { label: '区', value: 'town' },
  24. { label: '社区', value: 'hospital' },
  25. { label: '团队', value: 'team' }
  26. ],
  27. areaOptions: [
  28. { label: '思明区', value: '350203' },
  29. { label: '海沧区', value: '350205' },
  30. { label: '湖里区', value: '350206' },
  31. { label: '集美区', value: '350211' },
  32. { label: '同安区', value: '350212' },
  33. { label: '翔安区', value: '350213' }
  34. ],
  35. hospitalOptions: [],
  36. teamOptions: [],
  37. form: {
  38. range: 'town'
  39. },
  40. loading: false,
  41. exportLoading: false,
  42. tableData: [],
  43. tableHeader: [],
  44. constantHeader: [
  45. { label: '评估人数', prop: 'totalNum', width: '90' },
  46. { label: '日常评估人数', prop: 'dailyNum', width: '110' },
  47. { label: '住院补筛人数', prop: 'inScreenNum', width: '110' },
  48. { label: '低危人数', prop: 'lRiskNum', width: '90' },
  49. { label: '中危人数', prop: 'mRiskNum', width: '90' },
  50. { label: '高危人数', prop: 'hRiskNum', width: '90' },
  51. { label: '极高危人数', prop: 'uhRiskNum', width: '90' },
  52. { label: '超高危人数', prop: 'ehRiskNum', width: '90' },
  53. { label: '已筛次数', prop: 'totalTimes', width: '90' },
  54. { label: '低危次数', prop: 'lRiskTimes', width: '90' },
  55. { label: '中危次数', prop: 'mRiskTimes', width: '90' },
  56. { label: '高危次数', prop: 'hRiskTimes', width: '90' },
  57. { label: '极高危次数', prop: 'uhRiskTimes', width: '90' },
  58. { label: '超高危次数', prop: 'ehRiskTimes', width: '90' },
  59. { label: '上转人次', prop: 'turnUpNum', width: '90' },
  60. { label: '消息提醒人次', prop: 'messageTimes', width: '110' },
  61. { label: '社区随访人次', prop: 'hosFollowNum', width: '110' }
  62. ],
  63. // page: 1,
  64. // size: 10,
  65. // total: 0,
  66. level: 0,
  67. visible: false,
  68. title: '',
  69. query: {},
  70. dataRangeOption: [],
  71. dialogTableData: [],
  72. dialogHeader: [],
  73. page: 1,
  74. size: 10,
  75. total: 0,
  76. messageVisible: false,
  77. messInfo: null,
  78. remind: '',
  79. dialogExportLoading: false
  80. }
  81. },
  82. methods: {
  83. init() {
  84. var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
  85. if (selectedRole.code.indexOf('350200') > -1) {
  86. this.level = 1 // 市卫健委
  87. this.areaOptions = [
  88. { label: '厦门市', value: '' },
  89. { label: '思明区', value: '350203' },
  90. { label: '海沧区', value: '350205' },
  91. { label: '湖里区', value: '350206' },
  92. { label: '集美区', value: '350211' },
  93. { label: '同安区', value: '350212' },
  94. { label: '翔安区', value: '350213' }
  95. ]
  96. } else if (selectedRole.code.length == 6) {
  97. this.level = 2 // 区管理
  98. this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code }]
  99. this.form = {
  100. range: 'town',
  101. area: selectedRole.code
  102. }
  103. this.getHospital(selectedRole.code)
  104. } else {
  105. this.level = 3 // 社区管理
  106. this.rangeOptions = [
  107. { label: '社区', value: 'hospital' },
  108. { label: '团队', value: 'team' }
  109. ]
  110. this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code.substring(0, 6) }]
  111. this.hospitalOptions = [{ name: selectedRole.name, code: selectedRole.code }]
  112. this.form = {
  113. range: 'hospital',
  114. area: selectedRole.code.substring(0, 6),
  115. hospital: selectedRole.code
  116. }
  117. this.getTeam(selectedRole.code)
  118. }
  119. this.initTime()
  120. this.search()
  121. },
  122. initTime() {
  123. var vm = this
  124. var now = new Date()
  125. var nowyear = (vm.chooseYear = now.getFullYear())
  126. vm.years = []
  127. for (i = nowyear; i >= 2013; i--) {
  128. vm.years.push(i)
  129. }
  130. },
  131. resetArea() {
  132. if (this.level == 1) {
  133. delete this.form.area
  134. delete this.form.hospital
  135. delete this.form.team
  136. } else if (this.level == 2) {
  137. delete this.form.hospital
  138. delete this.form.team
  139. } else {
  140. delete this.form.team
  141. }
  142. },
  143. search() {
  144. var vm = this
  145. this.loading = true
  146. var params = {
  147. ...this.form
  148. }
  149. if (this.yearType == '1') {
  150. params.startDate = this.chooseYear + '-01-01'
  151. params.endDate = this.chooseYear + '-12-31'
  152. } else {
  153. if (this.chooseTime) {
  154. params.startDate = this.chooseTime[0]
  155. params.endDate = this.chooseTime[1]
  156. }
  157. }
  158. if (this.form.range == 'town') {
  159. this.tableHeader = getTownHeader().concat(this.constantHeader)
  160. } else if (this.form.range == 'hospital') {
  161. this.tableHeader = getHospitalHeader().concat(this.constantHeader)
  162. } else {
  163. this.tableHeader = getTeamHeader().concat(this.constantHeader)
  164. }
  165. // constantHeader
  166. httpRequest.get('statistics/collaborate/gxbScreenInfoStatistics', { data: params }).then(function (res) {
  167. if (res.status == 200) {
  168. vm.tableData = res.detailModelList.map(function (item) {
  169. var data = JSON.parse(JSON.stringify(item))
  170. if (vm.form.range == 'town') {
  171. data.town = item.name
  172. data.hasChildren = true
  173. } else if (vm.form.range == 'hospital') {
  174. data.hospital = item.name
  175. data.hasChildren = true
  176. } else if (vm.form.range == 'team') {
  177. data.team = item.name
  178. }
  179. return data
  180. })
  181. }
  182. vm.loading = false
  183. })
  184. },
  185. exportTable() {
  186. var vm = this
  187. var params = {
  188. ...this.form
  189. }
  190. if (this.yearType == '1') {
  191. params.startDate = this.chooseYear + '-01-01'
  192. params.endDate = this.chooseYear + '-12-31'
  193. } else {
  194. if (this.chooseTime) {
  195. params.startDate = this.chooseTime[0]
  196. params.endDate = this.chooseTime[1]
  197. }
  198. }
  199. this.exportLoading = true
  200. var fileName = `冠心病评估情况统计表${new Date().getTime()}.xls`
  201. httpRequest.downLoadFileForAjax('statistics/collaborate/exportGxbScreenInfoStatistics', fileName, params).then(function () {
  202. vm.exportLoading = false
  203. })
  204. },
  205. eliminateClick() {
  206. this.resetArea()
  207. this.yearType = '1'
  208. this.chooseYear = new Date().getFullYear()
  209. this.chooseTime = null
  210. this.$forceUpdate()
  211. },
  212. getHospital(code) {
  213. var vm = this
  214. delete this.form.hospital
  215. delete this.form.team
  216. var params = {
  217. type: 5,
  218. code: code
  219. }
  220. httpRequest.post('common/district', { data: params }).then(function (res) {
  221. vm.hospitalOptions = [{ code: '', name: '全部' }]
  222. vm.hospitalOptions = vm.hospitalOptions.concat(res.list)
  223. })
  224. },
  225. getTeam(code) {
  226. var vm = this
  227. delete this.form.team
  228. var params = {
  229. hospital: code,
  230. area: this.form.area
  231. }
  232. httpRequest.get('statisticsExport/teamList', { data: params }).then(function (res) {
  233. vm.teamOptions = [{ id: '', name: '全部' }]
  234. vm.teamOptions = vm.teamOptions.concat(res.data)
  235. })
  236. },
  237. load(row, treeNode, resolve) {
  238. var params = {}
  239. var len = row.code.length
  240. if (len == 6) {
  241. params.range = 'hospital'
  242. params.area = row.code
  243. } else if (len == 10) {
  244. params.range = 'team'
  245. params.hospital = row.code
  246. }
  247. if (this.yearType == '1') {
  248. params.startDate = this.chooseYear + '-01-01'
  249. params.endDate = this.chooseYear + '-12-31'
  250. } else {
  251. if (this.chooseTime) {
  252. params.startDate = this.chooseTime[0]
  253. params.endDate = this.chooseTime[1]
  254. }
  255. }
  256. httpRequest.get('statistics/collaborate/gxbScreenInfoStatistics', { data: params }).then(function (res) {
  257. if (res.status == 200) {
  258. var children = res.detailModelList.map(function (item) {
  259. var data = JSON.parse(JSON.stringify(item))
  260. if (len == 6) {
  261. data.hospital = item.name
  262. data.hasChildren = true
  263. } else if (len == 10) {
  264. data.team = item.name
  265. }
  266. return data
  267. })
  268. resolve(children)
  269. }
  270. })
  271. },
  272. openDialog(row, prop) {
  273. var vm = this
  274. this.query = {}
  275. switch (prop) {
  276. case 'totalNum':
  277. this.title = '个案数据列表'
  278. break
  279. case 'dailyNum':
  280. this.query.surveyStatus = 1
  281. this.title = '个案数据列表'
  282. break
  283. case 'inScreenNum':
  284. this.query.surveyStatus = 2
  285. this.title = '个案数据列表'
  286. break
  287. case 'lRiskNum':
  288. this.query.screenResultCode = 5
  289. this.title = '个案数据列表'
  290. break
  291. case 'mRiskNum':
  292. this.query.screenResultCode = 4
  293. this.title = '个案数据列表'
  294. break
  295. case 'hRiskNum':
  296. this.query.screenResultCode = 3
  297. this.title = '个案数据列表'
  298. break
  299. case 'uhRiskNum':
  300. this.query.screenResultCode = 2
  301. this.title = '个案数据列表'
  302. break
  303. case 'ehRiskNum':
  304. this.query.screenResultCode = 1
  305. this.title = '个案数据列表'
  306. break
  307. case 'messageTimes':
  308. this.title = '评估随访消息推送明细'
  309. break
  310. }
  311. var len = row.code.length
  312. if (len == 6) {
  313. this.query.range = 'town'
  314. this.query.area = row.code
  315. } else if (len == 10) {
  316. this.query.range = 'hospital'
  317. this.query
  318. this.query.hospital = row.code
  319. } else {
  320. this.query.range = 'team'
  321. this.query.team = row.code
  322. }
  323. this.dataRangeOption = [{ label: row.name, value: row.code }]
  324. if (['totalNum', 'dailyNum', 'inScreenNum', 'lRiskNum', 'mRiskNum', 'hRiskNum', 'uhRiskNum', 'ehRiskNum'].includes(prop)) {
  325. this.query.sex = ''
  326. vm.dialogHeader = [
  327. { label: '姓名', prop: 'name' },
  328. { label: '性别', prop: 'sex' },
  329. { label: '年龄', prop: 'age' },
  330. { label: '评估结果', prop: 'screenResult' },
  331. { label: '评估医生', prop: 'doctorName' },
  332. { label: '评估时间', prop: 'czrq' },
  333. { label: '手机号', prop: 'mobile' },
  334. { label: '证件号码', prop: 'idcard' },
  335. { label: '签约社区', prop: 'signHospitalName' },
  336. { label: '签约医生', prop: 'signDoctorName' }
  337. ]
  338. this.gxbCaseDataPage()
  339. vm.visible = true
  340. }
  341. if (prop == 'messageTimes') {
  342. vm.dialogHeader = [
  343. { label: '姓名', prop: 'patientName' },
  344. { label: '性别', prop: 'sex' },
  345. { label: '年龄', prop: 'age' },
  346. { label: '证件号码', prop: 'idcard' },
  347. { label: '签约医院', prop: 'hospitalName' },
  348. { label: '签约医生', prop: 'doctorName' },
  349. { label: '提醒类型', prop: 'typeName' },
  350. { label: '消息推送时间', prop: 'createTime' },
  351. { label: '出院下转时间', prop: 'turnTime' },
  352. { label: '消息推送人', prop: 'senderName' }
  353. ]
  354. this.selectSmsInfoList()
  355. vm.visible = true
  356. }
  357. },
  358. dialogSearchFn() {
  359. this.page = 1
  360. if (this.title == '个案数据列表') {
  361. this.gxbCaseDataPage()
  362. } else {
  363. this.selectSmsInfoList()
  364. }
  365. },
  366. gxbCaseDataPage() {
  367. var vm = this
  368. var params = JSON.parse(JSON.stringify(this.query))
  369. params.page = this.page
  370. params.pageSize = this.size
  371. if (this.yearType == '1') {
  372. params.startDate = this.chooseYear + '-01-01'
  373. params.endDate = this.chooseYear + '-12-31'
  374. } else {
  375. if (this.chooseTime) {
  376. params.startDate = this.chooseTime[0]
  377. params.endDate = this.chooseTime[1]
  378. }
  379. }
  380. httpRequest.get('statistics/collaborate/gxbCaseDataPage', { data: params }).then(function (res) {
  381. if (res.status == 200) {
  382. vm.dialogTableData = res.detailModelList
  383. vm.total = res.totalCount
  384. }
  385. })
  386. },
  387. handleCurrentChange(val) {
  388. this.page = val
  389. if (this.title == '个案数据列表') {
  390. this.gxbCaseDataPage()
  391. } else {
  392. this.selectSmsInfoList()
  393. }
  394. },
  395. handleSizeChange(val) {
  396. this.size = val
  397. if (this.title == '个案数据列表') {
  398. this.gxbCaseDataPage()
  399. } else {
  400. this.selectSmsInfoList()
  401. }
  402. },
  403. selectSmsInfoList() {
  404. var vm = this
  405. var params = {
  406. ...this.query
  407. }
  408. params.type = 1
  409. params.page = this.page
  410. params.pageSize = this.size
  411. if (this.yearType == '1') {
  412. params.startDate = this.chooseYear + '-01-01'
  413. params.endDate = this.chooseYear + '-12-31'
  414. } else {
  415. if (this.chooseTime) {
  416. params.startDate = this.chooseTime[0]
  417. params.endDate = this.chooseTime[1]
  418. }
  419. }
  420. httpRequest.get('statistics/collaborate/selectSmsInfoList', { data: this.query }).then(function (res) {
  421. if (res.status == 200) {
  422. vm.dialogTableData = res.detailModelList
  423. vm.total = res.totalCount
  424. }
  425. })
  426. },
  427. dialogExportFn() {
  428. this.dialogExportLoading = true
  429. var vm = this
  430. var params = {
  431. ...this.query
  432. }
  433. if (this.yearType == '1') {
  434. params.startDate = this.chooseYear + '-01-01'
  435. params.endDate = this.chooseYear + '-12-31'
  436. } else {
  437. if (this.chooseTime) {
  438. params.startDate = this.chooseTime[0]
  439. params.endDate = this.chooseTime[1]
  440. }
  441. }
  442. if (this.title == '个案数据列表') {
  443. var fileName = `个案数据列表${new Date().getTime()}.xls`
  444. httpRequest.downLoadFileForAjax('statistics/collaborate/exportGxbCaseDataPage', fileName, params).then(function () {
  445. vm.dialogExportLoading = false
  446. })
  447. } else {
  448. var fileName = `评估随访消息推送明细${new Date().getTime()}.xls`
  449. httpRequest.downLoadFileForAjax('statistics/collaborate/exportSelectSmsInfoList', fileName, params).then(function () {
  450. vm.dialogExportLoading = false
  451. })
  452. }
  453. },
  454. closeDialog() {
  455. this.visible = false
  456. },
  457. seePatientDetail(row) {},
  458. dialogReset() {
  459. var params = {
  460. ...this.query
  461. }
  462. this.query = {
  463. sex: '',
  464. screenResultCode: '',
  465. range: params.range,
  466. area: params.area,
  467. hospital: params.hospital,
  468. team: params.team
  469. }
  470. },
  471. previewMess(row) {
  472. this.messageVisible = true
  473. this.messInfo = row.content
  474. },
  475. closeMessageDialog() {
  476. this.messageVisible = false
  477. }
  478. },
  479. mounted() {
  480. this.init()
  481. }
  482. })