AppIndex.vue 64 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212
  1. <template>
  2. <div class="app-index">
  3. <div class="specimen-view">
  4. <!-- 头部 -->
  5. <div class="specimen-header">
  6. <div class="specimen-logo">
  7. <img
  8. src="./../assets/images/login_logo.png"
  9. class="pharmacy-logo__img"
  10. alt=""
  11. />
  12. <h1 class="pharmacy-logo__name">大势医院输送保障管理平台</h1>
  13. </div>
  14. <div class="specimen-menu">
  15. <div
  16. class="specimen-menu-box"
  17. :class="{ active: currentNavIndex == item.id }"
  18. v-for="item in navInfo"
  19. :key="item.id"
  20. @click="navClick(item.id)"
  21. >
  22. {{ item.name }}
  23. </div>
  24. </div>
  25. <div class="totalNum" v-if="currentNavIndex == 1">
  26. 今日产生标本<span>{{ totalNum }}</span
  27. >只
  28. </div>
  29. <div class="totalNum parent" v-if="currentNavIndex == 5">
  30. <div>
  31. 今日请领药品总数:<span>{{ totalDrugNum.sum }}</span>
  32. </div>
  33. <div>
  34. 今日待配送药品总数:<span>{{ totalDrugNum.dpssum }}</span>
  35. </div>
  36. </div>
  37. <div class="totalNum parent" v-if="currentNavIndex == 4">
  38. <div>
  39. <div>
  40. 今日重点关注患者人数:<span>{{ totalParentNum.parentNum }}</span>
  41. </div>
  42. <div>
  43. 今日待检查数:<span>{{ totalParentNum.speNum }}</span>
  44. </div>
  45. </div>
  46. <div>
  47. <div>
  48. 今日转科总数:<span>{{ totalParentNum.zyNum }}</span>
  49. </div>
  50. <div>
  51. 今日检查总数:<span>{{ totalParentNum.gdjczsNum }}</span>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="totalNum currentNavIndex3" v-if="currentNavIndex == 2">
  56. <select v-model="groupId2" @change="selectGroup()">
  57. <option value="0">所有分组</option>
  58. <option :value="item.id" v-for="item in groups2" :key="item.id">
  59. {{ item.groupName }}
  60. </option>
  61. </select>
  62. </div>
  63. <div class="totalNum currentNavIndex3" v-if="currentNavIndex == 3">
  64. <select v-model="groupId3" @change="selectGroup()">
  65. <option value="0">所有人</option>
  66. <option :value="item.id" v-for="item in groups3" :key="item.id">
  67. {{ item.groupName }}
  68. </option>
  69. </select>
  70. <input type="text" v-model="parameter" placeholder="请输入搜索内容" />
  71. <button @click="search()">搜索</button>
  72. <button @click="resetCache()">重置缓存</button>
  73. </div>
  74. </div>
  75. <!-- 主体 -->
  76. <div
  77. class="main"
  78. style="position: relative"
  79. v-show="
  80. (!loading1 && !loading5 && currentNavIndex == 1) ||
  81. (!loading2 && !loading5 && !loading10 && currentNavIndex == 2) ||
  82. (!loading4 && !loading5 && !loading10 && currentNavIndex == 3) ||
  83. (!loading5 && !loading6 && currentNavIndex == 4) ||
  84. (!loading5 && !loading9 && currentNavIndex == 5)
  85. "
  86. >
  87. <!-- 科室标本视图 -->
  88. <div
  89. class="main-box"
  90. v-show="
  91. currentNavIndex == 1 && swiperList.length && !loading1 && !loading5
  92. "
  93. :class="{ marquee_top: animate }"
  94. :style="{
  95. transform: 'translateX(' + 100 * n + 'vw)',
  96. width: 100 * swiperList.length + 'vw',
  97. }"
  98. >
  99. <div
  100. class="main-box-item-wrap"
  101. v-for="(swiper, i) in swiperList"
  102. :key="i"
  103. >
  104. <div
  105. class="main-box-item main-box-item-w4--ks"
  106. v-for="item in swiper"
  107. :key="item.deptId"
  108. @click="detail(item)"
  109. >
  110. <div class="main-box-item-header">
  111. <h2>{{ item.deptName }}</h2>
  112. <strong>{{ item.num }}</strong>
  113. <strong v-if="item.userName">{{ item.userName }}</strong>
  114. </div>
  115. <div class="main-box-item-content">
  116. <div
  117. class="main-box-item-contentBox"
  118. :class="[item.urgent > 0 ? 'red' : 'green']"
  119. >
  120. <h3>{{ item.urgent }}</h3>
  121. <p>急标</p>
  122. </div>
  123. <div class="main-box-item-contentBox green">
  124. <h3>{{ item.noUrgent }}</h3>
  125. <p>普标</p>
  126. </div>
  127. </div>
  128. </div>
  129. </div>
  130. </div>
  131. <div
  132. class="cot_img"
  133. v-show="
  134. currentNavIndex == 1 &&
  135. swiperList.length == 0 &&
  136. !loading1 &&
  137. !loading5
  138. "
  139. >
  140. <span>暂无数据</span>
  141. </div>
  142. <!-- 人员信息 -->
  143. <div
  144. class="main-box message_cot"
  145. v-show="currentNavIndex == 2 && !loading2 && !loading5 && !loading10"
  146. >
  147. <!-- --------------------------------start----------------------------- -->
  148. <div
  149. class="cot_all_wrap"
  150. v-show="currentNavIndex == 2 && workerMessage.length"
  151. :class="{ marquee_top: animate }"
  152. :style="{
  153. transform:
  154. 'translateX(calc(' + 100 * n + 'vw - ' + 32 * n + 'px))',
  155. width:
  156. 'calc(' +
  157. 100 * workerMessage.length +
  158. 'vw - ' +
  159. 32 * workerMessage.length +
  160. 'px)',
  161. }"
  162. >
  163. <div class="cot_all" v-for="(worke, i) in workerMessage" :key="i">
  164. <div class="cot sevenCol" v-for="data in worke" :key="data.id">
  165. <div class="first">
  166. <div class="first_first">
  167. <span>{{ data.name }}</span>
  168. <span v-if="data.phone" class="first_firstPhone"
  169. >({{ data.phone }})</span
  170. >
  171. </div>
  172. <span>累计{{ data.totalCount }}单</span>
  173. <span
  174. class="times imptime"
  175. v-if="
  176. data.freetime === '今日还未接单' || data.freetime === null
  177. "
  178. >{{ data.freetime }}</span
  179. >
  180. <span
  181. class="times imptime imptime-green"
  182. v-if="
  183. data.freetime !== '今日还未接单' && data.freetime !== null
  184. "
  185. >{{ "空闲时间" + data.freetime }}</span
  186. >
  187. </div>
  188. <div class="second">
  189. <span v-if="data.workingFlag">{{ data.gdType }}</span>
  190. <span
  191. :class="{ fr: true, colorRed: data.timeOut == true }"
  192. v-if="data.workingFlag"
  193. >{{ data.gdState }}</span
  194. >
  195. </div>
  196. </div>
  197. </div>
  198. </div>
  199. </div>
  200. <div
  201. class="cot_img"
  202. v-show="
  203. currentNavIndex == 2 &&
  204. workerMessage.length == 0 &&
  205. !loading2 &&
  206. !loading5 &&
  207. !loading10
  208. "
  209. >
  210. <span>暂无数据</span>
  211. </div>
  212. <!-- 人员上班下班状态 -->
  213. <div
  214. class="main-box message_cot message_on"
  215. v-show="currentNavIndex == 3 && !loading4 && !loading5 && !loading10"
  216. >
  217. <!-- --------------------------------start----------------------------- -->
  218. <div
  219. class="cot_all_wrap"
  220. v-show="currentNavIndex == 3 && onlines.length"
  221. :class="{ marquee_top: animate }"
  222. :style="{
  223. transform:
  224. 'translateX(calc(' + 100 * n + 'vw - ' + 32 * n + 'px))',
  225. width:
  226. 'calc(' +
  227. 100 * onlines.length +
  228. 'vw - ' +
  229. 32 * onlines.length +
  230. 'px)',
  231. }"
  232. >
  233. <div class="cot_all" v-for="(online, i) in onlines" :key="i">
  234. <div class="cot sevenCol" v-for="data in online" :key="data.id">
  235. <div class="header_on">
  236. <span style="font-weight: bold">{{ data.name }}</span>
  237. <span :style="{ color: data.online ? 'green' : 'red' }"
  238. ><button
  239. v-if="data.online"
  240. class="goWork"
  241. @click="showModelC(data)"
  242. >
  243. 下班</button
  244. >{{ data.online ? "已上班" : "已下班" }}</span
  245. >
  246. </div>
  247. <div
  248. class="headerItem_on"
  249. :title="data.dataList.length ? data.dataList[0][1] : '-'"
  250. >
  251. {{
  252. (data.dataList.length ? data.dataList[0][1] : "-") | length6
  253. }}
  254. <span v-if="data.online">{{ data.time }}</span>
  255. </div>
  256. <div class="headerItem_on_two" :title="data.depts || '-'">
  257. {{ data.depts || "-" }}
  258. </div>
  259. </div>
  260. </div>
  261. </div>
  262. </div>
  263. <div
  264. class="cot_img"
  265. v-show="
  266. currentNavIndex == 3 &&
  267. onlines.length == 0 &&
  268. !loading4 &&
  269. !loading5 &&
  270. !loading10
  271. "
  272. >
  273. <span>暂无数据</span>
  274. </div>
  275. <!-- 病房患者视图 -->
  276. <div
  277. class="main-box"
  278. v-show="
  279. currentNavIndex == 4 && parentList.length && !loading5 && !loading6
  280. "
  281. :class="{ marquee_top: animate }"
  282. :style="{
  283. transform: 'translateX(' + 100 * n + 'vw)',
  284. width: 100 * parentList.length + 'vw',
  285. }"
  286. >
  287. <div
  288. class="main-box-item-wrap"
  289. v-for="(swiper, i) in parentList"
  290. :key="i"
  291. >
  292. <div
  293. class="main-box-item main-box-item-w4"
  294. v-for="item in swiper"
  295. :key="item.id"
  296. @click="detailSpe(item)"
  297. >
  298. <div class="main-box-item-header pp">
  299. <h2 :title="item.name">{{ item.name }}</h2>
  300. <div>{{ item.gdjczs }}</div>
  301. <strong
  302. >{{ item.userName ? item.userName : ""
  303. }}<span>{{ item.phone ? item.phone : "" }}</span></strong
  304. >
  305. </div>
  306. <div class="main-box-item-content">
  307. <div
  308. class="main-box-item-contentBox green"
  309. @click.stop="detailParent(item)"
  310. >
  311. <h3>{{ item.patientnum }}</h3>
  312. <p>重点关注患者人数</p>
  313. </div>
  314. <div class="main-box-item-contentBox green">
  315. <h3>{{ item.jczs }}</h3>
  316. <p>待检查数</p>
  317. </div>
  318. <div class="main-box-item-contentBox green">
  319. <h3>{{ item.gdnum }}</h3>
  320. <p>转科总数</p>
  321. </div>
  322. </div>
  323. </div>
  324. </div>
  325. </div>
  326. <div
  327. class="cot_img"
  328. v-show="
  329. currentNavIndex == 4 &&
  330. parentList.length == 0 &&
  331. !loading5 &&
  332. !loading6
  333. "
  334. >
  335. <span>暂无数据</span>
  336. </div>
  337. <!-- 药房药品请领单 -->
  338. <div
  339. class="main-box"
  340. v-show="
  341. currentNavIndex == 5 && drugList.length && !loading5 && !loading9
  342. "
  343. :class="{ marquee_top: animate }"
  344. :style="{
  345. transform: 'translateX(' + 100 * n + 'vw)',
  346. width: 100 * drugList.length + 'vw',
  347. }"
  348. >
  349. <div
  350. class="main-box-item-wrap"
  351. v-for="(swiper, i) in drugList"
  352. :key="i"
  353. >
  354. <div class="main-box-item" v-for="item in swiper" :key="item.id">
  355. <div class="main-box-item-header">
  356. <h2>{{ item.name }}</h2>
  357. <strong>{{ item.num }}</strong>
  358. </div>
  359. <div class="main-box-item-content">
  360. <div class="main-box-item-contentBox green" style="width: 100%">
  361. <h3>{{ item.dpssum }}</h3>
  362. <p>待配送</p>
  363. </div>
  364. </div>
  365. </div>
  366. </div>
  367. </div>
  368. <div
  369. class="cot_img"
  370. v-show="
  371. currentNavIndex == 5 &&
  372. drugList.length == 0 &&
  373. !loading5 &&
  374. !loading9
  375. "
  376. >
  377. <span>暂无数据</span>
  378. </div>
  379. <!-- --------------------------------end----------------------------- -->
  380. </div>
  381. <div
  382. class="main loading"
  383. v-show="
  384. ((loading1 || loading5) && currentNavIndex == 1) ||
  385. ((loading2 || loading5 || loading10) && currentNavIndex == 2) ||
  386. ((loading4 || loading5 || loading10) && currentNavIndex == 3) ||
  387. ((loading5 || loading6) && currentNavIndex == 4) ||
  388. ((loading5 || loading9) && currentNavIndex == 5)
  389. "
  390. >
  391. <img src="./../assets/images/loading.gif" alt="" />
  392. <p>正在加载中</p>
  393. </div>
  394. <!-- 底部 -->
  395. <div
  396. class="footer"
  397. v-show="currentNavIndex == 1 && !loading5 && !loading1"
  398. >
  399. <div
  400. class="dot"
  401. v-for="(item, i) in swiperList"
  402. :key="i"
  403. :class="{ active: currentSwiperIndex == i }"
  404. @click="dotClick(i)"
  405. ></div>
  406. </div>
  407. <div
  408. class="footer"
  409. v-show="currentNavIndex == 2 && !loading5 && !loading2 && !loading10"
  410. >
  411. <div
  412. class="dot"
  413. v-for="(item, i) in workerMessage"
  414. :key="i"
  415. :class="{ active: currentSwiperIndex == i }"
  416. @click="dotClick(i)"
  417. ></div>
  418. </div>
  419. <div
  420. class="footer"
  421. v-show="currentNavIndex == 3 && !loading5 && !loading4 && !loading10"
  422. >
  423. <div
  424. class="dot"
  425. v-for="(item, i) in onlines"
  426. :key="i"
  427. :class="{ active: currentSwiperIndex == i }"
  428. @click="dotClick(i)"
  429. ></div>
  430. </div>
  431. <div
  432. class="footer"
  433. v-show="currentNavIndex == 4 && !loading5 && !loading6"
  434. >
  435. <div
  436. class="dot"
  437. v-for="(item, i) in parentList"
  438. :key="i"
  439. :class="{ active: currentSwiperIndex == i }"
  440. @click="dotClick(i)"
  441. ></div>
  442. </div>
  443. <div
  444. class="footer"
  445. v-show="currentNavIndex == 5 && !loading5 && !loading9"
  446. >
  447. <div
  448. class="dot"
  449. v-for="(item, i) in drugList"
  450. :key="i"
  451. :class="{ active: currentSwiperIndex == i }"
  452. @click="dotClick(i)"
  453. ></div>
  454. </div>
  455. <!-- 标本科室视图弹层 -->
  456. <div v-if="detailModel" :class="{ detailModel }">
  457. <div class="box">
  458. <h2 class="title">
  459. <div class="operateTitle">
  460. 标本详情
  461. <div class="operate checkbox">
  462. <label>
  463. <input type="checkbox" value="332" v-model="speState" /><span
  464. >未收取</span
  465. >
  466. </label>
  467. <label>
  468. <input type="checkbox" value="333" v-model="speState" /><span
  469. >已收取</span
  470. >
  471. </label>
  472. </div>
  473. </div>
  474. </h2>
  475. <div class="table">
  476. <div class="table-content">
  477. <table>
  478. <thead>
  479. <tr>
  480. <th>序号</th>
  481. <th>标本类型</th>
  482. <th>标本编码</th>
  483. <th>患者姓名</th>
  484. <th>床号</th>
  485. <th>采集时间</th>
  486. <th>目标科室</th>
  487. <th>收取人</th>
  488. </tr>
  489. </thead>
  490. <tbody>
  491. <vueCustomScrollbar
  492. style="height: 100%"
  493. v-if="detailList.length && !loading3"
  494. >
  495. <tr
  496. v-for="(detail, i) in detailList"
  497. :key="detail.id"
  498. :style="{ background: i % 2 === 1 ? '#fff' : '#f9fafb' }"
  499. >
  500. <td>{{ i + 1 }}</td>
  501. <td>{{ detail.stype ? detail.stype.name : "-" }}</td>
  502. <td>{{ detail.scode || "-" }}</td>
  503. <td>{{ detail.patientName || "-" }}</td>
  504. <td>{{ detail.bedNum || "-" }}</td>
  505. <td>
  506. {{ detail.printDate || "-" }}
  507. </td>
  508. <td>
  509. {{ detail.checkDept ? detail.checkDept.dept : "-" }}
  510. <div
  511. v-if="detail.urgent != 0"
  512. :class="{
  513. ji: detail.urgent == 1,
  514. }"
  515. ></div>
  516. </td>
  517. <td>{{ detail.receiver || "-" }}</td>
  518. </tr>
  519. </vueCustomScrollbar>
  520. <div
  521. style="font-size: 18px"
  522. v-if="!detailList.length && !loading3"
  523. class="noData"
  524. >
  525. 暂无数据
  526. </div>
  527. <div class="loading" v-if="loading3">
  528. <img src="./../assets/images/loading.gif" alt="" />
  529. <p>正在加载中</p>
  530. </div>
  531. </tbody>
  532. </table>
  533. </div>
  534. </div>
  535. <div class="btns">
  536. <div class="btn" @click="hideModel()">知道了</div>
  537. </div>
  538. <i class="icon_transport transport-guanbi" @click="hideModel()"></i>
  539. </div>
  540. </div>
  541. <!-- 病房患者视图弹层-重点关注患者详情 -->
  542. <div v-if="detailParentModel" :class="{ detailModel: detailParentModel }">
  543. <div class="box" style="width: 660px">
  544. <h2 class="title">重点关注患者详情</h2>
  545. <div class="table" style="width: 620px">
  546. <div class="table-content" style="width: 556px">
  547. <table>
  548. <thead>
  549. <tr>
  550. <th>序号</th>
  551. <th>患者姓名</th>
  552. <th>患者编码</th>
  553. <th>床号</th>
  554. </tr>
  555. </thead>
  556. <tbody>
  557. <vueCustomScrollbar
  558. style="height: 100%"
  559. v-if="detailParentList.length && !loading7"
  560. >
  561. <tr
  562. v-for="(detail, i) in detailParentList"
  563. :key="detail.id"
  564. :style="{ background: i % 2 === 1 ? '#fff' : '#f9fafb' }"
  565. >
  566. <td>{{ i + 1 }}</td>
  567. <td>{{ detail.patientName || "-" }}</td>
  568. <td>
  569. {{ detail.patientCode || "-" }}
  570. </td>
  571. <td>
  572. {{ detail.bedNum || "-" }}
  573. </td>
  574. </tr>
  575. </vueCustomScrollbar>
  576. <div
  577. style="font-size: 18px"
  578. v-if="!detailParentList.length && !loading7"
  579. class="noData"
  580. >
  581. 暂无数据
  582. </div>
  583. <div class="loading" v-if="loading7">
  584. <img src="./../assets/images/loading.gif" alt="" />
  585. <p>正在加载中</p>
  586. </div>
  587. </tbody>
  588. </table>
  589. </div>
  590. </div>
  591. <div class="btns">
  592. <div class="btn" @click="hideParentModel()">知道了</div>
  593. </div>
  594. <i
  595. class="icon_transport transport-guanbi"
  596. @click="hideParentModel()"
  597. ></i>
  598. </div>
  599. </div>
  600. <!-- 病房患者视图弹层-患者检查详情 -->
  601. <div
  602. v-if="detailSpeModel"
  603. :class="{ detailModel: detailSpeModel }"
  604. class="detailModelParent"
  605. >
  606. <div class="box" style="width: 1274px">
  607. <h2 class="title">
  608. <div class="operateTitle">
  609. 患者检查详情
  610. <div class="operate radio">
  611. <label>
  612. <span>所有检查</span
  613. ><input
  614. type="radio"
  615. value="666"
  616. v-model="inspectState"
  617. /><i></i>
  618. </label>
  619. <label>
  620. <span>待检查</span
  621. ><input
  622. type="radio"
  623. value="307"
  624. v-model="inspectState"
  625. /><i></i>
  626. </label>
  627. </div>
  628. </div>
  629. </h2>
  630. <div class="table" style="width: 1234px">
  631. <div class="table-content" style="width: 1170px">
  632. <table>
  633. <thead>
  634. <tr>
  635. <th>序号</th>
  636. <th style="width: 150px !important">患者姓名(床号)</th>
  637. <th>检查项目</th>
  638. <th>预约时间</th>
  639. <th>叫号信息</th>
  640. <th>检查科室</th>
  641. <th style="width: 70px !important">是否建单</th>
  642. <th style="width: 70px !important">是否送达</th>
  643. <th>送达时间</th>
  644. <th style="width: 70px !important">检查状态</th>
  645. <th>陪检人</th>
  646. </tr>
  647. </thead>
  648. <tbody>
  649. <vueCustomScrollbar
  650. style="height: 100%"
  651. v-if="detailSpeList.length && !loading8"
  652. >
  653. <tr
  654. v-for="(detail, i) in detailSpeList"
  655. :key="detail.id"
  656. :style="{ background: i % 2 === 1 ? '#fff' : '#f9fafb' }"
  657. >
  658. <td>{{ i + 1 }}</td>
  659. <td
  660. style="width: 150px !important"
  661. :style="{
  662. color: detail.focusPatient == 1 ? 'red' : '',
  663. }"
  664. >
  665. {{ detail.patientName || "-" }}
  666. <span v-if="detail.bedNum">({{ detail.bedNum }})</span>
  667. </td>
  668. <td>{{ detail.inspectName || "-" }}</td>
  669. <td>{{ detail.yyTime || "-" }}</td>
  670. <td>{{ detail.reservationNumber || "-" }}</td>
  671. <td>
  672. {{ detail.execDept ? detail.execDept.dept : "-" }}
  673. </td>
  674. <td style="width: 70px !important">
  675. {{ detail.gdId ? "是" : "否" }}
  676. </td>
  677. <td style="width: 70px !important">
  678. {{ detail.arriveTime ? "是" : "否" }}
  679. </td>
  680. <td>{{ detail.arriveTime || "-" }}</td>
  681. <td style="width: 70px !important">
  682. {{
  683. detail.inspectState ? detail.inspectState.name : "-"
  684. }}
  685. </td>
  686. <td></td>
  687. </tr>
  688. </vueCustomScrollbar>
  689. <div
  690. style="font-size: 18px"
  691. v-if="!detailSpeList.length && !loading8"
  692. class="noData"
  693. >
  694. 暂无数据
  695. </div>
  696. <div class="loading" v-if="loading8">
  697. <img src="./../assets/images/loading.gif" alt="" />
  698. <p>正在加载中</p>
  699. </div>
  700. </tbody>
  701. </table>
  702. </div>
  703. </div>
  704. <div class="btns">
  705. <div class="btn" @click="hideSpeModel()">知道了</div>
  706. </div>
  707. <i
  708. class="icon_transport transport-guanbi"
  709. @click="hideSpeModel()"
  710. ></i>
  711. </div>
  712. </div>
  713. </div>
  714. <!-- 模态框 -->
  715. <showModel
  716. :model="model"
  717. @ok="ok()"
  718. @know="know()"
  719. @cancel="cancel()"
  720. :operate="modelData"
  721. :content="modelContent"
  722. :icon="icon"
  723. :loading="loading"
  724. ></showModel>
  725. </div>
  726. </template>
  727. <script>
  728. import { AES, mode, pad, enc } from "crypto-js";
  729. import vueCustomScrollbar from "vue-custom-scrollbar";
  730. import { get, post } from "./../http/http";
  731. import showModel from "./../components/showModel";
  732. export default {
  733. name: "AppIndex",
  734. components: {
  735. vueCustomScrollbar,
  736. showModel,
  737. },
  738. filters: {
  739. length6: function(value) {
  740. return value.slice(0, 6);
  741. },
  742. },
  743. data() {
  744. return {
  745. loading1: false, //科室标本视图列表加载
  746. loading2: false, //人员信息列表加载
  747. loading3: false,
  748. loading4: false, //人员上下班状态列表加载
  749. loading5: false, //当前工作分配方案获取加载
  750. loading6: false, //病房患者列表加载
  751. loading7: false,
  752. loading8: false,
  753. loading9: false, //获取药房药品请领单列表加载
  754. loading10: false, //获取所有分组加载
  755. detailModel: false, //详情弹层(标本科室视图)
  756. detailParentModel: false, //详情弹层(病房患者视图-患者)
  757. detailSpeModel: false, //详情弹层(病房患者视图-检查)
  758. userData: null, //当前登录人信息
  759. timer: null, //无限(请求接口1)
  760. timer1: null, //无限滚动(1)
  761. timer2: null, //无限(请求接口2)
  762. timer3: null, //无限滚动(2)
  763. timer4: null, //无限(请求接口3)
  764. timer44: null, //无限滚动(3)
  765. timer5: null, //无限(请求接口4)
  766. timer55: null, //无限滚动(4)
  767. timer6: null, //无限(请求接口5)
  768. timer66: null, //无限滚动(5)
  769. animate: false,
  770. n: 0,
  771. // 所有分组-人员信息
  772. groups2: [],
  773. // 所有人-人员上下班状态
  774. groups3: [],
  775. //导航信息
  776. navInfo: [],
  777. //当前导航选中
  778. currentNavIndex: 1,
  779. //轮播信息
  780. swiperList: [],
  781. //药房药品请领单信息
  782. drugList: [],
  783. //病房患者列表
  784. parentList: [],
  785. //当前轮播选中
  786. currentSwiperIndex: 0,
  787. //人员信息
  788. workerMessage: [],
  789. //详情列表(标本科室视图)
  790. detailList: [],
  791. //详情列表(病房患者列表-患者)
  792. detailParentList: [],
  793. //详情列表(病房患者列表-检查)
  794. detailSpeList: [],
  795. // 上下班信息列表
  796. onlines: [],
  797. // 今日产生标本多少只
  798. totalNum: 0,
  799. totalDrugNum: {
  800. sum: 0, //今日请领药品总数
  801. dpssum: 0, //今日待配送药品总数
  802. },
  803. totalParentNum: {
  804. parentNum: 0, //今日重点关注患者人数
  805. speNum: 0, //今日检查数
  806. zyNum: 0, //今日转科总数
  807. gdjczsNum: 0, //今日检查总数
  808. },
  809. // 模态框显示
  810. model: false,
  811. // 模态框按钮数据
  812. modelData: {},
  813. // 模态框按钮数据
  814. modelContent: "",
  815. // 模态框图标
  816. icon: "",
  817. // 模态框loading
  818. loading: false,
  819. // 当前选中的数据
  820. coopData: {},
  821. // 搜索的文本
  822. parameter: "",
  823. // 搜索的分组-人员信息
  824. groupId2: 0,
  825. // 搜索的分组-人员上下班
  826. groupId3: 0,
  827. // 1是综合排班,2是自选排班
  828. workType: 0,
  829. //科室标本的标本详情 332是未收取 333是已收取
  830. speState: [],
  831. //科室标本,当前选中的科室
  832. currentSpecimenDept: null,
  833. //病房患者的标本详情 307是待检查
  834. inspectState: "",
  835. //病房患者,当前选中的科室
  836. currentInspectDept: null,
  837. };
  838. },
  839. watch: {
  840. //科室标本的标本详情,已收取,未收取
  841. speState() {
  842. this.getDetailBySpecimen(this.currentSpecimenDept);
  843. },
  844. //病房患者的检查详情
  845. inspectState() {
  846. this.getDetailByInspect(this.currentInspectDept);
  847. },
  848. },
  849. methods: {
  850. // 搜索分组
  851. selectGroup() {
  852. this.navClick(this.currentNavIndex);
  853. },
  854. // 搜索
  855. search() {
  856. this.loading4 = true;
  857. this.navClick(3);
  858. },
  859. // 重置缓存
  860. resetCache() {
  861. this.model = true;
  862. this.loading = true;
  863. get("/ser/refreshTaskType")
  864. .then((res) => {
  865. this.loading = false;
  866. if (res.state == 200) {
  867. this.model = true;
  868. this.icon = "success";
  869. this.modelContent = "重置缓存成功!";
  870. this.modelData = {
  871. know: "知道了",
  872. };
  873. } else {
  874. this.model = true;
  875. this.icon = "error";
  876. this.modelContent = "重置缓存失败!";
  877. this.modelData = {
  878. know: "知道了",
  879. };
  880. }
  881. })
  882. .catch(() => {
  883. this.loading = false;
  884. this.model = true;
  885. this.icon = "error";
  886. this.modelContent = "重置缓存失败!";
  887. this.modelData = {
  888. know: "知道了",
  889. };
  890. });
  891. },
  892. // 下班
  893. showModelC(coopData) {
  894. this.model = true;
  895. this.icon = "warn";
  896. this.modelContent = `您确定要让【${coopData.name}】下班吗?`;
  897. this.modelData = {
  898. ok: "确定",
  899. cancel: "取消",
  900. };
  901. this.coopData = coopData;
  902. },
  903. cancel() {
  904. this.model = false;
  905. },
  906. know() {
  907. this.model = false;
  908. this.navClick(3);
  909. },
  910. normalWork() {
  911. get("/auth/onOrOffLinePc/off/" + this.coopData.id).then((result2) => {
  912. if (result2.status == 200) {
  913. post("/auth/sendOffline", { userid: this.coopData.id }).then(
  914. (res) => {
  915. if (res.status == 200) {
  916. this.model = true;
  917. this.icon = "success";
  918. this.modelContent = "下班成功!";
  919. this.modelData = {
  920. know: "知道了",
  921. };
  922. }
  923. }
  924. );
  925. } else {
  926. this.model = true;
  927. this.icon = "error";
  928. this.modelContent = result2.msg;
  929. this.modelData = {
  930. know: "知道了",
  931. };
  932. }
  933. });
  934. },
  935. // 确认
  936. ok() {
  937. this.model = false;
  938. if (this.coopData.dataList.length) {
  939. if (this.workType == 2 && this.coopData.dataList[0][2] == 3) {
  940. //综合排班,并且是科室绑定人员
  941. post("/auth/customOfflinePc", { userId: this.coopData.id }).then(
  942. (result1) => {
  943. if (result1.status == 200) {
  944. this.normalWork();
  945. }
  946. }
  947. );
  948. }
  949. } else {
  950. this.normalWork();
  951. }
  952. },
  953. //aes解密
  954. encryptByDeAES(data) {
  955. let Key = "dsadmin";
  956. let tmpDeAES = AES.decrypt(data, Key, {
  957. mode: mode.CBC,
  958. padding: pad.Pkcs7,
  959. });
  960. return tmpDeAES.toString(enc.Utf8);
  961. },
  962. // 点击详情(标本科室视图)
  963. detail(item) {
  964. console.log(item);
  965. clearTimeout(this.timer);
  966. clearTimeout(this.timer1);
  967. this.speState = ["333", "332"];
  968. this.currentSpecimenDept = item;
  969. this.detailModel = true;
  970. },
  971. // 获取标本详情(标本科室视图)
  972. getDetailBySpecimen(item) {
  973. let postData = {
  974. hosIds: this.$route.params.hosIds,
  975. deptId: item.deptId,
  976. urgent: -1,
  977. };
  978. if (this.speState.length > 0) {
  979. postData.speState = this.speState.toString();
  980. } else if (this.speState.length === 0) {
  981. this.detailList = [];
  982. return;
  983. }
  984. this.loading3 = true;
  985. post("/nurse/getListSpecimenDetails", postData).then((result) => {
  986. this.loading3 = false;
  987. if (result.status == 200) {
  988. this.detailList = result.data || [];
  989. }
  990. });
  991. },
  992. hideModel() {
  993. this.detailModel = false;
  994. this.polling();
  995. this.scrollInfinite();
  996. },
  997. // 点击详情(病房患者视图->重点关注患者人数)
  998. detailParent(item) {
  999. console.log(item);
  1000. clearTimeout(this.timer5);
  1001. clearTimeout(this.timer55);
  1002. this.detailParentModel = true;
  1003. let postData = {
  1004. hosIds: this.$route.params.hosIds,
  1005. deptid: item.id,
  1006. };
  1007. this.loading7 = true;
  1008. post("/nurse/getViewData/getPatient", postData).then((result) => {
  1009. this.loading7 = false;
  1010. this.detailParentList = result.patients || [];
  1011. });
  1012. },
  1013. hideParentModel() {
  1014. this.detailParentModel = false;
  1015. this.polling();
  1016. this.scrollInfinite();
  1017. },
  1018. // 点击详情(病房患者视图->患者检查详情)
  1019. detailSpe(item) {
  1020. console.log(item);
  1021. clearTimeout(this.timer5);
  1022. clearTimeout(this.timer55);
  1023. this.currentInspectDept = item;
  1024. this.detailSpeModel = true;
  1025. this.getDetailByInspect(this.currentInspectDept);
  1026. if (this.inspectState !== "666") {
  1027. this.inspectState = "666";
  1028. }
  1029. },
  1030. // 获取检查详情(病房患者视图)
  1031. getDetailByInspect(item) {
  1032. let postData = {
  1033. hosIds: this.$route.params.hosIds,
  1034. deptId: item.id,
  1035. };
  1036. if (this.inspectState) {
  1037. if (this.inspectState === "307") {
  1038. postData.inspectState = this.inspectState;
  1039. }
  1040. } else {
  1041. this.detailSpeList = [];
  1042. return;
  1043. }
  1044. this.loading8 = true;
  1045. post("/nurse/getViewData/getInspect", postData).then((result) => {
  1046. this.loading8 = false;
  1047. this.detailSpeList = result.inspects || [];
  1048. });
  1049. },
  1050. hideSpeModel() {
  1051. this.detailSpeModel = false;
  1052. this.polling();
  1053. this.scrollInfinite();
  1054. },
  1055. // 导航菜单点击
  1056. navClick(id) {
  1057. this.currentNavIndex = id;
  1058. this.n = 0;
  1059. this.currentSwiperIndex = 0;
  1060. this.animate = false;
  1061. //id:1科室标本视图,id:2人员信息
  1062. if (id == 1) {
  1063. clearTimeout(this.timer2);
  1064. clearTimeout(this.timer3);
  1065. clearTimeout(this.timer4);
  1066. clearTimeout(this.timer44);
  1067. clearTimeout(this.timer5);
  1068. clearTimeout(this.timer55);
  1069. clearTimeout(this.timer6);
  1070. clearTimeout(this.timer66);
  1071. this.dotClick(0);
  1072. this.polling();
  1073. this.getListSpecimenWorkOrderMsg();
  1074. } else if (id == 2) {
  1075. clearTimeout(this.timer);
  1076. clearTimeout(this.timer1);
  1077. clearTimeout(this.timer4);
  1078. clearTimeout(this.timer44);
  1079. clearTimeout(this.timer5);
  1080. clearTimeout(this.timer55);
  1081. clearTimeout(this.timer6);
  1082. clearTimeout(this.timer66);
  1083. this.dotClick(0);
  1084. this.polling();
  1085. this.getWorkerMessage();
  1086. } else if (id == 3) {
  1087. clearTimeout(this.timer);
  1088. clearTimeout(this.timer1);
  1089. clearTimeout(this.timer2);
  1090. clearTimeout(this.timer3);
  1091. clearTimeout(this.timer5);
  1092. clearTimeout(this.timer55);
  1093. clearTimeout(this.timer6);
  1094. clearTimeout(this.timer66);
  1095. this.dotClick(0);
  1096. this.polling();
  1097. this.getOnlines();
  1098. } else if (id == 4) {
  1099. clearTimeout(this.timer);
  1100. clearTimeout(this.timer1);
  1101. clearTimeout(this.timer2);
  1102. clearTimeout(this.timer3);
  1103. clearTimeout(this.timer4);
  1104. clearTimeout(this.timer44);
  1105. clearTimeout(this.timer6);
  1106. clearTimeout(this.timer66);
  1107. this.dotClick(0);
  1108. this.polling();
  1109. this.getListParent();
  1110. } else if (id == 5) {
  1111. clearTimeout(this.timer);
  1112. clearTimeout(this.timer1);
  1113. clearTimeout(this.timer2);
  1114. clearTimeout(this.timer3);
  1115. clearTimeout(this.timer4);
  1116. clearTimeout(this.timer44);
  1117. clearTimeout(this.timer5);
  1118. clearTimeout(this.timer55);
  1119. this.dotClick(0);
  1120. this.polling();
  1121. this.getListDrug();
  1122. }
  1123. },
  1124. //提示点点击
  1125. dotClick(i) {
  1126. clearTimeout(this.timer1);
  1127. clearTimeout(this.timer3);
  1128. clearTimeout(this.timer44);
  1129. clearTimeout(this.timer55);
  1130. clearTimeout(this.timer66);
  1131. this.currentSwiperIndex = i - 1;
  1132. this.n = -i + 1;
  1133. this.showMarquee();
  1134. this.scrollInfinite();
  1135. },
  1136. // 无限滚动
  1137. scrollInfinite() {
  1138. if (this.currentNavIndex == 1) {
  1139. clearTimeout(this.timer1);
  1140. this.timer1 = setTimeout(() => {
  1141. this.showMarquee();
  1142. this.scrollInfinite();
  1143. }, 20000);
  1144. } else if (this.currentNavIndex == 2) {
  1145. clearTimeout(this.timer3);
  1146. this.timer3 = setTimeout(() => {
  1147. this.showMarquee();
  1148. this.scrollInfinite();
  1149. }, 20000);
  1150. } else if (this.currentNavIndex == 3) {
  1151. clearTimeout(this.timer44);
  1152. this.timer44 = setTimeout(() => {
  1153. this.showMarquee();
  1154. this.scrollInfinite();
  1155. }, 20000);
  1156. } else if (this.currentNavIndex == 4) {
  1157. clearTimeout(this.timer55);
  1158. this.timer55 = setTimeout(() => {
  1159. this.showMarquee();
  1160. this.scrollInfinite();
  1161. }, 20000);
  1162. } else if (this.currentNavIndex == 5) {
  1163. clearTimeout(this.timer66);
  1164. this.timer66 = setTimeout(() => {
  1165. this.showMarquee();
  1166. this.scrollInfinite();
  1167. }, 20000);
  1168. }
  1169. },
  1170. // 处理数组方法
  1171. showMarquee() {
  1172. this.animate = true;
  1173. this.n--;
  1174. this.currentSwiperIndex++;
  1175. if (this.n === -this.swiperList.length && this.currentNavIndex == 1) {
  1176. this.animate = true;
  1177. this.n = 0;
  1178. this.currentSwiperIndex = 0;
  1179. }
  1180. if (this.n === -this.workerMessage.length && this.currentNavIndex == 2) {
  1181. this.animate = true;
  1182. this.n = 0;
  1183. this.currentSwiperIndex = 0;
  1184. }
  1185. if (this.n === -this.onlines.length && this.currentNavIndex == 3) {
  1186. this.animate = true;
  1187. this.n = 0;
  1188. this.currentSwiperIndex = 0;
  1189. }
  1190. if (this.n === -this.parentList.length && this.currentNavIndex == 4) {
  1191. this.animate = true;
  1192. this.n = 0;
  1193. this.currentSwiperIndex = 0;
  1194. }
  1195. if (this.n === -this.drugList.length && this.currentNavIndex == 5) {
  1196. this.animate = true;
  1197. this.n = 0;
  1198. this.currentSwiperIndex = 0;
  1199. }
  1200. },
  1201. //切割数组,固定个数
  1202. reSetData(dataList, num) {
  1203. let arr = [];
  1204. let len = dataList.length;
  1205. for (let i = 0; i < len; i += num) {
  1206. arr.push(dataList.slice(i, i + num));
  1207. }
  1208. return arr;
  1209. },
  1210. // 获取科室标本列表
  1211. getListSpecimenWorkOrderMsg(flag = true) {
  1212. if (this.userData.length === 0) {
  1213. //非法访问
  1214. return;
  1215. }
  1216. let postData = {
  1217. hosIds: this.$route.params.hosIds,
  1218. };
  1219. this.loading1 = flag;
  1220. console.log(this.loading1, this.loading5, this.currentNavIndex);
  1221. post("/nurse/getListSpecimenWorkOrderMsg", postData).then((result) => {
  1222. console.log(result);
  1223. this.loading1 = false;
  1224. if (result.status == 200) {
  1225. this.totalNum = result.data.num;
  1226. this.swiperList = this.reSetData(result.data.tempList, 16);
  1227. console.log(this.swiperList);
  1228. this.scrollInfinite();
  1229. if (!this.loading1 && !this.loading5) {
  1230. this.polling();
  1231. }
  1232. }
  1233. });
  1234. },
  1235. // 获取药房药品请领单列表
  1236. getListDrug(flag = true) {
  1237. if (this.userData.length === 0) {
  1238. //非法访问
  1239. return;
  1240. }
  1241. let postData = {
  1242. hosIds: this.$route.params.hosIds,
  1243. };
  1244. this.loading9 = flag;
  1245. post("/nurse/getViewData/drugs", postData).then((result) => {
  1246. console.log(result);
  1247. this.loading9 = false;
  1248. if (result.status == 200) {
  1249. this.totalDrugNum = {
  1250. sum: result.sum,
  1251. dpssum: result.dpssum,
  1252. };
  1253. this.drugList = this.reSetData(result.data, 20);
  1254. console.log(this.drugList);
  1255. this.scrollInfinite();
  1256. if (!this.loading5 && !this.loading9) {
  1257. this.polling();
  1258. }
  1259. }
  1260. });
  1261. },
  1262. // 获取病房患者列表
  1263. getListParent(flag = true) {
  1264. if (this.userData.length === 0) {
  1265. //非法访问
  1266. return;
  1267. }
  1268. let postData = {
  1269. hosIds: this.$route.params.hosIds,
  1270. };
  1271. this.loading6 = flag;
  1272. post("/nurse/getViewData/patient", postData).then((result) => {
  1273. console.log(result);
  1274. this.loading6 = false;
  1275. if (result.status == 200) {
  1276. this.totalParentNum = {
  1277. parentNum: result.patientnum, //今日重点关注患者人数
  1278. speNum: result.jczs, //今日待检查数
  1279. zyNum: result.gdnum, //今日转科总数
  1280. gdjczsNum: result.gdjczs, //今日检查总数
  1281. };
  1282. this.parentList = this.reSetData(result.data, 16);
  1283. this.scrollInfinite();
  1284. if (!this.loading5 && !this.loading6) {
  1285. this.polling();
  1286. }
  1287. }
  1288. });
  1289. },
  1290. // 轮询请求
  1291. polling() {
  1292. if (this.currentNavIndex == 1) {
  1293. clearTimeout(this.timer);
  1294. this.timer = setTimeout(() => {
  1295. this.getListSpecimenWorkOrderMsg(false);
  1296. }, 30000);
  1297. } else if (this.currentNavIndex == 2) {
  1298. clearTimeout(this.timer2);
  1299. this.timer2 = setTimeout(() => {
  1300. this.getWorkerMessage(false);
  1301. }, 30000);
  1302. } else if (this.currentNavIndex == 3) {
  1303. clearTimeout(this.timer4);
  1304. this.timer4 = setTimeout(() => {
  1305. this.getOnlines(false);
  1306. }, 30000);
  1307. } else if (this.currentNavIndex == 4) {
  1308. clearTimeout(this.timer5);
  1309. this.timer5 = setTimeout(() => {
  1310. this.getListParent(false);
  1311. }, 30000);
  1312. } else if (this.currentNavIndex == 5) {
  1313. clearTimeout(this.timer6);
  1314. this.timer6 = setTimeout(() => {
  1315. this.getListDrug(false);
  1316. }, 30000);
  1317. }
  1318. },
  1319. //获取人员信息
  1320. getWorkerMessage(flag = true) {
  1321. let groups = [];
  1322. if (this.userData.length === 0) {
  1323. //非法访问
  1324. return;
  1325. }
  1326. let postData1 = {
  1327. idx: 0,
  1328. sum: 999,
  1329. group2: { hospitals: this.$route.params.hosIds },
  1330. };
  1331. this.loading2 = flag;
  1332. post("/data/fetchDataList/group2", postData1).then((result1) => {
  1333. if (result1.status == 200) {
  1334. this.groups2 = result1.list;
  1335. if (this.groupId2 != 0) {
  1336. groups = [this.groupId2];
  1337. } else {
  1338. this.groups2.forEach((e) => {
  1339. groups.push(e.id);
  1340. });
  1341. }
  1342. let postData = {
  1343. groups,
  1344. idx: 0,
  1345. sum: 9999,
  1346. };
  1347. post("/ser/getWorkInfo", postData).then((result) => {
  1348. this.loading2 = false;
  1349. if (result.status == 200) {
  1350. this.workerMessage = this.reSetData(result.data, 56);
  1351. this.scrollInfinite();
  1352. if (!this.loading2 && !this.loading5 && !this.loading10) {
  1353. this.polling();
  1354. }
  1355. }
  1356. });
  1357. }
  1358. });
  1359. },
  1360. //获取人员上班下班状态
  1361. getOnlines(flag = true) {
  1362. if (this.userData.length === 0) {
  1363. //非法访问
  1364. return;
  1365. }
  1366. this.getGroups();
  1367. let postData = {
  1368. hosIds: this.$route.params.hosIds,
  1369. parameter: this.parameter,
  1370. };
  1371. if (this.groupId3 != 0) {
  1372. postData.groupId = this.groupId3;
  1373. }
  1374. this.loading4 = flag;
  1375. post("/nurse/getUserOnlineStatusMsg", postData).then((result) => {
  1376. this.loading4 = false;
  1377. if (result.status == 200) {
  1378. result.data.forEach((item) => {
  1379. if (item.dataList.length) {
  1380. item.depts = item.dataList.map((v) => v[0]).join(",");
  1381. }
  1382. });
  1383. this.onlines = this.reSetData(result.data, 24);
  1384. this.scrollInfinite();
  1385. if (!this.loading4 && !this.loading5 && !this.loading10) {
  1386. this.polling();
  1387. }
  1388. }
  1389. });
  1390. },
  1391. // 获取所有分组
  1392. getGroups(flag = true) {
  1393. let postData = {
  1394. idx: 0,
  1395. sum: 999,
  1396. group2: { hospitals: this.$route.params.hosIds + "" },
  1397. };
  1398. this.loading10 = flag;
  1399. post("/data/fetchDataList/group2", postData).then((result) => {
  1400. if (result.status == 200) {
  1401. this.loading10 = false;
  1402. this.groups3 = result.list;
  1403. }
  1404. });
  1405. },
  1406. // 获取当前工作方案
  1407. getWorkType() {
  1408. let postData = {
  1409. idx: 0,
  1410. workScheme: {
  1411. status: 1,
  1412. hosId: this.$route.params.hosIds,
  1413. },
  1414. sum: 1,
  1415. };
  1416. post("/simple/data/fetchDataList/workScheme", postData).then((result) => {
  1417. this.loading5 = false;
  1418. if (result.status == 200) {
  1419. this.workType = result.list[0].workType; //1是综合排班,2是自选排班
  1420. if (this.workType == 2) {
  1421. this.navInfo = [
  1422. { id: 1, name: "科室标本" },
  1423. { id: 4, name: "病房患者" },
  1424. { id: 5, name: "药房药品请领单" },
  1425. { id: 2, name: "人员信息" },
  1426. { id: 3, name: "人员上班下班状态" },
  1427. ];
  1428. } else {
  1429. this.navInfo = [
  1430. { id: 1, name: "科室标本" },
  1431. { id: 4, name: "病房患者" },
  1432. { id: 5, name: "药房药品请领单" },
  1433. { id: 2, name: "人员信息" },
  1434. ];
  1435. }
  1436. this.loading1 = false;
  1437. this.getListSpecimenWorkOrderMsg();
  1438. }
  1439. });
  1440. },
  1441. // 登录
  1442. login() {
  1443. this.loading1 = true;
  1444. // this.loading2 = true;
  1445. // this.loading4 = true;
  1446. // this.loading5 = true;
  1447. // this.loading6 = true;
  1448. // this.loading9 = true;
  1449. // this.loading10 = true;
  1450. let postData = {
  1451. username: this.encryptByDeAES(
  1452. decodeURIComponent(this.$route.params.username)
  1453. ),
  1454. password: this.encryptByDeAES(
  1455. decodeURIComponent(this.$route.params.password)
  1456. ),
  1457. };
  1458. post("/auth/login", postData).then((result) => {
  1459. if (result.status == 200) {
  1460. this.userData = result.user;
  1461. this.getWorkType();
  1462. } else {
  1463. this.userData = [];
  1464. }
  1465. });
  1466. },
  1467. },
  1468. created() {
  1469. this.login();
  1470. },
  1471. beforeDestroy() {
  1472. clearTimeout(this.timer);
  1473. clearTimeout(this.timer1);
  1474. clearTimeout(this.timer2);
  1475. clearTimeout(this.timer3);
  1476. clearTimeout(this.timer4);
  1477. clearTimeout(this.timer44);
  1478. clearTimeout(this.timer5);
  1479. clearTimeout(this.timer55);
  1480. clearTimeout(this.timer6);
  1481. clearTimeout(this.timer66);
  1482. },
  1483. };
  1484. </script>
  1485. <style lang="less" scoped>
  1486. .cot_img {
  1487. height: 100%;
  1488. width: 100%;
  1489. position: absolute;
  1490. left: 0;
  1491. top: 0;
  1492. background: #f9fafb;
  1493. display: flex;
  1494. justify-content: center;
  1495. align-items: center;
  1496. span {
  1497. color: #49b856;
  1498. font-size: 24px;
  1499. font-weight: bold;
  1500. }
  1501. }
  1502. .noData {
  1503. height: 100%;
  1504. display: flex;
  1505. justify-content: center;
  1506. align-items: center;
  1507. font-weight: bold;
  1508. }
  1509. .loading {
  1510. height: 100%;
  1511. display: flex;
  1512. justify-content: center;
  1513. align-items: center;
  1514. flex-direction: column;
  1515. }
  1516. .detailModel {
  1517. display: flex;
  1518. justify-content: center;
  1519. align-items: center;
  1520. &.detailModelParent {
  1521. table {
  1522. td,
  1523. th {
  1524. width: 150px !important;
  1525. &:first-of-type {
  1526. width: 60px !important;
  1527. }
  1528. }
  1529. }
  1530. }
  1531. .box {
  1532. width: 1167px;
  1533. height: 580px;
  1534. border-radius: 8px;
  1535. background-color: #fff;
  1536. display: flex;
  1537. flex-direction: column;
  1538. align-items: center;
  1539. position: relative;
  1540. .transport-guanbi {
  1541. position: absolute;
  1542. right: 16px;
  1543. top: 16px;
  1544. font-size: 20px;
  1545. color: #8e9d9e;
  1546. cursor: pointer;
  1547. }
  1548. .title {
  1549. height: 50px;
  1550. line-height: 50px;
  1551. text-align: center;
  1552. font-size: 18px;
  1553. color: #333;
  1554. font-weight: bold;
  1555. .operateTitle {
  1556. position: relative;
  1557. .operate {
  1558. font-weight: normal;
  1559. font-size: 14px;
  1560. width: 200px;
  1561. position: absolute;
  1562. top: 0;
  1563. left: 100%;
  1564. &.checkbox {
  1565. label {
  1566. cursor: pointer;
  1567. margin-left: 8px;
  1568. display: inline-flex;
  1569. align-items: center;
  1570. span {
  1571. margin-left: 4px;
  1572. }
  1573. // 多选框
  1574. input[type="checkbox"] {
  1575. cursor: pointer;
  1576. position: relative;
  1577. width: 15px;
  1578. height: 15px;
  1579. font-size: 15px;
  1580. }
  1581. input[type="checkbox"]:checked::after {
  1582. position: absolute;
  1583. overflow: hidden;
  1584. background-color: #49b856;
  1585. border: 1px solid #767676;
  1586. color: #fff;
  1587. width: 15px;
  1588. height: 15px;
  1589. border-radius: 4px;
  1590. line-height: 0.8;
  1591. display: inline-block;
  1592. content: "\e618;";
  1593. font-size: 15px;
  1594. font-family: "icon_transport" !important;
  1595. font-style: normal;
  1596. -webkit-font-smoothing: antialiased;
  1597. -moz-osx-font-smoothing: grayscale;
  1598. }
  1599. }
  1600. }
  1601. &.radio {
  1602. label {
  1603. cursor: pointer;
  1604. margin-left: 8px;
  1605. display: inline-flex;
  1606. align-items: center;
  1607. position: relative;
  1608. font-weight: 400;
  1609. color: #767676;
  1610. padding-left: 16px;
  1611. span {
  1612. margin-left: 4px;
  1613. }
  1614. input[type="radio"] {
  1615. position: absolute;
  1616. left: -9999px;
  1617. }
  1618. input[type="radio"] + i {
  1619. display: block;
  1620. position: absolute;
  1621. left: 0;
  1622. width: 14px;
  1623. height: 14px;
  1624. outline: 0;
  1625. border: 1px solid #0c4757;
  1626. background: transparent;
  1627. border-radius: 50%;
  1628. transition: border-color 0.3s;
  1629. -webkit-transition: border-color 0.3s;
  1630. }
  1631. input[type="radio"]:checked + i {
  1632. border-color: #49b856;
  1633. }
  1634. input[type="radio"] + i:after {
  1635. position: absolute;
  1636. content: "";
  1637. top: 50%;
  1638. left: 50%;
  1639. width: 8px;
  1640. height: 8px;
  1641. border-radius: 50%;
  1642. background-color: #49b856;
  1643. transform: translate(-50%, -50%);
  1644. opacity: 0;
  1645. transition: opacity 0.1s;
  1646. -webkit-transition: opacity 0.1s;
  1647. }
  1648. input[type="radio"]:checked + i:after {
  1649. opacity: 1;
  1650. }
  1651. }
  1652. }
  1653. }
  1654. }
  1655. }
  1656. .table {
  1657. width: 1127px;
  1658. height: 474px;
  1659. background-color: #f9fafb;
  1660. border: 1px solid #e5e9ed;
  1661. border-radius: 8px;
  1662. display: flex;
  1663. justify-content: center;
  1664. align-items: center;
  1665. .table-content {
  1666. width: 1063px;
  1667. height: 420px;
  1668. background-color: #fff;
  1669. border-radius: 8px;
  1670. border: 1px solid #e5e9ed;
  1671. table {
  1672. width: 100%;
  1673. font-size: 14px;
  1674. color: #333;
  1675. th,
  1676. td {
  1677. text-align: center !important;
  1678. width: 167px;
  1679. height: 100%;
  1680. &:first-of-type {
  1681. width: 59px;
  1682. }
  1683. }
  1684. thead {
  1685. display: block;
  1686. width: 100%;
  1687. height: 40px;
  1688. line-height: 40px;
  1689. background-image: linear-gradient(90deg, #39b199 0%, #74c271 100%);
  1690. tr {
  1691. height: 40px;
  1692. color: #fff;
  1693. }
  1694. }
  1695. tbody {
  1696. display: block;
  1697. width: 100%;
  1698. height: 380px;
  1699. overflow-x: hidden;
  1700. overflow-y: auto;
  1701. tr {
  1702. height: 34px;
  1703. line-height: 34px;
  1704. td:last-child {
  1705. position: relative;
  1706. }
  1707. td {
  1708. .ji {
  1709. position: absolute;
  1710. right: 0;
  1711. top: -3px;
  1712. width: 41px;
  1713. height: 42px;
  1714. background: url(./../assets/images/icon_ji.png) no-repeat 3px
  1715. 0;
  1716. }
  1717. }
  1718. }
  1719. }
  1720. }
  1721. }
  1722. }
  1723. .btns {
  1724. flex: 1;
  1725. display: flex;
  1726. justify-content: center;
  1727. align-items: center;
  1728. .btn {
  1729. width: 120px;
  1730. height: 34px;
  1731. line-height: 34px;
  1732. text-align: center;
  1733. background-color: #f9fafb;
  1734. border: 1px solid #dde1e5;
  1735. border-radius: 4px;
  1736. font-size: 14px;
  1737. color: #49b856;
  1738. cursor: pointer;
  1739. }
  1740. }
  1741. }
  1742. }
  1743. .detailModel {
  1744. position: fixed;
  1745. left: 0;
  1746. top: 0;
  1747. width: 100%;
  1748. height: 100%;
  1749. background-color: rgba(0, 0, 0, 0.5);
  1750. }
  1751. .marquee_top {
  1752. transition: all 0.3s;
  1753. }
  1754. .specimen-view {
  1755. position: absolute;
  1756. width: 100%;
  1757. height: 100%;
  1758. display: flex;
  1759. flex-direction: column;
  1760. .specimen-header {
  1761. height: 88px;
  1762. display: flex;
  1763. .specimen-logo {
  1764. width: 221px;
  1765. background-color: #0f2e3b;
  1766. display: flex;
  1767. justify-content: center;
  1768. align-items: center;
  1769. .pharmacy-logo__img {
  1770. width: 32px;
  1771. }
  1772. .pharmacy-logo__name {
  1773. font-size: 14px;
  1774. color: #fff;
  1775. margin-bottom: 0;
  1776. }
  1777. }
  1778. .specimen-menu {
  1779. flex: 1;
  1780. display: flex;
  1781. align-items: center;
  1782. .specimen-menu-box {
  1783. padding: 0 8px;
  1784. height: 40px;
  1785. border-radius: 20px;
  1786. line-height: 40px;
  1787. text-align: center;
  1788. color: #333333;
  1789. font-size: 16px;
  1790. margin-left: 16px;
  1791. cursor: pointer;
  1792. &.active {
  1793. background-color: #49b856;
  1794. font-size: 20px;
  1795. color: #f0f6ed;
  1796. }
  1797. }
  1798. }
  1799. .totalNum {
  1800. display: flex;
  1801. justify-content: center;
  1802. align-items: center;
  1803. margin-right: 24px;
  1804. &.parent {
  1805. width: 340px;
  1806. display: flex;
  1807. flex-direction: row;
  1808. align-items: center;
  1809. justify-content: space-between;
  1810. div {
  1811. margin: 4px 0;
  1812. span {
  1813. font-size: 18px;
  1814. }
  1815. }
  1816. }
  1817. &.currentNavIndex3 {
  1818. select {
  1819. box-sizing: border-box;
  1820. margin: 0;
  1821. padding: 4px 11px;
  1822. font-variant: tabular-nums;
  1823. list-style: none;
  1824. font-feature-settings: "tnum";
  1825. position: relative;
  1826. display: inline-block;
  1827. color: rgba(0, 0, 0, 0.65);
  1828. font-size: 14px;
  1829. line-height: 1.5;
  1830. background-color: #fff;
  1831. background-image: none;
  1832. border: 1px solid #d9d9d9;
  1833. border-radius: 4px;
  1834. transition: all 0.3s;
  1835. width: 130px;
  1836. height: 36px;
  1837. outline: none;
  1838. margin-right: 16px;
  1839. }
  1840. input {
  1841. box-sizing: border-box;
  1842. margin: 0;
  1843. padding: 4px 11px;
  1844. font-variant: tabular-nums;
  1845. list-style: none;
  1846. font-feature-settings: "tnum";
  1847. position: relative;
  1848. display: inline-block;
  1849. color: rgba(0, 0, 0, 0.65);
  1850. font-size: 14px;
  1851. line-height: 1.5;
  1852. background-color: #fff;
  1853. background-image: none;
  1854. border: 1px solid #d9d9d9;
  1855. border-radius: 4px;
  1856. transition: all 0.3s;
  1857. width: 130px;
  1858. height: 36px;
  1859. outline: none;
  1860. }
  1861. button {
  1862. margin-left: 16px;
  1863. color: #3bb197;
  1864. background: #fff;
  1865. height: 34px;
  1866. line-height: 34px;
  1867. padding: 0 0 26px;
  1868. min-width: 80px;
  1869. font-size: 14px;
  1870. border: 1px solid #49b856;
  1871. border-radius: 4px;
  1872. outline: none;
  1873. cursor: pointer;
  1874. }
  1875. }
  1876. span {
  1877. font-weight: bold;
  1878. color: red;
  1879. }
  1880. }
  1881. }
  1882. .main {
  1883. height: calc(100vh - 160px);
  1884. flex: 1;
  1885. background-color: #f9fafb;
  1886. overflow: hidden;
  1887. .main-box {
  1888. width: 100%;
  1889. height: 100%;
  1890. .main-box-item-wrap {
  1891. float: left;
  1892. width: 100vw;
  1893. height: calc(100vh - 160px);
  1894. display: flex;
  1895. flex-wrap: wrap;
  1896. padding: 8px;
  1897. .main-box-item {
  1898. width: calc((100vw - 96px) / 5);
  1899. height: calc((100vh - 240px) / 4);
  1900. margin: 8px;
  1901. background-color: #fff;
  1902. border: 1px solid #e5e9ed;
  1903. border-radius: 4px;
  1904. cursor: pointer;
  1905. &.main-box-item-w4 {
  1906. width: calc((100vw - 80px) / 4);
  1907. .main-box-item-content {
  1908. justify-content: space-evenly;
  1909. .main-box-item-contentBox {
  1910. width: auto;
  1911. }
  1912. }
  1913. }
  1914. &.main-box-item-w4--ks {
  1915. width: calc((100vw - 80px) / 4);
  1916. .main-box-item-content {
  1917. justify-content: space-evenly;
  1918. }
  1919. }
  1920. &:hover {
  1921. background-color: #f0f6ed;
  1922. }
  1923. .main-box-item-header {
  1924. height: calc(100% * 0.4);
  1925. border-bottom: 1px solid #e5e9ed;
  1926. display: flex;
  1927. justify-content: space-between;
  1928. align-items: center;
  1929. &.pp {
  1930. h2 {
  1931. flex: 2;
  1932. }
  1933. div {
  1934. flex: 1;
  1935. font-size: 16px;
  1936. font-weight: bold;
  1937. text-align: center;
  1938. }
  1939. strong {
  1940. flex: 1;
  1941. text-align: center;
  1942. }
  1943. }
  1944. h2 {
  1945. height: 18px;
  1946. font-size: 16px;
  1947. font-weight: bold;
  1948. color: #000;
  1949. margin-left: 8px;
  1950. flex: 1;
  1951. white-space: nowrap;
  1952. overflow: hidden;
  1953. text-overflow: ellipsis;
  1954. }
  1955. strong {
  1956. font-size: 18px;
  1957. color: #666;
  1958. margin-right: 8px;
  1959. }
  1960. }
  1961. .main-box-item-content {
  1962. height: calc(100% * 0.6);
  1963. display: flex;
  1964. .main-box-item-contentBox {
  1965. width: 50%;
  1966. height: 100%;
  1967. display: flex;
  1968. flex-direction: column;
  1969. justify-content: center;
  1970. align-items: center;
  1971. h3 {
  1972. font-size: 22px;
  1973. font-weight: bold;
  1974. }
  1975. p {
  1976. font-size: 14px;
  1977. color: #666;
  1978. margin-top: 8px;
  1979. }
  1980. &.red {
  1981. position: relative;
  1982. h3 {
  1983. color: #ff3b53;
  1984. }
  1985. &:after {
  1986. content: "";
  1987. position: absolute;
  1988. top: 50%;
  1989. right: -1px;
  1990. width: 2px;
  1991. height: calc(100% * 0.625);
  1992. background-color: #dde1e5;
  1993. transform: translateY(-50%);
  1994. }
  1995. }
  1996. &.green {
  1997. h3 {
  1998. color: #49b856;
  1999. }
  2000. }
  2001. }
  2002. }
  2003. }
  2004. }
  2005. }
  2006. }
  2007. .footer {
  2008. height: 72px;
  2009. display: flex;
  2010. justify-content: center;
  2011. align-items: center;
  2012. background-color: #f9fafb;
  2013. .dot {
  2014. width: 16px;
  2015. height: 16px;
  2016. border-radius: 50%;
  2017. background-color: #e5e9ed;
  2018. margin-left: 24px;
  2019. cursor: pointer;
  2020. &.active {
  2021. background-color: #49b856;
  2022. }
  2023. &:first-of-type {
  2024. margin-left: 0;
  2025. }
  2026. }
  2027. }
  2028. // 人员信息
  2029. .message_cot {
  2030. margin: 16px;
  2031. margin-bottom: 0;
  2032. width: calc(100vw - 32px) !important;
  2033. height: 100%;
  2034. overflow: hidden;
  2035. position: relative;
  2036. &.message_on {
  2037. .cot {
  2038. &.sevenCol {
  2039. width: 16.6666666%;
  2040. height: 25%;
  2041. font-size: 14px;
  2042. display: flex;
  2043. flex-direction: column;
  2044. justify-content: space-evenly;
  2045. .header_on {
  2046. display: flex;
  2047. height: 26px;
  2048. justify-content: space-between;
  2049. align-items: center;
  2050. .goWork {
  2051. outline: none;
  2052. width: 50px;
  2053. height: 26px;
  2054. line-height: 26px;
  2055. text-align: center;
  2056. background-color: #f9fafb;
  2057. border: 1px solid #dde1e5;
  2058. border-radius: 4px;
  2059. font-size: 14px;
  2060. color: #49b856;
  2061. cursor: pointer;
  2062. margin-right: 8px;
  2063. }
  2064. }
  2065. .headerItem_on {
  2066. white-space: nowrap;
  2067. text-overflow: ellipsis;
  2068. overflow: hidden;
  2069. height: 22px;
  2070. line-height: 22px;
  2071. color: #333;
  2072. }
  2073. .headerItem_on_two {
  2074. word-break: break-all;
  2075. text-overflow: ellipsis;
  2076. display: -webkit-box; /** 对象作为伸缩盒子模型显示 **/
  2077. -webkit-box-orient: vertical; /** 设置或检索伸缩盒对象的子元素的排列方式 **/
  2078. -webkit-line-clamp: 2; /** 显示的行数 **/
  2079. overflow: hidden; /** 隐藏超出的内容 **/
  2080. height: 44px;
  2081. line-height: 22px;
  2082. color: #333;
  2083. }
  2084. }
  2085. }
  2086. }
  2087. }
  2088. .message_cot .cot_all_wrap {
  2089. overflow: hidden;
  2090. height: 100%;
  2091. }
  2092. .message_cot .cot_all {
  2093. width: calc(100vw - 32px);
  2094. height: calc(100% - 16px);
  2095. float: left;
  2096. border-top: 1px rgb(225, 229, 232) solid;
  2097. }
  2098. .message_cot .cot {
  2099. height: 70px;
  2100. border-right: 1px rgb(225, 229, 232) solid;
  2101. border-bottom: 1px rgb(225, 229, 232) solid;
  2102. font-size: 12px;
  2103. overflow: hidden;
  2104. padding: 10px 30px;
  2105. background-color: white;
  2106. float: left;
  2107. &:nth-of-type(7n + 1) {
  2108. border-left: 1px rgb(225, 229, 232) solid;
  2109. }
  2110. &.col-6 {
  2111. height: 35px;
  2112. line-height: 35px;
  2113. padding: 0 30px;
  2114. }
  2115. &.sevenCol {
  2116. width: 14.285%;
  2117. height: 12.5%;
  2118. font-size: 12px;
  2119. padding: 12px 8px;
  2120. display: flex;
  2121. flex-direction: column;
  2122. justify-content: center;
  2123. }
  2124. }
  2125. .message_cot .cot .first {
  2126. display: flex;
  2127. justify-content: space-between;
  2128. align-items: center;
  2129. .first_first {
  2130. display: flex;
  2131. flex-direction: column;
  2132. align-items: center;
  2133. .first_firstPhone {
  2134. font-size: 12px;
  2135. }
  2136. }
  2137. }
  2138. .message_cot .cot .first span {
  2139. display: inline-block;
  2140. font-size: 14px;
  2141. }
  2142. .message_cot .cot .first .times {
  2143. float: right;
  2144. &.imptime-green {
  2145. color: #49b856;
  2146. }
  2147. }
  2148. .message_cot .cot .first .overtime {
  2149. color: red;
  2150. }
  2151. .message_cot .cot .first .freetime {
  2152. color: #49b856;
  2153. }
  2154. .message_cot .cot .second {
  2155. margin-top: 8px;
  2156. width: 100%;
  2157. height: 20px;
  2158. }
  2159. .message_cot .cot .second span {
  2160. font-size: 13px;
  2161. }
  2162. .message_cot .cot .second span:nth-child(1) {
  2163. float: left;
  2164. color: #666666;
  2165. }
  2166. .message_cot .cot .second span:nth-child(2) {
  2167. float: right;
  2168. color: #333333;
  2169. &.colorRed {
  2170. color: red;
  2171. }
  2172. }
  2173. .message_cot .cot .second span:nth-child(3) {
  2174. float: right;
  2175. }
  2176. .message_cot .cot .third {
  2177. margin-top: 15px;
  2178. }
  2179. .message_cot .cot .third i {
  2180. color: #49b856;
  2181. }
  2182. .message_cot .cot .third span {
  2183. font-size: 13px;
  2184. }
  2185. }
  2186. </style>