allotCheckTask.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953
  1. const $ = require('jquery');
  2. require("../css/allotCheckTask.less");
  3. require('./modal.js');
  4. const {api,ywCheckApi} = require('./api.js')
  5. const {post,getCookie,emptyBox,listenScroll,getScoreTabList} = 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 iconRadio=require("./../images/radio.png")
  11. const iconUnRadio=require("./../images/unradio.png")
  12. const iconCalenBlue= require("./../images/icon_calen_blue.png")
  13. const iconCalenGrey= require("./../images/icon_calen_grey.png")
  14. const iconDown= require("./../images/arrow_down.png")
  15. const iconUp = require("./../images/arrow_up.png")
  16. const loadingImg = require("./../images/loading.gif")
  17. const arrowLeft= require("./../images/arrow_left.png")
  18. const arrowRight = require("./../images/arrow_right.png")
  19. listenScroll()
  20. let tabList = [], data_desc=["jobCreateTime"],data_asc=[],task_desc=["leaveHospitalDate"],task_asc=[];
  21. let global_DeptCheckers = [],global_Checkers={4:[],5:[],6:[]},
  22. global_CheckerId='',global_CheckerName='', //左边质检员选中id,name
  23. global_CheckerNumId='',global_CheckerNumName='', //左边质检员数字id,name
  24. global_checkerFilterName="",//左边核查员名字筛选
  25. global_DeptId='',//左边质控员科室筛选id
  26. global_DeptMId="", //左边质检员选中科室id
  27. global_DeptNumId='',//左边质检员数字点击科室id
  28. global_DeptAllId='', //右边任务科室筛选id(非科室任务才有)
  29. global_deptData = {},global_activeTabCode='0',
  30. global_TaskCodes=[],global_TaskDept=[],global_deleted=false,global_score='';
  31. let isPlacefile = getCookie('isPlacefile')||1
  32. /*if(isPlacefile != 1){
  33. data_desc=["behospital_date"]
  34. }*/
  35. $(function() {
  36. $(window.parent.document).find(".modaltip").hide();//切换页面过快时toast隐藏
  37. const checkAuth = getCookie('checkAuth');
  38. /*if(!checkAuth){
  39. $(".tabs").hide();
  40. toast("没有质控核查权限!");
  41. return
  42. }*/
  43. $("#filterToggler").click(function () {
  44. const text = $(this).text();
  45. $(".toggle-item").slideToggle();
  46. $(this).text(text === "收起筛选" ? "展开筛选" : "收起筛选").toggleClass("up");
  47. });
  48. const tabs = (checkAuth||'').replace(/[^456]/g,'');
  49. if(tabs.length===0){
  50. //$(".tabs").hide();
  51. toast("没有质控核查权限!");
  52. return;
  53. }else if(tabs.length>1){
  54. //多于一个权限,显示tab切换
  55. $(".tabs").show();
  56. const last = "456".replace(tabs,'');
  57. $(".tabs [data-code="+(last-4)+"]").parent().hide();
  58. }
  59. global_activeTabCode=tabs.substr(0,1)-4;
  60. $(".tabs [data-code="+global_activeTabCode+"]").addClass("active");
  61. if(global_activeTabCode=='0'){
  62. $(".patDeptFilter").hide();
  63. }
  64. //初始化日期
  65. $.datepicker.regional['zh-CN'] = {
  66. clearText: '清除',
  67. clearStatus: '清除已选日期',
  68. closeText: '关闭',
  69. closeStatus: '不改变当前选择',
  70. prevText: '<上月',
  71. prevStatus: '显示上月',
  72. prevBigText: '<<',
  73. prevBigStatus: '显示上一年',
  74. nextText: '下月>',
  75. nextStatus: '显示下月',
  76. nextBigText: '>>',
  77. nextBigStatus: '显示下一年',
  78. currentText: '今天',
  79. currentStatus: '显示本月',
  80. monthNames: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
  81. monthNamesShort: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
  82. yearNamesShort: ['一月','二月','三月','四月','五月','六月', '七月','八月','九月','十月','十一月','十二月'],
  83. monthStatus: '选择月份',
  84. yearStatus: '选择年份',
  85. weekHeader: '周',
  86. weekStatus: '年内周次',
  87. dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
  88. dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
  89. dayNamesMin: ['日','一','二','三','四','五','六'],
  90. dayStatus: '设置 DD 为一周起始',
  91. dateStatus: '选择 m月 d日, DD',
  92. dateFormat: 'yy-mm-dd',
  93. firstDay: 1,
  94. initStatus: '请选择日期',
  95. isRTL: false};
  96. $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
  97. const days = new Date().getDate()-1;
  98. let startDate = "-"+days+"d",endDate=new Date();
  99. $( "#datepicker" ).datepicker({
  100. changeMonth: true,
  101. changeYear: true,
  102. dateFormat:"yy-mm-dd",
  103. }).datepicker( "setDate", startDate);
  104. $( "#datepicker2" ).datepicker({
  105. changeMonth: true,
  106. changeYear: true,
  107. dateFormat:"yy-mm-dd",
  108. }).datepicker( "setDate",endDate);
  109. $( "#datepicker3" ).datepicker({
  110. changeMonth: true,
  111. changeYear: true,
  112. dateFormat:"yy-mm-dd",
  113. });
  114. $( "#datepicker4" ).datepicker({
  115. changeMonth: true,
  116. changeYear: true,
  117. dateFormat:"yy-mm-dd",
  118. });
  119. $('.datapickerBox').append(`<img class="iconCalen" src=${iconCalenGrey} />`)
  120. $('.iconCalen').on("mouseenter", function(e){
  121. $(this).attr("src", iconCalenBlue)
  122. })
  123. $('.iconCalen').on("mouseleave", function(e){
  124. $(this).attr("src", iconCalenGrey)
  125. })
  126. $('.iconCalen').on("click", function(e){
  127. $(this).parent().find("input").focus()
  128. })
  129. //保存分配
  130. $(".save-btn").click(function(){
  131. allotTask(0);
  132. })
  133. //菜单选中状态
  134. $(".menu .page", parent.document).removeClass("active")
  135. $(parent.document).find(".menu .page[code=YH-ZKHC-FPHCRW]").addClass("active")
  136. //表格容器高度计算
  137. setBoxHeight();
  138. $(window).resize(function() {
  139. setBoxHeight();
  140. });
  141. //切换tab
  142. $(".tabBox .tabs button").on("click",(e)=>{
  143. const me = e.target;
  144. global_checkerFilterName=''; //切换tab清空核查员筛选
  145. global_activeTabCode = $(me).attr("data-code");
  146. $(".tabBox .tabs button").removeClass("active");
  147. $(me).addClass("active");
  148. if(global_activeTabCode=='0'){
  149. $(".patDeptFilter").hide();
  150. }else{
  151. $(".patDeptFilter").show();
  152. }
  153. clearCheckerFilter();
  154. clearFilter();
  155. //刷新质控员、任务列表
  156. //getCheckerList();
  157. //const data = global_Checkers[+global_activeTabCode+4];
  158. getCheckerList();
  159. getTabData(1);
  160. /*rendeDeptList();
  161. rendeCheckerList();
  162. renderCheckerTable();*/
  163. });
  164. //任务筛选
  165. $(".filter").on("click", function(e){
  166. const behosDateStart1 = $("#datepicker").val() //生成日期
  167. const behosDateEnd1 = $("#datepicker2").val()
  168. const behosDateStartTime1 = new Date(behosDateStart1).getTime()
  169. const behosDateEndTime1 = new Date(behosDateEnd1).getTime()
  170. const behosDateStart = $("#datepicker3").val() //出院日期
  171. const behosDateEnd = $("#datepicker4").val()
  172. const behosDateStartTime = new Date(behosDateStart).getTime()
  173. const behosDateEndTime = new Date(behosDateEnd).getTime()
  174. console.log(222,behosDateStartTime1,behosDateEndTime1)
  175. if(behosDateStartTime1 > behosDateEndTime1){
  176. $.alerModal({"message":'生成日期开始时间不能大于结束时间~',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
  177. return
  178. }
  179. if(behosDateStartTime > behosDateEndTime){
  180. $.alerModal({"message":'出院日期开始时间不能大于结束时间~',type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
  181. return
  182. }
  183. data_desc = ["jobCreateTime"];
  184. $("th[code]").removeClass("asc desc")
  185. $("th[code='jobCreateTime']").addClass('desc');
  186. getTabData(1)
  187. })
  188. //重置
  189. $(".abnormalClear").on("click", function(e){
  190. clearFilter();
  191. getTabData(1)
  192. })
  193. //关闭弹窗事件
  194. $(".modal-container .close").click(function(){
  195. $(".modal-container").hide();
  196. global_DeptNumId='';
  197. global_CheckerNumId='';
  198. global_CheckerNumName='';
  199. if(global_deleted){
  200. //移除后关闭弹窗时清空质控员选中状态:质控员id/name/科室id及右侧选中任务code
  201. //并刷新左侧和右侧列表
  202. global_CheckerId='';
  203. global_CheckerName='';
  204. global_DeptMId='';
  205. global_TaskCodes=[];
  206. getCheckerList();
  207. getTabData(1);
  208. }
  209. });
  210. //科室选择
  211. $('.selectDept').on("click", function(e){
  212. e.stopPropagation()
  213. $(".checkerList ").css("display", "none")
  214. $(".deptAllList ").css("display","none")
  215. $(".scoreList ").css("display","none")
  216. $(".selectChecker .arrow").attr("src",iconDown)
  217. $(".deptList ").css("display","block")
  218. })
  219. //筛选分值选择
  220. $('.selectScore').on("click", function(e){
  221. e.stopPropagation();
  222. $(".deptList ").css("display","none")
  223. $(".checkerList ").css("display", "none")
  224. $(".deptAllList ").css("display","none")
  225. $(".selectDept .arrow").attr("src",iconDown)
  226. $(".selectScore .arrow").attr("src",iconDown)
  227. $(".scoreList ").css("display","block")
  228. })
  229. //病人科室选择
  230. $('.selectAllDept').on("click", function(e){
  231. e.stopPropagation()
  232. $(".checkerList ").css("display", "none")
  233. $(".scoreList").css("display", "none")
  234. $(".deptList ").css("display", "none")
  235. $(".deptAllList ").css("display","block")
  236. })
  237. //质控员选择
  238. $('.selectChecker').on("click", function(e){
  239. e.stopPropagation()
  240. $(".deptList ").css("display", "none")
  241. $(".scoreList").css("display", "none")
  242. $(".checkerList").css("display","block")
  243. })
  244. //关闭下拉事件
  245. $(document).on("click", function(){
  246. $(".deptList ").css("display", "none")
  247. $(".deptAllList ").css("display", "none")
  248. $(".checkerList").css("display", "none")
  249. $(".scoreList").css("display", "none")
  250. $(".del-pop").remove();
  251. /*$(".scoreDept .arrow").attr("src",iconDown)
  252. $(".selectDept .arrow").attr("src",iconDown)
  253. $(".selectAllDept .arrow").attr("src",iconDown)
  254. $(".selectChecker .arrow").attr("src",iconDown)*/
  255. })
  256. getScoreTabList((data)=>{rendeScoreList(data)})
  257. //获取科室列表
  258. getAllDeptList()
  259. //获取核查人员列表
  260. getCheckerList()
  261. getTabData(1)
  262. });
  263. //高度适应
  264. function setBoxHeight() {
  265. const ht = window.innerHeight;
  266. let at = 70;
  267. if($(".tabs:visible").length){ //tab显示时高度
  268. at=0;
  269. }
  270. $('.table-cont').height(ht - (309-at) + 'px');
  271. $(".patient-table-cont").height(ht - (323-at) + 'px');
  272. $('.overAuto').height(ht - (249-at) + 'px');
  273. }
  274. //病人列表获取筛选值
  275. function getFilterData(){
  276. const obj = {};
  277. $(".overAuto.fr .filterBox input[code]").map((i,it)=>{
  278. obj[$(it).attr("code")]=$(it).val()
  279. })
  280. return obj;
  281. }
  282. //获取分配核查任务列表数据
  283. function getTabData(activePage){
  284. const filterData = getFilterData();
  285. let dept = '';
  286. if(global_activeTabCode!='0'){ //除科室任务外,待分配任务列表科室参数只受筛选项影响
  287. dept = global_DeptAllId;
  288. }else{
  289. dept = global_DeptMId||global_DeptId||global_DeptAllId;
  290. }
  291. const deptList=dept.trim()?[dept]:[];
  292. const param = {
  293. current:activePage,
  294. asc:data_asc, //升序
  295. desc:data_desc, //降序
  296. size: 15,
  297. jobType:global_activeTabCode, //0-科室任务 1-院级 2-质控科
  298. ...filterData,
  299. deptList:deptList,
  300. values:global_score.trim()?[global_score]:[],
  301. endTime:filterData.endTime+" 23:59:59"
  302. };
  303. $('.pagination').html("");
  304. $('.patientTable .tbody').html(emptyBox('努力加载中...','',8))
  305. return post(ywCheckApi.getAllotCheckList,param).then(res =>{
  306. if(res.data.code == '0'){
  307. const data = res.data.data||{};
  308. tabList = data.records;
  309. const totalPage = data.pages;
  310. const totalNum = data.total;
  311. renderTab(tabList)
  312. renderPagination(totalPage,Number(activePage),totalNum)
  313. if(totalPage > 0){
  314. renderPagination(totalPage,Number(activePage),totalNum)
  315. } else{
  316. $('.pagination').html("")
  317. }
  318. }else{
  319. $.alerModal({"message":res.data.msg,type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
  320. }
  321. }).catch((e) =>{
  322. })
  323. }
  324. function clearCheckerFilter(){
  325. $('.selectDept i').text('全部')
  326. $('.selectAllDept i').text('全部')
  327. $(".deptList").css("display", "none")
  328. $(".deptAllList").css("display", "none")
  329. $('.selectChecker i').text('全部')
  330. $(".checkerList").css("display", "none")
  331. global_DeptMId="";
  332. global_DeptId="";
  333. global_CheckerId="";
  334. global_CheckerName="";
  335. }
  336. function clearFilter(){
  337. $(".overAuto.fr input").val("");
  338. $('.selectAllDept i').text('全部')
  339. $('.selectAllDept').attr('title','全部')
  340. $(".deptAllList").css("display", "none")
  341. $('.selectScore i').html('全部')
  342. $(".scoreList").css("display", "none")
  343. global_score='';
  344. global_DeptAllId="";
  345. /*if(isPlacefile != 1){
  346. data_desc=["behospital_date"]
  347. }*/
  348. data_asc=[];
  349. //默认日期为本月
  350. const days = new Date().getDate()-1;
  351. let startDate = "-"+days+"d",endDate=new Date();
  352. $( "#datepicker" ).datepicker({
  353. changeMonth: true,
  354. changeYear: true,
  355. dateFormat:"yy-mm-dd",
  356. }).datepicker( "setDate", startDate);
  357. $( "#datepicker2" ).datepicker({
  358. changeMonth: true,
  359. changeYear: true,
  360. dateFormat:"yy-mm-dd"
  361. }).datepicker( "setDate",endDate);
  362. $( "#datepicker3" ).datepicker({
  363. changeMonth: true,
  364. changeYear: true,
  365. dateFormat:"yy-mm-dd",
  366. });
  367. $( "#datepicker4" ).datepicker({
  368. changeMonth: true,
  369. changeYear: true,
  370. dateFormat:"yy-mm-dd"
  371. });
  372. data_desc=["jobCreateTime"]
  373. $(".patientTable th[code]").removeClass("asc desc")
  374. $(".patientTable th[code='jobCreateTime']").addClass('desc');
  375. }
  376. //病人列表排序事件
  377. function bindOrder(){
  378. $(".patientTable th[code]").off("click").on("click",function(e){
  379. const code=$(this).attr("code");
  380. if(data_asc[0]===code){
  381. data_desc=[code];
  382. data_asc=[];
  383. $(".patientTable th[code]").removeClass("asc desc");
  384. $(this).addClass("desc");
  385. }else{
  386. data_desc=[];
  387. data_asc=[code];
  388. $(".patientTable th[code]").removeClass("asc desc");
  389. $(this).addClass("asc");
  390. }
  391. getTabData(1);
  392. // console.log(code)
  393. });
  394. }
  395. //已分配列表排序事件
  396. function bindTaskOrder(){
  397. $(".taskTable th[code]").off("click").on("click",function(e){
  398. const code=$(this).attr("code");
  399. if(task_asc[0]===code){
  400. task_desc=[code];
  401. task_asc=[];
  402. $(".taskTable th[code]").removeClass("asc desc");
  403. $(this).addClass("desc");
  404. }else{
  405. task_desc=[];
  406. task_asc=[code];
  407. $(".taskTable th[code]").removeClass("asc desc");
  408. $(this).addClass("asc");
  409. }
  410. getTasksList();
  411. // console.log(code)
  412. });
  413. }
  414. //筛选分值下拉
  415. function rendeScoreList(list){
  416. if(list.length == 0){
  417. $('.scoreList').html("")
  418. return
  419. }
  420. let str = `<li class="scoreItem ellipsis" data-id=" " data-name="全部">全部</li>`;
  421. for(let i = 0; i < list.length; i++){
  422. str += `<li class="scoreItem ellipsis" data-id=${list[i]} data-name=${list[i]}> ${list[i]}</li>`
  423. }
  424. $('.scoreList').html(str)
  425. bindScoreSelect()
  426. }
  427. function bindScoreSelect(){
  428. $('.scoreItem').on("click",function(){
  429. const scoreItemName = $(this).attr("data-name")
  430. const scoreItemItemId = $(this).attr("data-id")
  431. global_score =scoreItemItemId;
  432. $('.selectScore i').html(scoreItemName)
  433. $(".scoreList").css("display", "none")
  434. })
  435. }
  436. //质控员列表渲染
  437. function renderCheckerTable(){
  438. //console.log(global_DeptId)
  439. const totalArr = global_DeptId.trim()?global_DeptCheckers[global_DeptId]:global_Checkers[+global_activeTabCode+4];
  440. let data = totalArr;
  441. if(global_checkerFilterName){
  442. data = (totalArr||[]).filter((it)=>global_checkerFilterName===it.doctorName);
  443. }
  444. let str = ``,code="";
  445. global_CheckerId="";
  446. if(!data||data.length===0){
  447. $('.checkerTable .tbody').html(emptyBox(null,5))
  448. //if(!noTasksUpdate){getTabData(1);}
  449. // initScroll("qcList","YX",1)
  450. return;
  451. }
  452. //获取任务列表数据
  453. //if(!noTasksUpdate){getTabData(1);}
  454. const titles = $(".checkerTable .tabTitle th[valCode]");
  455. for(let i = 0; i < data.length; i++){
  456. const item = data[i]
  457. str += `
  458. <tr data-index=${i}>
  459. <td class="operaItem checkerRadio textCenter" code="${item.doctorId}" data-dept=${item.deptId} data-name="${item.doctorName}"><img src="${iconUnRadio}" alt=""></td>
  460. `
  461. for(let i=0;i<titles.length;i++){
  462. code=$(titles[i]).attr('valCode');
  463. if(code==="jobNum"){
  464. str += `<td class="textCenter"><a class="job-num" data-index=${i} data-dept=${item.deptId} data-id="${item.doctorId}" data-name="${item.doctorName}">${ item[code]}</a></td>`
  465. }else{
  466. str += `<td class="textCenter"><span data-index=${i} class="dot-over" title="${ item[code]}">${ item[code]}</span></td>`
  467. }
  468. }
  469. str += "</tr>"
  470. }
  471. $('.checkerTable .tbody').html(str);
  472. selectCheckerTb();
  473. bindTaskNumEvent();
  474. }
  475. //选中质控员
  476. function selectCheckerTb(){
  477. $(".checkerRadio").click(function(){
  478. global_CheckerId=$(this).attr("code");
  479. global_CheckerName=$(this).attr("data-name");
  480. global_DeptMId=$(this).attr("data-dept");
  481. if(global_activeTabCode=='0'){
  482. global_DeptAllId="";
  483. getTabData(1)
  484. }
  485. $(".checkerRadio img").attr('src',iconUnRadio).removeClass('active');
  486. $(this).find("img").attr('src',iconRadio).addClass("active");
  487. });
  488. }
  489. //选中任务
  490. function selectTaskTb(){
  491. $(".taskCheck").unbind("click").click(function(){
  492. const id=$(this).attr("code");
  493. const did=$(this).attr("deptId");
  494. const it =$(this).find("img");
  495. const codes = global_TaskCodes.join(",")+",";
  496. const depts=global_TaskDept.join(",")+",";
  497. if(it.is(".active")){
  498. $(this).find("img").attr('src',iconUnCheck);
  499. $(".allCheck img").attr('src',iconUnCheck).removeClass("active");console.log(codes)
  500. global_TaskCodes = codes.replace(id+",","").replace(/^,|,$/,'').split(",");
  501. global_TaskDept = depts.replace(did+",","").replace(/^,|,$/,'').split(",");
  502. }else{
  503. $(this).find("img").attr('src',iconCheck);
  504. global_TaskCodes.push(id);
  505. global_TaskDept.push(did);
  506. }
  507. it.toggleClass('active');
  508. });
  509. //全选
  510. $(".allCheck img").unbind("click").click(function(){
  511. const checks = $(".taskCheck img");
  512. if($(this).is(".active")){
  513. $(this).attr("src",iconUnCheck).removeClass("active");
  514. checks.attr("src",iconUnCheck).removeClass("active");
  515. global_TaskCodes=[];
  516. global_TaskDept=[];
  517. }else{
  518. $(this).attr("src",iconCheck).addClass("active");
  519. checks.attr("src",iconCheck).addClass("active");
  520. let codes = [],depts=[];
  521. checks.map((i)=>{
  522. codes.push($(checks[i]).parent().attr("code"));
  523. depts.push($(checks[i]).parent().attr("deptid"))
  524. });
  525. global_TaskCodes=codes;
  526. global_TaskDept=depts;
  527. }
  528. console.log(global_TaskCodes)
  529. });
  530. }
  531. //待分配任务列表渲染
  532. function renderTab(data){
  533. let str = ``,code="";
  534. global_TaskCodes=[];
  535. global_TaskDept=[];
  536. if(!data||data.length===0){
  537. $('.patientTable .tbody').html(emptyBox(null,8))
  538. // initScroll("qcList","YX",1)
  539. return;
  540. }
  541. const titles = $(".patientTable .tabTitle th[valCode]");
  542. for(let i = 0; i < data.length; i++){
  543. const item = data[i]
  544. str += `
  545. <tr data-index=${i}>
  546. <td class="operaItem taskCheck textCenter" code="${item.behospitalCode}" deptId="${item.behospitalDeptId}"><img src="${iconUnCheck}" alt=""></td>`;
  547. for(let i=0;i<titles.length;i++){
  548. code=$(titles[i]).attr('valCode');
  549. str += `<td class="textCenter"><span data-index=${i}>${ item[code] || "-"}<span></td>`
  550. }
  551. str += "</tr>"
  552. }
  553. $('.patientTable .tbody').html(str)
  554. $(".allCheck img").attr("src",iconUnCheck); //全选改为可用状态
  555. selectTaskTb();
  556. bindOrder()
  557. }
  558. //任务数点击事件
  559. function bindTaskNumEvent(){
  560. $(".job-num").unbind("click").click(function(){
  561. global_CheckerNumId = $(this).attr("data-id");
  562. global_CheckerNumName=$(this).attr("data-name");
  563. global_DeptNumId=$(this).attr("data-dept");
  564. $(".modal-container").show();
  565. global_deleted=false;
  566. getTasksList();
  567. })
  568. }
  569. //获取全部科室数据
  570. function getAllDeptList(){
  571. post(api.getDeptList,{}).then(res =>{
  572. if(res.data.code == '0'){
  573. const deptList = res.data.data||[]
  574. rendeAllDeptList(deptList)
  575. }else{rendeAllDeptList([])}
  576. }).catch((e) =>{
  577. })
  578. }
  579. function getCheckerList(){
  580. post(ywCheckApi.getCheckUserMap,{jobType:+global_activeTabCode+4}).then(res =>{
  581. if(res.data.code == '0'){
  582. const list = res.data.data||{};
  583. global_deptData = list;
  584. formatDeptChecker(list);
  585. }else{rendeCheckerList([])}
  586. }).catch((e) =>{
  587. })
  588. }
  589. //获取质控员任务列表
  590. function getTasksList(){
  591. post(ywCheckApi.getTaskByUserId,{
  592. jobType:global_activeTabCode,
  593. checkId:global_CheckerNumId,
  594. deptList:global_DeptNumId.trim()?[global_DeptNumId]:[],
  595. asc:task_asc,
  596. desc:task_desc,
  597. size:500,
  598. current:1}
  599. ).then(res =>{
  600. if(res.data.code == '0'){
  601. const list = res.data.data||{};
  602. renderTaskTable(list.records);
  603. }else{rendeCheckerList()}
  604. }).catch((e) =>{
  605. })
  606. }
  607. //质控员任务列表渲染
  608. function renderTaskTable(data) {
  609. let str = ``, code = "";
  610. if (!data || data.length === 0) {
  611. $('.taskTable .tbody').html(emptyBox(null, 8))
  612. return;
  613. }
  614. const titles = $(".taskTable .tabTitle th[valCode]");
  615. const docHide = "name,behospitalDept,attendingDoctor,jobDistributorName"; //过长...的字段
  616. for (let i = 0; i < data.length; i++) {
  617. const item = data[i];
  618. str += `<tr data-index=${i}>`;
  619. for (let i = 0; i < titles.length; i++) {
  620. code = $(titles[i]).attr('valCode');
  621. if(docHide.indexOf(code)>-1){
  622. str += `<td class="textCenter"><span class="dot-hide" data-index=${i} title="${ item[code]}">${ item[code] || "-"}</span></td>`
  623. }else if(code === 'leaveHospitalDate'){
  624. str += `<td class="textCenter"><span class="dot-long-hide" data-index=${i} title="${ item[code]}">${ item[code] || "-"}</span></td>`
  625. }else{
  626. str += `<td class="textCenter"><span data-index=${i} title="${ item[code]}">${ item[code] || "-"}</span></td>`
  627. }
  628. }
  629. str+=`<td class="operaItem textCenter"><a class="delete ${item.delFlag?'':'disable'}" deptId="${item.behospitalDept}" code="${item.behospitalCode}">移除</a></td><tr>`
  630. }
  631. $('.taskTable .tbody').html(str);
  632. bindDeleteEvent();
  633. bindTaskOrder();
  634. }
  635. //移除任务事件
  636. function bindDeleteEvent(){
  637. const dom = `<div class="del-pop">
  638. <div class="pop-body">
  639. <div class="pop-title">确定移除该任务吗?</div>
  640. <div class="pop-btns">
  641. <button class="del-confirm">确定</button>
  642. <button class="cancel">取消</button>
  643. </div>
  644. </div></div>`;
  645. $(".taskTable .delete:not(.disable)").unbind("click").click(function(e){
  646. e.stopPropagation();
  647. global_TaskCodes=[$(this).attr("code")];
  648. global_TaskDept=[$(this).attr("deptId")];
  649. $(".del-pop").remove();
  650. $(dom).insertAfter($(this)).show();
  651. $(".del-pop .cancel").unbind("click").click(function(ev){
  652. ev.stopPropagation();
  653. $(".del-pop").hide();
  654. });
  655. $(".del-pop .del-confirm").unbind("click").click(function(ev){
  656. ev.stopPropagation();
  657. global_deleted=true;
  658. $(".del-pop").hide();
  659. allotTask(1);
  660. });
  661. });
  662. }
  663. //科室筛选质控员
  664. function formatDeptChecker(list){
  665. const k=+global_activeTabCode +4;
  666. const allCheckArrs = list[k]||[];
  667. global_Checkers={4:[],5:[],6:[]}
  668. allCheckArrs.map((it)=>{
  669. global_DeptCheckers[it.deptId]=it.deptcheckUsers;
  670. global_Checkers[k].push(...it.deptcheckUsers);
  671. });
  672. rendeDeptList();
  673. rendeCheckerList();
  674. //院级任务时科室“全部”不遍历
  675. if(+global_activeTabCode===2){
  676. //已有科室筛选,则按科室筛选,无则全部,院级全部为-1
  677. global_DeptId=global_DeptId.trim()?global_DeptId:'-1';
  678. }
  679. renderCheckerTable();
  680. }
  681. //渲染科室列表
  682. function rendeAllDeptList(list){
  683. if(list.length == 0){
  684. $(".deptAllList").html("")
  685. return
  686. }
  687. let str = `<li class="deptAllItem ellipsis" data-id="" data-name="全部">全部</li>`;
  688. for(let i = 0; i < list.length; i++){
  689. str += `<li class="deptAllItem ellipsis" title=${list[i]['deptName']} data-id=${list[i]['deptId']} data-name=${list[i].deptName}> ${list[i].deptName}</li>`
  690. }
  691. $(".deptAllList").html(str)
  692. bindAllDeptSelect()
  693. }
  694. //渲染当前用户科室列表
  695. function rendeDeptList(){
  696. const list = global_deptData[+global_activeTabCode+4];
  697. if(!list||list.length == 0){
  698. $(".deptList").html("")
  699. return
  700. }
  701. let str = `<li class="deptItem ellipsis" data-id="" data-name="全部">全部</li>`;
  702. if(+global_activeTabCode===2){
  703. str=``;
  704. }
  705. for(let i = 0; i < list.length; i++){
  706. str += `<li class="deptItem ellipsis" title=${list[i]['deptName']} data-id=${list[i]['deptId']} data-name=${list[i].deptName}> ${list[i].deptName}</li>`
  707. }
  708. $(".deptList").html(str)
  709. bindDeptSelect()
  710. }
  711. //质控员列表渲染
  712. function rendeCheckerList(lis){
  713. const data = lis?lis:global_Checkers[+global_activeTabCode+4];
  714. const list = delRepeatNames(data);
  715. if(list.length == 0){
  716. $(".checkerList").html("")
  717. return
  718. }
  719. let str = `<li class="checkerItem ellipsis" data-id=" " data-name="全部">全部</li>`;
  720. for(let i = 0; i < list.length; i++){
  721. str += `<li class="checkerItem ellipsis" data-id=${list[i]['doctorId']} data-dept=${list[i]['deptId']} data-name=${list[i].doctorName}> ${list[i].doctorName}</li>`
  722. }
  723. $(".checkerList").html(str)
  724. bindCheckerSelect()
  725. }
  726. function delRepeatNames(arr){
  727. let obj = {},name="",newArr=[];
  728. arr.map((it)=>{
  729. name = it.doctorName;
  730. if(!obj[name]){
  731. newArr.push(it);
  732. }
  733. obj[name]=true;
  734. });
  735. //console.log(newArr)
  736. return newArr;
  737. }
  738. //质控员列表科室选择
  739. function bindDeptSelect(){
  740. $('.deptItem').on("mousedown",function(){
  741. const deptItemName = $(this).attr("data-name")
  742. global_DeptId = $(this).attr("data-id")
  743. if(global_activeTabCode=='0'){
  744. global_DeptAllId="";
  745. }
  746. global_DeptMId="";
  747. global_checkerFilterName='';
  748. $('.selectDept i').text(deptItemName)
  749. $('.selectDept').attr('title',deptItemName)
  750. $(".deptList").css("display", "none")
  751. //质控员选择清空
  752. $('.selectChecker i').text('全部')
  753. $('.selectChecker').attr('title','全部')
  754. const data = +global_DeptId?global_DeptCheckers[global_DeptId]:global_Checkers[+global_activeTabCode+4];
  755. console.log(data,global_DeptId)
  756. rendeCheckerList(data||[]);
  757. renderCheckerTable();
  758. global_activeTabCode=='0'&&getTabData(1);
  759. })
  760. }
  761. //病人列表科室选择
  762. function bindAllDeptSelect(){
  763. $('.deptAllItem').on("mousedown",function(){
  764. const deptItemName = $(this).attr("data-name")
  765. //global_DeptId=""; //7950bug
  766. //global_DeptMId="";
  767. global_DeptAllId = $(this).attr("data-id");
  768. $('.selectAllDept i').text(deptItemName)
  769. $('.selectAllDept').attr('title',deptItemName)
  770. $(".deptAllList").css("display", "none")
  771. //getTabData(1)
  772. })
  773. }
  774. //质控员选择
  775. function bindCheckerSelect(){
  776. $('.checkerItem').on("mousedown",function(){
  777. const itemName = $(this).attr("data-name")
  778. const itemId = $(this).attr("data-id")
  779. $('.selectChecker i').text(itemName)
  780. $('.selectChecker').attr('title',itemName)
  781. $(".checkerList").css("display", "none")
  782. if(global_activeTabCode=='0'){
  783. global_DeptAllId="";
  784. }
  785. const totalArr = global_DeptId.trim()?global_DeptCheckers[global_DeptId]:global_Checkers[+global_activeTabCode+4];
  786. if(!itemId.trim()){
  787. global_checkerFilterName='';
  788. renderCheckerTable();
  789. return
  790. }
  791. //const arr = (totalArr||[]).filter((it)=>itemName===it.doctorName);
  792. global_checkerFilterName=itemName.trim();
  793. renderCheckerTable();
  794. })
  795. }
  796. function loading(){
  797. const str = `
  798. <div class="loadingBox">
  799. <div class="mask"></div>
  800. <img class="loadingImg" src=${loadingImg} alt="loading" />
  801. </div>
  802. `
  803. $("#mainBox", parent.document).append(str)
  804. }
  805. function hideLoading(){
  806. $("#mainBox .loadingBox", parent.document).remove()
  807. }
  808. function allotTask(flag){
  809. if(flag!==1&&!global_CheckerId){
  810. toast("请先选择质控员");
  811. return;
  812. }
  813. if((flag!==1&&(!global_TaskCodes.join("").trim())||global_TaskCodes.length===0)){
  814. toast("请选择至少一个任务");
  815. return;
  816. }
  817. const param = {
  818. checkId:flag===1?global_CheckerNumId:global_CheckerId,
  819. checkName:flag===1?global_CheckerNumName:global_CheckerName,
  820. distributionType:flag,
  821. behospitalCodes:global_TaskCodes,
  822. jobType:global_activeTabCode,
  823. checkDept:global_DeptNumId||global_DeptMId||global_DeptId,
  824. behospitalDepts:global_TaskDept,
  825. }
  826. post(ywCheckApi.allotTask,param).then(res =>{
  827. if(res.data.code == '0'){
  828. //分配成功后清空两侧列表选中状态
  829. global_TaskCodes=[];
  830. if(flag){
  831. //移除时更新已分配任务列表弹窗数据,
  832. // 不刷新核查人和待核查列表,关闭移除弹窗后再更新,避免第1个移除后id被清除
  833. getTasksList();
  834. }else{
  835. global_CheckerId='';
  836. global_CheckerName='';
  837. global_DeptMId='';
  838. getCheckerList();
  839. getTabData(1);
  840. }
  841. toast("操作成功");
  842. }else{
  843. toast(res.data.msg||'保存分配失败,请重试~');
  844. }
  845. }).catch((e) =>{
  846. })
  847. }
  848. //气泡提示
  849. function toast(msg) {
  850. $.alerModal({"message":msg,type:"tip",time:'1000',isFather: true, fatherWrapper: $("#mainBox", parent.document)});
  851. }
  852. //分页渲染
  853. function renderPagination(totalPage,activePage,totalNum){
  854. let str = `<span class="totalSum">共${totalPage}页/${totalNum}条数据</span><span class="prePage"><img class="arrowPage" src=${arrowLeft} /></span>`
  855. if(totalPage <= 6){
  856. for(let i = 1; i <= totalPage; i++){
  857. str += `<span class="pageNum ${'page'+i}" data-page=${i}>${i}</span>`
  858. }
  859. }else{
  860. if(activePage <= 3){ //选中页数小于4
  861. for(let i = 1; i <= 4; i++){
  862. str += `<span class="pageNum ${'page'+i}" data-page=${i}>${i}</span>`
  863. }
  864. str += `<span class="more" >...</span>`
  865. str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
  866. } else if(activePage > totalPage -3){
  867. str += `<span class="pageNum page1" data-page=1>1</span>`
  868. str += `<span class="more" >...</span>`
  869. str += `<span class="pageNum ${'page'+(totalPage-3)}" data-page=${totalPage -3}>${totalPage -3}</span>`
  870. str += `<span class="pageNum ${'page'+(totalPage-2)}" data-page=${totalPage -2}>${totalPage -2}</span>`
  871. str += `<span class="pageNum ${'page'+(totalPage-1)}" data-page=${totalPage -1}>${totalPage -1}</span>`
  872. str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
  873. } else {
  874. str += `<span class="pageNum page1" data-page=1>1</span>`
  875. str += `<span class="more" >...</span>`
  876. str += `<span class="pageNum ${'page'+(activePage -1)}" data-page=${activePage -1}>${activePage -1}</span>`
  877. str += `<span class="pageNum ${'page'+activePage}" data-page=${activePage}>${activePage}</span>`
  878. str += `<span class="pageNum ${'page'+(activePage +1)}" data-page=${activePage +1}>${activePage +1}</span>`
  879. str += `<span class="more" >...</span>`
  880. str += `<span class="pageNum ${'page'+totalPage}" data-page=${totalPage}>${totalPage}</span>`
  881. }
  882. }
  883. str += `<span class="nextPage"><img class="arrowPage" src=${arrowRight} /></span>`
  884. $('.pagination').html(str)
  885. $('.page' + activePage).addClass('activePage')
  886. $(".pageNum").on("click", function(e){
  887. const activePageNow = Number($(this).attr('data-page'))
  888. getTabData(activePageNow)
  889. // renderPagination(totalPage,activePageNow,totalNum)
  890. })
  891. $(".prePage").on("click", function(e){
  892. let activePageNow = Number($(".activePage").attr('data-page'))
  893. if(activePageNow > 1){
  894. activePageNow--
  895. getTabData(activePageNow)
  896. // renderPagination(totalPage,activePageNow,totalNum)
  897. }
  898. })
  899. $(".nextPage").on("click", function(e){
  900. let activePageNow = Number($(".activePage").attr('data-page'))
  901. if(activePageNow < totalPage){
  902. activePageNow++
  903. getTabData(activePageNow)
  904. // renderPagination(totalPage,activePageNow,totalNum)
  905. }
  906. })
  907. }