allotCheckTask.js 31 KB

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