index.js 17 KB

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