creatCheckTask.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583
  1. const $ = require('jquery');
  2. require("../css/creatCheckTask.less");
  3. require('./modal.js');
  4. const {api,ywCheckApi} = require('./api.js')
  5. const {post,getCookie,emptyBox,listenScroll} = require('./utils.js')
  6. require('./../resource/jquery-ui/jquery-ui.min.js');
  7. require('./../resource/jquery-ui/jquery-ui.min.css');
  8. const iconCheck= require("./../images/icon_check.png")
  9. const iconUnCheck = require("./../images/icon_unchecked.png")
  10. const iconDisCheck = require("./../images/icon_dis.png")
  11. const iconCalenBlue= require("./../images/icon_calen_blue.png")
  12. const iconCalenGrey= require("./../images/icon_calen_grey.png")
  13. const iconDown= require("./../images/arrow_down.png")
  14. const iconUp = require("./../images/arrow_up.png")
  15. const loadingImg = require("./../images/loading.gif")
  16. const arrowLeft= require("./../images/arrow_left.png")
  17. const arrowRight = require("./../images/arrow_right.png")
  18. listenScroll()
  19. let tabList = [], global_level="",global_status="0", global_deptId=[],global_deptName="",
  20. data_desc=["leaveHospitalDate"],data_asc=[],global_taskList=[],global_delOrAdd=1;//1生成0取消
  21. let global_activeTabCode = '0'; //激活的tab code
  22. let isPlacefile = getCookie('isPlacefile')||1
  23. $(function() {
  24. const checkAuth = getCookie('checkAuth');
  25. /*if(!checkAuth){
  26. $(".tabs").hide();
  27. toast("没有质控核查权限!");
  28. return
  29. }*/
  30. const tabs = checkAuth.replace(/[^456]/g,'');
  31. if(tabs.length===0){
  32. $(".tabs").hide();
  33. toast("没有质控核查权限!");
  34. return;
  35. }else if(tabs.length<2){
  36. //只有一个权限,隐藏tab切换
  37. $(".tabs").hide();
  38. }else{//隐藏没有权限的tab
  39. const last = "456".replace(tabs,'');
  40. $(".tabs [data-code="+(last-4)+"]").parent().hide();
  41. }
  42. global_activeTabCode=tabs.substr(0,1)-4;
  43. //获取科室列表
  44. if(global_activeTabCode=="0"){
  45. getSubDeptList();
  46. }else{
  47. getDeptList();
  48. }
  49. $(".tabs [data-code="+global_activeTabCode+"]").addClass("active");
  50. $('.datapickerBox').append(`<img class="iconCalen" src=${iconCalenGrey} />`)
  51. $('.iconCalen').on("mouseenter", function(e){
  52. $(this).attr("src", iconCalenBlue)
  53. })
  54. $('.iconCalen').on("mouseleave", function(e){
  55. $(this).attr("src", iconCalenGrey)
  56. })
  57. $('.iconCalen').on("click", function(e){
  58. $(this).parent().find("input").focus()
  59. })
  60. $(".menu .page", parent.document).removeClass("active")
  61. $(parent.document).find(".menu .page[code=YH-ZKHC-SCHCRW]").addClass("active")
  62. $(".filter").on("click", function(e){
  63. global_taskList=[];
  64. getTabData(1)
  65. })
  66. $(".abnormalClear").on("click", function(e){
  67. clearFilter();
  68. getTabData(1)
  69. })
  70. //切换tab
  71. $(".tabBox .tabs button").on("click",(e)=>{
  72. const me = e.target;
  73. $('.selectDept i').text('全部')
  74. $(".deptItem.active").removeClass("active");
  75. $(".deptList").css("display", "none")
  76. global_deptId=[];
  77. global_deptName="";
  78. global_activeTabCode = $(me).attr("data-code");
  79. if(global_activeTabCode=="0"){
  80. getSubDeptList();
  81. }else{
  82. getDeptList();
  83. }
  84. $(".tabBox .tabs button").removeClass("active");
  85. $(me).addClass("active");
  86. //更新列表并重置筛选条件
  87. $(".filter").click();
  88. });
  89. //选择生成状态
  90. $('.selectStatus').on("click", function(e){
  91. e.stopPropagation()
  92. $(".statusList ").css("display", "none")
  93. $(".selectStatus .arrow").attr("src",iconDown)
  94. const showList = $(".statusList ").css("display")
  95. if(showList == "none" ||!showList){
  96. $(".statusList ").css("display","block")
  97. $(".selectStatus .arrow").attr("src",iconUp)
  98. }else{
  99. $(".statusList ").css("display", "none")
  100. $(".selectStatus .arrow").attr("src",iconDown)
  101. }
  102. })
  103. //选择病历等级
  104. $('.selectLevel').on("click", function(e){
  105. e.stopPropagation()
  106. $(".deptList ").css("display", "none")
  107. $(".selectDept .arrow").attr("src",iconDown)
  108. const showList = $(".levelList ").css("display")
  109. if(showList == "none" ||!showList){
  110. $(".levelList ").css("display","block")
  111. $(".selectLevel .arrow").attr("src",iconUp)
  112. }else{
  113. $(".levelList ").css("display", "none")
  114. $(".selectLevel .arrow").attr("src",iconDown)
  115. }
  116. })
  117. //科室选择
  118. $('.selectDept').on("click", function(e){
  119. e.stopPropagation();
  120. $(".levelList ").css("display","none")
  121. $(".selectLevel .arrow").attr("src",iconDown)
  122. $(".deptList ").css("display","block")
  123. })
  124. $(".creatTask").click(function(){
  125. if(!global_taskList.join("").length){
  126. toast("至少勾选一个任务");
  127. return;
  128. }
  129. $(".modal-container .modal-body p").text("确定要生成这些任务吗?");
  130. $(".modal-container").show();
  131. global_delOrAdd=1;
  132. });
  133. $(".modal-container .confirm").click(function(){
  134. creatTask(global_delOrAdd)
  135. });
  136. $(".modal-container .cancel,.modal-container .close").click(function(){
  137. if(global_delOrAdd==0){
  138. global_taskList=[];
  139. }
  140. $(".modal-container").hide();
  141. })
  142. //出院日期初始化
  143. $.datepicker.regional['zh-CN'] = {
  144. clearText: '清除',
  145. clearStatus: '清除已选日期',
  146. closeText: '关闭',
  147. closeStatus: '不改变当前选择',
  148. prevText: '<上月',
  149. prevStatus: '显示上月',
  150. prevBigText: '<<',
  151. prevBigStatus: '显示上一年',
  152. nextText: '下月>',
  153. nextStatus: '显示下月',
  154. nextBigText: '>>',
  155. nextBigStatus: '显示下一年',
  156. currentText: '今天',
  157. currentStatus: '显示本月',
  158. monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
  159. monthNamesShort: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
  160. yearNamesShort: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
  161. monthStatus: '选择月份',
  162. yearStatus: '选择年份',
  163. weekHeader: '周',
  164. weekStatus: '年内周次',
  165. dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
  166. dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
  167. dayNamesMin: ['日','一','二','三','四','五','六'],
  168. dayStatus: '设置 DD 为一周起始',
  169. dateStatus: '选择 m月 d日, DD',
  170. dateFormat: 'yy-mm-dd',
  171. firstDay: 1,
  172. initStatus: '请选择日期',
  173. isRTL: false};
  174. const days = new Date().getDate()-1;
  175. let startDate = "-"+days+"d",endDate=new Date();
  176. $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
  177. $( "#datepicker" ).datepicker({
  178. changeMonth: true,
  179. changeYear: true,
  180. dateFormat:"yy-mm-dd",
  181. }).datepicker( "setDate", startDate);
  182. $( "#datepicker2" ).datepicker({
  183. changeMonth: true,
  184. changeYear: true,
  185. dateFormat:"yy-mm-dd"
  186. }).datepicker( "setDate",endDate);
  187. //获取列表数据
  188. getTabData(1)
  189. //状态选择
  190. bindStatusSelect()
  191. //等级选择
  192. bindLeveldSelect()
  193. //关闭下拉
  194. $(document).on("click", function(){
  195. $(".levelList ").css("display", "none")
  196. $(".deptList ").css("display", "none")
  197. $(".statusList ").css("display", "none")
  198. $(".selectDept .arrow").attr("src",iconDown)
  199. $(".selectLevel .arrow").attr("src",iconDown)
  200. $(".selectStatus .arrow").attr("src",iconDown)
  201. })
  202. });
  203. //判断有无某一权限
  204. function hasData(data){
  205. let trdObj = JSON.parse(getCookie("trdObj"))
  206. let lis = trdObj['YH-ZKHC-SCRW']
  207. if(!lis){
  208. return false
  209. }
  210. if(lis.indexOf(data)>-1){//有权限
  211. return true
  212. }
  213. return false;
  214. }
  215. //排序事件
  216. function bindOrder(){
  217. $("th[code]").off("click").on("click", function (e) {
  218. const code = $(this).attr("code");
  219. if (data_asc[0] === code) {
  220. data_desc = [code];
  221. data_asc = [];
  222. $("th[code]").removeClass("asc desc");
  223. $(this).addClass("desc");
  224. } else {
  225. data_desc = [];
  226. data_asc = [code];
  227. $("th[code]").removeClass("asc desc");
  228. $(this).addClass("asc");
  229. }
  230. getTabData(1);
  231. });
  232. }
  233. function bindCancelTaskEvent(){
  234. $(".taskCancel").unbind("click").click(function(){
  235. global_delOrAdd=0;
  236. global_taskList = [$(this).attr("code")];
  237. $(".modal-container .modal-body p").text("确定要取消该任务吗?");
  238. $(".modal-container").show();
  239. });
  240. }
  241. //生成任务
  242. function creatTask(flag){
  243. const param={
  244. behospitalCodeList:global_taskList,
  245. jobType:global_activeTabCode,
  246. checkStatus:flag,
  247. };
  248. post(ywCheckApi.addCheck,param).then(res =>{
  249. if(res.data.code == '0'){
  250. global_taskList=[];
  251. $(".modal-container").hide();
  252. toast("操作成功!");
  253. getTabData(1)
  254. }else{
  255. toast(res.data.msg);
  256. }
  257. }).catch((e) =>{
  258. })
  259. }
  260. function getTabData(activePage){
  261. const filterData = getFilterData();
  262. const param = {
  263. jobType:global_activeTabCode, //科室/质控科/院级
  264. creatStatus:global_status,
  265. current:activePage,
  266. hospitalId:'',
  267. level:global_level,//病历等级
  268. department: global_deptId,
  269. asc:data_asc, //升序
  270. desc:data_desc, //降序
  271. size: 15,
  272. ...filterData,
  273. startDate:filterData.startDate+" 00:00:00",
  274. endDate:filterData.endDate+" 23:59:59",
  275. }
  276. $('.pagination').html("")
  277. $('.tbody').html(emptyBox('努力加载中...','',16))
  278. return post(ywCheckApi.getTaskList,param).then(res =>{
  279. if(res.data.code == '0'){
  280. const data = res.data.data;
  281. tabList = data.records;
  282. const totalPage = data.pages;
  283. const totalNum = data.total;
  284. renderTab(tabList,data.hospitalId);
  285. renderPagination(totalPage,Number(activePage),totalNum)
  286. if(totalPage > 1){
  287. renderPagination(totalPage,Number(activePage),totalNum)
  288. } else{
  289. $('.pagination').html("")
  290. }
  291. }else{
  292. toast(res.data.msg);
  293. }
  294. }).catch((e) =>{
  295. })
  296. }
  297. function toast(msg){
  298. $.alerModal({"message":msg,type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
  299. }
  300. function renderTab(data){
  301. let str = ``,code="";
  302. let hasSelectAll = true;
  303. if(data.length===0){
  304. $('.tbody').html(emptyBox(null,16))
  305. // initScroll("qcList","YX",1)
  306. return;
  307. }
  308. const titles = $(".tabTitle th[valCode]");
  309. for(let i = 0; i < data.length; i++){
  310. const item = data[i]
  311. str += `
  312. <tr data-index=${i}>
  313. <td class="operaItem ${item.creatStatus=='已生成'?'':'taskCheck'} textCenter"><img code="${item.behospitalCode}" src="${item.creatStatus=='已生成'?iconDisCheck:iconUnCheck}" alt=""></td>`;
  314. for(let i=0;i<titles.length;i++){
  315. code=$(titles[i]).attr('valCode');
  316. str += `<td class="textCenter"><span data-index=${i}>${ item[code] || "-"}<span></td>`
  317. }
  318. str += `<td class="operaItem textCenter ${item.creatStatus=='已生成'?'taskCancel':'disable'}" code="${item.behospitalCode}">取消</td></tr>`
  319. }
  320. if(data.length === 0){
  321. hasSelectAll = false
  322. }
  323. if(hasSelectAll){
  324. $('.scoreOpera img').attr("src" ,iconCheck)
  325. $('.scoreOpera').attr("data-selectall",true)
  326. }else{
  327. $('.scoreOpera img').attr("src" ,iconUnCheck)
  328. $('.scoreOpera').attr("data-selectall",false)
  329. }
  330. $('.tbody').html(str)
  331. $(".allCheck img").attr("src",iconUnCheck); //全选改为可用状态
  332. bindOrder();
  333. bindTaskCheckEvent();
  334. bindCancelTaskEvent();
  335. }
  336. function bindTaskCheckEvent(){
  337. $(".taskCheck img").unbind("click").click(function(){
  338. const code = $(this).attr("code");
  339. if($(this).is(".active")){
  340. let str = global_taskList.join(",")+",";
  341. str = str.replace(code+",","").replace(/^,|,$/,'');
  342. global_taskList = str.split(",");
  343. $(".allCheck img").attr('src',iconUnCheck).removeClass("active");
  344. $(this).attr('src',iconUnCheck).removeClass("active");
  345. }else{
  346. global_taskList.push(code);
  347. $(this).attr('src',iconCheck).addClass("active");
  348. }
  349. });
  350. //全选
  351. $(".allCheck img").unbind("click").click(function(){
  352. const checks = $(".taskCheck img");
  353. if($(this).is(".active")){
  354. $(this).attr("src",iconUnCheck).removeClass("active");
  355. checks.attr("src",iconUnCheck).removeClass("active");
  356. global_taskList=[];
  357. }else{
  358. $(this).attr("src",iconCheck).addClass("active");
  359. checks.attr("src",iconCheck).addClass("active");
  360. let codes = [];
  361. checks.map((i)=>{
  362. codes.push($(checks[i]).attr("code"));
  363. });
  364. global_taskList=codes;
  365. }
  366. console.log(global_taskList)
  367. });
  368. }
  369. //列表获取筛选值
  370. function getFilterData(){
  371. const obj = {};
  372. $(".filterBox input[code]").map((i,it)=>{
  373. obj[$(it).attr("code")]=$(it).val()
  374. })
  375. return obj;
  376. }
  377. //病历等级选择
  378. function bindStatusSelect(){
  379. $('.statusItem').on("click",function(){
  380. const statusItemName = $(this).attr("data-name")
  381. global_status = $(this).attr("data-id")
  382. $('.selectStatus i').html(statusItemName)
  383. $(".statusList").css("display", "none")
  384. $('.selectStatus').removeClass('unSelect')
  385. })
  386. }
  387. //病历等级选择
  388. function bindLeveldSelect(){
  389. $('.levelItem').on("click",function(){
  390. const levelItemName = $(this).attr("data-name")
  391. const levelItemItemId = $(this).attr("data-id")
  392. global_level =levelItemItemId
  393. $('.selectLevel i').html(levelItemName)
  394. $(".levelList").css("display", "none")
  395. //$(".selectLevel").append(`<img class="arrow" src=${iconDown} alt="下拉">`)
  396. })
  397. }
  398. //获取科室任务对应的列表
  399. function getSubDeptList(){
  400. post(api.getDept,{}).then(res =>{
  401. if(res.data.code == '0'){
  402. const deptList = res.data.data||[]
  403. rendeDeptList(deptList)
  404. }else{rendeDeptList([])}
  405. }).catch((e) =>{
  406. })
  407. }
  408. //科室列表
  409. function getDeptList(){
  410. post(api.getDeptList,{}).then(res =>{
  411. if(res.data.code == '0'){
  412. const deptList = res.data.data||[]
  413. rendeDeptList(deptList)
  414. }else{rendeDeptList([])}
  415. }).catch((e) =>{
  416. })
  417. }
  418. function rendeDeptList(deptList){
  419. if(deptList.length == 0){
  420. $('.deptList').html("")
  421. return
  422. }
  423. let str = `<li class="deptItem ellipsis" data-id=" " data-name="全部">全部</li>`;
  424. for(let i = 0; i < deptList.length; i++){
  425. str += `<li class="deptItem ellipsis" title=${deptList[i].deptName} data-id=${deptList[i].deptId} data-name=${deptList[i].deptName}> ${deptList[i].deptName}</li>`
  426. }
  427. $('.deptList').html(str)
  428. bindDeptSelect()
  429. }
  430. //科室选择
  431. function bindDeptSelect(){
  432. $('.deptItem').on("click",function(e){
  433. e.stopPropagation();
  434. const deptItemName = $(this).attr("data-name");
  435. let str = global_deptId.join(",")+",";
  436. const code=$(this).attr("data-id")
  437. if(!code.trim()){
  438. $(".deptItem").removeClass("active");
  439. global_deptId = [];
  440. global_deptName="";
  441. $('.selectDept i').text('全部')
  442. $('.selectDept').attr('title','全部')
  443. return;
  444. }
  445. if($(this).is(".active")){
  446. global_deptName = global_deptName.replace(deptItemName+",",'');
  447. str = str.replace(code+",","").replace(/^,|,$/,'');
  448. global_deptId = str.split(",");
  449. }else{
  450. global_deptName = global_deptName+deptItemName+",";
  451. global_deptId.push(code);
  452. }
  453. $(this).toggleClass("active");
  454. const name = global_deptName.replace(/,$/,'');
  455. $('.selectDept i').text(name)
  456. $('.selectDept').attr('title',name)
  457. })
  458. }
  459. function loading(){
  460. const str = `
  461. <div class="loadingBox">
  462. <div class="mask"></div>
  463. <img class="loadingImg" src=${loadingImg} alt="loading" />
  464. </div>
  465. `
  466. $("#mainBox", parent.document).append(str)
  467. }
  468. function hideLoading(){
  469. $("#mainBox .loadingBox", parent.document).remove()
  470. }
  471. function clearFilter(){
  472. const days = new Date().getDate()-1;
  473. let startDate = "-"+days+"d",endDate=new Date();
  474. $(".filterBox input").val("");
  475. data_desc=["leaveHospitalDate"];
  476. //默认日期为本月
  477. $( "#datepicker" ).datepicker({
  478. changeMonth: true,
  479. changeYear: true,
  480. dateFormat:"yy-mm-dd",
  481. }).datepicker( "setDate", startDate);
  482. $( "#datepicker2" ).datepicker({
  483. changeMonth: true,
  484. changeYear: true,
  485. dateFormat:"yy-mm-dd"
  486. }).datepicker( "setDate",endDate);
  487. $('.selectDept i').text('全部')
  488. $(".deptItem.active").removeClass("active");
  489. $(".deptList").css("display", "none")
  490. global_deptId=[];
  491. global_deptName="";
  492. $('.selectLevel i').html('全部')
  493. $(".levelList").css("display", "none")
  494. global_level="";
  495. $('.selectStatus i').html('未生成')
  496. $(".statusList").css("display", "none")
  497. global_status='0'
  498. $("th[code]").removeClass("asc desc")
  499. }
  500. //分页渲染
  501. function renderPagination(totalPage,activePage,totalNum){
  502. let str = `<span class="totalSum">共${totalPage}页/${totalNum}条数据</span><span class="prePage"><img class="arrowPage" src=${arrowLeft} /></span>`
  503. if(totalPage <= 6){
  504. for(let i = 1; i <= totalPage; i++){
  505. str += `<span class="pageNum ${'page'+i}" data-page=${i}>${i}</span>`
  506. }
  507. }else{
  508. if(activePage <= 3){ //选中页数小于4
  509. for(let i = 1; i <= 4; i++){
  510. str += `<span class="pageNum ${'page'+i}" data-page=${i}>${i}</span>`
  511. }
  512. str += `<span class="more" >...</span>`
  513. str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
  514. } else if(activePage > totalPage -3){
  515. str += `<span class="pageNum page1" data-page=1>1</span>`
  516. str += `<span class="more" >...</span>`
  517. str += `<span class="pageNum ${'page'+(totalPage-3)}" data-page=${totalPage -3}>${totalPage -3}</span>`
  518. str += `<span class="pageNum ${'page'+(totalPage-2)}" data-page=${totalPage -2}>${totalPage -2}</span>`
  519. str += `<span class="pageNum ${'page'+(totalPage-1)}" data-page=${totalPage -1}>${totalPage -1}</span>`
  520. str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
  521. } else {
  522. str += `<span class="pageNum page1" data-page=1>1</span>`
  523. str += `<span class="more" >...</span>`
  524. str += `<span class="pageNum ${'page'+(activePage -1)}" data-page=${activePage -1}>${activePage -1}</span>`
  525. str += `<span class="pageNum ${'page'+activePage}" data-page=${activePage}>${activePage}</span>`
  526. str += `<span class="pageNum ${'page'+(activePage +1)}" data-page=${activePage +1}>${activePage +1}</span>`
  527. str += `<span class="more" >...</span>`
  528. str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
  529. }
  530. }
  531. str += `<span class="nextPage"><img class="arrowPage" src=${arrowRight} /></span>`
  532. $('.pagination').html(str)
  533. $('.page' + activePage).addClass('activePage')
  534. $(".pageNum").on("click", function(e){
  535. const activePageNow = Number($(this).attr('data-page'))
  536. getTabData(activePageNow)
  537. // renderPagination(totalPage,activePageNow,totalNum)
  538. })
  539. $(".prePage").on("click", function(e){
  540. let activePageNow = Number($(".activePage").attr('data-page'))
  541. if(activePageNow > 1){
  542. activePageNow--
  543. getTabData(activePageNow)
  544. // renderPagination(totalPage,activePageNow,totalNum)
  545. }
  546. })
  547. $(".nextPage").on("click", function(e){
  548. let activePageNow = Number($(".activePage").attr('data-page'))
  549. if(activePageNow < totalPage){
  550. activePageNow++
  551. getTabData(activePageNow)
  552. // renderPagination(totalPage,activePageNow,totalNum)
  553. }
  554. })
  555. }