index.vue 103KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212
  1. <template>
  2. <div class="main-contain">
  3. <div class="position">
  4. <bread-crumb :crumbs="crumbs"></bread-crumb>
  5. <div style="display:flex;align-items:center">
  6. <el-button type="primary" @click="setting">设置</el-button>
  7. <el-button type="primary" @click="DeleteStaffSchedule">清除</el-button>
  8. <el-button type="primary" @click="copyStaffSchedule">复制</el-button>
  9. <el-button type="primary" icon="el-icon-printer" @click="toPrint">打印</el-button>
  10. <el-button type="primary" icon="el-icon-printer" @click="exportList">导出</el-button>
  11. </div>
  12. </div>
  13. <div class="app-container">
  14. <div class="cell clearfix">
  15. <el-input
  16. size="small"
  17. style="width: 150px;"
  18. class="filter-item"
  19. v-model.trim="keywords"
  20. placeholder="请输入医护人员姓名"
  21. @keyup.enter.native='toSearch'
  22. />
  23. <el-button
  24. size="small"
  25. class="filter-item"
  26. type="primary"
  27. icon="el-icon-search"
  28. @click="toSearch"
  29. >搜索</el-button
  30. >
  31. <el-select style="margin-left:10px;width:150px;" v-model="typeValue" placeholder="请选择" @change="changeOption">
  32. <el-option
  33. v-for="item in options"
  34. :key="item.value"
  35. :label="item.label"
  36. :value="item.value">
  37. </el-option>
  38. </el-select>
  39. <el-button @click="lastclick" type="text" style="margin:0 10px;">&lt;上一周({{ weekNum - 1 }})</el-button>
  40. <div class="dateBox">{{ weekDayArr[0] }}-{{ weekDayArr[6] }}({{ weekNum }})</div>
  41. <el-button @click="nextclick" type="text" style="margin:0 10px;">下一周({{ weekNum + 1 }})&gt;</el-button>
  42. </div>
  43. <div class="schedulingTable" style="display:flex;justify-content: space-between;">
  44. <div style="width: 70%">
  45. <el-table :data="tableData" border
  46. :header-cell-style="{backgroundColor: 'rgb(245, 247, 250)', color: '#606266'}"
  47. :row-style="{ color: '#303133' }" @cell-click="clickThis" :cell-style="tableCellStyle"
  48. @cell-mouse-enter="hoverMouse" @cell-mouse-leave="leavemouse">
  49. <!-- @cell-mouse-enter="hoverMouse" @cell-mouse-leave="leavemouse" -->
  50. <el-table-column prop="name" label="医护姓名" style="width:16%" align="center">
  51. <template slot-scope="scope">
  52. <span>{{scope.row.user_name}}</span>
  53. </template>
  54. </el-table-column>
  55. <el-table-column :label="'周一\n(' + weekDayArr[0] + ')'" style="width:200px" align="center">
  56. <template slot-scope="scope">
  57. <div v-if="name==scope.row.user_name&&column_lie =='周一' ? true:false">
  58. <div class="del_table_btns" v-show="scope.row.user_name=='合计'? false : true" >
  59. <el-button type="danger" size="mini" icon="el-icon-close"
  60. circle @click.stop="toClick(getClassId(scope.row.user_name,1))"
  61. ></el-button>
  62. </div>
  63. </div>
  64. <div @click="hangdleClick(scope.row,scope.$index,0)">
  65. <el-dropdown trigger="click" @command="changeSchedule" >
  66. <span class="el-dropdown-link" v-if='getClassAttributes(scope.row.user_name,1) == 2' style="color:red">
  67. <span>{{ getClass(scope.row.user_name,1) }}</span><i v-if="getTimestamp(weekDayArr[0])>=timeNow && scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  68. </span>
  69. <span class="el-dropdown-link" v-else>
  70. <span>{{ getClass(scope.row.user_name,1) }}</span><i v-if="getTimestamp(weekDayArr[0])>=timeNow && scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  71. </span>
  72. <el-dropdown-menu slot="dropdown" >
  73. <el-dropdown-item :command="item.id" icon="el-icon-plus" :disabled="getTimestamp(weekDayArr[0])<timeNow?true:false" v-for="(item,index) in schedulelist" :key="index">{{item.class_name}}</el-dropdown-item>
  74. </el-dropdown-menu>
  75. </el-dropdown>
  76. </div>
  77. </template>
  78. </el-table-column>
  79. <el-table-column prop="name" :label="'周二\n(' + weekDayArr[1] + ')'" style="width:14%" align="center">
  80. <template slot-scope="scope">
  81. <div v-if="name==scope.row.user_name&&column_lie =='周二' ? true:false">
  82. <div class="del_table_btns" v-show="scope.row.user_name=='合计'? false : true">
  83. <el-button type="danger" size="mini" icon="el-icon-close"
  84. circle @click.stop="toClick(getClassId(scope.row.user_name,2))"
  85. ></el-button>
  86. </div>
  87. </div>
  88. <div @click="hangdleClick(scope.row,scope.$index,1)">
  89. <el-dropdown trigger="click" @command="changeSchedule">
  90. <span class="el-dropdown-link" v-if='getClassAttributes(scope.row.user_name,2) == 2' style="color:red">
  91. <span>{{ getClass(scope.row.user_name,2) }}</span><i v-if="getTimestamp(weekDayArr[1])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  92. </span>
  93. <span class="el-dropdown-link" v-else>
  94. <span>{{ getClass(scope.row.user_name,2) }}</span><i v-if="getTimestamp(weekDayArr[1])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  95. </span>
  96. <el-dropdown-menu slot="dropdown" >
  97. <el-dropdown-item :command="item.id" icon="el-icon-plus" :disabled="getTimestamp(weekDayArr[1])<timeNow?true:false" v-for="(item,index) in schedulelist" :key="index">{{item.class_name}}</el-dropdown-item>
  98. </el-dropdown-menu>
  99. </el-dropdown>
  100. </div>
  101. </template>
  102. </el-table-column>
  103. <el-table-column prop="name" :label="'周三\n(' + weekDayArr[2] + ')'" style="width:14%" align="center">
  104. <template slot-scope="scope">
  105. <div v-if="name==scope.row.user_name&&column_lie =='周三' ? true:false">
  106. <div class="del_table_btns" v-show="scope.row.user_name=='合计'? false : true">
  107. <el-button type="danger" size="mini" icon="el-icon-close"
  108. circle @click.stop="toClick(getClassId(scope.row.user_name,3))"
  109. ></el-button>
  110. </div>
  111. </div>
  112. <div @click="hangdleClick(scope.row,scope.$index,2)">
  113. <el-dropdown trigger="click" @command="changeSchedule">
  114. <span class="el-dropdown-link" v-if='getClassAttributes(scope.row.user_name,3) == 2' style="color:red">
  115. <span>{{ getClass(scope.row.user_name,3) }}</span><i v-if="getTimestamp(weekDayArr[2])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  116. </span>
  117. <span class="el-dropdown-link" v-else>
  118. <span>{{ getClass(scope.row.user_name,3) }}</span><i v-if="getTimestamp(weekDayArr[2])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  119. </span>
  120. <el-dropdown-menu slot="dropdown" >
  121. <el-dropdown-item :command="item.id" icon="el-icon-plus" :disabled="getTimestamp(weekDayArr[2])<timeNow?true:false" v-for="(item,index) in schedulelist" :key="index">{{item.class_name}}</el-dropdown-item>
  122. </el-dropdown-menu>
  123. </el-dropdown>
  124. </div>
  125. </template>
  126. </el-table-column>
  127. <el-table-column prop="name" :label="'周四\n(' + weekDayArr[3] + ')'" style="width:14%" align="center">
  128. <template slot-scope="scope">
  129. <div v-if="name==scope.row.user_name&&column_lie =='周四' ? true:false">
  130. <div class="del_table_btns" v-show="scope.row.user_name=='合计'? false : true">
  131. <el-button type="danger" size="mini" icon="el-icon-close"
  132. circle @click.stop="toClick(getClassId(scope.row.user_name,4))"
  133. ></el-button>
  134. </div>
  135. </div>
  136. <div @click="hangdleClick(scope.row,scope.$index,3)">
  137. <el-dropdown trigger="click" @command="changeSchedule">
  138. <span class="el-dropdown-link" v-if='getClassAttributes(scope.row.user_name,4) == 2' style="color:red">
  139. <span>{{ getClass(scope.row.user_name,4) }}</span><i v-if="getTimestamp(weekDayArr[3])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  140. </span>
  141. <span class="el-dropdown-link" v-else>
  142. <span>{{ getClass(scope.row.user_name,4) }}</span><i v-if="getTimestamp(weekDayArr[3])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  143. </span>
  144. <el-dropdown-menu slot="dropdown" >
  145. <el-dropdown-item :command="item.id" icon="el-icon-plus" :disabled="getTimestamp(weekDayArr[3])<timeNow?true:false" v-for="(item,index) in schedulelist" :key="index">{{item.class_name}}</el-dropdown-item>
  146. </el-dropdown-menu>
  147. </el-dropdown>
  148. </div>
  149. </template>
  150. </el-table-column>
  151. <el-table-column prop="name" :label="'周五\n(' + weekDayArr[4] + ')'" style="width:14%" align="center">
  152. <template slot-scope="scope">
  153. <div v-if="name==scope.row.user_name&&column_lie =='周五' ? true:false">
  154. <div class="del_table_btns" v-show="scope.row.user_name=='合计'? false : true">
  155. <el-button type="danger" size="mini" icon="el-icon-close"
  156. circle @click.stop="toClick(getClassId(scope.row.user_name,5))"
  157. ></el-button>
  158. </div>
  159. </div>
  160. <div @click="hangdleClick(scope.row,scope.$index,4)">
  161. <el-dropdown trigger="click" @command="changeSchedule">
  162. <span class="el-dropdown-link" v-if='getClassAttributes(scope.row.user_name,5) == 2' style="color:red">
  163. <span>{{ getClass(scope.row.user_name,5) }}</span><i v-if="getTimestamp(weekDayArr[4])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  164. </span>
  165. <span class="el-dropdown-link" v-else>
  166. <span>{{ getClass(scope.row.user_name,5) }}</span><i v-if="getTimestamp(weekDayArr[4])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  167. </span>
  168. <el-dropdown-menu slot="dropdown" >
  169. <el-dropdown-item :command="item.id" icon="el-icon-plus" :disabled="getTimestamp(weekDayArr[4])<timeNow?true:false" v-for="(item,index) in schedulelist" :key="index">{{item.class_name}}</el-dropdown-item>
  170. </el-dropdown-menu>
  171. </el-dropdown>
  172. </div>
  173. </template>
  174. </el-table-column>
  175. <el-table-column prop="name" :label="'周六\n(' + weekDayArr[5] + ')'" style="width:14%" align="center">
  176. <template slot-scope="scope">
  177. <div v-if="name==scope.row.user_name&&column_lie =='周六' ? true:false">
  178. <div class="del_table_btns" v-show="scope.row.user_name=='合计'? false : true">
  179. <el-button type="danger" size="mini" icon="el-icon-close"
  180. circle @click.stop="toClick(getClassId(scope.row.user_name,6))"
  181. ></el-button>
  182. </div>
  183. </div>
  184. <div @click="hangdleClick(scope.row,scope.$index,5)">
  185. <el-dropdown trigger="click" @command="changeSchedule">
  186. <span class="el-dropdown-link" v-if='getClassAttributes(scope.row.user_name,6) == 2' style="color:red">
  187. <span>{{ getClass(scope.row.user_name,6) }}</span><i v-if="getTimestamp(weekDayArr[5])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  188. </span>
  189. <span class="el-dropdown-link" v-else>
  190. <span>{{ getClass(scope.row.user_name,6) }}</span><i v-if="getTimestamp(weekDayArr[5])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  191. </span>
  192. <el-dropdown-menu slot="dropdown" >
  193. <el-dropdown-item :command="item.id" icon="el-icon-plus" :disabled="getTimestamp(weekDayArr[5])<timeNow?true:false" v-for="(item,index) in schedulelist" :key="index">{{item.class_name}}</el-dropdown-item>
  194. </el-dropdown-menu>
  195. </el-dropdown>
  196. </div>
  197. </template>
  198. </el-table-column>
  199. <el-table-column prop="name" :label="'周日\n(' + weekDayArr[6] + ')'" style="width:14%" align="center">
  200. <template slot-scope="scope">
  201. <div v-if="name==scope.row.user_name&&column_lie =='周日' ? true:false">
  202. <div class="del_table_btns" v-show="scope.row.user_name=='合计'? false : true">
  203. <el-button type="danger" size="mini" icon="el-icon-close"
  204. circle @click.stop="toClick(getClassId(scope.row.user_name,0))"
  205. ></el-button>
  206. </div>
  207. </div>
  208. <div @click="hangdleClick(scope.row,scope.$index,6)">
  209. <el-dropdown trigger="click" @command="changeSchedule">
  210. <span class="el-dropdown-link" v-if='getClassAttributes(scope.row.user_name,0) == 2' style="color:red">
  211. <span>{{ getClass(scope.row.user_name,0) }}</span><i v-if="getTimestamp(weekDayArr[6])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  212. </span>
  213. <span class="el-dropdown-link" v-else>
  214. <span>{{ getClass(scope.row.user_name,0) }}</span><i v-if="getTimestamp(weekDayArr[6])>=timeNow&&scope.row.admin_user_id!=1000000?true:false" class="el-icon-arrow-down el-icon--right"></i>
  215. </span>
  216. <el-dropdown-menu slot="dropdown" >
  217. <el-dropdown-item :command="item.id" icon="el-icon-plus" :disabled="getTimestamp(weekDayArr[6])<timeNow?true:false" v-for="(item,index) in schedulelist" :key="index">{{item.class_name}}</el-dropdown-item>
  218. </el-dropdown-menu>
  219. </el-dropdown>
  220. </div>
  221. </template>
  222. </el-table-column>
  223. </el-table>
  224. </div>
  225. <div class="classBox">
  226. <div class="classTitle">班种</div>
  227. <div class="classMain">
  228. <div class="classMainBox">
  229. <p v-for="(item,index) in schedulelist" :key="index">
  230. {{item.class_name}}&nbsp;({{item.timeone_start}}~{{item.timeone_type}}{{item.timeone_end}} <span v-if="item.timetwo_start!=''">{{item.timetwo_start}}~{{item.timetwo_type}}{{item.timetwo_end}}</span> )
  231. </p>
  232. </div>
  233. <el-checkbox style="text-align:center;padding-bottom: 10px;" v-model="isChecked" @change="toContinuous">连续排班</el-checkbox>
  234. </div>
  235. </div>
  236. </div>
  237. <el-dialog
  238. title="复制排班"
  239. width="600px"
  240. :visible.sync="newVisible"
  241. >
  242. <el-form :model="form" ref="form" label-width="90px" :rules="rules">
  243. <el-form-item label="复制到 : " required prop="copyWeek">
  244. <el-select v-model="form.copyWeek" placeholder="请选择">
  245. <el-option
  246. v-for="item in typeOptions"
  247. :key="item.value"
  248. :label="item.label"
  249. :value="item.value">
  250. </el-option>
  251. </el-select>
  252. </el-form-item>
  253. </el-form>
  254. <div slot="footer" class="dialog-footer">
  255. <el-button @click="newVisible=false">取 消</el-button>
  256. <el-button v-loading="copySchLoading" type="primary" @click="submitAction('form')">保 存</el-button>
  257. </div>
  258. </el-dialog>
  259. <el-dialog
  260. title="设置"
  261. width="800px"
  262. :visible.sync="nurseVisible"
  263. :before-close="_close"
  264. >
  265. <div>
  266. <el-tabs v-model="activeName">
  267. <el-tab-pane label="护士" name="nurse">
  268. <el-table
  269. :data="nurseTableData"
  270. border
  271. height="250"
  272. style="width: 100%">
  273. <el-table-column align="center" prop="name" label="姓名" width="180">
  274. <template slot-scope="scope">
  275. {{scope.row.user_name}}
  276. </template>
  277. </el-table-column>
  278. <el-table-column align="center" prop="date" label="职称" width="180">
  279. <template slot-scope="scope">
  280. <span v-if="scope.row.user_title == 1">医士</span>
  281. <span v-if="scope.row.user_title == 2">医师</span>
  282. <span v-if="scope.row.user_title == 3">住院医师</span>
  283. <span v-if="scope.row.user_title == 4">主治医师</span>
  284. <span v-if="scope.row.user_title == 5">副主任医师</span>
  285. <span v-if="scope.row.user_title == 6">主任医师</span>
  286. <span v-if="scope.row.user_title == 7">护士</span>
  287. <span v-if="scope.row.user_title == 8">护师</span>
  288. <span v-if="scope.row.user_title == 9">主管护师</span>
  289. <span v-if="scope.row.user_title == 10">副主任护师</span>
  290. <span v-if="scope.row.user_title == 11">主任护师</span>
  291. <span v-if="scope.row.user_title == 12">运营专员</span>
  292. <span v-if="scope.row.user_title == 13">运营主管</span>
  293. </template>
  294. </el-table-column>
  295. <el-table-column
  296. align="center"
  297. label="排序">
  298. <template slot-scope="scope">
  299. <el-input v-model="scope.row.sort" @change="changeSort(scope.row)" placeholder="请输入内容"></el-input>
  300. </template>
  301. </el-table-column>
  302. <el-table-column
  303. align="center"
  304. label="是否排班">
  305. <template slot-scope="scope">
  306. <el-radio-group v-model="scope.row.is_sort" @change="changeRadio(scope.row)">
  307. <el-radio :label="1">是</el-radio>
  308. <el-radio :label="0">否</el-radio>
  309. </el-radio-group>
  310. </template>
  311. </el-table-column>
  312. </el-table>
  313. </el-tab-pane>
  314. <el-tab-pane label="医生" name="doctor">
  315. <el-table
  316. :data="doctorTableData"
  317. border
  318. height="250"
  319. style="width: 100%">
  320. <el-table-column
  321. align="center"
  322. prop="name"
  323. label="姓名"
  324. width="180">
  325. <template slot-scope="scope">
  326. {{scope.row.user_name}}
  327. </template>
  328. </el-table-column>
  329. <el-table-column align="center" prop="date" label="职称" width="180">
  330. <template slot-scope="scope">
  331. <span v-if="scope.row.user_title == 1">医士</span>
  332. <span v-if="scope.row.user_title == 2">医师</span>
  333. <span v-if="scope.row.user_title == 3">住院医师</span>
  334. <span v-if="scope.row.user_title == 4">主治医师</span>
  335. <span v-if="scope.row.user_title == 5">副主任医师</span>
  336. <span v-if="scope.row.user_title == 6">主任医师</span>
  337. <span v-if="scope.row.user_title == 7">护士</span>
  338. <span v-if="scope.row.user_title == 8">护师</span>
  339. <span v-if="scope.row.user_title == 9">主管护师</span>
  340. <span v-if="scope.row.user_title == 10">副主任护师</span>
  341. <span v-if="scope.row.user_title == 11">主任护师</span>
  342. <span v-if="scope.row.user_title == 12">运营专员</span>
  343. <span v-if="scope.row.user_title == 13">运营主管</span>
  344. </template>
  345. </el-table-column>
  346. <el-table-column
  347. align="center"
  348. label="排序">
  349. <template slot-scope="scope">
  350. <el-input v-model="scope.row.sort" placeholder="请输入内容" @change="changeSort(scope.row)"></el-input>
  351. </template>
  352. </el-table-column>
  353. <el-table-column
  354. align="center"
  355. label="是否排班">
  356. <template slot-scope="scope">
  357. <el-radio-group v-model="scope.row.is_sort" @change="changeRadio(scope.row)">
  358. <el-radio :label="1">是</el-radio>
  359. <el-radio :label="0">否</el-radio>
  360. </el-radio-group>
  361. </template>
  362. </el-table-column>
  363. </el-table>
  364. </el-tab-pane>
  365. </el-tabs>
  366. </div>
  367. </el-dialog>
  368. </div>
  369. <!-- <el-dialog
  370. title="导出排班"
  371. :visible.sync="exportDialogVisible"
  372. width="30%">
  373. <span>
  374. <div class="block">
  375. <span class="demonstration">月份:</span>
  376. <el-date-picker
  377. v-model="value1"
  378. type="week"
  379. format="yyyy 第 WW 周"
  380. placeholder="选择周">
  381. </el-date-picker>
  382. </div>
  383. </span>
  384. <span slot="footer" class="dialog-footer">
  385. <el-button @click="dialogVisible = false">取 消</el-button>
  386. <el-button type="primary" @click="exportList">确 定</el-button>
  387. </span>
  388. </el-dialog> -->
  389. </div>
  390. </template>
  391. <script>
  392. const moment = require('moment')
  393. import BreadCrumb from '@/xt_pages/components/bread-crumb'
  394. import { getDoctorList,getScheduleList,addSchedule,getStaffScheduleList,getNextWeekList,getScheduleByDoctorId,toSearchScheduleList,DeleteStaffSchedule,copyStaffSchedule,UpdateContinusSchedule,SaveNurseSort,SaveIsSchedule,DeleteStaffScheduleById } from '@/api/doctorSchedule'
  395. import { constants } from 'crypto'
  396. export default {
  397. components:{
  398. BreadCrumb
  399. },
  400. data(){
  401. return{
  402. copySchLoading:false,
  403. crumbs: [
  404. { path: false, name: '医护排班' },
  405. { path: '/medicalScheduling/index', name: '医护排班' }
  406. ],
  407. keywords:'',
  408. options: [{
  409. value: '0',
  410. label: '全部'
  411. }, {
  412. value: '2',
  413. label: '医生'
  414. }, {
  415. value: '3',
  416. label: '护士'
  417. }],
  418. typeValue:'0',
  419. tableData: [],
  420. isChecked:true,
  421. schedulelist:[],
  422. weekNum:'',
  423. weekDayArr:[],
  424. todayDate:'',
  425. clen:7,
  426. nowYear: new Date().getFullYear(),
  427. schedule_week:0,
  428. docobj:{},
  429. class_name:"",
  430. doctorlist:[],
  431. schedule_date:"",
  432. newVisible:false,
  433. typeOptions:[],
  434. timeOptions:[],
  435. copyWeek:'',
  436. weekList: [],
  437. currentFirstDate1: '',
  438. form:{
  439. copyWeek:"",
  440. },
  441. rules: {
  442. copyWeek: [{ required: true, message: "请选择复制时间段", trigger: "blur" }],
  443. },
  444. timeNow:0,
  445. arrZero:[],
  446. arrOne:[],
  447. arrTwo:[],
  448. arrThree:[],
  449. arrFour:[],
  450. arrFive:[],
  451. arrSix:[],
  452. arrSeven:[],
  453. nurseVisible:false,
  454. activeName:'nurse',
  455. radio:'1',
  456. nurseTableData:[],
  457. doctorTableData:[],
  458. exportDialogVisible:false,
  459. month_time:"",
  460. name:'',
  461. column_lie:''
  462. }
  463. },
  464. methods:{
  465. search(){},
  466. // toPrint(){
  467. // this.exportDialogVisible = true
  468. // },
  469. toPrint(){
  470. this.$router.push({
  471. path: '/medicalScheduling/schedule/print?starttime='+this.getTimestamp(this.weekDayArr[0])+"&endtime="+this.getTimestamp(this.weekDayArr[6])+"&weekArr="+ this.weekDayArr+"&typeValue="+this.typeValue,
  472. // query: { date: date }
  473. })
  474. },
  475. getDoctorList(){
  476. getDoctorList().then(response=>{
  477. if(response.data.state == 1){
  478. var list = response.data.data.list
  479. // console.log("医护列表",list)
  480. // this.tableData = list
  481. // let arr = []
  482. // list.map(item => {
  483. // if(item.is_sort == 1){
  484. // arr.push(item)
  485. // }
  486. // })
  487. // this.doctorlist = arr
  488. //获取班种列表
  489. this.getStaffScheduleList()
  490. var doctorlist = response.data.data.doctorlist
  491. for(let i=0;i<doctorlist.length;i++){
  492. if(doctorlist[i].sort == 0){
  493. doctorlist[i].sort = ""
  494. }
  495. }
  496. console.log('doctorlist',doctorlist)
  497. this.doctorTableData = doctorlist
  498. var nurselist = response.data.data.nurselist
  499. for(let i=0;i<nurselist.length;i++){
  500. if(nurselist[i].sort == 0){
  501. nurselist[i].sort = ""
  502. }
  503. }
  504. this.nurseTableData = nurselist
  505. }
  506. })
  507. },
  508. getScheduleList(){
  509. getScheduleList().then(response=>{
  510. if(response.data.state == 1){
  511. var schedulelist = response.data.data.scheduleList
  512. // console.log("schedulelist",schedulelist)
  513. for(let i=0;i<schedulelist.length;i++){
  514. if(schedulelist[i].timeone_type == 1){
  515. schedulelist[i].timeone_type = "当日"
  516. }
  517. if(schedulelist[i].timeone_type == 2){
  518. schedulelist[i].timeone_type = "次日"
  519. }
  520. if(schedulelist[i].timetwo_type == 1){
  521. schedulelist[i].timetwo_type = "当日"
  522. }
  523. if(schedulelist[i].timetwo_type == 2){
  524. schedulelist[i].timetwo_type = "次日"
  525. }
  526. }
  527. this.schedulelist = schedulelist
  528. }
  529. })
  530. },
  531. hangdleClick(val,index,num){
  532. console.log("val",val)
  533. this.docobj = val
  534. if(this.getTimestamp(this.weekDayArr[num]) < this.timeNow){
  535. this.$message.error("过去日期不可以编辑")
  536. return
  537. }
  538. },
  539. clickThis(row, column, cell, event){
  540. var week = (column.label).split('');
  541. var weeks = week[0]+week[1]
  542. if(weeks == "周日"){
  543. this.schedule_week = 0
  544. this.schedule_date = this.weekDayArr[6]
  545. }
  546. if(weeks == "周一"){
  547. this.schedule_week = 1
  548. this.schedule_date = this.weekDayArr[0]
  549. }
  550. if(weeks=="周二"){
  551. this.schedule_week = 2
  552. this.schedule_date = this.weekDayArr[1]
  553. }
  554. if(weeks=="周三"){
  555. this.schedule_week = 3
  556. this.schedule_date = this.weekDayArr[2]
  557. }
  558. if(weeks=="周四"){
  559. this.schedule_week = 4
  560. this.schedule_date = this.weekDayArr[3]
  561. }
  562. if(weeks == "周五"){
  563. this.schedule_week = 5
  564. this.schedule_date = this.weekDayArr[4]
  565. }
  566. if(weeks== "周六"){
  567. this.schedule_week = 6
  568. this.schedule_date = this.weekDayArr[5]
  569. }
  570. },
  571. changeSchedule(id){
  572. var class_name = ""
  573. for(let i=0;i<this.schedulelist.length;i++){
  574. if(id == this.schedulelist[i].id){
  575. class_name = this.schedulelist[i].class_name
  576. }
  577. }
  578. let arr = [...this.tableData]
  579. // console.log("arr===",arr)
  580. for(let i=0;i<arr.length;i++){
  581. if(this.docobj.id == arr[i].id){
  582. arr[i].class_name = class_name
  583. arr[i].class_index = this.schedule_week
  584. }
  585. }
  586. // console.log("arr",arr)
  587. this.tableData = arr
  588. const params = {
  589. doctor_id:this.docobj.admin_user_id,
  590. doctor_type:this.docobj.user_type,
  591. schedule_type:id,
  592. schedule_week:this.schedule_week,
  593. start_time:this.getTimestamp(this.weekDayArr[0]),
  594. end_time:this.getTimestamp(this.weekDayArr[6]),
  595. schedule_date:this.getTimestamp(this.schedule_date)
  596. }
  597. // console.log("params",params)
  598. addSchedule(params).then(response=>{
  599. if(response.data.state == 1){
  600. var schedule = response.data.data.schedule
  601. // console.log("schedule",schedule)
  602. this.$message.success("保存成功")
  603. this.getStaffScheduleList()
  604. }
  605. })
  606. },
  607. formatDate(date){
  608. var year = date.getFullYear()+'.'
  609. var month = (date.getMonth()+1)+'.';
  610. var day = date.getDate();
  611. return year+month+day
  612. },
  613. formatDateTwo(date){
  614. var year = date.getFullYear()+'.'
  615. var month = (date.getMonth()+1)+'.';
  616. var day = date.getDate();
  617. return year+month+day
  618. },
  619. addDate(date,n){
  620. date.setDate(date.getDate()+n);
  621. return date;
  622. },
  623. //
  624. setDate(date){
  625. var week = date.getDay()-1;
  626. date = this.addDate(date,week*-1);
  627. this.currentFirstDate = new Date(date);
  628. this.currentDate = new Date(date)
  629. for(var i = 0;i<this.clen; i++){
  630. this.weekDayArr.push(this.formatDate(i==0 ? date : this.addDate(date,1)))
  631. }
  632. },
  633. //上一周
  634. lastclick(){
  635. this.weekDayArr=[]
  636. this.setDate(this.addDate(this.currentFirstDate,-7));
  637. if (this.weekNum == 1) {
  638. let year = this.nowYear - 1
  639. let month = 12
  640. let date = 31
  641. this.weekNum = this.getYearWeek(year, month, date)
  642. this.nowYear = this.nowYear - 1
  643. }
  644. this.weekNum = this.weekNum - 1
  645. this.getNextWeekList()
  646. },
  647. //下一周
  648. nextclick(){
  649. this.weekDayArr=[]
  650. this.setDate(this.addDate(this.currentFirstDate,7));
  651. this.weekNum = this.weekNum + 1
  652. if (this.weekNum == 53) {
  653. let year = this.nowYear + 1
  654. let month = 1
  655. let date = 1
  656. this.weekNum = this.getYearWeek(year, month, date)
  657. this.nowYear = this.nowYear + 1
  658. }
  659. this.getNextWeekList()
  660. },
  661. getYearWeek(year,month,date){
  662. /*
  663. dateNow是当前日期
  664. dateFirst是当年第一天
  665. dataNumber是当前日期是今年第多少天
  666. 用dataNumber + 当前年的第一天的周差距的和在除以7就是本年第几周
  667. */
  668. let dateNow = new Date(year, parseInt(month) - 1, date);
  669. let dateFirst = new Date(year, 0, 1);
  670. let dataNumber = Math.round((dateNow.valueOf() - dateFirst.valueOf()) / 86400000);
  671. return Math.ceil((dataNumber + ((dateFirst.getDay() + 1) - 1)) / 7);
  672. },
  673. getTimestamp(time) { //把时间日期转成时间戳
  674. return (new Date(time)).getTime() / 1000
  675. },
  676. beforeHandleCommand(item,row){
  677. return {
  678. 'command': item,
  679. 'row': row
  680. }
  681. },
  682. //获取所有医护排班数据
  683. getStaffScheduleList(){
  684. const params = {
  685. start_time:this.getTimestamp(this.weekDayArr[0]),
  686. end_time:this.getTimestamp(this.weekDayArr[6])
  687. }
  688. getStaffScheduleList(params).then(response=>{
  689. if(response.data.state == 1){
  690. var staffList = response.data.data.staffList
  691. console.log("获取所有排班",staffList)
  692. var sevenStr = ""
  693. var oneStr = ""
  694. var twoStr = ""
  695. var threeStr = ""
  696. var fourStr = ""
  697. var fiveStr = ""
  698. var sixStr = ""
  699. this.arrZero = []
  700. this.arrOne = []
  701. this.arrTwo = []
  702. this.arrThree = []
  703. this.arrFour = []
  704. this.arrFive = []
  705. this.arrSix = []
  706. for(let i=0;i<staffList.length;i++){
  707. if(staffList[i].schedule_week == 0){
  708. staffList[i].class_index = 0
  709. var arr = []
  710. this.arrZero.push(staffList[i].class_name)
  711. for(let i=0;i<this.arrZero.length;i++){
  712. if(this.arrZero[i]!=''){
  713. arr.push(this.arrZero[i])
  714. }
  715. }
  716. var countedNames = arr.reduce(function (allNames, name) {
  717. if (name in allNames) {
  718. allNames[name]++;
  719. }
  720. else {
  721. allNames[name] = 1;
  722. }
  723. return allNames;
  724. }, {});
  725. let objKey = Object.keys(countedNames)
  726. let objVal = Object.values(countedNames)
  727. var zeroStr = ''
  728. objKey.map((item,index) => {
  729. let objVal = Object.values(countedNames)
  730. zeroStr += item + objVal[index] + '\n'
  731. })
  732. sevenStr = zeroStr
  733. }
  734. if(staffList[i].schedule_week == 1){
  735. staffList[i].class_index = 1
  736. var arr = []
  737. this.arrOne.push(staffList[i].class_name)
  738. for(let i=0;i<this.arrOne.length;i++){
  739. if(this.arrOne[i]!=''){
  740. arr.push(this.arrOne[i])
  741. }
  742. }
  743. var countedNames = arr.reduce(function (allNames, name) {
  744. if (name in allNames) {
  745. allNames[name]++;
  746. }
  747. else {
  748. allNames[name] = 1;
  749. }
  750. return allNames;
  751. }, {});
  752. let objKey = Object.keys(countedNames)
  753. let objVal = Object.values(countedNames)
  754. let strOne = ''
  755. objKey.map((item,index) => {
  756. let objVal = Object.values(countedNames)
  757. strOne += item + objVal[index] + '\n'
  758. })
  759. oneStr = strOne
  760. }
  761. if(staffList[i].schedule_week == 2){
  762. staffList[i].class_index = 2
  763. var arr = []
  764. this.arrTwo.push(staffList[i].class_name)
  765. for(let i=0;i<this.arrTwo.length;i++){
  766. if(this.arrTwo[i]!=''){
  767. arr.push(this.arrTwo[i])
  768. }
  769. }
  770. var countedNames = arr.reduce(function (allNames, name) {
  771. if (name in allNames) {
  772. allNames[name]++;
  773. }
  774. else {
  775. allNames[name] = 1;
  776. }
  777. return allNames;
  778. }, {});
  779. let objKey = Object.keys(countedNames)
  780. let objVal = Object.values(countedNames)
  781. let strTwo = ''
  782. objKey.map((item,index) => {
  783. let objVal = Object.values(countedNames)
  784. strTwo += item + objVal[index] + '\n'
  785. })
  786. twoStr = strTwo
  787. }
  788. if(staffList[i].schedule_week == 3){
  789. staffList[i].class_index = 3
  790. var arr = []
  791. this.arrThree.push(staffList[i].class_name)
  792. for(let i=0;i<this.arrThree.length;i++){
  793. if(this.arrThree[i]!=''){
  794. arr.push(this.arrThree[i])
  795. }
  796. }
  797. var countedNames = arr.reduce(function (allNames, name) {
  798. if (name in allNames) {
  799. allNames[name]++;
  800. }
  801. else {
  802. allNames[name] = 1;
  803. }
  804. return allNames;
  805. }, {});
  806. let objKey = Object.keys(countedNames)
  807. let objVal = Object.values(countedNames)
  808. let strThree = ''
  809. objKey.map((item,index) => {
  810. let objVal = Object.values(countedNames)
  811. strThree += item + objVal[index] + '\n'
  812. })
  813. threeStr = strThree
  814. }
  815. if(staffList[i].schedule_week == 4){
  816. staffList[i].class_index = 4
  817. var arr = []
  818. this.arrFour.push(staffList[i].class_name)
  819. for(let i=0;i<this.arrFour.length;i++){
  820. if(this.arrFour[i]!=''){
  821. arr.push(this.arrFour[i])
  822. }
  823. }
  824. var countedNames = arr.reduce(function (allNames, name) {
  825. if (name in allNames) {
  826. allNames[name]++;
  827. }
  828. else {
  829. allNames[name] = 1;
  830. }
  831. return allNames;
  832. }, {});
  833. let objKey = Object.keys(countedNames)
  834. let objVal = Object.values(countedNames)
  835. let strFour = ''
  836. objKey.map((item,index) => {
  837. let objVal = Object.values(countedNames)
  838. strFour += item + objVal[index] + '\n'
  839. })
  840. fourStr = strFour
  841. }
  842. if(staffList[i].schedule_week == 5){
  843. staffList[i].class_index = 5
  844. var arr = []
  845. this.arrFive.push(staffList[i].class_name)
  846. for(let i=0;i<this.arrFive.length;i++){
  847. if(this.arrFive[i]!=''){
  848. arr.push(this.arrFive[i])
  849. }
  850. }
  851. var countedNames = arr.reduce(function (allNames, name) {
  852. if (name in allNames) {
  853. allNames[name]++;
  854. }
  855. else {
  856. allNames[name] = 1;
  857. }
  858. return allNames;
  859. }, {});
  860. let objKey = Object.keys(countedNames)
  861. let objVal = Object.values(countedNames)
  862. let strFive = ''
  863. objKey.map((item,index) => {
  864. let objVal = Object.values(countedNames)
  865. strFive += item + objVal[index] + '\n'
  866. })
  867. fiveStr = strFive
  868. }
  869. if(staffList[i].schedule_week == 6){
  870. staffList[i].class_index = 6
  871. var arr = []
  872. this.arrSix.push(staffList[i].class_name)
  873. for(let i=0;i<this.arrSix.length;i++){
  874. if(this.arrSix[i]!=''){
  875. arr.push(this.arrSix[i])
  876. }
  877. }
  878. var countedNames = arr.reduce(function (allNames, name) {
  879. if (name in allNames) {
  880. allNames[name]++;
  881. }
  882. else {
  883. allNames[name] = 1;
  884. }
  885. return allNames;
  886. }, {});
  887. let objKey = Object.keys(countedNames)
  888. let objVal = Object.values(countedNames)
  889. let strSix = ''
  890. objKey.map((item,index) => {
  891. let objVal = Object.values(countedNames)
  892. strSix += item + objVal[index] + '\n'
  893. })
  894. sixStr = strSix
  895. }
  896. }
  897. console.log("staffList",staffList)
  898. let tempArr = [], newArr = []
  899. for (let i = 0; i < staffList.length; i++) {
  900. if (tempArr.indexOf(staffList[i].user_name) == -1) {
  901. newArr.push({
  902. id:staffList[i].id,
  903. user_name: staffList[i].user_name,
  904. admin_user_id:staffList[i].admin_user_id,
  905. user_type:staffList[i].doctor_type,
  906. is_sort:staffList[i].is_sort,
  907. sort:staffList[i].sort,
  908. list: [{class_name:staffList[i].class_name,admin_user_id:staffList[i].admin_user_id,schedule_week:staffList[i].schedule_week,user_type:staffList[i].doctor_type,class_attributes:staffList[i].class_attributesk,id:staffList[i].id}]
  909. })
  910. tempArr.push(staffList[i].user_name);
  911. } else {
  912. console.log("staffList",staffList[i].user_name)
  913. for (let j = 0; j < newArr.length; j++) {
  914. if (newArr[j].admin_user_id == staffList[i].admin_user_id) {
  915. newArr[j].list.push({class_name:staffList[i].class_name,admin_user_id:staffList[i].admin_user_id,schedule_week:staffList[i].schedule_week,user_type:staffList[i].doctor_type,class_attributes:staffList[i].class_attributes,id:staffList[i].id})
  916. }
  917. }
  918. }
  919. }
  920. let arrTen = [...newArr]
  921. console.log("newArr22o2o2o2o2wo",arrTen)
  922. let newNurse = []
  923. let newDoctor = []
  924. arrTen.map(item => {
  925. if(item.user_type == 2){
  926. newDoctor.push(item)
  927. }
  928. if(item.user_type == 3){
  929. newNurse.push(item)
  930. }
  931. })
  932. //护士
  933. console.log("newNurse",newNurse)
  934. newNurse.sort(this.compare('admin_user_id'))
  935. let newNurseTableData = []
  936. this.nurseTableData.map(item => {
  937. if(item.is_sort == 1){
  938. newNurseTableData.push(item)
  939. }
  940. })
  941. newNurseTableData.sort(this.compare('admin_user_id'))
  942. console.log("newNurseTableData",newNurseTableData)
  943. newNurseTableData.map((item,index) => {
  944. if (newNurse[index] && item.admin_user_id == newNurse[index].admin_user_id) {
  945. }else{
  946. newNurse.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: [],user_type:item.user_type,is_sort:item.is_sort,sort:item.sort})
  947. }
  948. })
  949. newNurse.sort(this.compare('sort'))
  950. // //医生
  951. newDoctor.sort(this.compare('admin_user_id'))
  952. let newDoctorTableData = []
  953. this.doctorTableData.map(item => {
  954. if(item.is_sort == 1){
  955. newDoctorTableData.push(item)
  956. }
  957. })
  958. newDoctorTableData.sort(this.compare('admin_user_id'))
  959. newDoctorTableData.map((item,index) => {
  960. if (newDoctor[index] && item.admin_user_id == newDoctor[index].admin_user_id) {
  961. }else{
  962. newDoctor.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: [],user_type:item.user_type,is_sort:item.is_sort,sort:item.sort})
  963. }
  964. })
  965. newDoctor.sort(this.compare('sort'))
  966. let arr2 = []
  967. arr2.push({class_name:oneStr,schedule_week:1})
  968. arr2.push({class_name:twoStr,schedule_week:2})
  969. arr2.push({class_name:threeStr,schedule_week:3})
  970. arr2.push({class_name:fourStr,schedule_week:4})
  971. arr2.push({class_name:fiveStr,schedule_week:5})
  972. arr2.push({class_name:sixStr,schedule_week:6})
  973. arr2.push({class_name:sevenStr,schedule_week:0})
  974. var obj = {}
  975. obj.admin_user_id = "1000000"
  976. obj.user_name = "合计"
  977. obj.user_type = 10
  978. obj.list = arr2
  979. arr.push(obj)
  980. let data = []
  981. data.push(...newNurse)
  982. data.push(...newDoctor)
  983. data.push(obj)
  984. console.log("data2o2oo2o2o2o22o",data)
  985. // this.tableData = this.distinct(data)
  986. this.tableData = data
  987. }
  988. })
  989. },
  990. distinct(tempArr) {
  991. for (let i = 0; i < tempArr.length; i++) {
  992. for (let j = i + 1; j < tempArr.length; j++) {
  993. if (tempArr[i].admin_user_id == tempArr[j].admin_user_id) {
  994. tempArr.splice(j, 1);
  995. j--;
  996. };
  997. };
  998. };
  999. return tempArr;
  1000. },
  1001. getClass(name,index){
  1002. if(name != undefined){
  1003. let newClass = '';
  1004. this.tableData.map(item => {
  1005. if(item.user_name == name){
  1006. if(item.list){
  1007. item.list.map(it => {
  1008. if(it.schedule_week == index){
  1009. newClass = it.class_name
  1010. }
  1011. })
  1012. }
  1013. }
  1014. })
  1015. return newClass
  1016. }
  1017. },
  1018. getClassId(name,index){
  1019. if(name != undefined){
  1020. let id = '';
  1021. this.tableData.map(item => {
  1022. if(item.user_name == name){
  1023. if(item.list){
  1024. item.list.map(it => {
  1025. if(it.schedule_week == index){
  1026. id = it.id
  1027. }
  1028. })
  1029. }
  1030. }
  1031. })
  1032. return id
  1033. }
  1034. },
  1035. getClassAttributes(name,index){
  1036. if(name != undefined){
  1037. let newClass = '';
  1038. this.tableData.map(item => {
  1039. if(item.user_name == name){
  1040. if(item.list){
  1041. item.list.map(it => {
  1042. if(it.schedule_week == index){
  1043. newClass = it.class_attributes
  1044. }
  1045. })
  1046. }
  1047. }
  1048. })
  1049. return newClass
  1050. }
  1051. },
  1052. unique(arr) {
  1053. const res = new Map();
  1054. return arr.filter((arr) => !res.has(arr.admin_user_id) && res.set(arr.admin_user_id, 1))
  1055. },
  1056. //获取上一周下一周的排班数据
  1057. getNextWeekList(){
  1058. const params = {
  1059. start_time:this.getTimestamp(this.weekDayArr[0]),
  1060. end_time:this.getTimestamp(this.weekDayArr[6]),
  1061. doctor_id:parseInt(this.typeValue),
  1062. }
  1063. console.log("params232323",params)
  1064. getNextWeekList(params).then(response=>{
  1065. if(response.data.state == 1){
  1066. var staffList = response.data.data.staffList
  1067. // console.log("上下周数据",staffList)
  1068. var sevenStr = ""
  1069. var oneStr = ""
  1070. var twoStr = ""
  1071. var threeStr = ""
  1072. var fourStr = ""
  1073. var fiveStr = ""
  1074. var sixStr = ""
  1075. this.arrZero = []
  1076. this.arrOne = []
  1077. this.arrTwo = []
  1078. this.arrThree = []
  1079. this.arrFour = []
  1080. this.arrFive = []
  1081. this.arrSix = []
  1082. for(let i=0;i<staffList.length;i++){
  1083. if(staffList[i].schedule_week == 0){
  1084. staffList[i].class_index = 0
  1085. var arr = []
  1086. this.arrZero.push(staffList[i].class_name)
  1087. for(let i=0;i<this.arrZero.length;i++){
  1088. if(this.arrZero[i]!=''){
  1089. arr.push(this.arrZero[i])
  1090. }
  1091. }
  1092. var countedNames = arr.reduce(function (allNames, name) {
  1093. if (name in allNames) {
  1094. allNames[name]++;
  1095. }
  1096. else {
  1097. allNames[name] = 1;
  1098. }
  1099. return allNames;
  1100. }, {});
  1101. let objKey = Object.keys(countedNames)
  1102. let objVal = Object.values(countedNames)
  1103. var zeroStr = ''
  1104. objKey.map((item,index) => {
  1105. let objVal = Object.values(countedNames)
  1106. zeroStr += item + objVal[index] + '\n'
  1107. })
  1108. sevenStr = zeroStr
  1109. }
  1110. if(staffList[i].schedule_week == 1){
  1111. staffList[i].class_index = 1
  1112. var arr = []
  1113. this.arrOne.push(staffList[i].class_name)
  1114. for(let i=0;i<this.arrOne.length;i++){
  1115. if(this.arrOne[i]!=''){
  1116. arr.push(this.arrOne[i])
  1117. }
  1118. }
  1119. var countedNames = arr.reduce(function (allNames, name) {
  1120. if (name in allNames) {
  1121. allNames[name]++;
  1122. }
  1123. else {
  1124. allNames[name] = 1;
  1125. }
  1126. return allNames;
  1127. }, {});
  1128. let objKey = Object.keys(countedNames)
  1129. let objVal = Object.values(countedNames)
  1130. let strOne = ''
  1131. objKey.map((item,index) => {
  1132. let objVal = Object.values(countedNames)
  1133. strOne += item + objVal[index] + '\n'
  1134. })
  1135. oneStr = strOne
  1136. }
  1137. if(staffList[i].schedule_week == 2){
  1138. staffList[i].class_index = 2
  1139. var arr = []
  1140. this.arrTwo.push(staffList[i].class_name)
  1141. for(let i=0;i<this.arrTwo.length;i++){
  1142. if(this.arrTwo[i]!=''){
  1143. arr.push(this.arrTwo[i])
  1144. }
  1145. }
  1146. var countedNames = arr.reduce(function (allNames, name) {
  1147. if (name in allNames) {
  1148. allNames[name]++;
  1149. }
  1150. else {
  1151. allNames[name] = 1;
  1152. }
  1153. return allNames;
  1154. }, {});
  1155. let objKey = Object.keys(countedNames)
  1156. let objVal = Object.values(countedNames)
  1157. let strTwo = ''
  1158. objKey.map((item,index) => {
  1159. let objVal = Object.values(countedNames)
  1160. strTwo += item + objVal[index] + '\n'
  1161. })
  1162. twoStr = strTwo
  1163. }
  1164. if(staffList[i].schedule_week == 3){
  1165. staffList[i].class_index = 3
  1166. var arr = []
  1167. this.arrThree.push(staffList[i].class_name)
  1168. for(let i=0;i<this.arrThree.length;i++){
  1169. if(this.arrThree[i]!=''){
  1170. arr.push(this.arrThree[i])
  1171. }
  1172. }
  1173. var countedNames = arr.reduce(function (allNames, name) {
  1174. if (name in allNames) {
  1175. allNames[name]++;
  1176. }
  1177. else {
  1178. allNames[name] = 1;
  1179. }
  1180. return allNames;
  1181. }, {});
  1182. let objKey = Object.keys(countedNames)
  1183. let objVal = Object.values(countedNames)
  1184. let strThree = ''
  1185. objKey.map((item,index) => {
  1186. let objVal = Object.values(countedNames)
  1187. strThree += item + objVal[index] + '\n'
  1188. })
  1189. threeStr = strThree
  1190. }
  1191. if(staffList[i].schedule_week == 4){
  1192. staffList[i].class_index = 4
  1193. var arr = []
  1194. this.arrFour.push(staffList[i].class_name)
  1195. for(let i=0;i<this.arrFour.length;i++){
  1196. if(this.arrFour[i]!=''){
  1197. arr.push(this.arrFour[i])
  1198. }
  1199. }
  1200. var countedNames = arr.reduce(function (allNames, name) {
  1201. if (name in allNames) {
  1202. allNames[name]++;
  1203. }
  1204. else {
  1205. allNames[name] = 1;
  1206. }
  1207. return allNames;
  1208. }, {});
  1209. let objKey = Object.keys(countedNames)
  1210. let objVal = Object.values(countedNames)
  1211. let strFour = ''
  1212. objKey.map((item,index) => {
  1213. let objVal = Object.values(countedNames)
  1214. strFour += item + objVal[index] + '\n'
  1215. })
  1216. fourStr = strFour
  1217. }
  1218. if(staffList[i].schedule_week == 5){
  1219. staffList[i].class_index = 5
  1220. var arr = []
  1221. this.arrFive.push(staffList[i].class_name)
  1222. for(let i=0;i<this.arrFive.length;i++){
  1223. if(this.arrFive[i]!=''){
  1224. arr.push(this.arrFive[i])
  1225. }
  1226. }
  1227. var countedNames = arr.reduce(function (allNames, name) {
  1228. if (name in allNames) {
  1229. allNames[name]++;
  1230. }
  1231. else {
  1232. allNames[name] = 1;
  1233. }
  1234. return allNames;
  1235. }, {});
  1236. let objKey = Object.keys(countedNames)
  1237. let objVal = Object.values(countedNames)
  1238. let strFive = ''
  1239. objKey.map((item,index) => {
  1240. let objVal = Object.values(countedNames)
  1241. strFive += item + objVal[index] + '\n'
  1242. })
  1243. fiveStr = strFive
  1244. }
  1245. if(staffList[i].schedule_week == 6){
  1246. staffList[i].class_index = 6
  1247. var arr = []
  1248. this.arrSix.push(staffList[i].class_name)
  1249. for(let i=0;i<this.arrSix.length;i++){
  1250. if(this.arrSix[i]!=''){
  1251. arr.push(this.arrSix[i])
  1252. }
  1253. }
  1254. var countedNames = arr.reduce(function (allNames, name) {
  1255. if (name in allNames) {
  1256. allNames[name]++;
  1257. }
  1258. else {
  1259. allNames[name] = 1;
  1260. }
  1261. return allNames;
  1262. }, {});
  1263. let objKey = Object.keys(countedNames)
  1264. let objVal = Object.values(countedNames)
  1265. let strSix = ''
  1266. objKey.map((item,index) => {
  1267. let objVal = Object.values(countedNames)
  1268. strSix += item + objVal[index] + '\n'
  1269. })
  1270. sixStr = strSix
  1271. }
  1272. }
  1273. let tempArr = [], newArr = []
  1274. for (let i = 0; i < staffList.length; i++) {
  1275. if (tempArr.indexOf(staffList[i].user_name) === -1) {
  1276. newArr.push({
  1277. user_name: staffList[i].user_name,
  1278. admin_user_id:staffList[i].admin_user_id,
  1279. user_type:staffList[i].doctor_type,
  1280. is_sort:staffList[i].is_sort,
  1281. sort:staffList[i].sort,
  1282. list: [{class_name:staffList[i].class_name,admin_user_id:staffList[i].admin_user_id,schedule_week:staffList[i].schedule_week,user_type:staffList[i].doctor_type,class_attributes:staffList[i].class_attributes}]
  1283. })
  1284. tempArr.push(staffList[i].user_name);
  1285. } else {
  1286. for (let j = 0; j < newArr.length; j++) {
  1287. if (newArr[j].user_name == staffList[i].user_name) {
  1288. newArr[j].list.push({class_name:staffList[i].class_name,admin_user_id:staffList[i].admin_user_id,schedule_week:staffList[i].schedule_week,user_type:staffList[i].doctor_type,class_attributes:staffList[i].class_attributes})
  1289. }
  1290. }
  1291. }
  1292. }
  1293. let arr = [...newArr]
  1294. let newNurse = []
  1295. let newDoctor = []
  1296. arr.map(item => {
  1297. if(item.user_type == 2){
  1298. newDoctor.push(item)
  1299. }
  1300. if(item.user_type == 3){
  1301. newNurse.push(item)
  1302. }
  1303. })
  1304. //护士
  1305. newNurse.sort(this.compare('admin_user_id'))
  1306. let newNurseTableData = []
  1307. this.nurseTableData.map(item => {
  1308. if(item.is_sort == 1){
  1309. newNurseTableData.push(item)
  1310. }
  1311. })
  1312. newNurseTableData.sort(this.compare('admin_user_id'))
  1313. newNurseTableData.map((item,index) => {
  1314. if (newNurse[index] && item.admin_user_id == newNurse[index].admin_user_id) {
  1315. }else{
  1316. newNurse.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: [],user_type:item.user_type,is_sort:item.is_sort,sort:item.sort})
  1317. }
  1318. })
  1319. newNurse.sort(this.compare('sort'))
  1320. //医生
  1321. newDoctor.sort(this.compare('admin_user_id'))
  1322. let newDoctorTableData = []
  1323. this.doctorTableData.map(item => {
  1324. if(item.is_sort == 1){
  1325. newDoctorTableData.push(item)
  1326. }
  1327. })
  1328. newDoctorTableData.sort(this.compare('admin_user_id'))
  1329. newDoctorTableData.map((item,index) => {
  1330. if (newDoctor[index] && item.admin_user_id == newDoctor[index].admin_user_id) {
  1331. }else{
  1332. newDoctor.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: [],user_type:item.user_type,is_sort:item.is_sort,sort:item.sort})
  1333. }
  1334. })
  1335. newDoctor.sort(this.compare('sort'))
  1336. // arr.sort(this.compare('admin_user_id'))
  1337. // this.doctorlist.sort(this.compare('admin_user_id'))
  1338. // this.doctorlist.forEach((item, index) => {
  1339. //   if (arr[index] && item.admin_user_id == arr[index].admin_user_id) {
  1340. //   }else{
  1341. //     arr.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: [],user_type:item.user_type})
  1342. //   }
  1343. // })
  1344. // arr.sort(this.compare('user_type'))
  1345. let arr2 = []
  1346. arr2.push({class_name:oneStr,schedule_week:1})
  1347. arr2.push({class_name:twoStr,schedule_week:2})
  1348. arr2.push({class_name:threeStr,schedule_week:3})
  1349. arr2.push({class_name:fourStr,schedule_week:4})
  1350. arr2.push({class_name:fiveStr,schedule_week:5})
  1351. arr2.push({class_name:sixStr,schedule_week:6})
  1352. arr2.push({class_name:sevenStr,schedule_week:0})
  1353. var obj = {}
  1354. obj.admin_user_id = "1000000"
  1355. obj.user_name = "合计"
  1356. obj.user_type = 10
  1357. obj.list = arr2
  1358. arr.push(obj)
  1359. if(parseInt(this.typeValue) == 2){
  1360. newNurse = []
  1361. }
  1362. if(parseInt(this.typeValue) == 3){
  1363. newDoctor = []
  1364. }
  1365. let data = []
  1366. data.push(...newNurse)
  1367. data.push(...newDoctor)
  1368. data.push(obj)
  1369. this.tableData = data
  1370. }
  1371. })
  1372. },
  1373. changeOption(id){
  1374. const params = {
  1375. start_time:this.getTimestamp(this.weekDayArr[0]),
  1376. end_time:this.getTimestamp(this.weekDayArr[6]),
  1377. doctor_id:id
  1378. }
  1379. getScheduleByDoctorId(params).then(response=>{
  1380. if(response.data.state == 1){
  1381. var staffList = response.data.data.staffList
  1382. // console.log("staffList",staffList)
  1383. var sevenStr = ""
  1384. var oneStr = ""
  1385. var twoStr = ""
  1386. var threeStr = ""
  1387. var fourStr = ""
  1388. var fiveStr = ""
  1389. var sixStr = ""
  1390. this.arrZero = []
  1391. this.arrOne = []
  1392. this.arrTwo = []
  1393. this.arrThree = []
  1394. this.arrFour = []
  1395. this.arrFive = []
  1396. this.arrSix = []
  1397. for(let i=0;i<staffList.length;i++){
  1398. if(staffList[i].schedule_week == 0){
  1399. staffList[i].class_index = 0
  1400. var arr = []
  1401. this.arrZero.push(staffList[i].class_name)
  1402. for(let i=0;i<this.arrZero.length;i++){
  1403. if(this.arrZero[i]!=''){
  1404. arr.push(this.arrZero[i])
  1405. }
  1406. }
  1407. var countedNames = arr.reduce(function (allNames, name) {
  1408. if (name in allNames) {
  1409. allNames[name]++;
  1410. }
  1411. else {
  1412. allNames[name] = 1;
  1413. }
  1414. return allNames;
  1415. }, {});
  1416. let objKey = Object.keys(countedNames)
  1417. let objVal = Object.values(countedNames)
  1418. var zeroStr = ''
  1419. objKey.map((item,index) => {
  1420. let objVal = Object.values(countedNames)
  1421. zeroStr += item + objVal[index] + '\n'
  1422. })
  1423. sevenStr = zeroStr
  1424. }
  1425. if(staffList[i].schedule_week == 1){
  1426. staffList[i].class_index = 1
  1427. var arr = []
  1428. this.arrOne.push(staffList[i].class_name)
  1429. for(let i=0;i<this.arrOne.length;i++){
  1430. if(this.arrOne[i]!=''){
  1431. arr.push(this.arrOne[i])
  1432. }
  1433. }
  1434. var countedNames = arr.reduce(function (allNames, name) {
  1435. if (name in allNames) {
  1436. allNames[name]++;
  1437. }
  1438. else {
  1439. allNames[name] = 1;
  1440. }
  1441. return allNames;
  1442. }, {});
  1443. let objKey = Object.keys(countedNames)
  1444. let objVal = Object.values(countedNames)
  1445. let strOne = ''
  1446. objKey.map((item,index) => {
  1447. let objVal = Object.values(countedNames)
  1448. strOne += item + objVal[index] + '\n'
  1449. })
  1450. oneStr = strOne
  1451. }
  1452. if(staffList[i].schedule_week == 2){
  1453. staffList[i].class_index = 2
  1454. var arr = []
  1455. this.arrTwo.push(staffList[i].class_name)
  1456. for(let i=0;i<this.arrTwo.length;i++){
  1457. if(this.arrTwo[i]!=''){
  1458. arr.push(this.arrTwo[i])
  1459. }
  1460. }
  1461. var countedNames = arr.reduce(function (allNames, name) {
  1462. if (name in allNames) {
  1463. allNames[name]++;
  1464. }
  1465. else {
  1466. allNames[name] = 1;
  1467. }
  1468. return allNames;
  1469. }, {});
  1470. let objKey = Object.keys(countedNames)
  1471. let objVal = Object.values(countedNames)
  1472. let strTwo = ''
  1473. objKey.map((item,index) => {
  1474. let objVal = Object.values(countedNames)
  1475. strTwo += item + objVal[index] + '\n'
  1476. })
  1477. twoStr = strTwo
  1478. }
  1479. if(staffList[i].schedule_week == 3){
  1480. staffList[i].class_index = 3
  1481. var arr = []
  1482. this.arrThree.push(staffList[i].class_name)
  1483. for(let i=0;i<this.arrThree.length;i++){
  1484. if(this.arrThree[i]!=''){
  1485. arr.push(this.arrThree[i])
  1486. }
  1487. }
  1488. var countedNames = arr.reduce(function (allNames, name) {
  1489. if (name in allNames) {
  1490. allNames[name]++;
  1491. }
  1492. else {
  1493. allNames[name] = 1;
  1494. }
  1495. return allNames;
  1496. }, {});
  1497. let objKey = Object.keys(countedNames)
  1498. let objVal = Object.values(countedNames)
  1499. let strThree = ''
  1500. objKey.map((item,index) => {
  1501. let objVal = Object.values(countedNames)
  1502. strThree += item + objVal[index] + '\n'
  1503. })
  1504. threeStr = strThree
  1505. }
  1506. if(staffList[i].schedule_week == 4){
  1507. staffList[i].class_index = 4
  1508. var arr = []
  1509. this.arrFour.push(staffList[i].class_name)
  1510. for(let i=0;i<this.arrFour.length;i++){
  1511. if(this.arrFour[i]!=''){
  1512. arr.push(this.arrFour[i])
  1513. }
  1514. }
  1515. var countedNames = arr.reduce(function (allNames, name) {
  1516. if (name in allNames) {
  1517. allNames[name]++;
  1518. }
  1519. else {
  1520. allNames[name] = 1;
  1521. }
  1522. return allNames;
  1523. }, {});
  1524. let objKey = Object.keys(countedNames)
  1525. let objVal = Object.values(countedNames)
  1526. let strFour = ''
  1527. objKey.map((item,index) => {
  1528. let objVal = Object.values(countedNames)
  1529. strFour += item + objVal[index] + '\n'
  1530. })
  1531. fourStr = strFour
  1532. }
  1533. if(staffList[i].schedule_week == 5){
  1534. staffList[i].class_index = 5
  1535. var arr = []
  1536. this.arrFive.push(staffList[i].class_name)
  1537. for(let i=0;i<this.arrFive.length;i++){
  1538. if(this.arrFive[i]!=''){
  1539. arr.push(this.arrFive[i])
  1540. }
  1541. }
  1542. var countedNames = arr.reduce(function (allNames, name) {
  1543. if (name in allNames) {
  1544. allNames[name]++;
  1545. }
  1546. else {
  1547. allNames[name] = 1;
  1548. }
  1549. return allNames;
  1550. }, {});
  1551. let objKey = Object.keys(countedNames)
  1552. let objVal = Object.values(countedNames)
  1553. let strFive = ''
  1554. objKey.map((item,index) => {
  1555. let objVal = Object.values(countedNames)
  1556. strFive += item + objVal[index] + '\n'
  1557. })
  1558. fiveStr = strFive
  1559. }
  1560. if(staffList[i].schedule_week == 6){
  1561. staffList[i].class_index = 6
  1562. var arr = []
  1563. this.arrSix.push(staffList[i].class_name)
  1564. for(let i=0;i<this.arrSix.length;i++){
  1565. if(this.arrSix[i]!=''){
  1566. arr.push(this.arrSix[i])
  1567. }
  1568. }
  1569. var countedNames = arr.reduce(function (allNames, name) {
  1570. if (name in allNames) {
  1571. allNames[name]++;
  1572. }
  1573. else {
  1574. allNames[name] = 1;
  1575. }
  1576. return allNames;
  1577. }, {});
  1578. let objKey = Object.keys(countedNames)
  1579. let objVal = Object.values(countedNames)
  1580. let strSix = ''
  1581. objKey.map((item,index) => {
  1582. let objVal = Object.values(countedNames)
  1583. strSix += item + objVal[index] + '\n'
  1584. })
  1585. sixStr = strSix
  1586. }
  1587. }
  1588. let tempArr = [], newArr = []
  1589. for (let i = 0; i < staffList.length; i++) {
  1590. if (tempArr.indexOf(staffList[i].user_name) === -1) {
  1591. newArr.push({
  1592. user_name: staffList[i].user_name,
  1593. admin_user_id:staffList[i].admin_user_id,
  1594. user_type:staffList[i].doctor_type,
  1595. is_sort:staffList[i].is_sort,
  1596. sort:staffList[i].sort,
  1597. list: [{class_name:staffList[i].class_name,admin_user_id:staffList[i].admin_user_id,schedule_week:staffList[i].schedule_week,user_type:staffList[i].doctor_type,class_attributes:staffList[i].class_attributes}]
  1598. })
  1599. tempArr.push(staffList[i].user_name);
  1600. } else {
  1601. for (let j = 0; j < newArr.length; j++) {
  1602. if (newArr[j].user_name == staffList[i].user_name) {
  1603. newArr[j].list.push({class_name:staffList[i].class_name,admin_user_id:staffList[i].admin_user_id,schedule_week:staffList[i].schedule_week,user_type:staffList[i].doctor_type,class_attributes:staffList[i].class_attributes})
  1604. }
  1605. }
  1606. }
  1607. }
  1608. let arr = [...newArr]
  1609. let newNurse = []
  1610. let newDoctor = []
  1611. arr.map(item => {
  1612. if(item.user_type == 2){
  1613. newDoctor.push(item)
  1614. }
  1615. if(item.user_type == 3){
  1616. newNurse.push(item)
  1617. }
  1618. })
  1619. if(id == 0){
  1620. //护士
  1621. newNurse.sort(this.compare('admin_user_id'))
  1622. let newNurseTableData = []
  1623. this.nurseTableData.map(item => {
  1624. if(item.is_sort == 1){
  1625. newNurseTableData.push(item)
  1626. }
  1627. })
  1628. newNurseTableData.sort(this.compare('admin_user_id'))
  1629. newNurseTableData.map((item,index) => {
  1630. if (newNurse[index] && item.admin_user_id == newNurse[index].admin_user_id) {
  1631. }else{
  1632. newNurse.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: [],user_type:item.user_type,is_sort:item.is_sort,sort:item.sort})
  1633. }
  1634. })
  1635. newNurse.sort(this.compare('sort'))
  1636. //医生
  1637. newDoctor.sort(this.compare('admin_user_id'))
  1638. let newDoctorTableData = []
  1639. this.doctorTableData.map(item => {
  1640. if(item.is_sort == 1){
  1641. newDoctorTableData.push(item)
  1642. }
  1643. })
  1644. newDoctorTableData.sort(this.compare('admin_user_id'))
  1645. newDoctorTableData.map((item,index) => {
  1646. if (newDoctor[index] && item.admin_user_id == newDoctor[index].admin_user_id) {
  1647. }else{
  1648. newDoctor.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: [],user_type:item.user_type,is_sort:item.is_sort,sort:item.sort})
  1649. }
  1650. })
  1651. newDoctor.sort(this.compare('sort'))
  1652. // let data = []
  1653. // data.push(...newNurse)
  1654. // data.push(...newDoctor)
  1655. // this.tableData = data
  1656. let arr2 = []
  1657. arr2.push({class_name:oneStr,schedule_week:1})
  1658. arr2.push({class_name:twoStr,schedule_week:2})
  1659. arr2.push({class_name:threeStr,schedule_week:3})
  1660. arr2.push({class_name:fourStr,schedule_week:4})
  1661. arr2.push({class_name:fiveStr,schedule_week:5})
  1662. arr2.push({class_name:sixStr,schedule_week:6})
  1663. arr2.push({class_name:sevenStr,schedule_week:0})
  1664. var obj = {}
  1665. obj.admin_user_id = "1000000"
  1666. obj.user_name = "合计"
  1667. obj.user_type = 10
  1668. obj.list = arr2
  1669. arr.push(obj)
  1670. let data = []
  1671. data.push(...newNurse)
  1672. data.push(...newDoctor)
  1673. data.push(obj)
  1674. this.tableData = data
  1675. }
  1676. if(id == 2){
  1677. newDoctor.sort(this.compare('admin_user_id'))
  1678. let newDoctorTableData = []
  1679. this.doctorTableData.map(item => {
  1680. if(item.is_sort == 1){
  1681. newDoctorTableData.push(item)
  1682. }
  1683. })
  1684. newDoctorTableData.sort(this.compare('admin_user_id'))
  1685. newDoctorTableData.map((item,index) => {
  1686. if (newDoctor[index] && item.admin_user_id == newDoctor[index].admin_user_id) {
  1687. }else{
  1688. newDoctor.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: [],user_type:item.user_type,is_sort:item.is_sort,sort:item.sort})
  1689. }
  1690. })
  1691. newDoctor.sort(this.compare('sort'))
  1692. // this.tableData = newDoctor
  1693. let arr2 = []
  1694. arr2.push({class_name:oneStr,schedule_week:1})
  1695. arr2.push({class_name:twoStr,schedule_week:2})
  1696. arr2.push({class_name:threeStr,schedule_week:3})
  1697. arr2.push({class_name:fourStr,schedule_week:4})
  1698. arr2.push({class_name:fiveStr,schedule_week:5})
  1699. arr2.push({class_name:sixStr,schedule_week:6})
  1700. arr2.push({class_name:sevenStr,schedule_week:0})
  1701. var obj = {}
  1702. obj.admin_user_id = "1000000"
  1703. obj.user_name = "合计"
  1704. obj.user_type = 10
  1705. obj.list = arr2
  1706. arr.push(obj)
  1707. let data = []
  1708. data.push(...newDoctor)
  1709. data.push(obj)
  1710. this.tableData = data
  1711. }
  1712. if(id == 3){
  1713. newNurse.sort(this.compare('admin_user_id'))
  1714. let newNurseTableData = []
  1715. this.nurseTableData.map(item => {
  1716. if(item.is_sort == 1){
  1717. newNurseTableData.push(item)
  1718. }
  1719. })
  1720. newNurseTableData.sort(this.compare('admin_user_id'))
  1721. newNurseTableData.map((item,index) => {
  1722. if (newNurse[index] && item.admin_user_id == newNurse[index].admin_user_id) {
  1723. }else{
  1724. newNurse.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: [],user_type:item.user_type,is_sort:item.is_sort,sort:item.sort})
  1725. }
  1726. })
  1727. newNurse.sort(this.compare('sort'))
  1728. // this.tableData = newNurse
  1729. let arr2 = []
  1730. arr2.push({class_name:oneStr,schedule_week:1})
  1731. arr2.push({class_name:twoStr,schedule_week:2})
  1732. arr2.push({class_name:threeStr,schedule_week:3})
  1733. arr2.push({class_name:fourStr,schedule_week:4})
  1734. arr2.push({class_name:fiveStr,schedule_week:5})
  1735. arr2.push({class_name:sixStr,schedule_week:6})
  1736. arr2.push({class_name:sevenStr,schedule_week:0})
  1737. var obj = {}
  1738. obj.admin_user_id = "1000000"
  1739. obj.user_name = "合计"
  1740. obj.user_type = 10
  1741. obj.list = arr2
  1742. arr.push(obj)
  1743. let data = []
  1744. data.push(...newNurse)
  1745. data.push(obj)
  1746. this.tableData = data
  1747. console.log('cccccc',this.tableData);
  1748. }
  1749. }
  1750. })
  1751. },
  1752. toSearch(){
  1753. const params = {
  1754. user_name: this.keywords,
  1755. start_time:this.getTimestamp(this.weekDayArr[0]),
  1756. end_time:this.getTimestamp(this.weekDayArr[6])
  1757. }
  1758. toSearchScheduleList(params).then(response=>{
  1759. if(response.data.state == 1){
  1760. var staffList = response.data.data.staffList
  1761. // console.log("搜索",staffList)
  1762. let tempArr = [], newArr = []
  1763. for (let i = 0; i < staffList.length; i++) {
  1764. if (tempArr.indexOf(staffList[i].user_name) === -1) {
  1765. newArr.push({
  1766. user_name: staffList[i].user_name,
  1767. admin_user_id:staffList[i].admin_user_id,
  1768. list: [{class_name:staffList[i].class_name,admin_user_id:staffList[i].admin_user_id,schedule_week:staffList[i].schedule_week,user_type:staffList[i].doctor_type,class_attributes:staffList[i].class_attributes}]
  1769. })
  1770. tempArr.push(staffList[i].user_name);
  1771. } else {
  1772. for (let j = 0; j < newArr.length; j++) {
  1773. if (newArr[j].user_name == staffList[i].user_name) {
  1774. newArr[j].list.push({class_name:staffList[i].class_name,admin_user_id:staffList[i].admin_user_id,schedule_week:staffList[i].schedule_week,user_type:staffList[i].doctor_type,class_attributes:staffList[i].class_attributes})
  1775. }
  1776. }
  1777. }
  1778. }
  1779. if(this.keywords != ''){
  1780. this.tableData = newArr
  1781. }else{
  1782. let arr = [...newArr]
  1783. arr.sort(this.compare('admin_user_id'))
  1784. this.doctorlist.sort(this.compare('admin_user_id'))
  1785. this.doctorlist.forEach((item, index) => {
  1786.   if (arr[index] && item.admin_user_id == arr[index].admin_user_id) {
  1787.   }else{
  1788.     arr.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: []})
  1789.     // console.log("arr",arr)
  1790.   }
  1791. })
  1792. this.tableData = arr
  1793. }
  1794. }
  1795. })
  1796. },
  1797. DeleteStaffSchedule(){
  1798. const params = {
  1799. start_time:this.getTimestamp(this.weekDayArr[0]),
  1800. end_time:this.getTimestamp(this.weekDayArr[6])
  1801. }
  1802. this.$confirm(
  1803. '是否要清除当周排班? <br>清除后,信息将无法恢复',
  1804. '删除提示',
  1805. {
  1806. dangerouslyUseHTMLString: true,
  1807. confirmButtonText: '确定',
  1808. cancelButtonText: '取消',
  1809. type: 'warning'
  1810. }
  1811. ).then(()=>{
  1812. DeleteStaffSchedule(params).then(response=>{
  1813. if(response.data.state == 1){
  1814. var msg = response.data.data.msg
  1815. this.$message.success("清除成功")
  1816. this.getStaffScheduleList()
  1817. }
  1818. })
  1819. })
  1820. },
  1821. copyStaffSchedule(){
  1822. this.newVisible = true
  1823. const params = {
  1824. start_time:this.getTimestamp(this.weekDayArr[0]),
  1825. end_time:this.getTimestamp(this.weekDayArr[6])
  1826. }
  1827. copyStaffSchedule(params).then(response=>{
  1828. if(response.data.state == 1){
  1829. var msg = response.data.data.msg
  1830. console.log("msg",msg)
  1831. this.$message.success("复制成功")
  1832. }else{
  1833. this.$message.error("排班已存在")
  1834. }
  1835. })
  1836. },
  1837. toContinuous(){
  1838. var is_status = 0
  1839. if(this.isChecked == false){
  1840. is_status = 0
  1841. }
  1842. if(this.isChecked == true){
  1843. is_status = 1
  1844. }
  1845. const params = {
  1846. is_status:is_status
  1847. }
  1848. UpdateContinusSchedule(params).then(response=>{
  1849. if(response.data.state == 1){
  1850. var schedule = response.data.data.schedule
  1851. this.$message.success("保存成功")
  1852. }
  1853. })
  1854. },
  1855. setDate1 (date) {
  1856. var week = date.getDay() - 1
  1857. date = this.addDate(date, week * -1)
  1858. this.currentDate = new Date(date)
  1859. let arr1 = []
  1860. for (var i = 0; i < this.clen; i++) {
  1861. arr1.push(this.formatDate(i == 0 ? date : this.addDate(date, 1)))
  1862. }
  1863. this.weekList.push(arr1)
  1864. let num = this.weekNum
  1865. this.currentFirstDate1 = num + 1
  1866. },
  1867. submitAction(formName){
  1868. var label = ""
  1869. for(let i=0;i<this.timeOptions.length;i++){
  1870. if(this.form.copyWeek == this.timeOptions[i].value){
  1871. label = this.timeOptions[i].label
  1872. }
  1873. }
  1874. var start = label.split('~')
  1875. var copy_startime = this.getTimestamp(start[0])
  1876. var copy_endtime = this.getTimestamp(start[1])
  1877. const params = {
  1878. start_time:this.getTimestamp(this.weekDayArr[0]),
  1879. end_time:this.getTimestamp(this.weekDayArr[6]),
  1880. copy_startime:copy_startime,
  1881. copy_endtime:copy_endtime,
  1882. }
  1883. this.$refs[formName].validate(valid=>{
  1884. if(valid){
  1885. if(!this.copySchLoading){
  1886. this.copySchLoading = true
  1887. copyStaffSchedule(params).then(response=>{
  1888. if(response.data.state == 1){
  1889. var msg = response.data.data.msg
  1890. this.copySchLoading = false
  1891. this.$message.success("复制成功")
  1892. this.newVisible = false
  1893. }else{
  1894. this.copySchLoading = false
  1895. this.$message.error("排班已存在")
  1896. }
  1897. })
  1898. }
  1899. }
  1900. })
  1901. },
  1902. compare(property){
  1903. return function(a,b){
  1904. var value1 = a[property];
  1905. var value2 = b[property];
  1906. return value2 - value1;
  1907. }
  1908. },
  1909. tableCellStyle (row, rowIndex, column) {
  1910. var week = (row.column.label).split('');
  1911. var weeks = 0
  1912. if (week.length == 13) {
  1913. weeks = week[4]+week[5]+week[6]+week[7]+week[8]+week[9]+week[10]+week[11]
  1914. }
  1915. if (week.length == 14) {
  1916. weeks = week[4]+week[5]+week[6]+week[7]+week[8]+week[9]+week[10]+week[11]+week[12]
  1917. }
  1918. var weekdate = this.getTimestamp(weeks)
  1919. if(weekdate < this.timeNow){
  1920. return 'background-color:#e5e5e5;'
  1921. }
  1922. },
  1923. setting(){
  1924. this.nurseVisible = true
  1925. },
  1926. _close: function(done) {
  1927. done();
  1928. },
  1929. changeSort(val){
  1930. console.log('val',val)
  1931. const params = {
  1932. sort:parseInt(val.sort),
  1933. id:val.id,
  1934. }
  1935. console.log("params",params)
  1936. SaveNurseSort(params).then(response=>{
  1937. if(response.data.state == 1){
  1938. var role = response.data.data.role
  1939. this.$message.success("保存成功")
  1940. this.getDoctorList()
  1941. }
  1942. })
  1943. },
  1944. changeRadio(val){
  1945. console.log("val",val)
  1946. const params = {
  1947. id:val.id,
  1948. is_sort:val.is_sort,
  1949. }
  1950. SaveIsSchedule(params).then(response=>{
  1951. if(response.data.state == 1){
  1952. var role = response.data.data.role
  1953. this.$message.success("保存成功")
  1954. this.getDoctorList()
  1955. }
  1956. })
  1957. },
  1958. toExport(){
  1959. this.exportDialogVisible = true
  1960. },
  1961. getTimestamp(time) { //把时间日期转成时间戳
  1962. return (new Date(time)).getTime() / 1000
  1963. },
  1964. exportList(){
  1965. import('@/vendor/Export2Excel').then(excel => {
  1966. for(let i=0;i<this.tableData.length;i++){
  1967. this.tableData[i].monday = this.getClass(this.tableData[i].user_name,1)
  1968. this.tableData[i].tuesday = this.getClass(this.tableData[i].user_name,2)
  1969. this.tableData[i].wednesday = this.getClass(this.tableData[i].user_name,3)
  1970. this.tableData[i].thursday = this.getClass(this.tableData[i].user_name,4)
  1971. this.tableData[i].friday = this.getClass(this.tableData[i].user_name,5)
  1972. this.tableData[i].saturday = this.getClass(this.tableData[i].user_name,6)
  1973. this.tableData[i].weekday = this.getClass(this.tableData[i].user_name,0)
  1974. }
  1975. console.log("this.table",this.tableData)
  1976. const tHeader = ['医护姓名', '周一'+"("+this.weekDayArr[0]+")" , '周二'+"("+this.weekDayArr[1]+")", '周三'+"("+this.weekDayArr[2]+")" , '周四'+"("+this.weekDayArr[3]+")" , '周五'+"("+this.weekDayArr[4]+")" , '周六'+"("+this.weekDayArr[5]+")",'周日'+"("+this.weekDayArr[6]+")"]
  1977. const filterVal = ['user_name', 'monday', 'tuesday','wednesday','thursday','friday','saturday','weekday']
  1978. const data = this.formatJson(filterVal,this.tableData)
  1979. console.log("data",data)
  1980. excel.export_json_to_excel({
  1981. header: tHeader,
  1982. data,
  1983. filename: '医护排班'
  1984. })
  1985. this.downloadLoading = false
  1986. })
  1987. },
  1988. formatJson(filterVal, jsonData) {
  1989. return jsonData.map(v => filterVal.map(j => v[j]))
  1990. },
  1991. toClick(id,index){
  1992. this.$confirm(
  1993. '是否要清除当前排班? <br>清除后,信息将无法恢复',
  1994. '删除提示',
  1995. {
  1996. dangerouslyUseHTMLString: true,
  1997. confirmButtonText: '确定',
  1998. cancelButtonText: '取消',
  1999. type: 'warning'
  2000. }
  2001. ).then(()=>{
  2002. console.log("rowwoowowow",id)
  2003. DeleteStaffScheduleById(id).then(response=>{
  2004. if(response.data.state == 1){
  2005. var msg = response.data.data.msg
  2006. this.$message.success("清除成功")
  2007. this.getStaffScheduleList()
  2008. }
  2009. })
  2010. })
  2011. },
  2012. hoverMouse(row,column, cell, event){
  2013. this.name=row.user_name
  2014. this.column_lie= column.label.split('\n')[0]
  2015. },
  2016. leavemouse(row, column, cell, event){
  2017. this.name=''
  2018. }
  2019. },
  2020. created(){
  2021. //获取医护人员
  2022. this.getDoctorList()
  2023. //获取班种班种
  2024. this.getScheduleList()
  2025. let year = new Date().getFullYear()
  2026. let month = new Date().getMonth() + 1
  2027. let date = new Date().getDate()
  2028. this.weekNum = this.getYearWeek(year,month,date)
  2029. this.todayDate=this.formatDate(new Date())
  2030. this.setDate(new Date())
  2031. for (var i = 0; i <= 9; i++) {
  2032. this.setDate1(this.addDate(this.currentDate, 7))
  2033. }
  2034. let newNum = 0
  2035. for(let i = 0; i < this.weekList.length; i++){
  2036. if(this.weekNum + i + 1 <= 53){
  2037. let num = this.weekNum + i + 1
  2038. let str = this.weekList[i][0] + '~' + this.weekList[i][6] + '(' + num + ')'
  2039. this.typeOptions.push({value:i,label:str})
  2040. let stt = this.weekList[i][0] +"~"+this.weekList[i][6]
  2041. this.timeOptions.push({value:i,label:stt})
  2042. }else{
  2043. newNum++
  2044. let str = this.weekList[i][0] + '~' + this.weekList[i][6] + '(' + newNum + ')'
  2045. this.typeOptions.push({value:i,label:str})
  2046. let stt = this.weekList[i][0] +"~"+this.weekList[i][6]
  2047. this.timeOptions.push({value:i,label:stt})
  2048. }
  2049. }
  2050. var now = moment().locale('zh-cn').format('YYYY-MM-DD 00:00:00')
  2051. this.timeNow = this.getTimestamp(now)
  2052. }
  2053. }
  2054. </script>
  2055. <style lang="scss" scoped>
  2056. .dateBox{
  2057. border: 1px solid #DCDFE6;
  2058. height: 36px;
  2059. line-height: 36px;
  2060. text-align: center;
  2061. padding: 0 10px;
  2062. border-radius: 4px;
  2063. }
  2064. .classBox{
  2065. width:28%;
  2066. height: 100%;
  2067. border: 1px solid #d0d3da;
  2068. .classTitle{
  2069. height: 42px;
  2070. text-align: center;
  2071. line-height: 42px;
  2072. background-color: rgb(245, 247, 250);
  2073. color: rgb(96, 98, 102);
  2074. font-weight:bold;
  2075. }
  2076. .classMain{
  2077. height: 400px;
  2078. padding: 0 0 0 20px;
  2079. display: flex;
  2080. justify-content: space-between;
  2081. flex-direction: column;
  2082. >div>p{
  2083. line-height: 30px;
  2084. color: rgb(48, 49, 51);
  2085. }
  2086. .classMainBox{
  2087. height: 350px;
  2088. overflow-y: auto;
  2089. }
  2090. }
  2091. }
  2092. </style>
  2093. <style lang="scss">
  2094. .schedulingTable{
  2095. .el-table .cell {
  2096. white-space: pre-line;/*保留换行符*/
  2097. }
  2098. }
  2099. .el-dropdown-menu{
  2100. max-height:96%;
  2101. overflow-y: auto;
  2102. }
  2103. .del_table_btns {
  2104. position: absolute;
  2105. right: 0px;
  2106. top: -3px;
  2107. // visibility: hidden;
  2108. .el-button {
  2109. width: 15px;
  2110. height: 15px;
  2111. padding: 0px;
  2112. }
  2113. }
  2114. </style>