index.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. var template = ''
  2. $.ajax('../../../component/statistics/GxbTurnup/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-turnup', {
  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: 'turnUpNum', width: '110' },
  46. { label: '上转人次', prop: 'turnUpTimes', width: '110' },
  47. { label: '上转转门诊', prop: 'mzTimes', width: '110', tooltip: '统计已上转的人次中,前往医院进行就诊的人次' },
  48. { label: '上转转门诊转化率', prop: 'mzRate', width: '130' },
  49. { label: '门诊转住院', prop: 'zyTimes', width: '110', tooltip: '统计已就诊的人次中,在医院办理住院的人次' },
  50. { label: '门诊转住院转化率', prop: 'zyRate', width: '130' }
  51. ],
  52. level: 0,
  53. visible: false,
  54. xxVisible: false,
  55. query: {},
  56. xxQuery: {},
  57. xxTableData: [],
  58. xxTotal: '',
  59. xxPage: 1,
  60. xxPageSize: 10,
  61. dataRangeOption: [],
  62. dialogTableData: [],
  63. dialogHeader: [],
  64. xxDialogHeader: [
  65. { label: '姓名', prop: 'patientName', width: '100' },
  66. { label: '性别', prop: 'sexName', width: '90' },
  67. { label: '年龄', prop: 'age', width: '90' },
  68. { label: '手机号', prop: 'mobile', width: '110' },
  69. { label: '证件号码', prop: 'idcard', width: '110' },
  70. { label: '操作上转医生机构', prop: 'organizationName', width: '130' },
  71. { label: '上转的单位', prop: 'transportOrgName', width: '100' },
  72. { label: '上转住院', prop: 'toIp', width: '130' },
  73. { label: '上转住院时间', prop: 'inHospitalDate', width: '150' }
  74. ],
  75. page: 1,
  76. size: 10,
  77. total: 0,
  78. messageVisible: false,
  79. messInfo: null,
  80. remind: '',
  81. dialogExportLoading: false,
  82. dialogLoading: false
  83. }
  84. },
  85. methods: {
  86. init() {
  87. var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
  88. if (selectedRole.code.indexOf('350200') > -1) {
  89. this.level = 1 // 市卫健委
  90. this.areaOptions = [
  91. { label: '厦门市', value: '' },
  92. { label: '思明区', value: '350203' },
  93. { label: '海沧区', value: '350205' },
  94. { label: '湖里区', value: '350206' },
  95. { label: '集美区', value: '350211' },
  96. { label: '同安区', value: '350212' },
  97. { label: '翔安区', value: '350213' },
  98. { label: '其他', value: 'other' }
  99. ]
  100. } else if (selectedRole.code.length == 6) {
  101. this.level = 2 // 区管理
  102. this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code }]
  103. this.form = {
  104. range: 'town',
  105. area: selectedRole.code
  106. }
  107. this.getHospital(selectedRole.code)
  108. } else {
  109. this.level = 3 // 社区管理
  110. this.rangeOptions = [
  111. { label: '社区', value: 'hospital' },
  112. { label: '团队', value: 'team' }
  113. ]
  114. this.areaOptions = [{ label: selectedRole.name.substring(0, 3), value: selectedRole.code.substring(0, 6) }]
  115. this.hospitalOptions = [{ name: selectedRole.name, code: selectedRole.code }]
  116. this.form = {
  117. range: 'hospital',
  118. area: selectedRole.code.substring(0, 6),
  119. hospital: selectedRole.code
  120. }
  121. this.getTeam(selectedRole.code)
  122. }
  123. this.initTime()
  124. this.searchFn()
  125. },
  126. initTime() {
  127. var vm = this
  128. var now = new Date()
  129. vm.nowyear = vm.chooseYear = now.getFullYear()
  130. vm.years = []
  131. for (i = vm.nowyear; i >= 2013; i--) {
  132. vm.years.push(i)
  133. }
  134. },
  135. resetArea() {
  136. if (this.level == 1) {
  137. delete this.form.area
  138. delete this.form.hospital
  139. delete this.form.team
  140. } else if (this.level == 2) {
  141. delete this.form.hospital
  142. delete this.form.team
  143. } else {
  144. delete this.form.team
  145. }
  146. },
  147. searchFn() {
  148. var vm = this
  149. this.loading = true
  150. var params = {
  151. ...this.form,
  152. isTotal: 1
  153. }
  154. vm.tableData = []
  155. if (this.yearType == '1') {
  156. params.startDate = this.chooseYear + '-01-01'
  157. params.endDate = this.chooseYear + '-12-31'
  158. } else {
  159. if (this.chooseTime) {
  160. params.startDate = this.chooseTime[0]
  161. params.endDate = this.chooseTime[1]
  162. }
  163. }
  164. if (this.form.range == 'town') {
  165. this.tableHeader = getTownHeader().concat(this.constantHeader)
  166. } else if (this.form.range == 'hospital') {
  167. this.tableHeader = getHospitalHeader().concat(this.constantHeader)
  168. } else {
  169. this.tableHeader = getTeamHeader().concat(this.constantHeader)
  170. }
  171. httpRequest.get('statistics/collaborate/gxbTurnUpInfo', { data: params }).then(function (res) {
  172. if (res.status == 200) {
  173. vm.tableData = res.detailModelList.map(function (item) {
  174. var data = JSON.parse(JSON.stringify(item))
  175. if (vm.form.range == 'town') {
  176. data.town = item.name
  177. data.hasChildren = item.code && item.code != 'other' && true
  178. } else if (vm.form.range == 'hospital') {
  179. data.hospital = item.name
  180. data.hasChildren = item.code && item.code != 'other' && true
  181. } else if (vm.form.range == 'team') {
  182. data.team = item.name
  183. }
  184. return data
  185. })
  186. }
  187. vm.loading = false
  188. })
  189. },
  190. exportTable() {
  191. var vm = this
  192. var params = {
  193. ...this.form
  194. }
  195. if (this.yearType == '1') {
  196. params.startDate = this.chooseYear + '-01-01'
  197. params.endDate = this.chooseYear + '-12-31'
  198. } else {
  199. if (this.chooseTime) {
  200. params.startDate = this.chooseTime[0]
  201. params.endDate = this.chooseTime[1]
  202. }
  203. }
  204. this.exportLoading = true
  205. var fileName = `冠心病上转情况统计表${new Date().getTime()}.xls`
  206. httpRequest.downLoadFileForAjax('statistics/collaborate/exportGxbTurnUpInfo', fileName, params).then(function () {
  207. vm.exportLoading = false
  208. })
  209. },
  210. eliminateClick() {
  211. var selectedRole = JSON.parse(sessionStorage.getItem('selectedRole'))
  212. if (this.level == 1) {
  213. this.form = {
  214. range: 'town'
  215. }
  216. } else if (this.level == 2) {
  217. this.form = {
  218. range: 'town',
  219. area: selectedRole.code
  220. }
  221. this.getHospital(selectedRole.code)
  222. } else {
  223. this.form = {
  224. range: 'hospital',
  225. area: selectedRole.code.substring(0, 6),
  226. hospital: selectedRole.code
  227. }
  228. this.getTeam(selectedRole.code)
  229. }
  230. this.yearType = '1'
  231. this.chooseYear = new Date().getFullYear()
  232. this.chooseTime = null
  233. this.$forceUpdate()
  234. },
  235. getHospital(code, flag = true) {
  236. var vm = this
  237. if (flag) {
  238. delete this.form.hospital
  239. delete this.form.team
  240. }
  241. var params = {
  242. type: 5,
  243. code: code
  244. }
  245. httpRequest.post('common/district', { data: params }).then(function (res) {
  246. vm.hospitalOptions = [{ code: '', name: '全部' }]
  247. vm.hospitalOptions = vm.hospitalOptions.concat(res.list)
  248. })
  249. },
  250. getTeam(code, flag) {
  251. var vm = this
  252. if (flag) {
  253. delete this.form.team
  254. }
  255. var params = {
  256. hospital: code,
  257. area: this.form.area
  258. }
  259. httpRequest.get('statisticsExport/teamList', { data: params }).then(function (res) {
  260. vm.teamOptions = [{ id: '', name: '全部' }]
  261. vm.teamOptions = vm.teamOptions.concat(res.data)
  262. })
  263. },
  264. load(row, treeNode, resolve) {
  265. var params = {}
  266. var len = row.code.length
  267. if (len == 6) {
  268. params.range = 'hospital'
  269. params.area = row.code
  270. } else if (len == 10) {
  271. params.range = 'team'
  272. params.hospital = row.code
  273. }
  274. if (this.yearType == '1') {
  275. params.startDate = this.chooseYear + '-01-01'
  276. params.endDate = this.chooseYear + '-12-31'
  277. } else {
  278. if (this.chooseTime) {
  279. params.startDate = this.chooseTime[0]
  280. params.endDate = this.chooseTime[1]
  281. }
  282. }
  283. httpRequest.get('statistics/collaborate/gxbTurnUpInfo', { data: params }).then(function (res) {
  284. if (res.status == 200) {
  285. var children = res.detailModelList.map(function (item) {
  286. var data = JSON.parse(JSON.stringify(item))
  287. if (len == 6) {
  288. data.hospital = item.name
  289. data.hasChildren = true
  290. } else if (len == 10) {
  291. data.team = item.name
  292. }
  293. return data
  294. })
  295. resolve(children)
  296. }
  297. })
  298. },
  299. dialogSearchFn(val) {
  300. if (val == 1) {
  301. this.page = 1
  302. this.gxbTurnUpInfoPage()
  303. } else {
  304. this.xxPage = 1
  305. this.getList()
  306. }
  307. },
  308. dialogExportFn(val) {
  309. var vm = this
  310. if (val == 1) {
  311. var params = {
  312. ...this.query
  313. }
  314. if (this.yearType == '1') {
  315. params.startDate = this.chooseYear + '-01-01'
  316. params.endDate = this.chooseYear + '-12-31'
  317. } else {
  318. if (this.chooseTime) {
  319. params.startDate = this.chooseTime[0]
  320. params.endDate = this.chooseTime[1]
  321. }
  322. }
  323. this.dialogExportLoading = true
  324. var fileName = `上转预约明细列表${new Date().getTime()}.xls`
  325. httpRequest.downLoadFileForAjax('statistics/collaborate/exportGxbTurnUpInfoPage2', fileName, params).then(function () {
  326. vm.dialogExportLoading = false
  327. })
  328. } else if (val == 2) {
  329. var params = {
  330. ...this.xxQuery
  331. }
  332. if (this.yearType == '1') {
  333. params.startDate = this.chooseYear + '-01-01'
  334. params.endDate = this.chooseYear + '-12-31'
  335. } else {
  336. if (this.chooseTime) {
  337. params.startDate = this.chooseTime[0]
  338. params.endDate = this.chooseTime[1]
  339. }
  340. }
  341. this.dialogExportLoading = true
  342. var fileName = `纳龙胸痛中心上转明细${new Date().getTime()}.xls`
  343. httpRequest.downLoadFileForAjax('statistics/collaborate/exportNalongDataDetail', fileName, params).then(function () {
  344. vm.dialogExportLoading = false
  345. })
  346. }
  347. },
  348. dialogReset() {
  349. var params = {
  350. ...this.query
  351. }
  352. this.query = {
  353. sex: '',
  354. range: typeof params.range == 'undefined' ? '' : params.range,
  355. area: typeof params.area == 'undefined' ? '' : params.area,
  356. hospital: typeof params.hospital == 'undefined' ? '' : params.hospital,
  357. team: typeof params.team == 'undefined' ? '' : params.team
  358. }
  359. this.xxQuery = {}
  360. },
  361. handleCurrentChange(val) {
  362. this.page = val
  363. this.gxbTurnUpInfoPage()
  364. },
  365. handleXxCurrentChange(val) {
  366. this.xxPage = val
  367. this.getList()
  368. },
  369. handleSizeChange(val) {
  370. this.size = val
  371. this.gxbTurnUpInfoPage()
  372. },
  373. handleXxSizeChange(val) {
  374. this.xxPageSize = val
  375. this.getList()
  376. },
  377. openDialog(row, prop) {
  378. console.log(this.form, 'llllllllllll')
  379. if (row.name == '其他') {
  380. this.xxQuery.range = this.form.range
  381. this.xxVisible = true
  382. this.getList()
  383. } else {
  384. if (!row.code) return
  385. this.page = 1
  386. if (prop == 'turnUpTimes') {
  387. this.query = { sex: '' }
  388. var len = row.code.length
  389. if (len == 6) {
  390. this.query.range = 'town'
  391. this.query.area = row.code
  392. } else if (len == 10) {
  393. this.query.range = 'hospital'
  394. this.query.hospital = row.code
  395. } else {
  396. this.query.range = 'team'
  397. this.query.team = row.code
  398. }
  399. this.dataRangeOption = [{ label: row.name, value: row.code }]
  400. this.dialogHeader = [
  401. { label: '姓名', prop: 'name' },
  402. { label: '性别', prop: 'sex' },
  403. { label: '年龄', prop: 'age' },
  404. { label: '社区医院', prop: 'signHospitalName' },
  405. { label: '签约医生', prop: 'signDoctorName' },
  406. { label: '手机号', prop: 'mobile' },
  407. { label: '证件号码', prop: 'idcard' },
  408. { label: '预约医院', prop: 'orgName' },
  409. { label: '预约医生', prop: 'dName' },
  410. { label: '预约科室', prop: 'deptName' },
  411. { label: '预约时间', prop: 'orderTime' },
  412. { label: '数据来源', prop: 'sourceType' }
  413. ]
  414. this.visible = true
  415. this.gxbTurnUpInfoPage()
  416. }
  417. }
  418. },
  419. gxbTurnUpInfoPage() {
  420. var vm = this
  421. vm.dialogLoading = true
  422. var params = {
  423. ...this.query,
  424. page: this.page,
  425. pageSize: this.size
  426. }
  427. if (this.yearType == '1') {
  428. params.startDate = this.chooseYear + '-01-01'
  429. params.endDate = this.chooseYear + '-12-31'
  430. } else {
  431. if (this.chooseTime) {
  432. params.startDate = this.chooseTime[0]
  433. params.endDate = this.chooseTime[1]
  434. }
  435. }
  436. httpRequest.get('statistics/collaborate/gxbTurnUpInfoPage2', { data: params }).then(function (res) {
  437. if (res.status == 200) {
  438. vm.dialogTableData = res.detailModelList
  439. vm.total = res.totalCount
  440. }
  441. vm.dialogLoading = false
  442. })
  443. },
  444. getList() {
  445. var vm = this
  446. var params = {
  447. ...this.xxQuery,
  448. page: this.xxPage,
  449. pageSize: this.xxPageSize
  450. }
  451. if (this.yearType == '1') {
  452. params.startDate = this.chooseYear + '-01-01'
  453. params.endDate = this.chooseYear + '-12-31'
  454. } else {
  455. if (this.chooseTime) {
  456. params.startDate = this.chooseTime[0]
  457. params.endDate = this.chooseTime[1]
  458. }
  459. }
  460. delete params.range
  461. httpRequest.get('statistics/collaborate/nalongDataDetail', { data: params }).then(function (res) {
  462. if (res.status == 200) {
  463. vm.xxTableData = res.detailModelList
  464. vm.xxTotal = res.totalCount
  465. }
  466. })
  467. },
  468. seePatientDetail(row, prop) {
  469. if (prop == 'name') {
  470. EventBus.$emit('preview-person-info', { type: '2', code: row.code })
  471. } else if (prop == 'patientName') {
  472. EventBus.$emit('preview-person-info', { type: '2', code: row.patient })
  473. }
  474. },
  475. closeDialog() {
  476. this.visible = false
  477. },
  478. getData(data) {
  479. if (data) {
  480. this.yearType = data.yearType
  481. this.form.range = data.range
  482. this.form.area = data.area
  483. this.form.hospital = data.hospital
  484. this.form.team = data.team
  485. if (this.yearType == 1) {
  486. this.chooseYear = data.time
  487. } else {
  488. this.chooseTime = data.time
  489. }
  490. if (this.form.hospital) {
  491. // 如果有社区code传过来就调社区医院列表接口
  492. this.getHospital(data.area, false)
  493. }
  494. if (this.form.team) {
  495. // 如果有团队code传过来就调团队列表接口
  496. this.getTeam(data.hospital, false)
  497. }
  498. this.searchFn()
  499. } else {
  500. this.init()
  501. }
  502. },
  503. renderHeader: function (h, item) {
  504. var label = item.column.label
  505. var column = item.column
  506. var tooltip = {
  507. '签约社区': '显示为该患者当前的签约社区医院名称',
  508. '社区医院': '显示为该患者当前的签约社区医院名称',
  509. '签约医院': '显示为该患者当前的签约社区医院名称',
  510. '签约医生': '显示为该患者当前的签约社区医生名称',
  511. '家庭医生': '显示为该患者当前的签约社区医生名称'
  512. }
  513. if (label == '签约社区' || label == '签约医生' || label == '签约医院' || label == '家庭医生' || label == '社区医院') {
  514. return [
  515. label,
  516. h(
  517. 'el-tooltip',
  518. {
  519. props: {
  520. content: (function () {
  521. return tooltip[label]
  522. })(),
  523. placement: 'top'
  524. }
  525. },
  526. [
  527. h('span', {
  528. class: {
  529. 'el-icon-question': true
  530. }
  531. })
  532. ]
  533. )
  534. ]
  535. } else {
  536. return [column.label]
  537. }
  538. }
  539. },
  540. mounted() {
  541. this.init()
  542. }
  543. })