Elizabeth's proactive approach involves introducing urinal toilet attachment , an ingenious concept that optimizes space and functionality.

index.vue 102KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191
  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(scope.row,scope.$index)"
  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=""
  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=""
  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=""
  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=""
  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=""
  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=""
  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. let tempArr = [], newArr = []
  898. for (let i = 0; i < staffList.length; i++) {
  899. if (tempArr.indexOf(staffList[i].user_name) == -1) {
  900. newArr.push({
  901. id:staffList[i].id,
  902. user_name: staffList[i].user_name,
  903. admin_user_id:staffList[i].admin_user_id,
  904. user_type:staffList[i].doctor_type,
  905. is_sort:staffList[i].is_sort,
  906. sort:staffList[i].sort,
  907. 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}]
  908. })
  909. tempArr.push(staffList[i].user_name);
  910. } else {
  911. console.log("staffList",staffList[i].user_name)
  912. for (let j = 0; j < newArr.length; j++) {
  913. if (newArr[j].admin_user_id == staffList[i].admin_user_id) {
  914. 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})
  915. }
  916. }
  917. }
  918. }
  919. let arrTen = [...newArr]
  920. console.log("newArr22o2o2o2o2wo",arrTen)
  921. let newNurse = []
  922. let newDoctor = []
  923. arrTen.map(item => {
  924. if(item.user_type == 2){
  925. newDoctor.push(item)
  926. }
  927. if(item.user_type == 3){
  928. newNurse.push(item)
  929. }
  930. })
  931. //护士
  932. console.log("newNurse",newNurse)
  933. newNurse.sort(this.compare('admin_user_id'))
  934. let newNurseTableData = []
  935. this.nurseTableData.map(item => {
  936. if(item.is_sort == 1){
  937. newNurseTableData.push(item)
  938. }
  939. })
  940. newNurseTableData.sort(this.compare('admin_user_id'))
  941. console.log("newNurseTableData",newNurseTableData)
  942. newNurseTableData.map((item,index) => {
  943. if (newNurse[index] && item.admin_user_id == newNurse[index].admin_user_id) {
  944. }else{
  945. 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})
  946. }
  947. })
  948. newNurse.sort(this.compare('sort'))
  949. // //医生
  950. newDoctor.sort(this.compare('admin_user_id'))
  951. let newDoctorTableData = []
  952. this.doctorTableData.map(item => {
  953. if(item.is_sort == 1){
  954. newDoctorTableData.push(item)
  955. }
  956. })
  957. newDoctorTableData.sort(this.compare('admin_user_id'))
  958. newDoctorTableData.map((item,index) => {
  959. if (newDoctor[index] && item.admin_user_id == newDoctor[index].admin_user_id) {
  960. }else{
  961. 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})
  962. }
  963. })
  964. newDoctor.sort(this.compare('sort'))
  965. let arr2 = []
  966. arr2.push({class_name:oneStr,schedule_week:1})
  967. arr2.push({class_name:twoStr,schedule_week:2})
  968. arr2.push({class_name:threeStr,schedule_week:3})
  969. arr2.push({class_name:fourStr,schedule_week:4})
  970. arr2.push({class_name:fiveStr,schedule_week:5})
  971. arr2.push({class_name:sixStr,schedule_week:6})
  972. arr2.push({class_name:sevenStr,schedule_week:0})
  973. var obj = {}
  974. obj.admin_user_id = "1000000"
  975. obj.user_name = "合计"
  976. obj.user_type = 10
  977. obj.list = arr2
  978. arr.push(obj)
  979. let data = []
  980. data.push(...newNurse)
  981. data.push(...newDoctor)
  982. data.push(obj)
  983. console.log("data2o2oo2o2o2o22o",data)
  984. // this.tableData = this.distinct(data)
  985. this.tableData = data
  986. }
  987. })
  988. },
  989. distinct(tempArr) {
  990. for (let i = 0; i < tempArr.length; i++) {
  991. for (let j = i + 1; j < tempArr.length; j++) {
  992. if (tempArr[i].admin_user_id == tempArr[j].admin_user_id) {
  993. tempArr.splice(j, 1);
  994. j--;
  995. };
  996. };
  997. };
  998. return tempArr;
  999. },
  1000. getClass(name,index){
  1001. if(name != undefined){
  1002. let newClass = '';
  1003. this.tableData.map(item => {
  1004. if(item.user_name == name){
  1005. if(item.list){
  1006. item.list.map(it => {
  1007. if(it.schedule_week == index){
  1008. newClass = it.class_name
  1009. }
  1010. })
  1011. }
  1012. }
  1013. })
  1014. return newClass
  1015. }
  1016. },
  1017. getClassAttributes(name,index){
  1018. if(name != undefined){
  1019. let newClass = '';
  1020. this.tableData.map(item => {
  1021. if(item.user_name == name){
  1022. if(item.list){
  1023. item.list.map(it => {
  1024. if(it.schedule_week == index){
  1025. newClass = it.class_attributes
  1026. }
  1027. })
  1028. }
  1029. }
  1030. })
  1031. return newClass
  1032. }
  1033. },
  1034. unique(arr) {
  1035. const res = new Map();
  1036. return arr.filter((arr) => !res.has(arr.admin_user_id) && res.set(arr.admin_user_id, 1))
  1037. },
  1038. //获取上一周下一周的排班数据
  1039. getNextWeekList(){
  1040. const params = {
  1041. start_time:this.getTimestamp(this.weekDayArr[0]),
  1042. end_time:this.getTimestamp(this.weekDayArr[6]),
  1043. doctor_id:parseInt(this.typeValue),
  1044. }
  1045. console.log("params232323",params)
  1046. getNextWeekList(params).then(response=>{
  1047. if(response.data.state == 1){
  1048. var staffList = response.data.data.staffList
  1049. // console.log("上下周数据",staffList)
  1050. var sevenStr = ""
  1051. var oneStr = ""
  1052. var twoStr = ""
  1053. var threeStr = ""
  1054. var fourStr = ""
  1055. var fiveStr = ""
  1056. var sixStr = ""
  1057. this.arrZero = []
  1058. this.arrOne = []
  1059. this.arrTwo = []
  1060. this.arrThree = []
  1061. this.arrFour = []
  1062. this.arrFive = []
  1063. this.arrSix = []
  1064. for(let i=0;i<staffList.length;i++){
  1065. if(staffList[i].schedule_week == 0){
  1066. staffList[i].class_index = 0
  1067. var arr = []
  1068. this.arrZero.push(staffList[i].class_name)
  1069. for(let i=0;i<this.arrZero.length;i++){
  1070. if(this.arrZero[i]!=''){
  1071. arr.push(this.arrZero[i])
  1072. }
  1073. }
  1074. var countedNames = arr.reduce(function (allNames, name) {
  1075. if (name in allNames) {
  1076. allNames[name]++;
  1077. }
  1078. else {
  1079. allNames[name] = 1;
  1080. }
  1081. return allNames;
  1082. }, {});
  1083. let objKey = Object.keys(countedNames)
  1084. let objVal = Object.values(countedNames)
  1085. var zeroStr = ''
  1086. objKey.map((item,index) => {
  1087. let objVal = Object.values(countedNames)
  1088. zeroStr += item + objVal[index] + '\n'
  1089. })
  1090. sevenStr = zeroStr
  1091. }
  1092. if(staffList[i].schedule_week == 1){
  1093. staffList[i].class_index = 1
  1094. var arr = []
  1095. this.arrOne.push(staffList[i].class_name)
  1096. for(let i=0;i<this.arrOne.length;i++){
  1097. if(this.arrOne[i]!=''){
  1098. arr.push(this.arrOne[i])
  1099. }
  1100. }
  1101. var countedNames = arr.reduce(function (allNames, name) {
  1102. if (name in allNames) {
  1103. allNames[name]++;
  1104. }
  1105. else {
  1106. allNames[name] = 1;
  1107. }
  1108. return allNames;
  1109. }, {});
  1110. let objKey = Object.keys(countedNames)
  1111. let objVal = Object.values(countedNames)
  1112. let strOne = ''
  1113. objKey.map((item,index) => {
  1114. let objVal = Object.values(countedNames)
  1115. strOne += item + objVal[index] + '\n'
  1116. })
  1117. oneStr = strOne
  1118. }
  1119. if(staffList[i].schedule_week == 2){
  1120. staffList[i].class_index = 2
  1121. var arr = []
  1122. this.arrTwo.push(staffList[i].class_name)
  1123. for(let i=0;i<this.arrTwo.length;i++){
  1124. if(this.arrTwo[i]!=''){
  1125. arr.push(this.arrTwo[i])
  1126. }
  1127. }
  1128. var countedNames = arr.reduce(function (allNames, name) {
  1129. if (name in allNames) {
  1130. allNames[name]++;
  1131. }
  1132. else {
  1133. allNames[name] = 1;
  1134. }
  1135. return allNames;
  1136. }, {});
  1137. let objKey = Object.keys(countedNames)
  1138. let objVal = Object.values(countedNames)
  1139. let strTwo = ''
  1140. objKey.map((item,index) => {
  1141. let objVal = Object.values(countedNames)
  1142. strTwo += item + objVal[index] + '\n'
  1143. })
  1144. twoStr = strTwo
  1145. }
  1146. if(staffList[i].schedule_week == 3){
  1147. staffList[i].class_index = 3
  1148. var arr = []
  1149. this.arrThree.push(staffList[i].class_name)
  1150. for(let i=0;i<this.arrThree.length;i++){
  1151. if(this.arrThree[i]!=''){
  1152. arr.push(this.arrThree[i])
  1153. }
  1154. }
  1155. var countedNames = arr.reduce(function (allNames, name) {
  1156. if (name in allNames) {
  1157. allNames[name]++;
  1158. }
  1159. else {
  1160. allNames[name] = 1;
  1161. }
  1162. return allNames;
  1163. }, {});
  1164. let objKey = Object.keys(countedNames)
  1165. let objVal = Object.values(countedNames)
  1166. let strThree = ''
  1167. objKey.map((item,index) => {
  1168. let objVal = Object.values(countedNames)
  1169. strThree += item + objVal[index] + '\n'
  1170. })
  1171. threeStr = strThree
  1172. }
  1173. if(staffList[i].schedule_week == 4){
  1174. staffList[i].class_index = 4
  1175. var arr = []
  1176. this.arrFour.push(staffList[i].class_name)
  1177. for(let i=0;i<this.arrFour.length;i++){
  1178. if(this.arrFour[i]!=''){
  1179. arr.push(this.arrFour[i])
  1180. }
  1181. }
  1182. var countedNames = arr.reduce(function (allNames, name) {
  1183. if (name in allNames) {
  1184. allNames[name]++;
  1185. }
  1186. else {
  1187. allNames[name] = 1;
  1188. }
  1189. return allNames;
  1190. }, {});
  1191. let objKey = Object.keys(countedNames)
  1192. let objVal = Object.values(countedNames)
  1193. let strFour = ''
  1194. objKey.map((item,index) => {
  1195. let objVal = Object.values(countedNames)
  1196. strFour += item + objVal[index] + '\n'
  1197. })
  1198. fourStr = strFour
  1199. }
  1200. if(staffList[i].schedule_week == 5){
  1201. staffList[i].class_index = 5
  1202. var arr = []
  1203. this.arrFive.push(staffList[i].class_name)
  1204. for(let i=0;i<this.arrFive.length;i++){
  1205. if(this.arrFive[i]!=''){
  1206. arr.push(this.arrFive[i])
  1207. }
  1208. }
  1209. var countedNames = arr.reduce(function (allNames, name) {
  1210. if (name in allNames) {
  1211. allNames[name]++;
  1212. }
  1213. else {
  1214. allNames[name] = 1;
  1215. }
  1216. return allNames;
  1217. }, {});
  1218. let objKey = Object.keys(countedNames)
  1219. let objVal = Object.values(countedNames)
  1220. let strFive = ''
  1221. objKey.map((item,index) => {
  1222. let objVal = Object.values(countedNames)
  1223. strFive += item + objVal[index] + '\n'
  1224. })
  1225. fiveStr = strFive
  1226. }
  1227. if(staffList[i].schedule_week == 6){
  1228. staffList[i].class_index = 6
  1229. var arr = []
  1230. this.arrSix.push(staffList[i].class_name)
  1231. for(let i=0;i<this.arrSix.length;i++){
  1232. if(this.arrSix[i]!=''){
  1233. arr.push(this.arrSix[i])
  1234. }
  1235. }
  1236. var countedNames = arr.reduce(function (allNames, name) {
  1237. if (name in allNames) {
  1238. allNames[name]++;
  1239. }
  1240. else {
  1241. allNames[name] = 1;
  1242. }
  1243. return allNames;
  1244. }, {});
  1245. let objKey = Object.keys(countedNames)
  1246. let objVal = Object.values(countedNames)
  1247. let strSix = ''
  1248. objKey.map((item,index) => {
  1249. let objVal = Object.values(countedNames)
  1250. strSix += item + objVal[index] + '\n'
  1251. })
  1252. sixStr = strSix
  1253. }
  1254. }
  1255. let tempArr = [], newArr = []
  1256. for (let i = 0; i < staffList.length; i++) {
  1257. if (tempArr.indexOf(staffList[i].user_name) === -1) {
  1258. newArr.push({
  1259. user_name: staffList[i].user_name,
  1260. admin_user_id:staffList[i].admin_user_id,
  1261. user_type:staffList[i].doctor_type,
  1262. is_sort:staffList[i].is_sort,
  1263. sort:staffList[i].sort,
  1264. 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}]
  1265. })
  1266. tempArr.push(staffList[i].user_name);
  1267. } else {
  1268. for (let j = 0; j < newArr.length; j++) {
  1269. if (newArr[j].user_name == staffList[i].user_name) {
  1270. 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})
  1271. }
  1272. }
  1273. }
  1274. }
  1275. let arr = [...newArr]
  1276. let newNurse = []
  1277. let newDoctor = []
  1278. arr.map(item => {
  1279. if(item.user_type == 2){
  1280. newDoctor.push(item)
  1281. }
  1282. if(item.user_type == 3){
  1283. newNurse.push(item)
  1284. }
  1285. })
  1286. //护士
  1287. newNurse.sort(this.compare('admin_user_id'))
  1288. let newNurseTableData = []
  1289. this.nurseTableData.map(item => {
  1290. if(item.is_sort == 1){
  1291. newNurseTableData.push(item)
  1292. }
  1293. })
  1294. newNurseTableData.sort(this.compare('admin_user_id'))
  1295. newNurseTableData.map((item,index) => {
  1296. if (newNurse[index] && item.admin_user_id == newNurse[index].admin_user_id) {
  1297. }else{
  1298. 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})
  1299. }
  1300. })
  1301. newNurse.sort(this.compare('sort'))
  1302. //医生
  1303. newDoctor.sort(this.compare('admin_user_id'))
  1304. let newDoctorTableData = []
  1305. this.doctorTableData.map(item => {
  1306. if(item.is_sort == 1){
  1307. newDoctorTableData.push(item)
  1308. }
  1309. })
  1310. newDoctorTableData.sort(this.compare('admin_user_id'))
  1311. newDoctorTableData.map((item,index) => {
  1312. if (newDoctor[index] && item.admin_user_id == newDoctor[index].admin_user_id) {
  1313. }else{
  1314. 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})
  1315. }
  1316. })
  1317. newDoctor.sort(this.compare('sort'))
  1318. // arr.sort(this.compare('admin_user_id'))
  1319. // this.doctorlist.sort(this.compare('admin_user_id'))
  1320. // this.doctorlist.forEach((item, index) => {
  1321. //   if (arr[index] && item.admin_user_id == arr[index].admin_user_id) {
  1322. //   }else{
  1323. //     arr.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: [],user_type:item.user_type})
  1324. //   }
  1325. // })
  1326. // arr.sort(this.compare('user_type'))
  1327. let arr2 = []
  1328. arr2.push({class_name:oneStr,schedule_week:1})
  1329. arr2.push({class_name:twoStr,schedule_week:2})
  1330. arr2.push({class_name:threeStr,schedule_week:3})
  1331. arr2.push({class_name:fourStr,schedule_week:4})
  1332. arr2.push({class_name:fiveStr,schedule_week:5})
  1333. arr2.push({class_name:sixStr,schedule_week:6})
  1334. arr2.push({class_name:sevenStr,schedule_week:0})
  1335. var obj = {}
  1336. obj.admin_user_id = "1000000"
  1337. obj.user_name = "合计"
  1338. obj.user_type = 10
  1339. obj.list = arr2
  1340. arr.push(obj)
  1341. if(parseInt(this.typeValue) == 2){
  1342. newNurse = []
  1343. }
  1344. if(parseInt(this.typeValue) == 3){
  1345. newDoctor = []
  1346. }
  1347. let data = []
  1348. data.push(...newNurse)
  1349. data.push(...newDoctor)
  1350. data.push(obj)
  1351. this.tableData = data
  1352. }
  1353. })
  1354. },
  1355. changeOption(id){
  1356. const params = {
  1357. start_time:this.getTimestamp(this.weekDayArr[0]),
  1358. end_time:this.getTimestamp(this.weekDayArr[6]),
  1359. doctor_id:id
  1360. }
  1361. getScheduleByDoctorId(params).then(response=>{
  1362. if(response.data.state == 1){
  1363. var staffList = response.data.data.staffList
  1364. // console.log("staffList",staffList)
  1365. var sevenStr = ""
  1366. var oneStr = ""
  1367. var twoStr = ""
  1368. var threeStr = ""
  1369. var fourStr = ""
  1370. var fiveStr = ""
  1371. var sixStr = ""
  1372. this.arrZero = []
  1373. this.arrOne = []
  1374. this.arrTwo = []
  1375. this.arrThree = []
  1376. this.arrFour = []
  1377. this.arrFive = []
  1378. this.arrSix = []
  1379. for(let i=0;i<staffList.length;i++){
  1380. if(staffList[i].schedule_week == 0){
  1381. staffList[i].class_index = 0
  1382. var arr = []
  1383. this.arrZero.push(staffList[i].class_name)
  1384. for(let i=0;i<this.arrZero.length;i++){
  1385. if(this.arrZero[i]!=''){
  1386. arr.push(this.arrZero[i])
  1387. }
  1388. }
  1389. var countedNames = arr.reduce(function (allNames, name) {
  1390. if (name in allNames) {
  1391. allNames[name]++;
  1392. }
  1393. else {
  1394. allNames[name] = 1;
  1395. }
  1396. return allNames;
  1397. }, {});
  1398. let objKey = Object.keys(countedNames)
  1399. let objVal = Object.values(countedNames)
  1400. var zeroStr = ''
  1401. objKey.map((item,index) => {
  1402. let objVal = Object.values(countedNames)
  1403. zeroStr += item + objVal[index] + '\n'
  1404. })
  1405. sevenStr = zeroStr
  1406. }
  1407. if(staffList[i].schedule_week == 1){
  1408. staffList[i].class_index = 1
  1409. var arr = []
  1410. this.arrOne.push(staffList[i].class_name)
  1411. for(let i=0;i<this.arrOne.length;i++){
  1412. if(this.arrOne[i]!=''){
  1413. arr.push(this.arrOne[i])
  1414. }
  1415. }
  1416. var countedNames = arr.reduce(function (allNames, name) {
  1417. if (name in allNames) {
  1418. allNames[name]++;
  1419. }
  1420. else {
  1421. allNames[name] = 1;
  1422. }
  1423. return allNames;
  1424. }, {});
  1425. let objKey = Object.keys(countedNames)
  1426. let objVal = Object.values(countedNames)
  1427. let strOne = ''
  1428. objKey.map((item,index) => {
  1429. let objVal = Object.values(countedNames)
  1430. strOne += item + objVal[index] + '\n'
  1431. })
  1432. oneStr = strOne
  1433. }
  1434. if(staffList[i].schedule_week == 2){
  1435. staffList[i].class_index = 2
  1436. var arr = []
  1437. this.arrTwo.push(staffList[i].class_name)
  1438. for(let i=0;i<this.arrTwo.length;i++){
  1439. if(this.arrTwo[i]!=''){
  1440. arr.push(this.arrTwo[i])
  1441. }
  1442. }
  1443. var countedNames = arr.reduce(function (allNames, name) {
  1444. if (name in allNames) {
  1445. allNames[name]++;
  1446. }
  1447. else {
  1448. allNames[name] = 1;
  1449. }
  1450. return allNames;
  1451. }, {});
  1452. let objKey = Object.keys(countedNames)
  1453. let objVal = Object.values(countedNames)
  1454. let strTwo = ''
  1455. objKey.map((item,index) => {
  1456. let objVal = Object.values(countedNames)
  1457. strTwo += item + objVal[index] + '\n'
  1458. })
  1459. twoStr = strTwo
  1460. }
  1461. if(staffList[i].schedule_week == 3){
  1462. staffList[i].class_index = 3
  1463. var arr = []
  1464. this.arrThree.push(staffList[i].class_name)
  1465. for(let i=0;i<this.arrThree.length;i++){
  1466. if(this.arrThree[i]!=''){
  1467. arr.push(this.arrThree[i])
  1468. }
  1469. }
  1470. var countedNames = arr.reduce(function (allNames, name) {
  1471. if (name in allNames) {
  1472. allNames[name]++;
  1473. }
  1474. else {
  1475. allNames[name] = 1;
  1476. }
  1477. return allNames;
  1478. }, {});
  1479. let objKey = Object.keys(countedNames)
  1480. let objVal = Object.values(countedNames)
  1481. let strThree = ''
  1482. objKey.map((item,index) => {
  1483. let objVal = Object.values(countedNames)
  1484. strThree += item + objVal[index] + '\n'
  1485. })
  1486. threeStr = strThree
  1487. }
  1488. if(staffList[i].schedule_week == 4){
  1489. staffList[i].class_index = 4
  1490. var arr = []
  1491. this.arrFour.push(staffList[i].class_name)
  1492. for(let i=0;i<this.arrFour.length;i++){
  1493. if(this.arrFour[i]!=''){
  1494. arr.push(this.arrFour[i])
  1495. }
  1496. }
  1497. var countedNames = arr.reduce(function (allNames, name) {
  1498. if (name in allNames) {
  1499. allNames[name]++;
  1500. }
  1501. else {
  1502. allNames[name] = 1;
  1503. }
  1504. return allNames;
  1505. }, {});
  1506. let objKey = Object.keys(countedNames)
  1507. let objVal = Object.values(countedNames)
  1508. let strFour = ''
  1509. objKey.map((item,index) => {
  1510. let objVal = Object.values(countedNames)
  1511. strFour += item + objVal[index] + '\n'
  1512. })
  1513. fourStr = strFour
  1514. }
  1515. if(staffList[i].schedule_week == 5){
  1516. staffList[i].class_index = 5
  1517. var arr = []
  1518. this.arrFive.push(staffList[i].class_name)
  1519. for(let i=0;i<this.arrFive.length;i++){
  1520. if(this.arrFive[i]!=''){
  1521. arr.push(this.arrFive[i])
  1522. }
  1523. }
  1524. var countedNames = arr.reduce(function (allNames, name) {
  1525. if (name in allNames) {
  1526. allNames[name]++;
  1527. }
  1528. else {
  1529. allNames[name] = 1;
  1530. }
  1531. return allNames;
  1532. }, {});
  1533. let objKey = Object.keys(countedNames)
  1534. let objVal = Object.values(countedNames)
  1535. let strFive = ''
  1536. objKey.map((item,index) => {
  1537. let objVal = Object.values(countedNames)
  1538. strFive += item + objVal[index] + '\n'
  1539. })
  1540. fiveStr = strFive
  1541. }
  1542. if(staffList[i].schedule_week == 6){
  1543. staffList[i].class_index = 6
  1544. var arr = []
  1545. this.arrSix.push(staffList[i].class_name)
  1546. for(let i=0;i<this.arrSix.length;i++){
  1547. if(this.arrSix[i]!=''){
  1548. arr.push(this.arrSix[i])
  1549. }
  1550. }
  1551. var countedNames = arr.reduce(function (allNames, name) {
  1552. if (name in allNames) {
  1553. allNames[name]++;
  1554. }
  1555. else {
  1556. allNames[name] = 1;
  1557. }
  1558. return allNames;
  1559. }, {});
  1560. let objKey = Object.keys(countedNames)
  1561. let objVal = Object.values(countedNames)
  1562. let strSix = ''
  1563. objKey.map((item,index) => {
  1564. let objVal = Object.values(countedNames)
  1565. strSix += item + objVal[index] + '\n'
  1566. })
  1567. sixStr = strSix
  1568. }
  1569. }
  1570. let tempArr = [], newArr = []
  1571. for (let i = 0; i < staffList.length; i++) {
  1572. if (tempArr.indexOf(staffList[i].user_name) === -1) {
  1573. newArr.push({
  1574. user_name: staffList[i].user_name,
  1575. admin_user_id:staffList[i].admin_user_id,
  1576. user_type:staffList[i].doctor_type,
  1577. is_sort:staffList[i].is_sort,
  1578. sort:staffList[i].sort,
  1579. 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}]
  1580. })
  1581. tempArr.push(staffList[i].user_name);
  1582. } else {
  1583. for (let j = 0; j < newArr.length; j++) {
  1584. if (newArr[j].user_name == staffList[i].user_name) {
  1585. 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})
  1586. }
  1587. }
  1588. }
  1589. }
  1590. let arr = [...newArr]
  1591. let newNurse = []
  1592. let newDoctor = []
  1593. arr.map(item => {
  1594. if(item.user_type == 2){
  1595. newDoctor.push(item)
  1596. }
  1597. if(item.user_type == 3){
  1598. newNurse.push(item)
  1599. }
  1600. })
  1601. if(id == 0){
  1602. //护士
  1603. newNurse.sort(this.compare('admin_user_id'))
  1604. let newNurseTableData = []
  1605. this.nurseTableData.map(item => {
  1606. if(item.is_sort == 1){
  1607. newNurseTableData.push(item)
  1608. }
  1609. })
  1610. newNurseTableData.sort(this.compare('admin_user_id'))
  1611. newNurseTableData.map((item,index) => {
  1612. if (newNurse[index] && item.admin_user_id == newNurse[index].admin_user_id) {
  1613. }else{
  1614. 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})
  1615. }
  1616. })
  1617. newNurse.sort(this.compare('sort'))
  1618. //医生
  1619. newDoctor.sort(this.compare('admin_user_id'))
  1620. let newDoctorTableData = []
  1621. this.doctorTableData.map(item => {
  1622. if(item.is_sort == 1){
  1623. newDoctorTableData.push(item)
  1624. }
  1625. })
  1626. newDoctorTableData.sort(this.compare('admin_user_id'))
  1627. newDoctorTableData.map((item,index) => {
  1628. if (newDoctor[index] && item.admin_user_id == newDoctor[index].admin_user_id) {
  1629. }else{
  1630. 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})
  1631. }
  1632. })
  1633. newDoctor.sort(this.compare('sort'))
  1634. // let data = []
  1635. // data.push(...newNurse)
  1636. // data.push(...newDoctor)
  1637. // this.tableData = data
  1638. let arr2 = []
  1639. arr2.push({class_name:oneStr,schedule_week:1})
  1640. arr2.push({class_name:twoStr,schedule_week:2})
  1641. arr2.push({class_name:threeStr,schedule_week:3})
  1642. arr2.push({class_name:fourStr,schedule_week:4})
  1643. arr2.push({class_name:fiveStr,schedule_week:5})
  1644. arr2.push({class_name:sixStr,schedule_week:6})
  1645. arr2.push({class_name:sevenStr,schedule_week:0})
  1646. var obj = {}
  1647. obj.admin_user_id = "1000000"
  1648. obj.user_name = "合计"
  1649. obj.user_type = 10
  1650. obj.list = arr2
  1651. arr.push(obj)
  1652. let data = []
  1653. data.push(...newNurse)
  1654. data.push(...newDoctor)
  1655. data.push(obj)
  1656. this.tableData = data
  1657. }
  1658. if(id == 2){
  1659. newDoctor.sort(this.compare('admin_user_id'))
  1660. let newDoctorTableData = []
  1661. this.doctorTableData.map(item => {
  1662. if(item.is_sort == 1){
  1663. newDoctorTableData.push(item)
  1664. }
  1665. })
  1666. newDoctorTableData.sort(this.compare('admin_user_id'))
  1667. newDoctorTableData.map((item,index) => {
  1668. if (newDoctor[index] && item.admin_user_id == newDoctor[index].admin_user_id) {
  1669. }else{
  1670. 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})
  1671. }
  1672. })
  1673. newDoctor.sort(this.compare('sort'))
  1674. // this.tableData = newDoctor
  1675. let arr2 = []
  1676. arr2.push({class_name:oneStr,schedule_week:1})
  1677. arr2.push({class_name:twoStr,schedule_week:2})
  1678. arr2.push({class_name:threeStr,schedule_week:3})
  1679. arr2.push({class_name:fourStr,schedule_week:4})
  1680. arr2.push({class_name:fiveStr,schedule_week:5})
  1681. arr2.push({class_name:sixStr,schedule_week:6})
  1682. arr2.push({class_name:sevenStr,schedule_week:0})
  1683. var obj = {}
  1684. obj.admin_user_id = "1000000"
  1685. obj.user_name = "合计"
  1686. obj.user_type = 10
  1687. obj.list = arr2
  1688. arr.push(obj)
  1689. let data = []
  1690. data.push(...newDoctor)
  1691. data.push(obj)
  1692. this.tableData = data
  1693. }
  1694. if(id == 3){
  1695. newNurse.sort(this.compare('admin_user_id'))
  1696. let newNurseTableData = []
  1697. this.nurseTableData.map(item => {
  1698. if(item.is_sort == 1){
  1699. newNurseTableData.push(item)
  1700. }
  1701. })
  1702. newNurseTableData.sort(this.compare('admin_user_id'))
  1703. newNurseTableData.map((item,index) => {
  1704. if (newNurse[index] && item.admin_user_id == newNurse[index].admin_user_id) {
  1705. }else{
  1706. 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})
  1707. }
  1708. })
  1709. newNurse.sort(this.compare('sort'))
  1710. // this.tableData = newNurse
  1711. let arr2 = []
  1712. arr2.push({class_name:oneStr,schedule_week:1})
  1713. arr2.push({class_name:twoStr,schedule_week:2})
  1714. arr2.push({class_name:threeStr,schedule_week:3})
  1715. arr2.push({class_name:fourStr,schedule_week:4})
  1716. arr2.push({class_name:fiveStr,schedule_week:5})
  1717. arr2.push({class_name:sixStr,schedule_week:6})
  1718. arr2.push({class_name:sevenStr,schedule_week:0})
  1719. var obj = {}
  1720. obj.admin_user_id = "1000000"
  1721. obj.user_name = "合计"
  1722. obj.user_type = 10
  1723. obj.list = arr2
  1724. arr.push(obj)
  1725. let data = []
  1726. data.push(...newNurse)
  1727. data.push(obj)
  1728. this.tableData = data
  1729. console.log('cccccc',this.tableData);
  1730. }
  1731. }
  1732. })
  1733. },
  1734. toSearch(){
  1735. const params = {
  1736. user_name: this.keywords,
  1737. start_time:this.getTimestamp(this.weekDayArr[0]),
  1738. end_time:this.getTimestamp(this.weekDayArr[6])
  1739. }
  1740. toSearchScheduleList(params).then(response=>{
  1741. if(response.data.state == 1){
  1742. var staffList = response.data.data.staffList
  1743. // console.log("搜索",staffList)
  1744. let tempArr = [], newArr = []
  1745. for (let i = 0; i < staffList.length; i++) {
  1746. if (tempArr.indexOf(staffList[i].user_name) === -1) {
  1747. newArr.push({
  1748. user_name: staffList[i].user_name,
  1749. admin_user_id:staffList[i].admin_user_id,
  1750. 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}]
  1751. })
  1752. tempArr.push(staffList[i].user_name);
  1753. } else {
  1754. for (let j = 0; j < newArr.length; j++) {
  1755. if (newArr[j].user_name == staffList[i].user_name) {
  1756. 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})
  1757. }
  1758. }
  1759. }
  1760. }
  1761. if(this.keywords != ''){
  1762. this.tableData = newArr
  1763. }else{
  1764. let arr = [...newArr]
  1765. arr.sort(this.compare('admin_user_id'))
  1766. this.doctorlist.sort(this.compare('admin_user_id'))
  1767. this.doctorlist.forEach((item, index) => {
  1768.   if (arr[index] && item.admin_user_id == arr[index].admin_user_id) {
  1769.   }else{
  1770.     arr.splice(index, 0, {user_name: item.user_name, admin_user_id: item.admin_user_id, list: []})
  1771.     // console.log("arr",arr)
  1772.   }
  1773. })
  1774. this.tableData = arr
  1775. }
  1776. }
  1777. })
  1778. },
  1779. DeleteStaffSchedule(){
  1780. const params = {
  1781. start_time:this.getTimestamp(this.weekDayArr[0]),
  1782. end_time:this.getTimestamp(this.weekDayArr[6])
  1783. }
  1784. this.$confirm(
  1785. '是否要清除当周排班? <br>清除后,信息将无法恢复',
  1786. '删除提示',
  1787. {
  1788. dangerouslyUseHTMLString: true,
  1789. confirmButtonText: '确定',
  1790. cancelButtonText: '取消',
  1791. type: 'warning'
  1792. }
  1793. ).then(()=>{
  1794. DeleteStaffSchedule(params).then(response=>{
  1795. if(response.data.state == 1){
  1796. var msg = response.data.data.msg
  1797. this.$message.success("清除成功")
  1798. this.getStaffScheduleList()
  1799. }
  1800. })
  1801. })
  1802. },
  1803. copyStaffSchedule(){
  1804. this.newVisible = true
  1805. const params = {
  1806. start_time:this.getTimestamp(this.weekDayArr[0]),
  1807. end_time:this.getTimestamp(this.weekDayArr[6])
  1808. }
  1809. copyStaffSchedule(params).then(response=>{
  1810. if(response.data.state == 1){
  1811. var msg = response.data.data.msg
  1812. console.log("msg",msg)
  1813. this.$message.success("复制成功")
  1814. }else{
  1815. this.$message.error("排班已存在")
  1816. }
  1817. })
  1818. },
  1819. toContinuous(){
  1820. var is_status = 0
  1821. if(this.isChecked == false){
  1822. is_status = 0
  1823. }
  1824. if(this.isChecked == true){
  1825. is_status = 1
  1826. }
  1827. const params = {
  1828. is_status:is_status
  1829. }
  1830. UpdateContinusSchedule(params).then(response=>{
  1831. if(response.data.state == 1){
  1832. var schedule = response.data.data.schedule
  1833. this.$message.success("保存成功")
  1834. }
  1835. })
  1836. },
  1837. setDate1 (date) {
  1838. var week = date.getDay() - 1
  1839. date = this.addDate(date, week * -1)
  1840. this.currentDate = new Date(date)
  1841. let arr1 = []
  1842. for (var i = 0; i < this.clen; i++) {
  1843. arr1.push(this.formatDate(i == 0 ? date : this.addDate(date, 1)))
  1844. }
  1845. this.weekList.push(arr1)
  1846. let num = this.weekNum
  1847. this.currentFirstDate1 = num + 1
  1848. },
  1849. submitAction(formName){
  1850. var label = ""
  1851. for(let i=0;i<this.timeOptions.length;i++){
  1852. if(this.form.copyWeek == this.timeOptions[i].value){
  1853. label = this.timeOptions[i].label
  1854. }
  1855. }
  1856. var start = label.split('~')
  1857. var copy_startime = this.getTimestamp(start[0])
  1858. var copy_endtime = this.getTimestamp(start[1])
  1859. const params = {
  1860. start_time:this.getTimestamp(this.weekDayArr[0]),
  1861. end_time:this.getTimestamp(this.weekDayArr[6]),
  1862. copy_startime:copy_startime,
  1863. copy_endtime:copy_endtime,
  1864. }
  1865. this.$refs[formName].validate(valid=>{
  1866. if(valid){
  1867. if(!this.copySchLoading){
  1868. this.copySchLoading = true
  1869. copyStaffSchedule(params).then(response=>{
  1870. if(response.data.state == 1){
  1871. var msg = response.data.data.msg
  1872. this.copySchLoading = false
  1873. this.$message.success("复制成功")
  1874. this.newVisible = false
  1875. }else{
  1876. this.copySchLoading = false
  1877. this.$message.error("排班已存在")
  1878. }
  1879. })
  1880. }
  1881. }
  1882. })
  1883. },
  1884. compare(property){
  1885. return function(a,b){
  1886. var value1 = a[property];
  1887. var value2 = b[property];
  1888. return value2 - value1;
  1889. }
  1890. },
  1891. tableCellStyle (row, rowIndex, column) {
  1892. var week = (row.column.label).split('');
  1893. var weeks = 0
  1894. if (week.length == 13) {
  1895. weeks = week[4]+week[5]+week[6]+week[7]+week[8]+week[9]+week[10]+week[11]
  1896. }
  1897. if (week.length == 14) {
  1898. weeks = week[4]+week[5]+week[6]+week[7]+week[8]+week[9]+week[10]+week[11]+week[12]
  1899. }
  1900. var weekdate = this.getTimestamp(weeks)
  1901. if(weekdate < this.timeNow){
  1902. return 'background-color:#e5e5e5;'
  1903. }
  1904. },
  1905. setting(){
  1906. this.nurseVisible = true
  1907. },
  1908. _close: function(done) {
  1909. done();
  1910. },
  1911. changeSort(val){
  1912. console.log('val',val)
  1913. const params = {
  1914. sort:parseInt(val.sort),
  1915. id:val.id,
  1916. }
  1917. console.log("params",params)
  1918. SaveNurseSort(params).then(response=>{
  1919. if(response.data.state == 1){
  1920. var role = response.data.data.role
  1921. this.$message.success("保存成功")
  1922. this.getDoctorList()
  1923. }
  1924. })
  1925. },
  1926. changeRadio(val){
  1927. console.log("val",val)
  1928. const params = {
  1929. id:val.id,
  1930. is_sort:val.is_sort,
  1931. }
  1932. SaveIsSchedule(params).then(response=>{
  1933. if(response.data.state == 1){
  1934. var role = response.data.data.role
  1935. this.$message.success("保存成功")
  1936. this.getDoctorList()
  1937. }
  1938. })
  1939. },
  1940. toExport(){
  1941. this.exportDialogVisible = true
  1942. },
  1943. getTimestamp(time) { //把时间日期转成时间戳
  1944. return (new Date(time)).getTime() / 1000
  1945. },
  1946. exportList(){
  1947. import('@/vendor/Export2Excel').then(excel => {
  1948. for(let i=0;i<this.tableData.length;i++){
  1949. this.tableData[i].monday = this.getClass(this.tableData[i].user_name,1)
  1950. this.tableData[i].tuesday = this.getClass(this.tableData[i].user_name,2)
  1951. this.tableData[i].wednesday = this.getClass(this.tableData[i].user_name,3)
  1952. this.tableData[i].thursday = this.getClass(this.tableData[i].user_name,4)
  1953. this.tableData[i].friday = this.getClass(this.tableData[i].user_name,5)
  1954. this.tableData[i].saturday = this.getClass(this.tableData[i].user_name,6)
  1955. this.tableData[i].weekday = this.getClass(this.tableData[i].user_name,0)
  1956. }
  1957. console.log("this.table",this.tableData)
  1958. const tHeader = ['医护姓名', '周一'+"("+this.weekDayArr[0]+")" , '周二'+"("+this.weekDayArr[1]+")", '周三'+"("+this.weekDayArr[2]+")" , '周四'+"("+this.weekDayArr[3]+")" , '周五'+"("+this.weekDayArr[4]+")" , '周六'+"("+this.weekDayArr[5]+")",'周日'+"("+this.weekDayArr[6]+")"]
  1959. const filterVal = ['user_name', 'monday', 'tuesday','wednesday','thursday','friday','saturday','weekday']
  1960. const data = this.formatJson(filterVal,this.tableData)
  1961. console.log("data",data)
  1962. excel.export_json_to_excel({
  1963. header: tHeader,
  1964. data,
  1965. filename: '医护排班'
  1966. })
  1967. this.downloadLoading = false
  1968. })
  1969. },
  1970. formatJson(filterVal, jsonData) {
  1971. return jsonData.map(v => filterVal.map(j => v[j]))
  1972. },
  1973. toClick(row,index){
  1974. this.$confirm(
  1975. '是否要清除当前排班? <br>清除后,信息将无法恢复',
  1976. '删除提示',
  1977. {
  1978. dangerouslyUseHTMLString: true,
  1979. confirmButtonText: '确定',
  1980. cancelButtonText: '取消',
  1981. type: 'warning'
  1982. }
  1983. ).then(()=>{
  1984. DeleteStaffScheduleById(row.id).then(response=>{
  1985. if(response.data.state == 1){
  1986. var msg = response.data.data.msg
  1987. this.$message.success("清除成功")
  1988. this.getStaffScheduleList()
  1989. }
  1990. })
  1991. })
  1992. },
  1993. hoverMouse(row,column, cell, event){
  1994. this.name=row.user_name
  1995. this.column_lie= column.label.split('\n')[0]
  1996. },
  1997. leavemouse(row, column, cell, event){
  1998. this.name=''
  1999. }
  2000. },
  2001. created(){
  2002. //获取医护人员
  2003. this.getDoctorList()
  2004. //获取班种班种
  2005. this.getScheduleList()
  2006. let year = new Date().getFullYear()
  2007. let month = new Date().getMonth() + 1
  2008. let date = new Date().getDate()
  2009. this.weekNum = this.getYearWeek(year,month,date)
  2010. this.todayDate=this.formatDate(new Date())
  2011. this.setDate(new Date())
  2012. for (var i = 0; i <= 9; i++) {
  2013. this.setDate1(this.addDate(this.currentDate, 7))
  2014. }
  2015. let newNum = 0
  2016. for(let i = 0; i < this.weekList.length; i++){
  2017. if(this.weekNum + i + 1 <= 53){
  2018. let num = this.weekNum + i + 1
  2019. let str = this.weekList[i][0] + '~' + this.weekList[i][6] + '(' + num + ')'
  2020. this.typeOptions.push({value:i,label:str})
  2021. let stt = this.weekList[i][0] +"~"+this.weekList[i][6]
  2022. this.timeOptions.push({value:i,label:stt})
  2023. }else{
  2024. newNum++
  2025. let str = this.weekList[i][0] + '~' + this.weekList[i][6] + '(' + newNum + ')'
  2026. this.typeOptions.push({value:i,label:str})
  2027. let stt = this.weekList[i][0] +"~"+this.weekList[i][6]
  2028. this.timeOptions.push({value:i,label:stt})
  2029. }
  2030. }
  2031. var now = moment().locale('zh-cn').format('YYYY-MM-DD 00:00:00')
  2032. this.timeNow = this.getTimestamp(now)
  2033. }
  2034. }
  2035. </script>
  2036. <style lang="scss" scoped>
  2037. .dateBox{
  2038. border: 1px solid #DCDFE6;
  2039. height: 36px;
  2040. line-height: 36px;
  2041. text-align: center;
  2042. padding: 0 10px;
  2043. border-radius: 4px;
  2044. }
  2045. .classBox{
  2046. width:28%;
  2047. height: 100%;
  2048. border: 1px solid #d0d3da;
  2049. .classTitle{
  2050. height: 42px;
  2051. text-align: center;
  2052. line-height: 42px;
  2053. background-color: rgb(245, 247, 250);
  2054. color: rgb(96, 98, 102);
  2055. font-weight:bold;
  2056. }
  2057. .classMain{
  2058. height: 400px;
  2059. padding: 0 0 0 20px;
  2060. display: flex;
  2061. justify-content: space-between;
  2062. flex-direction: column;
  2063. >div>p{
  2064. line-height: 30px;
  2065. color: rgb(48, 49, 51);
  2066. }
  2067. .classMainBox{
  2068. height: 350px;
  2069. overflow-y: auto;
  2070. }
  2071. }
  2072. }
  2073. </style>
  2074. <style lang="scss">
  2075. .schedulingTable{
  2076. .el-table .cell {
  2077. white-space: pre-line;/*保留换行符*/
  2078. }
  2079. }
  2080. .el-dropdown-menu{
  2081. max-height:96%;
  2082. overflow-y: auto;
  2083. }
  2084. .del_table_btns {
  2085. position: absolute;
  2086. right: 0px;
  2087. top: -3px;
  2088. // visibility: hidden;
  2089. .el-button {
  2090. width: 15px;
  2091. height: 15px;
  2092. padding: 0px;
  2093. }
  2094. }
  2095. </style>